From e5ca1055092c0ecd6532f2fd37e133bb7e0e0dfd Mon Sep 17 00:00:00 2001 From: betahxy Date: Fri, 22 Dec 2023 00:10:00 -0500 Subject: [PATCH 01/60] add vmx virtio-net support for Composite --- composition_scripts/simple_vmm.toml | 17 + src/components/Makefile.dependencies | 2 +- src/components/cidl/calculate_dependencies.py | 2 +- .../implementation/nicmgr/dpdk/init.c | 66 +- .../implementation/nicmgr/dpdk/nicmgr.c | 8 +- .../simple_mc_udp_server_no_lwip/main.c | 2 +- .../simple_mc_udp_server_with_lwip/main.c | 2 +- .../implementation/simple_nf/Makefile | 18 + .../simple_nf/simple_nf1/Makefile | 18 + .../simple_nf/simple_nf1/main.c | 63 + .../pingpong/main.c | 2 +- .../simple_tcp_echo_server.c | 2 +- .../simple_udp_echo_server_nolwip/main.c | 2 +- .../simple_udp_echo_server_with_lwip/main.c | 2 +- .../implementation/simple_vmm/vm_dev.md | 2 + .../implementation/simple_vmm/vmm/Makefile | 6 +- .../simple_vmm/vmm/acrn_common.h | 797 ++++++++++ .../simple_vmm/vmm/acrn_types.h | 3 + .../implementation/simple_vmm/vmm/apicreg.h | 2 +- .../implementation/simple_vmm/vmm/cpu.h | 1 + .../simple_vmm/vmm/devices/serial/serial.c | 13 +- .../vmm/devices/vpci/virtio_net_io.c | 296 ++-- .../vmm/devices/vpci/virtio_net_io.h | 8 +- .../simple_vmm/vmm/devices/vpci/vpci.c | 1 + .../simple_vmm/vmm/devices/vpic/vpic.c | 17 + .../simple_vmm/vmm/devices/vpic/vpic.h | 2 + .../simple_vmm/vmm/devices/vrtc/vrtc.c | 1 - .../simple_vmm/vmm/instr_emul.c | 1381 +++++++++++++++++ .../simple_vmm/vmm/instr_emul.h | 95 ++ .../implementation/simple_vmm/vmm/ioapic.h | 99 ++ .../implementation/simple_vmm/vmm/irq.h | 136 ++ .../implementation/simple_vmm/vmm/netio.c | 42 + .../simple_vmm/vmm/simple_vmm.c | 69 +- .../implementation/simple_vmm/vmm/vio.c | 2 + .../implementation/simple_vmm/vmm/vioapic.c | 564 +++++++ .../implementation/simple_vmm/vmm/vioapic.h | 128 ++ .../implementation/simple_vmm/vmm/vlapic.c | 374 +++-- .../implementation/simple_vmm/vmm/vlapic.h | 4 +- .../implementation/simple_vmm/vmm/vmmio.c | 53 + .../implementation/simple_vmm/vmm/vmsr.c | 6 +- src/components/interface/netio/Makefile | 30 + src/components/interface/netio/netio.h | 13 + src/components/interface/netio/stubs/Makefile | 1 + src/components/interface/netio/stubs/c_stub.c | 16 + src/components/interface/netio/stubs/s_stub.c | 7 + src/components/interface/netio/stubs/stubs.S | 5 + src/components/interface/netshmem/lib.c | 9 +- src/components/interface/netshmem/netshmem.h | 4 +- .../lib/dpdk/adapter/cos_dpdk_adapter.c | 1 + src/components/lib/dpdk/cos_dpdk.c | 6 +- src/components/lib/dpdk/cos_dpdk.h | 3 +- src/components/lib/slm/quantum.c | 3 +- src/components/lib/vmrt/doc.md | 4 +- src/components/lib/vmrt/vmrt.c | 78 +- src/components/lib/vmrt/vmrt.h | 22 +- src/kernel/capinv.c | 11 + src/kernel/include/chal.h | 1 + src/kernel/include/shared/cos_types.h | 24 +- src/platform/i386/chal.c | 6 + src/platform/i386/chal/chal_config.h | 5 +- src/platform/i386/chal/shared/cos_config.h | 1 + src/platform/i386/chal_cpu.h | 4 +- src/platform/i386/idt.c | 1 + src/platform/i386/isr.h | 1 + src/platform/i386/kernel.h | 1 + src/platform/i386/lapic.c | 12 + src/platform/x86_64/entry.S | 1 + src/platform/x86_64/vmx/include/vmx.h | 6 + src/platform/x86_64/vmx/include/vmx_vmcs.h | 2 +- src/platform/x86_64/vmx/vmx.c | 9 +- src/platform/x86_64/vmx/vmx_exit.c | 42 +- tools/run.sh | 4 +- 72 files changed, 4194 insertions(+), 447 deletions(-) create mode 100644 src/components/implementation/simple_nf/Makefile create mode 100644 src/components/implementation/simple_nf/simple_nf1/Makefile create mode 100644 src/components/implementation/simple_nf/simple_nf1/main.c create mode 100644 src/components/implementation/simple_vmm/vmm/acrn_common.h create mode 100644 src/components/implementation/simple_vmm/vmm/instr_emul.c create mode 100644 src/components/implementation/simple_vmm/vmm/instr_emul.h create mode 100644 src/components/implementation/simple_vmm/vmm/ioapic.h create mode 100644 src/components/implementation/simple_vmm/vmm/irq.h create mode 100644 src/components/implementation/simple_vmm/vmm/netio.c create mode 100644 src/components/implementation/simple_vmm/vmm/vioapic.c create mode 100644 src/components/implementation/simple_vmm/vmm/vioapic.h create mode 100644 src/components/implementation/simple_vmm/vmm/vmmio.c create mode 100644 src/components/interface/netio/Makefile create mode 100644 src/components/interface/netio/netio.h create mode 100644 src/components/interface/netio/stubs/Makefile create mode 100644 src/components/interface/netio/stubs/c_stub.c create mode 100644 src/components/interface/netio/stubs/s_stub.c create mode 100644 src/components/interface/netio/stubs/stubs.S diff --git a/composition_scripts/simple_vmm.toml b/composition_scripts/simple_vmm.toml index 6a448f5d66..359068b482 100644 --- a/composition_scripts/simple_vmm.toml +++ b/composition_scripts/simple_vmm.toml @@ -24,8 +24,25 @@ implements = [{interface = "sched"}, {interface = "syncipc"}, {interface = "init constructor = "booter" baseaddr = "0x1600000" +[[components]] +name = "nicmgr" +img = "nicmgr.dpdk" +deps = [{srv = "sched", interface = "sched"}, {srv = "sched", interface = "init"}, {srv = "capmgr", interface = "capmgr_create"}, {srv = "capmgr", interface = "memmgr"}, {srv = "capmgr", interface = "contigmem"}] +implements = [{interface = "nic"}] +constructor = "booter" +baseaddr = "0x6000000" + [[components]] name = "vmm" img = "simple_vmm.vmm" deps = [{srv = "sched", interface = "sched"}, {srv = "sched", interface = "init"},{srv = "capmgr", interface = "capmgr"}, {srv = "capmgr", interface = "memmgr"}, {srv = "capmgr", interface = "contigmem"}] +implements = [{interface = "netio"}] +constructor = "booter" +baseaddr = "0x2000000" + +[[components]] +name = "simple_nf1" +img = "simple_nf.simple_nf1" +deps = [{srv = "sched", interface = "sched"}, {srv = "sched", interface = "init"},{srv = "capmgr", interface = "capmgr_create"}, {srv = "capmgr", interface = "memmgr"}, {srv = "capmgr", interface = "contigmem"}, {srv = "nicmgr", interface = "nic"}, {srv = "vmm", interface = "netio"}] constructor = "booter" +baseaddr = "0x9000000" diff --git a/src/components/Makefile.dependencies b/src/components/Makefile.dependencies index 179035422a..be88894fa1 100644 --- a/src/components/Makefile.dependencies +++ b/src/components/Makefile.dependencies @@ -1,6 +1,6 @@ include Makefile.src Makefile.comp -CALC_DEPS_SCRIPT = python2.7 $(CDIR)cidl/calculate_dependencies.py $(shell pwd)/ $(CDIR) +CALC_DEPS_SCRIPT = python3 $(CDIR)cidl/calculate_dependencies.py $(shell pwd)/ $(CDIR) LIBRARY_DEP_LIST =$(strip $(shell $(CALC_DEPS_SCRIPT) libdeps)) INTERFACE_DEP_LIST =$(strip $(shell $(CALC_DEPS_SCRIPT) ifdeps)) # List of -L library paths diff --git a/src/components/cidl/calculate_dependencies.py b/src/components/cidl/calculate_dependencies.py index ab128d2e89..7fbdfa30a3 100644 --- a/src/components/cidl/calculate_dependencies.py +++ b/src/components/cidl/calculate_dependencies.py @@ -1,4 +1,4 @@ -#!/usr/bin/python2.7 +#!/usr/bin/python3 import re import sys diff --git a/src/components/implementation/nicmgr/dpdk/init.c b/src/components/implementation/nicmgr/dpdk/init.c index 0685ddb8e9..04bbf37301 100644 --- a/src/components/implementation/nicmgr/dpdk/init.c +++ b/src/components/implementation/nicmgr/dpdk/init.c @@ -170,66 +170,38 @@ process_rx_packets(cos_portid_t port_id, char** rx_pkts, uint16_t nb_pkts) int i, ret; int len = 0; - struct eth_hdr *eth; struct ip_hdr *iph; struct arp_hdr *arp_hdr; struct tcp_udp_port *port; struct client_session *session; - char *pkt; struct pkt_buf buf; for (i = 0; i < nb_pkts; i++) { - pkt = cos_get_packet(rx_pkts[i], &len); - eth = (struct eth_hdr *)pkt; + cos_get_packet(rx_pkts[i], &len); - if (htons(eth->ether_type) == 0x0800) { - iph = (struct ip_hdr *)((char *)eth + sizeof(struct eth_hdr)); - if (unlikely(iph->proto != UDP_PROTO)) { - // assert(0); - cos_free_packet(rx_pkts[i]); - rx_enqueued_miss++; - continue; - } - port = (struct tcp_udp_port *)((char *)eth + sizeof(struct eth_hdr) + iph->ihl * 4); - - // printc("port id:0x%x\n", port->dst_port); - session = cos_hash_lookup(port->dst_port); - // assert(session->port == port->dst_port); - if (unlikely(debug_flag)) { - debug_print_stats(); - debug_flag = 0; - } - if (unlikely(session == NULL)) { - cos_free_packet(rx_pkts[i]); - continue; - } - // memset(&buf, 0, sizeof(buf)); - buf.pkt = rx_pkts[i]; - // if (ntohs(port->dst_port) == 6) { - // buf.tent_id = 6; - // buf.srcid = ntohs(port->src_port); - // } else if(ntohs(port->dst_port) == 7) { - // buf.tent_id = 7; - // buf.srcid = ntohs(port->src_port); - // } else { - // assert(0); - // } - if (unlikely(!pkt_ring_buf_enqueue(&(session->pkt_ring_buf), &buf))){ + /* TODO: need a policy spefic rule to route packets to different receiving threads*/ + + session = cos_hash_lookup(0); + + if (unlikely(session == NULL)) { + cos_free_packet(rx_pkts[i]); + continue; + } + + buf.pkt = rx_pkts[i]; + + if (unlikely(!pkt_ring_buf_enqueue(&(session->pkt_ring_buf), &buf))){ cos_free_packet(buf.pkt); rx_enqueued_miss++; continue; - } - enqueued_rx++; - // if (unlikely(debug_flag)) { - // session->sem.debug = 1; - // } - - sync_sem_give(&session->sem); - } else if (htons(eth->ether_type) == 0x0806) { - cos_free_packet(buf.pkt); - continue; } + enqueued_rx++; + + sync_sem_give(&session->sem); } + /* yield for some cycles to improve CPU utility */ + sched_thd_block_timeout(0, 100000); + } static void diff --git a/src/components/implementation/nicmgr/dpdk/nicmgr.c b/src/components/implementation/nicmgr/dpdk/nicmgr.c index 8844208284..dd61056d54 100644 --- a/src/components/implementation/nicmgr/dpdk/nicmgr.c +++ b/src/components/implementation/nicmgr/dpdk/nicmgr.c @@ -84,13 +84,9 @@ nic_get_a_packet(u16_t *pkt_len) thd = cos_thdid(); assert(thd < NIC_MAX_SESSION); - session = &client_sessions[thd]; + session = &client_sessions[thd]; - // if (unlikely(debug_flag)) { - // printc("tenant %u(%u) is to dequeue\n", ntohs(session->port), thd); - // } session->blocked_loops_begin++; - sync_sem_take(&session->sem); session->blocked_loops_end++; @@ -143,7 +139,7 @@ nic_send_packet(shm_bm_objid_t pktid, u16_t pkt_offset, u16_t pkt_len) thd = cos_thdid(); objid = pktid; - obj = (struct netshmem_pkt_buf *)shm_bm_borrow_net_pkt_buf(client_sessions[thd].shemem_info.shm, objid); + obj = (struct netshmem_pkt_buf *)shm_bm_transfer_net_pkt_buf(client_sessions[thd].shemem_info.shm, objid); buf.obj = (char *)obj; buf.pkt = pkt_offset + obj->data; diff --git a/src/components/implementation/simple_mc_udp_server/simple_mc_udp_server_no_lwip/main.c b/src/components/implementation/simple_mc_udp_server/simple_mc_udp_server_no_lwip/main.c index 9a699c9ccd..4554984f86 100644 --- a/src/components/implementation/simple_mc_udp_server/simple_mc_udp_server_no_lwip/main.c +++ b/src/components/implementation/simple_mc_udp_server/simple_mc_udp_server_no_lwip/main.c @@ -16,7 +16,7 @@ cos_init(void) struct netshmem_pkt_buf *obj; init_thd = cos_thdid(); /* create current component's shmem */ - netshmem_create(); + netshmem_create(cos_thdid()); } void cos_parallel_init(coreid_t cid, int init_core, int ncores) diff --git a/src/components/implementation/simple_mc_udp_server/simple_mc_udp_server_with_lwip/main.c b/src/components/implementation/simple_mc_udp_server/simple_mc_udp_server_with_lwip/main.c index 2d0946428e..22f466d4b0 100644 --- a/src/components/implementation/simple_mc_udp_server/simple_mc_udp_server_with_lwip/main.c +++ b/src/components/implementation/simple_mc_udp_server/simple_mc_udp_server_with_lwip/main.c @@ -14,7 +14,7 @@ cos_init(void) struct netshmem_pkt_buf *obj; /* create current component's shmem */ - netshmem_create(); + netshmem_create(cos_thdid()); netmgr_shmem_map(netshmem_get_shm_id()); mc_map_shmem(netshmem_get_shm_id()); diff --git a/src/components/implementation/simple_nf/Makefile b/src/components/implementation/simple_nf/Makefile new file mode 100644 index 0000000000..84e4b4e9d4 --- /dev/null +++ b/src/components/implementation/simple_nf/Makefile @@ -0,0 +1,18 @@ +# Required variables used to drive the compilation process. It is OK +# for many of these to be empty. +# +# The set of interfaces that this component exports for use by other +# components. This is a list of the interface names. +INTERFACE_EXPORTS = +# The interfaces this component is dependent on for compilation (this +# is a list of directory names in interface/) +INTERFACE_DEPENDENCIES = +# The library dependencies this component is reliant on for +# compilation/linking (this is a list of directory names in lib/) +LIBRARY_DEPENDENCIES = component +# Note: Both the interface and library dependencies should be +# *minimal*. That is to say that removing a dependency should cause +# the build to fail. The build system does not validate this +# minimality; that's on you! + +include Makefile.subdir diff --git a/src/components/implementation/simple_nf/simple_nf1/Makefile b/src/components/implementation/simple_nf/simple_nf1/Makefile new file mode 100644 index 0000000000..af05a90fca --- /dev/null +++ b/src/components/implementation/simple_nf/simple_nf1/Makefile @@ -0,0 +1,18 @@ +# Required variables used to drive the compilation process. It is OK +# for many of these to be empty. +# +# The set of interfaces that this component exports for use by other +# components. This is a list of the interface names. +INTERFACE_EXPORTS = +# The interfaces this component is dependent on for compilation (this +# is a list of directory names in interface/) +INTERFACE_DEPENDENCIES = memmgr contigmem netshmem sched nic netio +# The library dependencies this component is reliant on for +# compilation/linking (this is a list of directory names in lib/) +LIBRARY_DEPENDENCIES = component shm_bm netdefs +# Note: Both the interface and library dependencies should be +# *minimal*. That is to say that removing a dependency should cause +# the build to fail. The build system does not validate this +# minimality; that's on you! + +include Makefile.subsubdir diff --git a/src/components/implementation/simple_nf/simple_nf1/main.c b/src/components/implementation/simple_nf/simple_nf1/main.c new file mode 100644 index 0000000000..b38d10ec82 --- /dev/null +++ b/src/components/implementation/simple_nf/simple_nf1/main.c @@ -0,0 +1,63 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#define TX_PRIORITY 30 +thdid_t rx_tid = 0; +thdid_t tx_tid = 0; + +static void +tx_task(void) +{ + u16_t pkt_len; + shm_bm_objid_t objid; + + netio_shmem_map(netshmem_get_shm_id()); + nic_shmem_map(netshmem_get_shm_id()); + + nic_bind_port(0, 1); + while(1) { + objid = netio_get_a_packet(&pkt_len); + nic_send_packet(objid, 0, pkt_len); + } +} + +void +cos_init(void) +{ + shm_bm_objid_t objid; + struct netshmem_pkt_buf *obj; + + /* create current component's shmem */ + rx_tid = cos_thdid(); + netshmem_create(rx_tid); + tx_tid = sched_thd_create((void *)tx_task, NULL); + netshmem_create(tx_tid); + + printc("NF application init shm done\n"); +} + +int +parallel_main(coreid_t cid) +{ + /* TODO: port NF applications here */ + shm_bm_objid_t objid; + u16_t pkt_len; + + sched_thd_param_set(tx_tid, sched_param_pack(SCHEDP_PRIO, TX_PRIORITY)); + + netio_shmem_map(netshmem_get_shm_id()); + nic_shmem_map(netshmem_get_shm_id()); + nic_bind_port(0, 0); + + while (1) + { + objid = nic_get_a_packet(&pkt_len); + netio_send_packet(objid, pkt_len); + } +} diff --git a/src/components/implementation/simple_pingpong_udp_server/pingpong/main.c b/src/components/implementation/simple_pingpong_udp_server/pingpong/main.c index f114b6df86..dd6546f8de 100644 --- a/src/components/implementation/simple_pingpong_udp_server/pingpong/main.c +++ b/src/components/implementation/simple_pingpong_udp_server/pingpong/main.c @@ -16,7 +16,7 @@ cos_init(void) struct netshmem_pkt_buf *obj; init_thd = cos_thdid(); /* create current component's shmem */ - netshmem_create(); + netshmem_create(cos_thdid()); } void cos_parallel_init(coreid_t cid, int init_core, int ncores) diff --git a/src/components/implementation/simple_tcp_echo_server/simple_tcp_echo_server/simple_tcp_echo_server.c b/src/components/implementation/simple_tcp_echo_server/simple_tcp_echo_server/simple_tcp_echo_server.c index 14e00979ab..99399bbfde 100644 --- a/src/components/implementation/simple_tcp_echo_server/simple_tcp_echo_server/simple_tcp_echo_server.c +++ b/src/components/implementation/simple_tcp_echo_server/simple_tcp_echo_server/simple_tcp_echo_server.c @@ -11,7 +11,7 @@ cos_init(void) struct netshmem_pkt_buf *obj; /* create current component's shmem */ - netshmem_create(); + netshmem_create(cos_thdid()); netmgr_shmem_map(netshmem_get_shm_id()); diff --git a/src/components/implementation/simple_udp_echo_server/simple_udp_echo_server_nolwip/main.c b/src/components/implementation/simple_udp_echo_server/simple_udp_echo_server_nolwip/main.c index 67d505dd56..805ef28b26 100644 --- a/src/components/implementation/simple_udp_echo_server/simple_udp_echo_server_nolwip/main.c +++ b/src/components/implementation/simple_udp_echo_server/simple_udp_echo_server_nolwip/main.c @@ -16,7 +16,7 @@ cos_init(void) struct netshmem_pkt_buf *obj; /* create current component's shmem */ - netshmem_create(); + netshmem_create(cos_thdid()); udp_stack_shmem_map(netshmem_get_shm_id()); printc("app init shm done\n"); } diff --git a/src/components/implementation/simple_udp_echo_server/simple_udp_echo_server_with_lwip/main.c b/src/components/implementation/simple_udp_echo_server/simple_udp_echo_server_with_lwip/main.c index 0291759ec5..28c6af8705 100644 --- a/src/components/implementation/simple_udp_echo_server/simple_udp_echo_server_with_lwip/main.c +++ b/src/components/implementation/simple_udp_echo_server/simple_udp_echo_server_with_lwip/main.c @@ -11,7 +11,7 @@ cos_init(void) struct netshmem_pkt_buf *obj; /* create current component's shmem */ - netshmem_create(); + netshmem_create(cos_thdid()); netmgr_shmem_map(netshmem_get_shm_id()); diff --git a/src/components/implementation/simple_vmm/vm_dev.md b/src/components/implementation/simple_vmm/vm_dev.md index b6342d4e81..f54c8da33b 100644 --- a/src/components/implementation/simple_vmm/vm_dev.md +++ b/src/components/implementation/simple_vmm/vm_dev.md @@ -40,6 +40,8 @@ This Linux kernel source code is hacked a little bit at the booting stage becaus mkdir dev sudo mknod dev/console c 5 1 sudo mknod dev/null c 1 3 + sudo mknod dev/random c 1 8 + sudo mknod dev/urandom c 1 9 ``` That's it. Just leave this initramfs here and go to build the Linux kernel. You will then need to tell the Linux build system this directory and it will automatically include this initramfs. See the `CONFIG_INITRAMFS_SOURCE` keyword in the config file. You will finally see the output above in your terminal. diff --git a/src/components/implementation/simple_vmm/vmm/Makefile b/src/components/implementation/simple_vmm/vmm/Makefile index 6b36301a27..19294b8eae 100644 --- a/src/components/implementation/simple_vmm/vmm/Makefile +++ b/src/components/implementation/simple_vmm/vmm/Makefile @@ -3,13 +3,13 @@ # # The set of interfaces that this component exports for use by other # components. This is a list of the interface names. -INTERFACE_EXPORTS = +INTERFACE_EXPORTS = netio # The interfaces this component is dependent on for compilation (this # is a list of directory names in interface/) -INTERFACE_DEPENDENCIES = contigmem +INTERFACE_DEPENDENCIES = contigmem netshmem # The library dependencies this component is reliant on for # compilation/linking (this is a list of directory names in lib/) -LIBRARY_DEPENDENCIES = ubench component kernel initargs vmrt shm_bm +LIBRARY_DEPENDENCIES = ubench component kernel initargs vmrt shm_bm # Note: Both the interface and library dependencies should be # *minimal*. That is to say that removing a dependency should cause # the build to fail. The build system does not validate this diff --git a/src/components/implementation/simple_vmm/vmm/acrn_common.h b/src/components/implementation/simple_vmm/vmm/acrn_common.h new file mode 100644 index 0000000000..b97561f61b --- /dev/null +++ b/src/components/implementation/simple_vmm/vmm/acrn_common.h @@ -0,0 +1,797 @@ +/* + * common definition + * + * Copyright (C) 2017-2022 Intel Corporation. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/** + * @file acrn_common.h + * + * @brief acrn common data structure for hypercall or ioctl + */ + +#ifndef ACRN_COMMON_H +#define ACRN_COMMON_H + +#include + +/* + * Common structures for ACRN/HSM/DM + */ + +/* + * IO request + */ + +#define ACRN_IO_REQUEST_MAX 16U +#define ACRN_ASYNCIO_MAX 64U + +#define ACRN_IOREQ_STATE_PENDING 0U +#define ACRN_IOREQ_STATE_COMPLETE 1U +#define ACRN_IOREQ_STATE_PROCESSING 2U +#define ACRN_IOREQ_STATE_FREE 3U + +#define ACRN_IOREQ_TYPE_PORTIO 0U +#define ACRN_IOREQ_TYPE_MMIO 1U +#define ACRN_IOREQ_TYPE_PCICFG 2U +#define ACRN_IOREQ_TYPE_WP 3U + +#define ACRN_IOREQ_DIR_READ 0U +#define ACRN_IOREQ_DIR_WRITE 1U + + + +/* IOAPIC device model info */ +#define VIOAPIC_RTE_NUM 48U /* vioapic pins */ + +#if VIOAPIC_RTE_NUM < 24U +#error "VIOAPIC_RTE_NUM must be larger than 23" +#endif + +/* Generic VM flags from guest OS */ +#define GUEST_FLAG_SECURE_WORLD_ENABLED (1UL << 0U) /* Whether secure world is enabled */ +#define GUEST_FLAG_LAPIC_PASSTHROUGH (1UL << 1U) /* Whether LAPIC is passed through */ +#define GUEST_FLAG_IO_COMPLETION_POLLING (1UL << 2U) /* Whether need hypervisor poll IO completion */ +#define GUEST_FLAG_HIDE_MTRR (1UL << 3U) /* Whether hide MTRR from VM */ +#define GUEST_FLAG_RT (1UL << 4U) /* Whether the vm is RT-VM */ +#define GUEST_FLAG_NVMX_ENABLED (1UL << 5U) /* Whether this VM supports nested virtualization */ +#define GUEST_FLAG_SECURITY_VM (1UL << 6U) /* Whether this VM needs to do security-vm related fixup (TPM2 and SMBIOS pt) */ +#define GUEST_FLAG_VCAT_ENABLED (1UL << 7U) /* Whether this VM supports vCAT */ +#define GUEST_FLAG_STATIC_VM (1UL << 8U) /* Whether this VM uses static VM configuration */ +#define GUEST_FLAG_TEE (1UL << 9U) /* Whether the VM is TEE VM */ +#define GUEST_FLAG_REE (1UL << 10U) /* Whether the VM is REE VM */ +#define GUEST_FLAG_PMU_PASSTHROUGH (1UL << 11U) /* Whether PMU is passed through */ + + +/* TODO: We may need to get this addr from guest ACPI instead of hardcode here */ +#define VIRTUAL_SLEEP_CTL_ADDR 0x400U /* Pre-launched VM uses ACPI reduced HW mode and sleep control register */ +#define VIRTUAL_PM1A_CNT_ADDR 0x404U +#define VIRTUAL_PM1A_SCI_EN 0x0001 +#define VIRTUAL_PM1A_SLP_TYP 0x1c00U +#define VIRTUAL_PM1A_SLP_EN 0x2000U +#define VIRTUAL_PM1A_ALWAYS_ZERO 0xc003 + +#define MAX_VM_NAME_LEN (16U) + +/** + * @brief Hypercall + * + * @addtogroup acrn_hypercall ACRN Hypercall + * @{ + */ + +/** + * @brief Representation of a MMIO request + */ +struct acrn_mmio_request { + /** + * @brief Direction of the access + * + * Either \p ACRN_IOREQ_DIR_READ or \p ACRN_IOREQ_DIR_WRITE. + */ + uint32_t direction; + + /** + * @brief reserved + */ + uint32_t reserved; + + /** + * @brief Address of the I/O access + */ + uint64_t address; + + /** + * @brief Width of the I/O access in byte + */ + uint64_t size; + + /** + * @brief The value read for I/O reads or to be written for I/O writes + */ + uint64_t value; +}; + +/** + * @brief Representation of a port I/O request + */ +struct acrn_pio_request { + /** + * @brief Direction of the access + * + * Either \p ACRN_IOREQ_DIR_READ or \p ACRN_IOREQ_DIR_WRITE. + */ + uint32_t direction; + + /** + * @brief reserved + */ + uint32_t reserved; + + /** + * @brief Port address of the I/O access + */ + uint64_t address; + + /** + * @brief Width of the I/O access in byte + */ + uint64_t size; + + /** + * @brief The value read for I/O reads or to be written for I/O writes + */ + uint32_t value; +}; + +/** + * @brief Representation of a PCI configuration space access + */ +struct acrn_pci_request { + /** + * @brief Direction of the access + * + * Either \p ACRN_IOREQ_DIR_READ or \p ACRN_IOREQ_DIR_WRITE. + */ + uint32_t direction; + + /** + * @brief Reserved + */ + uint32_t reserved[3];/* need keep same header fields with pio_request */ + + /** + * @brief Width of the I/O access in byte + */ + int64_t size; + + /** + * @brief The value read for I/O reads or to be written for I/O writes + */ + int32_t value; + + /** + * @brief The \p bus part of the BDF of the device + */ + int32_t bus; + + /** + * @brief The \p device part of the BDF of the device + */ + int32_t dev; + + /** + * @brief The \p function part of the BDF of the device + */ + int32_t func; + + /** + * @brief The register to be accessed in the configuration space + */ + int32_t reg; +}; + +/** + * @brief 256-byte I/O requests + * + * The state transitions of a I/O request are: + * + * FREE -> PENDING -> PROCESSING -> COMPLETE -> FREE -> ... + * + * When a request is in COMPLETE or FREE state, the request is owned by the + * hypervisor. Service VM (HSM or DM) shall not read or write the internals of the + * request except the state. + * + * When a request is in PENDING or PROCESSING state, the request is owned by + * Service VM. The hypervisor shall not read or write the request other than the state. + * + * Based on the rules above, a typical I/O request lifecycle should looks like + * the following. + * + * @verbatim embed:rst:leading-asterisk + * + * +-----------------------+-------------------------+----------------------+ + * | Service VM vCPU 0 | Service VM vCPU x | User VM vCPU y | + * +=======================+=========================+======================+ + * | | | Hypervisor: | + * | | | | + * | | | - Fill in type, | + * | | | addr, etc. | + * | | | - Pause User VM vCPU | + * | | | - Set state to | + * | | | PENDING (a) | + * | | | - Fire upcall to | + * | | | Service VM vCPU 0 | + * | | | | + * +-----------------------+-------------------------+----------------------+ + * | HSM: | | | + * | | | | + * | - Scan for pending | | | + * | requests | | | + * | - Set state to | | | + * | PROCESSING (b) | | | + * | - Assign requests to | | | + * | clients (c) | | | + * | | | | + * +-----------------------+-------------------------+----------------------+ + * | | Client: | | + * | | | | + * | | - Scan for assigned | | + * | | requests | | + * | | - Handle the | | + * | | requests (d) | | + * | | - Set state to COMPLETE | | + * | | - Notify the hypervisor | | + * | | | | + * +-----------------------+-------------------------+----------------------+ + * | | Hypervisor: | | + * | | | | + * | | - resume User VM vCPU y | | + * | | (e) | | + * | | | | + * +-----------------------+-------------------------+----------------------+ + * | | | Hypervisor: | + * | | | | + * | | | - Post-work (f) | + * | | | - set state to FREE | + * | | | | + * +-----------------------+-------------------------+----------------------+ + * + * @endverbatim + * + * Note that the following shall hold. + * + * 1. (a) happens before (b) + * 2. (c) happens before (d) + * 3. (e) happens before (f) + * 4. One vCPU cannot trigger another I/O request before the previous one has + * completed (i.e. the state switched to FREE) + * + * Accesses to the state of a acrn_io_request shall be atomic and proper barriers + * are needed to ensure that: + * + * 1. Setting state to PENDING is the last operation when issuing a request in + * the hypervisor, as the hypervisor shall not access the request any more. + * + * 2. Due to similar reasons, setting state to COMPLETE is the last operation + * of request handling in HSM or clients in Service VM. + */ +struct acrn_io_request { + /** + * @brief Type of this request. + * + * Byte offset: 0. + */ + uint32_t type; + + /** + * @brief Hypervisor will poll completion if set. + * + * Byte offset: 4. + */ + uint32_t completion_polling; + + /** + * @brief Reserved. + * + * Byte offset: 8. + */ + uint32_t reserved0[14]; + + /** + * @brief Details about this request. + * + * Byte offset: 64. + */ + union { + struct acrn_pio_request pio_request; + struct acrn_pci_request pci_request; + struct acrn_mmio_request mmio_request; + uint64_t data[8]; + } reqs; + + /** + * @brief Reserved. + * + * Byte offset: 128. + */ + uint32_t reserved1; + + /** + * @brief If this request has been handled by HSM driver. + * + * Byte offset: 132. + */ + int32_t kernel_handled; + + /** + * @brief The status of this request. + * + * Taking ACRN_IOREQ_STATE_xxx as values. + * + * Byte offset: 136. + */ + uint32_t processed; +}__attribute__((aligned(256))); + +struct acrn_io_request_buffer { + union { + struct acrn_io_request req_slot[ACRN_IO_REQUEST_MAX]; + int8_t reserved[4096]; + }; +}; + +struct acrn_asyncio_info { + uint32_t type; + uint64_t addr; + uint64_t fd; +}; + +/** + * @brief Info to create a VM, the parameter for HC_CREATE_VM hypercall + */ +struct acrn_vm_creation { + /** created vmid return to HSM. Keep it first field */ + uint16_t vmid; + + /** Reserved */ + uint16_t reserved0; + + /** VCPU numbers this VM want to create */ + uint16_t vcpu_num; + + /** Reserved */ + uint16_t reserved1; + + /** the name of this VM */ + uint8_t name[MAX_VM_NAME_LEN]; + + /* VM flag bits from Guest OS, now used + * GUEST_FLAG_SECURE_WORLD_ENABLED (1UL<<0) + */ + uint64_t vm_flag; + + uint64_t ioreq_buf; + + /** + * The least significant set bit is the PCPU # the VCPU 0 maps to; + * second set least significant bit is the PCPU # the VCPU 1 maps to; + * and so on... + */ + uint64_t cpu_affinity; +}; + +/* General-purpose register layout aligned with the general-purpose register idx + * when vmexit, such as vmexit due to CR access, refer to SMD Vol.3C 27-6. + */ +struct acrn_gp_regs { + uint64_t rax; + uint64_t rcx; + uint64_t rdx; + uint64_t rbx; + uint64_t rsp; + uint64_t rbp; + uint64_t rsi; + uint64_t rdi; + uint64_t r8; + uint64_t r9; + uint64_t r10; + uint64_t r11; + uint64_t r12; + uint64_t r13; + uint64_t r14; + uint64_t r15; +}; + +/* struct to define how the descriptor stored in memory. + * Refer SDM Vol3 3.5.1 "Segment Descriptor Tables" + * Figure 3-11 + */ +struct acrn_descriptor_ptr { + uint16_t limit; + uint64_t base; + uint16_t reserved[3]; /* align struct size to 64bit */ +} __packed; + +/** + * @brief registers info for vcpu. + */ +struct acrn_regs { + struct acrn_gp_regs gprs; + struct acrn_descriptor_ptr gdt; + struct acrn_descriptor_ptr idt; + + uint64_t rip; + uint64_t cs_base; + uint64_t cr0; + uint64_t cr4; + uint64_t cr3; + uint64_t ia32_efer; + uint64_t rflags; + uint64_t reserved_64[4]; + + uint32_t cs_ar; + uint32_t cs_limit; + uint32_t reserved_32[3]; + + /* don't change the order of following sel */ + uint16_t cs_sel; + uint16_t ss_sel; + uint16_t ds_sel; + uint16_t es_sel; + uint16_t fs_sel; + uint16_t gs_sel; + uint16_t ldt_sel; + uint16_t tr_sel; +}; + +/** + * @brief Info to set vcpu state + * + * the parameter for HC_SET_VCPU_STATE + */ +struct acrn_vcpu_regs { + /** the virtual CPU ID for the VCPU to set state */ + uint16_t vcpu_id; + + /** reserved space to make cpu_state aligned to 8 bytes */ + uint16_t reserved[3]; + + /** the structure to hold vcpu state */ + struct acrn_regs vcpu_regs; +}; + +/** Operation types for setting IRQ line */ +#define GSI_SET_HIGH 0U +#define GSI_SET_LOW 1U +#define GSI_RAISING_PULSE 2U +#define GSI_FALLING_PULSE 3U + +/** + * @brief Info to Set/Clear/Pulse a virtual IRQ line for a VM + * + * the parameter for HC_SET_IRQLINE hypercall + */ +struct acrn_irqline_ops { + uint32_t gsi; + uint32_t op; +}; + + +/** + * @brief Info to inject a MSI interrupt to VM + * + * the parameter for HC_INJECT_MSI hypercall + */ +struct acrn_msi_entry { + /** MSI addr[19:12] with dest VCPU ID */ + uint64_t msi_addr; + + /** MSI data[7:0] with vector */ + uint64_t msi_data; +}; + +/** + * @brief Info The power state data of a VCPU. + * + */ + +#define SPACE_SYSTEM_MEMORY 0U +#define SPACE_SYSTEM_IO 1U +#define SPACE_PCI_CONFIG 2U +#define SPACE_Embedded_Control 3U +#define SPACE_SMBUS 4U +#define SPACE_PLATFORM_COMM 10U +#define SPACE_FFixedHW 0x7FU + +struct acrn_acpi_generic_address { + uint8_t space_id; + uint8_t bit_width; + uint8_t bit_offset; + uint8_t access_size; + uint64_t address; +} __attribute__ ((__packed__)); + +struct acrn_cstate_data { + struct acrn_acpi_generic_address cx_reg; + uint8_t type; + uint32_t latency; + uint64_t power; +}; + +struct acrn_pstate_data { + uint64_t core_frequency; /* megahertz */ + uint64_t power; /* milliWatts */ + uint64_t transition_latency; /* microseconds */ + uint64_t bus_master_latency; /* microseconds */ + uint64_t control; /* control value */ + uint64_t status; /* success indicator */ +}; + +enum acrn_cpufreq_policy_type { + CPUFREQ_POLICY_PERFORMANCE, + CPUFREQ_POLICY_NOMINAL, +}; + +struct acrn_cpufreq_limits { + /* Performance levels for HWP */ + uint8_t guaranteed_hwp_lvl; + uint8_t highest_hwp_lvl; + uint8_t lowest_hwp_lvl; + /* Index for the p-state table _PSS */ + uint8_t nominal_pstate; + uint8_t performance_pstate; +}; + +struct acpi_sx_pkg { + uint8_t val_pm1a; + uint8_t val_pm1b; + uint16_t reserved; +} __attribute__((aligned(8))); + +struct pm_s_state_data { + struct acrn_acpi_generic_address pm1a_evt; + struct acrn_acpi_generic_address pm1b_evt; + struct acrn_acpi_generic_address pm1a_cnt; + struct acrn_acpi_generic_address pm1b_cnt; + struct acpi_sx_pkg s3_pkg; + struct acpi_sx_pkg s5_pkg; + uint32_t *wake_vector_32; + uint64_t *wake_vector_64; +} __attribute__((aligned(8))); + +/** + * @brief Info PM command from DM/HSM. + * + * The command would specify request type(e.g. get px count or data) for + * specific VM and specific VCPU with specific state number. + * For Px, PMCMD_STATE_NUM means Px number from 0 to (MAX_PSTATE - 1), + * For Cx, PMCMD_STATE_NUM means Cx entry index from 1 to MAX_CX_ENTRY. + */ +#define PMCMD_VMID_MASK 0xff000000U +#define PMCMD_VCPUID_MASK 0x00ff0000U +#define PMCMD_STATE_NUM_MASK 0x0000ff00U +#define PMCMD_TYPE_MASK 0x000000ffU + +#define PMCMD_VMID_SHIFT 24U +#define PMCMD_VCPUID_SHIFT 16U +#define PMCMD_STATE_NUM_SHIFT 8U + +enum acrn_pm_cmd_type { + ACRN_PMCMD_GET_PX_CNT, + ACRN_PMCMD_GET_PX_DATA, + ACRN_PMCMD_GET_CX_CNT, + ACRN_PMCMD_GET_CX_DATA, +}; + +/** + * @brief Info to get a VM interrupt count data + * + * the parameter for HC_VM_INTR_MONITOR hypercall + */ +#define MAX_PTDEV_NUM 24U +struct acrn_intr_monitor { + /** sub command for intr monitor */ + uint32_t cmd; + /** the count of this buffer to save */ + uint32_t buf_cnt; + + /** the buffer which save each interrupt count */ + uint64_t buffer[MAX_PTDEV_NUM * 2]; +} __attribute__((aligned(8))); + +/** cmd for intr monitor **/ +#define INTR_CMD_GET_DATA 0U +#define INTR_CMD_DELAY_INT 1U + +/* + * PRE_LAUNCHED_VM is launched by ACRN hypervisor, with LAPIC_PT; + * Service VM is launched by ACRN hypervisor, without LAPIC_PT; + * POST_LAUNCHED_VM is launched by ACRN devicemodel, with/without LAPIC_PT depends on usecases. + * + * Assumption: vm_configs array is completely initialized w.r.t. load_order member of + * acrn_vm_config for all the VMs. + */ +enum acrn_vm_load_order { + PRE_LAUNCHED_VM = 0, + SERVICE_VM, + POST_LAUNCHED_VM, /* Launched by Devicemodel in Service VM */ + MAX_LOAD_ORDER +}; + +struct acrn_vm_config_header { + enum acrn_vm_load_order load_order; + char name[MAX_VM_NAME_LEN]; + uint8_t reserved[2]; + uint8_t severity; + uint64_t cpu_affinity; + uint64_t guest_flags; + /* + * The following are hv-specific members and are thus opaque. + * vm_config_entry_size determines the real size of this structure. + */ +} __attribute__((aligned(8))); + +/** + * @brief Info to configure virtual root port + * + * Configuration passed to hv when adding a virtual root port which + * is used as PTM root + */ +struct vrp_config +{ + uint16_t phy_bdf; + uint8_t max_payload; /* dev cap's max payload */ + uint8_t primary_bus; + uint8_t secondary_bus; + uint8_t subordinate_bus; + uint8_t ptm_capable; + uint32_t ptm_cap_offset; +}; + +/* Type of PCI device assignment */ +#define ACRN_PTDEV_QUIRK_ASSIGN (1U << 0) + +#define ACRN_PCI_NUM_BARS 6U +/** + * @brief Info to assign or deassign PCI for a VM + * + */ +struct acrn_pcidev { + /** the type of the the pass-through PCI device */ + uint32_t type; + + /** virtual BDF# of the pass-through PCI device */ + uint16_t virt_bdf; + + /** physical BDF# of the pass-through PCI device */ + uint16_t phys_bdf; + + /** the PCI Interrupt Line, initialized by ACRN-DM, which is RO and + * ideally not used for pass-through MSI/MSI-x devices. + */ + uint8_t intr_line; + + /** the PCI Interrupt Pin, initialized by ACRN-DM, which is RO and + * ideally not used for pass-through MSI/MSI-x devices. + */ + uint8_t intr_pin; + + /** the base address of the PCI BAR, initialized by ACRN-DM. */ + uint32_t bar[ACRN_PCI_NUM_BARS]; +}; + +#define MMIODEV_RES_NUM 3 + +/** + * @brief Info to assign or deassign a MMIO device for a VM + */ +struct acrn_mmiodev { + char name[8]; + struct acrn_mmiores { + /** the gpa of the MMIO region for the MMIO device */ + uint64_t user_vm_pa; + /** the hpa of the MMIO region for the MMIO device: for post-launched VM + * it's pa in service vm; for pre-launched VM it's pa in HV. + */ + uint64_t host_pa; + /** the size of the MMIO region for the MMIO resource */ + uint64_t size; + /** the memory type of the MMIO region for the MMIO resource */ + uint64_t mem_type; + } res[MMIODEV_RES_NUM]; +}; + +/** + * @brief Info to create or destroy a virtual PCI or legacy device for a VM + * + * the parameter for HC_CREATE_VDEV or HC_DESTROY_VDEV hypercall + */ +struct acrn_vdev { + /* + * the identifier of the device, the low 32 bits represent the vendor + * id and device id of PCI device and the high 32 bits represent the + * device number of the legacy device + */ + union { + uint64_t value; + struct { + uint16_t vendor; + uint16_t device; + uint32_t legacy_id; + } fields; + } id; + + /* + * the slot of the device, if the device is a PCI device, the slot + * represents BDF, otherwise it represents legacy device slot number + */ + uint64_t slot; + + /** the IO resource address of the device, initialized by ACRN-DM. */ + uint32_t io_addr[ACRN_PCI_NUM_BARS]; + + /** the IO resource size of the device, initialized by ACRN-DM. */ + uint32_t io_size[ACRN_PCI_NUM_BARS]; + + /** the options for the virtual device, initialized by ACRN-DM. */ + uint8_t args[128]; +}; + +#define ACRN_ASYNCIO_PIO (0x01U) +#define ACRN_ASYNCIO_MMIO (0x02U) + +#define SBUF_MAGIC 0x5aa57aa71aa13aa3UL +#define SBUF_MAX_SIZE (1UL << 22U) +#define SBUF_HEAD_SIZE 64U + +/* sbuf flags */ +#define OVERRUN_CNT_EN (1U << 0U) /* whether overrun counting is enabled */ +#define OVERWRITE_EN (1U << 1U) /* whether overwrite is enabled */ + +/** + * (sbuf) head + buf (store (ele_num - 1) elements at most) + * buffer empty: tail == head + * buffer full: (tail + ele_size) % size == head + * + * Base of memory for elements + * | + * | + * ---------------------------------------------------------------------- + * | struct shared_buf | raw data (ele_size)| ... | raw data (ele_size) | + * ---------------------------------------------------------------------- + * | + * | + * struct shared_buf *buf + */ + +enum { + ACRN_TRACE = 0U, + ACRN_HVLOG, + ACRN_SEP, + ACRN_SOCWATCH, + /* The sbuf with above ids are created each pcpu */ + ACRN_SBUF_PER_PCPU_ID_MAX, + ACRN_ASYNCIO = 64, +}; + +/* Make sure sizeof(struct shared_buf) == SBUF_HEAD_SIZE */ +struct shared_buf { + uint64_t magic; + uint32_t ele_num; /* number of elements */ + uint32_t ele_size; /* sizeof of elements */ + uint32_t head; /* offset from base, to read */ + uint32_t tail; /* offset from base, to write */ + uint32_t flags; + uint32_t reserved; + uint32_t overrun_cnt; /* count of overrun */ + uint32_t size; /* ele_num * ele_size */ + uint32_t padding[6]; +}; + +/** + * @} + */ +#endif /* ACRN_COMMON_H */ diff --git a/src/components/implementation/simple_vmm/vmm/acrn_types.h b/src/components/implementation/simple_vmm/vmm/acrn_types.h index a4a54498ac..0d6b92fcd9 100644 --- a/src/components/implementation/simple_vmm/vmm/acrn_types.h +++ b/src/components/implementation/simple_vmm/vmm/acrn_types.h @@ -14,6 +14,9 @@ #include +/** Roundup (x/y) to ( x/y + (x%y) ? 1 : 0) **/ +#define INT_DIV_ROUNDUP(x, y) ((((x)+(y))-1)/(y)) + /* Define standard data types. These definitions allow software components * to perform in the same manner on different target platforms. */ diff --git a/src/components/implementation/simple_vmm/vmm/apicreg.h b/src/components/implementation/simple_vmm/vmm/apicreg.h index 570a466347..0b8579ffb2 100644 --- a/src/components/implementation/simple_vmm/vmm/apicreg.h +++ b/src/components/implementation/simple_vmm/vmm/apicreg.h @@ -76,7 +76,7 @@ struct lapic_regs { /*OFFSET(Hex)*/ /*roundup sizeof current struct to 4KB*/ struct lapic_reg rsv5[192]; /*400 -- FF0*/ -} __attribute__((aligned(PAGE_SIZE_4K))); +} __attribute__((aligned(4096))); enum LAPIC_REGISTERS { LAPIC_ID = 0x2, diff --git a/src/components/implementation/simple_vmm/vmm/cpu.h b/src/components/implementation/simple_vmm/vmm/cpu.h index 37f6a05c09..96f6a6ce4d 100755 --- a/src/components/implementation/simple_vmm/vmm/cpu.h +++ b/src/components/implementation/simple_vmm/vmm/cpu.h @@ -38,6 +38,7 @@ #define CPU_H #include #include +#include #include /* Define CPU stack alignment */ diff --git a/src/components/implementation/simple_vmm/vmm/devices/serial/serial.c b/src/components/implementation/simple_vmm/vmm/devices/serial/serial.c index 8c4def6be5..41044b056d 100644 --- a/src/components/implementation/simple_vmm/vmm/devices/serial/serial.c +++ b/src/components/implementation/simple_vmm/vmm/devices/serial/serial.c @@ -19,10 +19,15 @@ serial_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu) case SERIAL_PORT1: printc("%c", (u8_t)vcpu->shared_region->ax); if (send_intr_enable) { - /* TODO: correctly handle serial output(eg: multiple vcpu case) and inject serial interrupt */ - - /* 52 is the fixed serial interrupt in Linux */ - lapic_intr_inject(vcpu, 52, 1); + /* + * TODO: correctly handle serial output(eg: multiple vcpu case) and inject serial interrupt, + * with io apic, 34 is serial8250_interrupt vector. + */ +#if VMX_SUPPORT_POSTED_INTR + vlapic_set_intr(vcpu, 34, 0); +#else + lapic_intr_inject(vcpu, 34, 1); +#endif serial_data[SERIAL_IIR - SERIAL_PORT_MIN] = 0x2; serial_data[MODEM_STATUS_REGISTER - SERIAL_PORT_MIN] = 0x20; serial_data[SERIAL_LSR - SERIAL_PORT_MIN] = 0x60; diff --git a/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.c b/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.c index 371e83839c..6c063a21c9 100644 --- a/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.c +++ b/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.c @@ -27,6 +27,7 @@ */ #include #include +#include #include "virtio_net_io.h" #include "vpci.h" #include "virtio_ring.h" @@ -45,7 +46,7 @@ static unsigned char icmp_reply[] = { static inline int vq_ring_ready(struct virtio_vq_info *vq) { - return 1; + return ((vq->flags & VQ_ALLOC) == VQ_ALLOC); } static inline int @@ -53,8 +54,10 @@ vq_has_descs(struct virtio_vq_info *vq) { int ret = 0; if (vq_ring_ready(vq) && vq->last_avail != vq->avail->idx) { - if ((u16_t)((unsigned int)vq->avail->idx - vq->last_avail) > vq->qsize) - printc ("no valid descriptor\n"); + if (unlikely((u16_t)((unsigned int)vq->avail->idx - vq->last_avail) > vq->qsize)) { + printc("no valid descriptor\n"); + assert(0); + } else ret = 1; } @@ -78,11 +81,25 @@ vq_endchains(struct vmrt_vm_vcpu *vcpu, struct virtio_vq_info *vq, int used_all_ u16_t event_idx, new_idx, old_idx; int intr; - if (!vq || !vq->used) + if (unlikely(!vq || !vq->used)) return; + + old_idx = vq->save_used; + vq->save_used = new_idx = vq->used->idx; + + intr = new_idx != old_idx && + !(vq->avail->flags & VRING_AVAIL_F_NO_INTERRUPT); - /* TODO: 57 is virtio-net interrupt, should read it from somewhere else more reliable */ - lapic_intr_inject(vcpu, 57, 0); + if (intr) { + virtio_net_regs.header.ISR = 1; + /* TODO: 57 is virtio-net interrupt without io apic, 33 is with io apic */ +#if VMX_SUPPORT_POSTED_INTR + vlapic_set_intr(vcpu, 33, 0); +#else + lapic_intr_inject(vcpu, 33, 0); +#endif + } + } static inline struct iovec * @@ -90,24 +107,10 @@ rx_iov_trim(struct iovec *iov, int *niov, size_t tlen) { struct iovec *riov; - /* XXX short-cut: assume first segment is >= tlen */ - if (iov[0].iov_len < tlen) { - printc("vtnet: rx_iov_trim: iov_len=%lu, tlen=%lu\n", iov[0].iov_len, tlen); - return NULL; - } - iov[0].iov_len -= tlen; - if (iov[0].iov_len == 0) { - if (*niov <= 1) { - printc("vtnet: rx_iov_trim: *niov=%d\n", *niov); - return NULL; - } - *niov -= 1; - riov = &iov[1]; - } else { - iov[0].iov_base = (void *)((uintptr_t)iov[0].iov_base + tlen); - riov = &iov[0]; - } + + iov[0].iov_base = (void *)((uintptr_t)iov[0].iov_base + tlen); + riov = &iov[0]; return riov; } @@ -149,13 +152,14 @@ virtio_vq_init(struct vmrt_vm_vcpu *vcpu, int nr_queue, u32_t pfn) /* Mark queue as allocated after initialization is complete. */ mb(); vq->flags = VQ_ALLOC; + vq->vcpu = vcpu; - printc("%s: vq enable done\n", __func__); return; error: vq->flags = 0; printc("%s: vq enable failed\n", __func__); + assert(0); } static inline int @@ -164,15 +168,21 @@ _vq_record(int i, volatile struct vring_desc *vd, void *host_addr; - if (i >= n_iov) - return -1; + if (i >= n_iov) { + printc("Number of descs is more than iov slots\n"); + assert(0); + } + host_addr = paddr_guest2host(vd->addr, vcpu->vm); - if (!host_addr) - return -1; + if (unlikely(!host_addr)) { + printc("Invalid host addr\n"); + assert(0); + } iov[i].iov_base = host_addr; iov[i].iov_len = vd->len; - if (flags != NULL) + if (unlikely(flags != NULL)) flags[i] = vd->flags; + return 0; } @@ -196,7 +206,6 @@ vq_getchain(struct vmrt_vm_vcpu *vcpu, struct virtio_vq_info *vq, u16_t *pidx, unsigned int idx, next; volatile struct vring_desc *vdir, *vindir, *vp; - const char *name = "testnic"; /* * Note: it's the responsibility of the guest not to * update vq->avail->idx until all of the descriptors @@ -212,13 +221,12 @@ vq_getchain(struct vmrt_vm_vcpu *vcpu, struct virtio_vq_info *vq, u16_t *pidx, */ idx = vq->last_avail; ndesc = (u16_t)((unsigned int)vq->avail->idx - idx); - if (ndesc == 0) + if (unlikely(ndesc == 0)) return 0; - if (ndesc > vq->qsize) { - /* XXX need better way to diagnose issues */ - printc("%s: ndesc (%u) out of range, driver confused?\r\n", - name, (unsigned int)ndesc); - return -1; + if (unlikely(ndesc > vq->qsize)) { + printc("ndesc (%u) out of range, driver confused?\r\n", + (unsigned int)ndesc); + assert(0); } /* @@ -236,75 +244,27 @@ vq_getchain(struct vmrt_vm_vcpu *vcpu, struct virtio_vq_info *vq, u16_t *pidx, printc("tx: descriptor index %u out of range, " "driver confused?\r\n", next); - return -1; + assert(0); } vdir = &vq->desc[next]; - if ((vdir->flags & VRING_DESC_F_INDIRECT) == 0) { - if (_vq_record(i, vdir, iov, n_iov, flags, vcpu)) { - printc("%s: mapping to host failed\r\n", name); - return -1; + if (likely((vdir->flags & VRING_DESC_F_INDIRECT) == 0)) { + if (unlikely(_vq_record(i, vdir, iov, n_iov, flags, vcpu))) { + printc("mapping to host failed\r\n"); + assert(0); } i++; - } else if ((virtio_net_regs.header.dev_features & - (1 << VIRTIO_RING_F_INDIRECT_DESC)) == 0) { - printc("%s: descriptor has forbidden INDIRECT flag, " - "driver confused?\r\n", - name); - return -1; } else { - n_indir = vdir->len / 16; - if ((vdir->len & 0xf) || n_indir == 0) { - printc("%s: invalid indir len 0x%x, " - "driver confused?\r\n", - name, (unsigned int)vdir->len); - return -1; - } - vindir = paddr_guest2host( - vdir->addr, vcpu->vm); - - if (!vindir) { - printc("%s cannot get host memory\r\n", name); - return -1; - } - /* - * Indirects start at the 0th, then follow - * their own embedded "next"s until those run - * out. Each one's indirect flag must be off - * (we don't really have to check, could just - * ignore errors...). - */ - next = 0; - for (;;) { - vp = &vindir[next]; - if (vp->flags & VRING_DESC_F_INDIRECT) { - printc("%s: indirect desc has INDIR flag," - " driver confused?\r\n", - name); - return -1; - } - if (_vq_record(i, vp, iov, n_iov, flags, vcpu)) { - printc("%s: mapping to host failed\r\n", name); - return -1; - } - if (++i > VQ_MAX_DESCRIPTORS) - goto loopy; - if ((vp->flags & VRING_DESC_F_NEXT) == 0) - break; - next = vp->next; - if (next >= n_indir) { - printc("%s: invalid next %u > %u, " - "driver confused?\r\n", - name, (unsigned int)next, n_indir); - return -1; - } - } + printc("descriptor has forbidden INDIRECT flag, " + "driver confused?\r\n"); + assert(0); } if ((vdir->flags & VRING_DESC_F_NEXT) == 0) return i; } -loopy: - printc("%s: descriptor loop? count > %d - driver confused?\r\n", - name, i); + + /* code should not come here */ + printc("descriptor loop? count > %d - driver confused?\r\n", i); + assert(0); return -1; } @@ -335,134 +295,90 @@ vq_relchain(struct virtio_vq_info *vq, u16_t idx, u32_t iolen) vuh->idx = uidx; } -static void -virtio_net_tap_rx(struct vmrt_vm_vcpu *vcpu) +void +vq_retchain(struct virtio_vq_info *vq) +{ + vq->last_avail--; +} + +void +virtio_net_rcv_one_pkt(void *data, int pkt_len) { struct iovec iov[VIRTIO_NET_MAXSEGS], *riov; struct virtio_vq_info *vq; + struct vmrt_vm_vcpu *vcpu; void *vrx; - int len, n; + int n; u16_t idx; int ret; - /* - * Check for available rx buffers - */ vq = &virtio_net_vqs[VIRTIO_NET_RXQ]; - if (!vq_has_descs(vq)) { - VM_PANIC(vcpu); + + vcpu = vq->vcpu; + + if (unlikely(!vq_has_descs(vq))) { + return; } - do { - /* - * Get descriptor chain. - */ - n = vq_getchain(vcpu, vq, &idx, iov, VIRTIO_NET_MAXSEGS, NULL); - if (n < 1 || n > VIRTIO_NET_MAXSEGS) { - printc("vtnet: virtio_net_tap_rx: vq_getchain = %d\n", n); - VM_PANIC(vcpu); - return; - } - /* - * Get a pointer to the rx header, and use the - * data immediately following it for the packet buffer. - */ - vrx = iov[0].iov_base; - riov = rx_iov_trim(iov, &n, sizeof(struct virtio_net_rxhdr)); + n = vq_getchain(vcpu, vq, &idx, iov, VIRTIO_NET_MAXSEGS, NULL); - memcpy(iov[0].iov_base, icmp_reply, sizeof(icmp_reply)); + if (unlikely (n < 1 || n >= VIRTIO_NET_MAXSEGS )) { + printc("vtnet: virtio_net_tap_rx: vq_getchain = %d\n", n); + assert(0); + } - len = sizeof(icmp_reply); - if (riov == NULL) - VM_PANIC(vcpu); + vrx = iov[0].iov_base; + /* every packet needs to be proceeded by a virtio_net_rxhdr header space */ + riov = rx_iov_trim(iov, &n, sizeof(struct virtio_net_rxhdr)); - memset(vrx, 0, sizeof(struct virtio_net_rxhdr)); - + assert(iov[0].iov_len >= (size_t)pkt_len); - if (len < 0 ) { - /* - * No more packets, but still some avail ring - * entries. Interrupt if needed/appropriate. - */ - /*TODO: fix the erro case */ - VM_PANIC(vcpu); - } + memcpy(iov[0].iov_base, data, pkt_len); - /* - * The only valid field in the rx packet header is the - * number of buffers if merged rx bufs were negotiated. - */ + memset(vrx, 0, sizeof(struct virtio_net_rxhdr)); - /* - * Release this chain and handle more chains. - */ - vq_relchain(vq, idx, len); - } while (vq_has_descs(vq)); + vq_relchain(vq, idx, pkt_len + sizeof(struct virtio_net_rxhdr)); - /* Interrupt if needed, including for NOTIFY_ON_EMPTY. */ vq_endchains(vcpu, vq, 1); + return; } -static void -virtio_net_proctx(struct vmrt_vm_vcpu *vcpu, struct virtio_vq_info *vq) +void +virtio_net_send_one_pkt(void *data, u16_t *pkt_len) { - struct iovec iov[VIRTIO_NET_MAXSEGS + 1]; + struct virtio_vq_info *vq = &virtio_net_vqs[VIRTIO_NET_TXQ]; + struct iovec iov[VIRTIO_NET_MAXSEGS]; + struct vmrt_vm_vcpu *vcpu; int i, n; int plen, tlen; u16_t idx; + while (!vq_has_descs(vq)) { + sched_thd_block(0); + } + vcpu = vq->vcpu; + memset(&iov, 0, sizeof(iov)); - /* - * Obtain chain of descriptors. The first one is - * really the header descriptor, so we need to sum - * up two lengths: packet length and transfer length. - */ n = vq_getchain(vcpu, vq, &idx, iov, VIRTIO_NET_MAXSEGS, NULL); - if (n < 1 || n > VIRTIO_NET_MAXSEGS) { + if (unlikely(n < 1 || n >= VIRTIO_NET_MAXSEGS)) { printc("vtnet: virtio_net_proctx: vq_getchain = %d\n", n); - return; + assert(0); } + plen = 0; tlen = iov[0].iov_len; - for (i = 1; i < n; i++) { - plen += iov[i].iov_len; - tlen += iov[i].iov_len; - } - - printc("virtio: packet send, %d bytes, %d segs\n\r", plen, n); - /* begin to send packets */ - dump_packet(iov[1].iov_base, plen); - /* TODO: process tx output to nic component */ - /* net->virtio_net_tx(net, &iov[1], n - 1, plen); */ - - /* chain is processed, release it and set tlen */ - vq_relchain(vq, idx, tlen); -} - -static void -virtio_net_tx_thread(void *param, struct vmrt_vm_vcpu *vcpu) -{ - struct virtio_vq_info *vq = &virtio_net_vqs[VIRTIO_NET_TXQ]; + assert(n == 2); - while (!vq_ring_ready(vq)) - VM_PANIC(vcpu); + plen += iov[1].iov_len; + tlen += iov[1].iov_len; - vq->used->flags |= VRING_USED_F_NO_NOTIFY; + memcpy(data, iov[1].iov_base, iov[1].iov_len); - do { - /* - * Run through entries, placing them into - * iovecs and sending when an end-of-packet - * is found - */ - virtio_net_proctx(vcpu, vq); - } while (vq_has_descs(vq)); - printc("tx done on busrt\n"); + *pkt_len = plen; + vq_relchain(vq, idx, tlen); - /* - * Generate an interrupt if needed. - */ vq_endchains(vcpu, vq, 1); + return; } static void @@ -494,6 +410,7 @@ virtio_net_inb(u32_t port_id, struct vmrt_vm_vcpu *vcpu) break; case VIRTIO_NET_ISR: vcpu->shared_region->ax = virtio_net_regs.header.ISR; + virtio_net_regs.header.ISR = 0; break; case VIRTIO_NET_STATUS: vcpu->shared_region->ax = virtio_net_regs.config_reg.status; @@ -559,8 +476,7 @@ virtio_net_outw(u32_t port_id, struct vmrt_vm_vcpu *vcpu) break; case VIRTIO_NET_QUEUE_NOTIFY: if (val == VIRTIO_NET_TXQ) { - virtio_net_tx_thread(0, vcpu); - virtio_net_tap_rx(vcpu); + sched_thd_wakeup(12); } virtio_net_regs.header.queue_notify = val; break; diff --git a/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.h b/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.h index d7924e40e4..a5239b8c47 100644 --- a/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.h +++ b/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.h @@ -44,7 +44,7 @@ #define VIRTIO_NET_F_GUEST_ANNOUNCE (21) #define VIRTIO_NET_RINGSZ 512 -#define VIRTIO_NET_MAXSEGS 256 +#define VIRTIO_NET_MAXSEGS 32 #define VQ_MAX_DESCRIPTORS 512 struct virtio_header { @@ -122,6 +122,9 @@ struct virtio_vq_info { u32_t gpa_avail[2]; /* gpa of avail_ring */ u32_t gpa_used[2]; /* gpa of used_ring */ int enabled; /* whether the virtqueue is enabled */ + + /* each vq is bounded to a vcpu */ + struct vmrt_vm_vcpu *vcpu; }; /* @@ -134,7 +137,8 @@ struct virtio_net_rxhdr { u16_t vrh_gso_size; u16_t vrh_csum_start; u16_t vrh_csum_offset; - /* u16_t vrh_bufs; */ } __attribute__((packed)); void virtio_net_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu); +void virtio_net_rcv_one_pkt(void *data, int pkt_len); +void virtio_net_send_one_pkt(void *data, u16_t *pkt_len); diff --git a/src/components/implementation/simple_vmm/vmm/devices/vpci/vpci.c b/src/components/implementation/simple_vmm/vmm/devices/vpci/vpci.c index 17c9b397ff..e1854c8bac 100644 --- a/src/components/implementation/simple_vmm/vmm/devices/vpci/vpci.c +++ b/src/components/implementation/simple_vmm/vmm/devices/vpci/vpci.c @@ -94,6 +94,7 @@ set_vpci_bar(u8_t* raw_data, u8_t reg, u32_t val) *(u32_t *)raw_data = val; } else { /* Mem bar */ /* Currently don't support IO bar */ + printc("no vpci bar\n"); assert(0); } diff --git a/src/components/implementation/simple_vmm/vmm/devices/vpic/vpic.c b/src/components/implementation/simple_vmm/vmm/devices/vpic/vpic.c index f2e023503a..f80471d528 100644 --- a/src/components/implementation/simple_vmm/vmm/devices/vpic/vpic.c +++ b/src/components/implementation/simple_vmm/vmm/devices/vpic/vpic.c @@ -20,6 +20,8 @@ struct chip_8259 { static struct chip_8259 chip; +static u8_t pic_elcr1 = 0, pic_elcr2 = 0; + void vpic_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu) { @@ -36,6 +38,15 @@ vpic_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu) case PIC_MASTER_CMD_PORT: vcpu->shared_region->ax = chip.master_cmd; break; + case PIC_SLAVE_CMD_PORT: + vcpu->shared_region->ax = chip.slave_cmd; + break; + case PIC_ELCR1: + vcpu->shared_region->ax = pic_elcr1; + break; + case PIC_ELCR2: + vcpu->shared_region->ax = pic_elcr2; + break; default: printc("vpic_handler: port: 0x%x, dir: %d\n", port, dir); VM_PANIC(vcpu); @@ -77,6 +88,12 @@ vpic_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu) chip.is_slave_init = 0; } break; + case PIC_ELCR1: + pic_elcr1 = val; + break; + case PIC_ELCR2: + pic_elcr2 = val; + break; default: assert(0); break; diff --git a/src/components/implementation/simple_vmm/vmm/devices/vpic/vpic.h b/src/components/implementation/simple_vmm/vmm/devices/vpic/vpic.h index 673f75cfc7..a7001a6b52 100644 --- a/src/components/implementation/simple_vmm/vmm/devices/vpic/vpic.h +++ b/src/components/implementation/simple_vmm/vmm/devices/vpic/vpic.h @@ -18,5 +18,7 @@ #define ICW4_SFNM 0x10 #define PIC_EOI 0x20 +#define PIC_ELCR1 0x4d0 +#define PIC_ELCR2 0x4d1 void vpic_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu); diff --git a/src/components/implementation/simple_vmm/vmm/devices/vrtc/vrtc.c b/src/components/implementation/simple_vmm/vmm/devices/vrtc/vrtc.c index 9073d18457..c971cef94e 100644 --- a/src/components/implementation/simple_vmm/vmm/devices/vrtc/vrtc.c +++ b/src/components/implementation/simple_vmm/vmm/devices/vrtc/vrtc.c @@ -42,7 +42,6 @@ vrtc_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu) } break; case CMOS_DATA_PORT: - assert(0); break; default: assert(0); diff --git a/src/components/implementation/simple_vmm/vmm/instr_emul.c b/src/components/implementation/simple_vmm/vmm/instr_emul.c new file mode 100644 index 0000000000..230a0a9bdf --- /dev/null +++ b/src/components/implementation/simple_vmm/vmm/instr_emul.c @@ -0,0 +1,1381 @@ +/*- + * Copyright (c) 2012 Sandvine, Inc. + * Copyright (c) 2012 NetApp, Inc. + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#include +#include + +#include + +#define CPU_REG_FIRST CPU_REG_RAX +#define CPU_REG_LAST CPU_REG_GDTR +#define CPU_REG_GENERAL_FIRST CPU_REG_RAX +#define CPU_REG_GENERAL_LAST CPU_REG_R15 +#define CPU_REG_NONGENERAL_FIRST CPU_REG_CR0 +#define CPU_REG_NONGENERAL_LAST CPU_REG_GDTR +#define CPU_REG_NATURAL_FIRST CPU_REG_CR0 +#define CPU_REG_NATURAL_LAST CPU_REG_RFLAGS +#define CPU_REG_64BIT_FIRST CPU_REG_EFER +#define CPU_REG_64BIT_LAST CPU_REG_PDPTE3 +#define CPU_REG_SEG_FIRST CPU_REG_ES +#define CPU_REG_SEG_LAST CPU_REG_GS + +#define PSL_C 0x00000001U /* carry bit */ +#define PSL_PF 0x00000004U /* parity bit */ +#define PSL_AF 0x00000010U /* bcd carry bit */ +#define PSL_Z 0x00000040U /* zero bit */ +#define PSL_N 0x00000080U /* negative bit */ +#define PSL_D 0x00000400U /* string instruction direction bit */ +#define PSL_V 0x00000800U /* overflow bit */ +#define PSL_AC 0x00040000U /* alignment checking */ + +/* + * Protections are chosen from these bits, or-ed together + */ +#define PROT_READ 0x01U /* pages can be read */ +#define PROT_WRITE 0x02U /* pages can be written */ + +/* struct vie_op.op_type */ +#define VIE_OP_TYPE_NONE 0U +#define VIE_OP_TYPE_MOV 1U +#define VIE_OP_TYPE_MOVSX 2U +#define VIE_OP_TYPE_MOVZX 3U +#define VIE_OP_TYPE_AND 4U +#define VIE_OP_TYPE_OR 5U +#define VIE_OP_TYPE_SUB 6U +#define VIE_OP_TYPE_TWO_BYTE 7U +#define VIE_OP_TYPE_PUSH 8U +#define VIE_OP_TYPE_CMP 9U +#define VIE_OP_TYPE_POP 10U +#define VIE_OP_TYPE_MOVS 11U +#define VIE_OP_TYPE_GROUP1 12U +#define VIE_OP_TYPE_STOS 13U +#define VIE_OP_TYPE_BITTEST 14U +#define VIE_OP_TYPE_TEST 15U +#define VIE_OP_TYPE_XCHG 16U + +/* struct vie_op.op_flags */ +#define VIE_OP_F_IMM (1U << 0U) /* 16/32-bit immediate operand */ +#define VIE_OP_F_IMM8 (1U << 1U) /* 8-bit immediate operand */ +#define VIE_OP_F_MOFFSET (1U << 2U) /* 16/32/64-bit immediate moffset */ +#define VIE_OP_F_NO_MODRM (1U << 3U) +#define VIE_OP_F_CHECK_GVA_DI (1U << 4U) /* for movs, need to check DI */ +/* + * The VIE_OP_F_BYTE_OP only set when the instruction support + * Encoding of Operand Size (w) Bit and the w bit of opcode is 0. + * according B.2 GENERAL-PURPOSE INSTRUCTION FORMATS AND ENCODINGS + * FOR NON-64-BIT MODES, Vol 2, Intel SDM. + */ +#define VIE_OP_F_BYTE_OP (1U << 5U) /* 8-bit operands. */ +#define VIE_OP_F_WORD_OP (1U << 6U) /* 16-bit operands. */ + +static const struct instr_emul_vie_op two_byte_opcodes[256] = { + [0xB6] = { + .op_type = VIE_OP_TYPE_MOVZX, + .op_flags = VIE_OP_F_BYTE_OP, + }, + [0xB7] = { + .op_type = VIE_OP_TYPE_MOVZX, + .op_flags = VIE_OP_F_WORD_OP, + }, + [0xBA] = { + .op_type = VIE_OP_TYPE_BITTEST, + .op_flags = VIE_OP_F_IMM8, + }, + [0xBE] = { + .op_type = VIE_OP_TYPE_MOVSX, + .op_flags = VIE_OP_F_BYTE_OP, + }, +}; + +static const struct instr_emul_vie_op one_byte_opcodes[256] = { + [0x0F] = { + .op_type = VIE_OP_TYPE_TWO_BYTE + }, + [0x2B] = { + .op_type = VIE_OP_TYPE_SUB, + }, + [0x39] = { + .op_type = VIE_OP_TYPE_CMP, + }, + [0x3B] = { + .op_type = VIE_OP_TYPE_CMP, + }, + [0x88] = { + .op_type = VIE_OP_TYPE_MOV, + .op_flags = VIE_OP_F_BYTE_OP, + }, + [0x89] = { + .op_type = VIE_OP_TYPE_MOV, + }, + [0x8A] = { + .op_type = VIE_OP_TYPE_MOV, + .op_flags = VIE_OP_F_BYTE_OP, + }, + [0x8B] = { + .op_type = VIE_OP_TYPE_MOV, + }, + [0xA1] = { + .op_type = VIE_OP_TYPE_MOV, + .op_flags = VIE_OP_F_MOFFSET | VIE_OP_F_NO_MODRM, + }, + [0xA3] = { + .op_type = VIE_OP_TYPE_MOV, + .op_flags = VIE_OP_F_MOFFSET | VIE_OP_F_NO_MODRM, + }, + [0xA4] = { + .op_type = VIE_OP_TYPE_MOVS, + .op_flags = VIE_OP_F_NO_MODRM | VIE_OP_F_CHECK_GVA_DI | VIE_OP_F_BYTE_OP, + }, + [0xA5] = { + .op_type = VIE_OP_TYPE_MOVS, + .op_flags = VIE_OP_F_NO_MODRM | VIE_OP_F_CHECK_GVA_DI, + }, + [0xAA] = { + .op_type = VIE_OP_TYPE_STOS, + .op_flags = VIE_OP_F_NO_MODRM | VIE_OP_F_BYTE_OP, + }, + [0xAB] = { + .op_type = VIE_OP_TYPE_STOS, + .op_flags = VIE_OP_F_NO_MODRM + }, + [0xC6] = { + /* XXX Group 11 extended opcode - not just MOV */ + .op_type = VIE_OP_TYPE_MOV, + .op_flags = VIE_OP_F_IMM8 | VIE_OP_F_BYTE_OP, + }, + [0xC7] = { + .op_type = VIE_OP_TYPE_MOV, + .op_flags = VIE_OP_F_IMM, + }, + [0x23] = { + .op_type = VIE_OP_TYPE_AND, + }, + [0x80] = { + /* Group 1 extended opcode */ + .op_type = VIE_OP_TYPE_GROUP1, + .op_flags = VIE_OP_F_IMM8, + }, + [0x81] = { + /* Group 1 extended opcode */ + .op_type = VIE_OP_TYPE_GROUP1, + .op_flags = VIE_OP_F_IMM, + }, + [0x83] = { + /* Group 1 extended opcode */ + .op_type = VIE_OP_TYPE_GROUP1, + .op_flags = VIE_OP_F_IMM8, + }, + [0x84] = { + .op_type = VIE_OP_TYPE_TEST, + .op_flags = VIE_OP_F_BYTE_OP, + }, + [0x85] = { + .op_type = VIE_OP_TYPE_TEST, + }, + [0x86] = { + .op_type = VIE_OP_TYPE_XCHG, + }, + [0x87] = { + .op_type = VIE_OP_TYPE_XCHG, + }, + [0x08] = { + .op_type = VIE_OP_TYPE_OR, + .op_flags = VIE_OP_F_BYTE_OP, + }, + [0x09] = { + .op_type = VIE_OP_TYPE_OR, + }, +}; + +/* struct vie.mod */ +#define VIE_MOD_INDIRECT 0U +#define VIE_MOD_INDIRECT_DISP8 1U +#define VIE_MOD_INDIRECT_DISP32 2U +#define VIE_MOD_DIRECT 3U + +/* struct vie.rm */ +#define VIE_RM_SIB 4U +#define VIE_RM_DISP32 5U + +static uint64_t size2mask[9] = { + [1] = (1UL << 8U) - 1UL, + [2] = (1UL << 16U) - 1UL, + [4] = (1UL << 32U) - 1UL, + [8] = ~0UL, +}; + +#define VMX_INVALID_VMCS_FIELD 0xffffffffU + +/* + * This struct vmcs_seg_field is defined separately to hold the vmcs field + * address of segment selector. + */ +struct vmcs_seg_field { + uint32_t base_field; + uint32_t limit_field; + uint32_t access_field; +}; + +/* + * The 'access' field has the format specified in Table 21-2 of the Intel + * Architecture Manual vol 3b. + * + * XXX The contents of the 'access' field are architecturally defined except + * bit 16 - Segment Unusable. + */ +struct seg_desc { + uint64_t base; + uint32_t limit; + uint32_t access; +}; + +static inline struct acrn_mmio_request *vcpu_mmio_req(struct vmrt_vm_vcpu *vcpu) +{ + return (struct acrn_mmio_request *)(vcpu->mmio_request); +} + +static inline uint32_t seg_desc_type(uint32_t access) +{ + return (access & 0x001fU); +} + +static uint64_t vm_get_register(struct vmrt_vm_vcpu *vcpu, enum cpu_reg_name reg) +{ + volatile struct vm_vcpu_shared_region *regs = vcpu->shared_region; + uint64_t reg_val = 0UL; + + switch (reg) + { + case CPU_REG_RAX: + reg_val = regs->ax; + break; + case CPU_REG_RCX: + reg_val = regs->cx; + break; + case CPU_REG_RDX: + reg_val = regs->dx; + break; + case CPU_REG_RBX: + reg_val = regs->bx; + break; + case CPU_REG_RSP: + reg_val = regs->sp; + break; + case CPU_REG_RBP: + reg_val = regs->bp; + break; + case CPU_REG_RSI: + reg_val = regs->si; + break; + case CPU_REG_RDI: + reg_val = regs->di; + break; + case CPU_REG_R8: + reg_val = regs->r8; + break; + case CPU_REG_R9: + reg_val = regs->r9; + break; + case CPU_REG_R10: + reg_val = regs->r10; + break; + case CPU_REG_R11: + reg_val = regs->r11; + break; + case CPU_REG_R12: + reg_val = regs->r12; + break; + case CPU_REG_R13: + reg_val = regs->r13; + break; + case CPU_REG_R14: + reg_val = regs->r14; + break; + case CPU_REG_R15: + reg_val = regs->r15; + break; + default: + VM_PANIC(vcpu); + break; + } + + return reg_val; +} + +static void vm_set_register(struct vmrt_vm_vcpu *vcpu, enum cpu_reg_name reg, + uint64_t val) +{ + volatile struct vm_vcpu_shared_region *regs = vcpu->shared_region; + + switch (reg) + { + case CPU_REG_RAX: + regs->ax = val; + break; + case CPU_REG_RCX: + regs->cx = val; + break; + case CPU_REG_RDX: + regs->dx = val; + break; + case CPU_REG_RBX: + regs->bx = val; + break; + case CPU_REG_RSP: + regs->sp = val; + break; + case CPU_REG_RBP: + regs->bp = val; + break; + case CPU_REG_RSI: + regs->si = val; + break; + case CPU_REG_RDI: + regs->di = val; + break; + case CPU_REG_R8: + regs->r8 = val; + break; + case CPU_REG_R9: + regs->r9 = val; + break; + case CPU_REG_R10: + regs->r10 = val; + break; + case CPU_REG_R11: + regs->r11 = val; + break; + case CPU_REG_R12: + regs->r12 = val; + break; + case CPU_REG_R13: + regs->r13 = val; + break; + case CPU_REG_R14: + regs->r14 = val; + break; + case CPU_REG_R15: + regs->r15 = val; + break; + default: + VM_PANIC(vcpu); + break; + } +} + +static int32_t vie_canonical_check(uint64_t gla) +{ + int32_t ret = 0; + uint64_t mask; + + /* + * The value of the bit 47 in the 'gla' should be replicated in the + * most significant 16 bits. + */ + mask = ~((1UL << 48U) - 1UL); + if ((gla & (1UL << 47U)) != 0U) { + ret = ((gla & mask) != mask) ? 1 : 0; + } else { + ret = ((gla & mask) != 0U) ? 1 : 0; + } + + return ret; +} + +/* + * @pre vcpu != NULL + */ +static inline void vie_mmio_read(struct vmrt_vm_vcpu *vcpu, uint64_t *rval) +{ + *rval = vcpu_mmio_req(vcpu)->value; +} + +/* + * @pre vcpu != NULL + */ +static inline void vie_mmio_write(struct vmrt_vm_vcpu *vcpu, uint64_t wval) +{ + vcpu_mmio_req(vcpu)->value = wval; +} + +static void vie_calc_bytereg(const struct instr_emul_vie *vie, + enum cpu_reg_name *reg, int32_t *lhbr) +{ + *lhbr = 0; + *reg = (enum cpu_reg_name)(vie->reg); + + /* + * 64-bit mode imposes limitations on accessing legacy high byte + * registers (lhbr). + * + * The legacy high-byte registers cannot be addressed if the REX + * prefix is present. In this case the values 4, 5, 6 and 7 of the + * 'ModRM:reg' field address %spl, %bpl, %sil and %dil respectively. + * + * If the REX prefix is not present then the values 4, 5, 6 and 7 + * of the 'ModRM:reg' field address the legacy high-byte registers, + * %ah, %ch, %dh and %bh respectively. + */ + if (vie->rex_present == 0U) { + if ((vie->reg & 0x4U) != 0U) { + *lhbr = 1; + *reg = (enum cpu_reg_name)(vie->reg & 0x3U); + } + } +} + +static uint8_t vie_read_bytereg(struct vmrt_vm_vcpu *vcpu, const struct instr_emul_vie *vie) +{ + int32_t lhbr; + uint64_t val; + uint8_t reg_val; + enum cpu_reg_name reg; + + vie_calc_bytereg(vie, ®, &lhbr); + val = vm_get_register(vcpu, reg); + + /* + * To obtain the value of a legacy high byte register shift the + * base register right by 8 bits (%ah = %rax >> 8). + */ + if (lhbr != 0) { + reg_val = (uint8_t)(val >> 8U); + } else { + reg_val = (uint8_t)val; + } + + return reg_val; +} + +static void vie_write_bytereg(struct vmrt_vm_vcpu *vcpu, const struct instr_emul_vie *vie, + uint8_t byte) +{ + uint64_t origval, val, mask; + enum cpu_reg_name reg; + int32_t lhbr; + + vie_calc_bytereg(vie, ®, &lhbr); + origval = vm_get_register(vcpu, reg); + + val = byte; + mask = 0xffU; + if (lhbr != 0) { + /* + * Shift left by 8 to store 'byte' in a legacy high + * byte register. + */ + val <<= 8U; + mask <<= 8U; + } + val |= origval & ~mask; + vm_set_register(vcpu, reg, val); +} + +/** + * @pre vcpu != NULL + * @pre size = 1, 2, 4 or 8 + * @pre ((reg <= CPU_REG_LAST) && (reg >= CPU_REG_FIRST)) + * @pre ((reg != CPU_REG_CR2) && (reg != CPU_REG_IDTR) && (reg != CPU_REG_GDTR)) + */ +static void vie_update_register(struct vmrt_vm_vcpu *vcpu, enum cpu_reg_name reg, + uint64_t val_arg, uint8_t size) +{ + uint64_t origval; + uint64_t val = val_arg; + + switch (size) { + case 1U: + case 2U: + origval = vm_get_register(vcpu, reg); + val &= size2mask[size]; + val |= origval & ~size2mask[size]; + break; + case 4U: + val &= 0xffffffffUL; + break; + default: /* size == 8 */ + break; + } + + vm_set_register(vcpu, reg, val); +} + +#define RFLAGS_STATUS_BITS (PSL_C | PSL_PF | PSL_AF | PSL_Z | PSL_N | PSL_V) + +static void vie_update_rflags(struct vmrt_vm_vcpu *vcpu, uint64_t rflags2, uint64_t psl) +{ + uint8_t size; + uint64_t rflags; + + rflags = vm_get_register(vcpu, CPU_REG_RFLAGS); + + rflags &= ~RFLAGS_STATUS_BITS; + rflags |= rflags2 & psl; + size = 8U; + + vie_update_register(vcpu, CPU_REG_RFLAGS, rflags, size); +} + +/* + * Return the status flags that would result from doing (x - y). + */ +#define build_getcc(name, type) \ +static uint64_t name(type x, type y) \ +{ \ + uint64_t rflags; \ + \ + __asm __volatile("sub %2,%1; pushfq; popq %0" : \ + "=r" (rflags), "+r" (x) : "m" (y)); \ + return rflags; \ +} +build_getcc(getcc8, uint8_t) +build_getcc(getcc16, uint16_t) +build_getcc(getcc32, uint32_t) +build_getcc(getcc64, uint64_t) + +/** + * @pre opsize = 1, 2, 4 or 8 + */ +static uint64_t getcc(uint8_t opsize, uint64_t x, uint64_t y) +{ + uint64_t rflags; + switch (opsize) { + case 1U: + rflags = getcc8((uint8_t) x, (uint8_t) y); + break; + case 2U: + rflags = getcc16((uint16_t) x, (uint16_t) y); + break; + case 4U: + rflags = getcc32((uint32_t) x, (uint32_t) y); + break; + default: /* opsize == 8 */ + rflags = getcc64(x, y); + break; + } + + return rflags; +} + +static int32_t emulate_mov(struct vmrt_vm_vcpu *vcpu, const struct instr_emul_vie *vie) +{ + int32_t error; + uint8_t size; + enum cpu_reg_name reg; + uint8_t byte; + uint64_t val; + + size = vie->opsize; + error = 0; + switch (vie->opcode) { + case 0x88U: + /* + * MOV byte from reg (ModRM:reg) to mem (ModRM:r/m) + * 88/r: mov r/m8, r8 + * REX + 88/r: mov r/m8, r8 (%ah, %ch, %dh, %bh not available) + */ + byte = vie_read_bytereg(vcpu, vie); + vie_mmio_write(vcpu, byte); + break; + case 0x89U: + /* + * MOV from reg (ModRM:reg) to mem (ModRM:r/m) + * 89/r: mov r/m16, r16 + * 89/r: mov r/m32, r32 + * REX.W + 89/r mov r/m64, r64 + */ + + reg = (enum cpu_reg_name)(vie->reg); + val = vm_get_register(vcpu, reg); + val &= size2mask[size]; + vie_mmio_write(vcpu, val); + break; + case 0x8AU: + /* + * MOV byte from mem (ModRM:r/m) to reg (ModRM:reg) + * 8A/r: mov r8, r/m8 + * REX + 8A/r: mov r8, r/m8 + */ + vie_mmio_read(vcpu, &val); + vie_write_bytereg(vcpu, vie, (uint8_t)val); + break; + case 0x8BU: + /* + * MOV from mem (ModRM:r/m) to reg (ModRM:reg) + * 8B/r: mov r16, r/m16 + * 8B/r: mov r32, r/m32 + * REX.W 8B/r: mov r64, r/m64 + */ + vie_mmio_read(vcpu, &val); + reg = (enum cpu_reg_name)(vie->reg); + vie_update_register(vcpu, reg, val, size); + break; + case 0xA1U: + /* + * MOV from seg:moffset to AX/EAX/RAX + * A1: mov AX, moffs16 + * A1: mov EAX, moffs32 + * REX.W + A1: mov RAX, moffs64 + */ + vie_mmio_read(vcpu, &val); + reg = CPU_REG_RAX; + vie_update_register(vcpu, reg, val, size); + break; + case 0xA3U: + /* + * MOV from AX/EAX/RAX to seg:moffset + * A3: mov moffs16, AX + * A3: mov moffs32, EAX + * REX.W + A3: mov moffs64, RAX + */ + val = vm_get_register(vcpu, CPU_REG_RAX); + val &= size2mask[size]; + vie_mmio_write(vcpu, val); + break; + case 0xC6U: + /* + * MOV from imm8 to mem (ModRM:r/m) + * C6/0 mov r/m8, imm8 + * REX + C6/0 mov r/m8, imm8 + */ + vie_mmio_write(vcpu, (uint64_t)vie->immediate); + break; + case 0xC7U: + /* + * MOV from imm16/imm32 to mem (ModRM:r/m) + * C7/0 mov r/m16, imm16 + * C7/0 mov r/m32, imm32 + * REX.W + C7/0 mov r/m64, imm32 + * (sign-extended to 64-bits) + */ + val = (uint64_t)(vie->immediate) & size2mask[size]; + vie_mmio_write(vcpu, val); + break; + default: + /* + * For the opcode that is not handled (an invalid opcode), the + * error code is assigned to a default value (-EINVAL). + * Gracefully return this error code if prior case clauses have + * not been met. + */ + error = -EINVAL; + break; + } + + return error; +} + +static void copy_from_gva(struct vmrt_vm_vcpu *vcpu, void *buf, u64_t gva, u32_t len) +{ + void *src = GPA2HVA(vmrt_vm_gva2gpa(vcpu, gva), vcpu->vm); + memcpy(buf, src, len); +} + +static int32_t vie_init(struct instr_emul_vie *vie, struct vmrt_vm_vcpu *vcpu) +{ + volatile struct vm_vcpu_shared_region *regs = vcpu->shared_region; + u64_t inst_len = regs->inst_length; + int32_t ret; + + if ((inst_len > VIE_INST_SIZE) || (inst_len == 0U)) { + VM_PANIC(vcpu); + } else { + (void)memset(vie, 0U, sizeof(struct instr_emul_vie)); + + /* init register fields in vie. */ + vie->base_register = CPU_REG_LAST; + vie->index_register = CPU_REG_LAST; + vie->segment_register = CPU_REG_LAST; + + copy_from_gva(vcpu, vie->inst, regs->ip, inst_len); + /* + * Use this to print the inst binary to verify if the decodeed inst is correct + * + printc("inst to be decode: "); + for (u64_t i = 0; i < inst_len; i++) { + printc("%x ", vie->inst[i]); + } + printc("\ninst vie init done\n"); + */ + + vie->num_valid = (uint8_t)inst_len; + ret = 0; + } + + return ret; +} + +static int32_t vie_peek(const struct instr_emul_vie *vie, uint8_t *x) +{ + int32_t ret; + if (vie->num_processed < vie->num_valid) { + *x = vie->inst[vie->num_processed]; + ret = 0; + } else { + ret = -1; + } + return ret; +} + +static void vie_advance(struct instr_emul_vie *vie) +{ + + vie->num_processed++; +} + +static bool segment_override(uint8_t x, enum cpu_reg_name *seg) +{ + bool override = true; + switch (x) { + case 0x2EU: + *seg = CPU_REG_CS; + break; + case 0x36U: + *seg = CPU_REG_SS; + break; + case 0x3EU: + *seg = CPU_REG_DS; + break; + case 0x26U: + *seg = CPU_REG_ES; + break; + case 0x64U: + *seg = CPU_REG_FS; + break; + case 0x65U: + *seg = CPU_REG_GS; + break; + default: + override = false; + break; + } + return override; +} + +static void decode_op_and_addr_size(struct instr_emul_vie *vie) +{ + /* + * Section "Operand-Size And Address-Size Attributes", Intel SDM, Vol 1 + */ + + /* + * Default address size is 64-bits and default operand size + * is 32-bits. + */ + vie->addrsize = ((vie->addrsize_override != 0U) ? 4U : 8U); + if (vie->rex_w != 0U) { + vie->opsize = 8U; + } else if (vie->opsize_override != 0U) { + vie->opsize = 2U; + } else { + vie->opsize = 4U; + } +} +static int32_t decode_prefixes(struct instr_emul_vie *vie) +{ + uint8_t x, i; + int32_t ret = 0; + + for (i = 0U; i < VIE_PREFIX_SIZE; i++) { + if (vie_peek(vie, &x) != 0) { + ret = -1; + break; + } else { + if (x == 0x66U) { + vie->opsize_override = 1U; + } else if (x == 0x67U) { + vie->addrsize_override = 1U; + } else if (x == 0xF3U) { + vie->repz_present = 1U; + } else if (x == 0xF2U) { + vie->repnz_present = 1U; + } else if (segment_override(x, &vie->segment_register)) { + vie->seg_override = 1U; + } else { + break; + } + + vie_advance(vie); + } + } + + if (ret == 0) { + /* + * From section 2.2.1, "REX Prefixes", Intel SDM Vol 2: + * - Only one REX prefix is allowed per instruction. + * - The REX prefix must immediately precede the opcode byte or the + * escape opcode byte. + * - If an instruction has a mandatory prefix (0x66, 0xF2 or 0xF3) + * the mandatory prefix must come before the REX prefix. + */ + if ( (x >= 0x40U) && (x <= 0x4FU)) { + vie->rex_present = 1U; + vie->rex_w = (x >> 0x3U) & 1U; + vie->rex_r = (x >> 0x2U) & 1U; + vie->rex_x = (x >> 0x1U) & 1U; + vie->rex_b = (x >> 0x0U) & 1U; + vie_advance(vie); + } + decode_op_and_addr_size(vie); + } + + return ret; +} + +static int32_t decode_two_byte_opcode(struct instr_emul_vie *vie) +{ + int32_t ret = 0; + uint8_t x; + + if (vie_peek(vie, &x) != 0) { + ret = -1; + } else { + vie->opcode = x; + vie->op = two_byte_opcodes[x]; + + if (vie->op.op_type == VIE_OP_TYPE_NONE) { + ret = -1; + } else { + vie_advance(vie); + } + } + + return ret; +} + +static int32_t decode_opcode(struct instr_emul_vie *vie) +{ + int32_t ret = 0; + uint8_t x; + + if (vie_peek(vie, &x) != 0) { + ret = -1; + } else { + vie->opcode = x; + vie->op = one_byte_opcodes[x]; + + if (vie->op.op_type == VIE_OP_TYPE_NONE) { + ret = -1; + } else { + vie_advance(vie); + + if (vie->op.op_type == VIE_OP_TYPE_TWO_BYTE) { + ret = decode_two_byte_opcode(vie); + } + } + } + + return ret; +} + +static int32_t decode_modrm(struct instr_emul_vie *vie) +{ + uint8_t x; + int32_t ret; + + if ((vie->op.op_flags & VIE_OP_F_NO_MODRM) != 0U) { + ret = 0; + } else if (vie_peek(vie, &x) != 0) { + ret = -1; + } else { + vie->mod = (x >> 6U) & 0x3U; + vie->rm = (x >> 0U) & 0x7U; + vie->reg = (x >> 3U) & 0x7U; + + /* + * A direct addressing mode makes no sense in the context of an EPT + * fault. There has to be a memory access involved to cause the + * EPT fault. + */ + if (vie->mod == VIE_MOD_DIRECT) { + ret = -1; + } else { + if (((vie->mod == VIE_MOD_INDIRECT) && (vie->rm == VIE_RM_DISP32)) || + ((vie->mod != VIE_MOD_DIRECT) && (vie->rm == VIE_RM_SIB))) { + /* + * Table 2-5: Special Cases of REX Encodings + * + * mod=0, r/m=5 is used in the compatibility mode to + * indicate a disp32 without a base register. + * + * mod!=3, r/m=4 is used in the compatibility mode to + * indicate that the SIB byte is present. + * + * The 'b' bit in the REX prefix is don't care in + * this case. + */ + } else { + vie->rm |= (vie->rex_b << 3U); + } + + vie->reg |= (vie->rex_r << 3U); + + /* SIB */ + if ((vie->mod != VIE_MOD_DIRECT) && (vie->rm == VIE_RM_SIB)) { + /* done */ + } else { + vie->base_register = (enum cpu_reg_name)vie->rm; + + switch (vie->mod) { + case VIE_MOD_INDIRECT_DISP8: + vie->disp_bytes = 1U; + break; + case VIE_MOD_INDIRECT_DISP32: + vie->disp_bytes = 4U; + break; + case VIE_MOD_INDIRECT: + if (vie->rm == VIE_RM_DISP32) { + vie->disp_bytes = 4U; + /* + * Table 2-7. RIP-Relative Addressing + * + * In 64-bit mode mod=00 r/m=101 implies [rip] + disp32 + * whereas in compatibility mode it just implies disp32. + */ + + vie->base_register = CPU_REG_RIP; + printc("VM exit with RIP as indirect access"); + assert(0); + } + break; + default: + /* VIE_MOD_DIRECT */ + break; + } + + } + vie_advance(vie); + + ret = 0; + } + } + + return ret; +} + +static int32_t decode_sib(struct instr_emul_vie *vie) +{ + uint8_t x; + int32_t ret; + + /* Proceed only if SIB byte is present */ + if ((vie->mod == VIE_MOD_DIRECT) || (vie->rm != VIE_RM_SIB)) { + ret = 0; + } else if (vie_peek(vie, &x) != 0) { + ret = -1; + } else { + + /* De-construct the SIB byte */ + vie->ss = (x >> 6U) & 0x3U; + vie->index = (x >> 3U) & 0x7U; + vie->base = (x >> 0U) & 0x7U; + + /* Apply the REX prefix modifiers */ + vie->index |= vie->rex_x << 3U; + vie->base |= vie->rex_b << 3U; + + switch (vie->mod) { + case VIE_MOD_INDIRECT_DISP8: + vie->disp_bytes = 1U; + break; + case VIE_MOD_INDIRECT_DISP32: + vie->disp_bytes = 4U; + break; + default: + /* + * All possible values of 'vie->mod': + * 1. VIE_MOD_DIRECT + * has been handled at the start of this function + * 2. VIE_MOD_INDIRECT_DISP8 + * has been handled in prior case clauses + * 3. VIE_MOD_INDIRECT_DISP32 + * has been handled in prior case clauses + * 4. VIE_MOD_INDIRECT + * will be handled later after this switch statement + */ + break; + } + + if ((vie->mod == VIE_MOD_INDIRECT) && ((vie->base == 5U) || (vie->base == 13U))) { + /* + * Special case when base register is unused if mod = 0 + * and base = %rbp or %r13. + * + * Documented in: + * Table 2-3: 32-bit Addressing Forms with the SIB Byte + * Table 2-5: Special Cases of REX Encodings + */ + vie->disp_bytes = 4U; + } else { + vie->base_register = (enum cpu_reg_name)vie->base; + } + + /* + * All encodings of 'index' are valid except for %rsp (4). + * + * Documented in: + * Table 2-3: 32-bit Addressing Forms with the SIB Byte + * Table 2-5: Special Cases of REX Encodings + */ + if (vie->index != 4U) { + vie->index_register = (enum cpu_reg_name)vie->index; + } + + /* 'scale' makes sense only in the context of an index register */ + if (vie->index_register < CPU_REG_LAST) { + vie->scale = 1U << vie->ss; + } + + vie_advance(vie); + + ret = 0; + } + + return ret; +} + +static int32_t decode_displacement(struct instr_emul_vie *vie) +{ + uint8_t n, i, x; + int32_t ret = 0; + + union { + uint8_t buf[4]; + int8_t signed8; + int32_t signed32; + } u; + + n = vie->disp_bytes; + if (n != 0U) { + if ((n != 1U) && (n != 4U)) { + printc("%s: decode_displacement: invalid disp_bytes %d", __func__, n); + ret = -EINVAL; + } else { + + for (i = 0U; i < n; i++) { + if (vie_peek(vie, &x) != 0) { + ret = -1; + break; + } + + u.buf[i] = x; + vie_advance(vie); + } + + if (ret == 0) { + if (n == 1U) { + vie->displacement = u.signed8; /* sign-extended */ + } else { + vie->displacement = u.signed32; /* sign-extended */ + } + } + } + } + + return ret; +} + +static int32_t decode_immediate(struct instr_emul_vie *vie) +{ + uint8_t i, n, x; + int32_t ret = 0; + union { + uint8_t buf[4]; + int8_t signed8; + int16_t signed16; + int32_t signed32; + } u; + + /* Figure out immediate operand size (if any) */ + if ((vie->op.op_flags & VIE_OP_F_IMM) != 0U) { + /* + * Section 2.2.1.5 "Immediates", Intel SDM: + * In 64-bit mode the typical size of immediate operands + * remains 32-bits. When the operand size if 64-bits, the + * processor sign-extends all immediates to 64-bits prior + * to their use. + */ + if ((vie->opsize == 4U) || (vie->opsize == 8U)) { + vie->imm_bytes = 4U; + } + else { + vie->imm_bytes = 2U; + } + } else if ((vie->op.op_flags & VIE_OP_F_IMM8) != 0U) { + vie->imm_bytes = 1U; + } else { + /* No op_flag on immediate operand size */ + } + + n = vie->imm_bytes; + if (n != 0U) { + if ((n != 1U) && (n != 2U) && (n != 4U)) { + printc("%s: invalid number of immediate bytes: %d", __func__, n); + ret = -EINVAL; + } else { + for (i = 0U; i < n; i++) { + if (vie_peek(vie, &x) != 0) { + ret = -1; + break; + } + + u.buf[i] = x; + vie_advance(vie); + } + + if (ret == 0) { + /* sign-extend the immediate value before use */ + if (n == 1U) { + vie->immediate = u.signed8; + } else if (n == 2U) { + vie->immediate = u.signed16; + } else { + vie->immediate = u.signed32; + } + } + } + } + + return ret; +} + +static int32_t decode_moffset(struct instr_emul_vie *vie) +{ + uint8_t i, n, x; + int32_t ret = 0; + union { + uint8_t buf[8]; + uint64_t u64; + } u; + + if ((vie->op.op_flags & VIE_OP_F_MOFFSET) != 0U) { + /* + * Section 2.2.1.4, "Direct Memory-Offset MOVs", Intel SDM: + * The memory offset size follows the address-size of the instruction. + */ + n = vie->addrsize; + if ((n != 2U) && (n != 4U) && (n != 8U)) { + printc("%s: invalid moffset bytes: %hhu", __func__, n); + ret = -EINVAL; + } else { + u.u64 = 0UL; + for (i = 0U; i < n; i++) { + if (vie_peek(vie, &x) != 0) { + ret = -1; + break; + } + + u.buf[i] = x; + vie_advance(vie); + } + if (ret == 0) { + vie->displacement = (int64_t)u.u64; + } + } + } + + return ret; +} + +static int32_t local_decode_instruction(struct instr_emul_vie *vie) +{ + int32_t ret; + + if (decode_prefixes(vie) != 0) { + ret = -1; + } else if (decode_opcode(vie) != 0) { + ret = -1; + } else if (decode_modrm(vie) != 0) { + ret = -1; + } else if (decode_sib(vie) != 0) { + ret = -1; + } else if (decode_displacement(vie) != 0) { + ret = -1; + } else if (decode_immediate(vie) != 0) { + ret = -1; + } else if (decode_moffset(vie) != 0) { + ret = -1; + } else { + vie->decoded = 1U; /* success */ + ret = 0; + } + + return ret; +} + +static int32_t instr_check_gva(struct vmrt_vm_vcpu *vcpu) +{ + int32_t ret = 0; + uint64_t base, segbase, idx, gva; + enum cpu_reg_name seg; + struct instr_emul_vie *vie = &((struct instr_emul_ctxt *)vcpu->inst_ctxt)->vie; + + base = 0UL; + if (vie->base_register != CPU_REG_LAST) { + base = vm_get_register(vcpu, vie->base_register); + + /* RIP relative addressing starts from the + * following instruction + */ + if (vie->base_register == CPU_REG_RIP) { + base += vie->num_processed; + } + + } + + idx = 0UL; + if (vie->index_register != CPU_REG_LAST) { + idx = vm_get_register(vcpu, vie->index_register); + } + + /* "Specifying a Segment Selector" of SDM Vol1 3.7.4 + * + * In legacy IA-32 mode, when ESP or EBP register is used as + * base, the SS segment is default segment. + * + * All data references, except when relative to stack or + * string destination, DS is default segment. + * + * segment override could overwrite the default segment + * + * 64bit mode, segmentation is generally disabled. The + * exception are FS and GS. + */ + if (vie->seg_override != 0U) { + seg = vie->segment_register; + } else if ((vie->base_register == CPU_REG_RSP) || + (vie->base_register == CPU_REG_RBP)) { + seg = CPU_REG_SS; + } else { + seg = CPU_REG_DS; + } + + if ((seg != CPU_REG_FS) && + (seg != CPU_REG_GS)) { + segbase = 0UL; + } else { + struct seg_desc desc; + + VM_PANIC(vcpu); + segbase = desc.base; + } + + gva = segbase + base + (uint64_t)vie->scale * idx + (uint64_t)vie->displacement; + + vie->gva = gva; + + if (vie_canonical_check(gva) != 0) { + VM_PANIC(vcpu); + } else { + #define PAGE_FAULT_WR_FLAG 0x00000002U + + vmrt_vm_gva2gpa(vcpu, gva); + ret = 0; + if (ret < 0) { + VM_PANIC(vcpu); + } else { + ret = 0; + } + } + + return ret; +} + +int32_t decode_instruction(struct vmrt_vm_vcpu *vcpu) +{ + struct instr_emul_ctxt *emul_ctxt; + uint32_t csar; + int32_t retval; + + emul_ctxt = vcpu->inst_ctxt; + retval = vie_init(&emul_ctxt->vie, vcpu); + + if (retval < 0) { + VM_PANIC(vcpu); + } else { + retval = local_decode_instruction(&emul_ctxt->vie); + + if (retval != 0) { + VM_PANIC(vcpu); + } else { + /* + * We do operand check in instruction decode phase and + * inject exception accordingly. In late instruction + * emulation, it will always success. + * + * We only need to do dst check for movs. For other instructions, + * they always has one register and one mmio which trigger EPT + * by access mmio. With VMX enabled, the related check is done + * by VMX itself before hit EPT violation. + * + */ + if ((emul_ctxt->vie.op.op_flags & VIE_OP_F_CHECK_GVA_DI) != 0U) { + VM_PANIC(vcpu); + } else { + retval = instr_check_gva(vcpu); + } + + if (retval >= 0) { + /* return the Memory Operand byte size */ + if ((emul_ctxt->vie.op.op_flags & VIE_OP_F_BYTE_OP) != 0U) { + retval = 1; + } else if ((emul_ctxt->vie.op.op_flags & VIE_OP_F_WORD_OP) != 0U) { + retval = 2; + } else { + retval = (int32_t)emul_ctxt->vie.opsize; + } + } + } + } + + return retval; +} + +int32_t emulate_instruction(struct vmrt_vm_vcpu *vcpu) +{ + struct instr_emul_vie *vie = &((struct instr_emul_ctxt *)vcpu->inst_ctxt)->vie; + int32_t error; + + if (vie->decoded != 0U) { + switch (vie->op.op_type) { + case VIE_OP_TYPE_MOV: + error = emulate_mov(vcpu, vie); + break; + default: + VM_PANIC(vcpu); + error = -EINVAL; + break; + } + } else { + VM_PANIC(vcpu); + error = -EINVAL; + } + + return error; +} diff --git a/src/components/implementation/simple_vmm/vmm/instr_emul.h b/src/components/implementation/simple_vmm/vmm/instr_emul.h new file mode 100644 index 0000000000..901428dcb4 --- /dev/null +++ b/src/components/implementation/simple_vmm/vmm/instr_emul.h @@ -0,0 +1,95 @@ +/*- + * Copyright (c) 2012 NetApp, Inc. + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef INSTR_EMUL_H +#define INSTR_EMUL_H + +#include +#include + +struct vmrt_vm_vcpu; +struct instr_emul_vie_op { + uint8_t op_type; /* type of operation (e.g. MOV) */ + uint16_t op_flags; +}; + +#define VIE_PREFIX_SIZE 4U +#define VIE_INST_SIZE 15U +struct instr_emul_vie { + uint8_t inst[VIE_INST_SIZE]; /* instruction bytes */ + uint8_t num_valid; /* size of the instruction */ + uint8_t num_processed; + + uint8_t addrsize:4, opsize:4; /* address and operand sizes */ + uint8_t rex_w:1, /* REX prefix */ + rex_r:1, + rex_x:1, + rex_b:1, + rex_present:1, + repz_present:1, /* REP/REPE/REPZ prefix */ + repnz_present:1, /* REPNE/REPNZ prefix */ + opsize_override:1, /* Operand size override */ + addrsize_override:1, /* Address size override */ + seg_override:1; /* Segment override */ + + uint8_t mod:2, /* ModRM byte */ + reg:4, + rm:4; + + uint8_t ss:2, /* SIB byte */ + index:4, + base:4; + + uint8_t disp_bytes; + uint8_t imm_bytes; + + uint8_t scale; + enum cpu_reg_name base_register; /* CPU_REG_xyz */ + enum cpu_reg_name index_register; /* CPU_REG_xyz */ + enum cpu_reg_name segment_register; /* CPU_REG_xyz */ + + int64_t displacement; /* optional addr displacement */ + int64_t immediate; /* optional immediate operand */ + + uint8_t decoded; /* set to 1 if successfully decoded */ + + uint8_t opcode; + struct instr_emul_vie_op op; /* opcode description */ + + uint64_t dst_gpa; /* saved dst operand gpa. Only for movs */ + uint64_t gva; /* saved gva for instruction emulation */ +}; + +struct instr_emul_ctxt { + struct instr_emul_vie vie; +}; + +int32_t emulate_instruction(struct vmrt_vm_vcpu *vcpu); +int32_t decode_instruction(struct vmrt_vm_vcpu *vcpu); + +#endif diff --git a/src/components/implementation/simple_vmm/vmm/ioapic.h b/src/components/implementation/simple_vmm/vmm/ioapic.h new file mode 100644 index 0000000000..55b214a1e4 --- /dev/null +++ b/src/components/implementation/simple_vmm/vmm/ioapic.h @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2018-2022 Intel Corporation. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef ARCH_X86_IOAPIC_H +#define ARCH_X86_IOAPIC_H + +#include + +#define NR_LEGACY_IRQ 16U +#define NR_LEGACY_PIN NR_LEGACY_IRQ + +struct ioapic_info { + uint8_t id; /* IOAPIC ID as indicated in ACPI MADT */ + uint32_t addr; /* IOAPIC Register address */ + uint32_t gsi_base; /* Global System Interrupt where this IO-APIC's interrupt input start */ + uint32_t nr_pins; /* Number of Interrupt inputs as determined by Max. Redir Entry Register */ +}; + +void ioapic_setup_irqs(void); + +bool is_ioapic_irq(uint32_t irq); +uint32_t gsi_to_ioapic_pin(uint32_t gsi); +int32_t init_ioapic_id_info(void); +uint8_t ioapic_irq_to_ioapic_id(uint32_t irq); + +uint8_t get_platform_ioapic_info (struct ioapic_info **plat_ioapic_info); + +/** + * @defgroup ioapic_ext_apis IOAPIC External Interfaces + * + * This is a group that includes IOAPIC External Interfaces. + * + * @{ + */ + +/** + * @brief Get irq num from gsi num + * + * @param[in] gsi The gsi number + * + * @return irq number + */ +uint32_t ioapic_gsi_to_irq(uint32_t gsi); +/** + * @brief Set the redirection table entry + * + * Set the redirection table entry of an interrupt + * + * @param[in] irq The number of irq to set + * @param[in] rte Union of ioapic_rte to set + */ +void ioapic_set_rte(uint32_t irq, union ioapic_rte rte); + +/** + * @brief Get the redirection table entry + * + * Get the redirection table entry of an interrupt + * + * @param[in] irq The number of irq to fetch RTE + * @param[inout] rte Pointer to union ioapic_rte to return result RTE + * + * @pre rte != NULL + */ +void ioapic_get_rte(uint32_t irq, union ioapic_rte *rte); + +/** + * @brief Suspend ioapic + * + * Suspend ioapic, mainly save the RTEs. + */ +void suspend_ioapic(void); + +/** + * @brief Resume ioapic + * + * Resume ioapic, mainly restore the RTEs. + */ +void resume_ioapic(void); + +/** + * @} + */ +/* End of ioapic_ext_apis */ + +void ioapic_gsi_mask_irq(uint32_t irq); +void ioapic_gsi_unmask_irq(uint32_t irq); + +void ioapic_get_rte_entry(void *ioapic_base, uint32_t pin, union ioapic_rte *rte); + +void *gsi_to_ioapic_base(uint32_t gsi); +uint32_t get_max_nr_gsi(void); +uint8_t get_gsi_to_ioapic_index(uint32_t gsi); +uint32_t get_pic_pin_from_ioapic_pin(uint32_t pin_index); +bool is_gsi_valid(uint32_t gsi); + +#endif /* ARCH_X86_IOAPIC_H */ diff --git a/src/components/implementation/simple_vmm/vmm/irq.h b/src/components/implementation/simple_vmm/vmm/irq.h new file mode 100644 index 0000000000..06c21c902a --- /dev/null +++ b/src/components/implementation/simple_vmm/vmm/irq.h @@ -0,0 +1,136 @@ +/* + * Copyright (C) 2018-2022 Intel Corporation. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef ARCH_X86_IRQ_H +#define ARCH_X86_IRQ_H + +#include + +/** + * @file arch/x86/asm/irq.h + * + * @brief public APIs for x86 IRQ handling + */ + +#define DBG_LEVEL_PTIRQ 6U +#define DBG_LEVEL_IRQ 6U + +#define NR_MAX_VECTOR 0xFFU +#define VECTOR_INVALID (NR_MAX_VECTOR + 1U) + +/* # of NR_STATIC_MAPPINGS_1 entries for timer, vcpu notify, and PMI */ +#define NR_STATIC_MAPPINGS_1 3U + +/* + * The static IRQ/Vector mapping table in irq.c consists of the following entries: + * # of NR_STATIC_MAPPINGS_1 entries for timer, vcpu notify, and PMI + * + * # of CONFIG_MAX_VM_NUM entries for posted interrupt notification, platform + * specific but known at build time: + * Allocate unique Activation Notification Vectors (ANV) for each vCPU that belongs + * to the same pCPU, the ANVs need only be unique within each pCPU, not across all + * vCPUs. The max numbers of vCPUs may be running on top of a pCPU is CONFIG_MAX_VM_NUM, + * since ACRN does not support 2 vCPUs of same VM running on top of same pCPU. + * This reduces # of pre-allocated ANVs for posted interrupts to CONFIG_MAX_VM_NUM, + * and enables ACRN to avoid switching between active and wake-up vector values + * in the posted interrupt descriptor on vCPU scheduling state changes. + */ +#define NR_STATIC_MAPPINGS (NR_STATIC_MAPPINGS_1 + CONFIG_MAX_VM_NUM) + +#define HYPERVISOR_CALLBACK_HSM_VECTOR 0xF3U + +/* vectors range for dynamic allocation, usually for devices */ +#define VECTOR_DYNAMIC_START 0x20U +#define VECTOR_DYNAMIC_END 0xDFU + +/* vectors range for fixed vectors, usually for HV service */ +#define VECTOR_FIXED_START 0xE0U +#define VECTOR_FIXED_END 0xFFU + +#define TIMER_VECTOR (VECTOR_FIXED_START) +#define NOTIFY_VCPU_VECTOR (VECTOR_FIXED_START + 1U) +#define PMI_VECTOR (VECTOR_FIXED_START + 2U) +/* + * Starting vector for posted interrupts + * # of CONFIG_MAX_VM_NUM (POSTED_INTR_VECTOR ~ (POSTED_INTR_VECTOR + CONFIG_MAX_VM_NUM - 1U)) + * consecutive vectors reserved for posted interrupts + */ +#define POSTED_INTR_VECTOR (VECTOR_FIXED_START + NR_STATIC_MAPPINGS_1) + +#define TIMER_IRQ (NR_IRQS - 1U) +#define NOTIFY_VCPU_IRQ (NR_IRQS - 2U) +#define PMI_IRQ (NR_IRQS - 3U) +/* + * Starting IRQ for posted interrupts + * # of CONFIG_MAX_VM_NUM (POSTED_INTR_IRQ ~ (POSTED_INTR_IRQ + CONFIG_MAX_VM_NUM - 1U)) + * consecutive IRQs reserved for posted interrupts + */ +#define POSTED_INTR_IRQ (NR_IRQS - NR_STATIC_MAPPINGS_1 - CONFIG_MAX_VM_NUM) + +/* the maximum number of msi entry is 2048 according to PCI + * local bus specification + */ +#define MAX_MSI_ENTRY 0x800U + +#define INVALID_INTERRUPT_PIN 0xffffffffU + +/* + * x86 irq data + */ +struct x86_irq_data { + uint32_t vector; /**< assigned vector */ +#ifdef PROFILING_ON + uint64_t ctx_rip; + uint64_t ctx_rflags; + uint64_t ctx_cs; +#endif +}; + +struct intr_excp_ctx; + +/** + * @brief Allocate a vectror and bind it to irq + * + * For legacy irq (num < 16) and statically mapped ones, do nothing + * if mapping is correct. + * + * @param[in] irq The irq num to bind + * + * @return valid vector num on susccess, VECTOR_INVALID on failure + */ +uint32_t alloc_irq_vector(uint32_t irq); + +/** + * @brief Get vector number of an interrupt from irq number + * + * @param[in] irq The irq_num to convert + * + * @return vector number + */ +uint32_t irq_to_vector(uint32_t irq); + +/** + * @brief Dispatch interrupt + * + * To dispatch an interrupt, an action callback will be called if registered. + * + * @param ctx Pointer to interrupt exception context + */ +void dispatch_interrupt(const struct intr_excp_ctx *ctx); + +/* Arch specific routines called from generic IRQ handling */ + +struct irq_desc; + +void init_irq_descs_arch(struct irq_desc *descs); +void setup_irqs_arch(void); +void init_interrupt_arch(uint16_t pcpu_id); +void free_irq_arch(uint32_t irq); +bool request_irq_arch(uint32_t irq); +void pre_irq_arch(const struct irq_desc *desc); +void post_irq_arch(const struct irq_desc *desc); + +#endif /* ARCH_X86_IRQ_H */ diff --git a/src/components/implementation/simple_vmm/vmm/netio.c b/src/components/implementation/simple_vmm/vmm/netio.c new file mode 100644 index 0000000000..89a274cf1e --- /dev/null +++ b/src/components/implementation/simple_vmm/vmm/netio.c @@ -0,0 +1,42 @@ +#include +#include +#include +#include + + +shm_bm_objid_t +netio_get_a_packet(u16_t *pkt_len) +{ + struct netshmem_pkt_buf *tx_obj; + shm_bm_t tx_shmemd = 0; + shm_bm_objid_t tx_pktid; + + tx_shmemd = netshmem_get_shm(); + tx_obj = shm_bm_alloc_net_pkt_buf(tx_shmemd, &tx_pktid); + assert(tx_obj); + + virtio_net_send_one_pkt(tx_obj->data, pkt_len); + + return tx_pktid; +} + +int +netio_send_packet(shm_bm_objid_t pktid, u16_t pkt_len) +{ + struct netshmem_pkt_buf *rx_obj; + shm_bm_t rx_shmemd = 0; + + rx_shmemd = netshmem_get_shm(); + + rx_obj = shm_bm_transfer_net_pkt_buf(rx_shmemd, pktid); + virtio_net_rcv_one_pkt(rx_obj->data, pkt_len); + shm_bm_free_net_pkt_buf(rx_obj); + + return 0; +} + +void +netio_shmem_map(cbuf_t shm_id) +{ + netshmem_map_shmem(shm_id); +} diff --git a/src/components/implementation/simple_vmm/vmm/simple_vmm.c b/src/components/implementation/simple_vmm/vmm/simple_vmm.c index cd39905b4f..716d7a0c80 100644 --- a/src/components/implementation/simple_vmm/vmm/simple_vmm.c +++ b/src/components/implementation/simple_vmm/vmm/simple_vmm.c @@ -7,31 +7,62 @@ #include #include #include -// #include -// #include #include #include #include #include +#include +#include #include +#include INCBIN(vmlinux, "guest/vmlinux.img") INCBIN(bios, "guest/guest.img") - /* Currently only have one VM component globally managed by this VMM */ static struct vmrt_vm_comp *g_vm; #define VM_MAX_COMPS (2) +#define GUEST_MEM_SZ (64*1024*1024) SS_STATIC_SLAB(vm_comp, struct vmrt_vm_comp, VM_MAX_COMPS); SS_STATIC_SLAB(vm_lapic, struct acrn_vlapic, VM_MAX_COMPS * VMRT_VM_MAX_VCPU); +SS_STATIC_SLAB(vcpu_inst_ctxt, struct instr_emul_ctxt, VM_MAX_COMPS * VMRT_VM_MAX_VCPU); +SS_STATIC_SLAB(vm_io_apic, struct acrn_vioapics, VM_MAX_COMPS); +SS_STATIC_SLAB(vcpu_mmio_req, struct acrn_mmio_request, VM_MAX_COMPS * VMRT_VM_MAX_VCPU); + +void +mmio_init(struct vmrt_vm_vcpu *vcpu) +{ + vcpu->mmio_request = ss_vcpu_mmio_req_alloc(); + assert(vcpu->mmio_request); + + ss_vcpu_mmio_req_activate(vcpu->mmio_request); +} + +void +ioapic_init(struct vmrt_vm_comp *vm) +{ + vm->ioapic = ss_vm_io_apic_alloc(); + assert(vm->ioapic); + + vioapic_init(vm); + ss_vm_io_apic_activate(vm->ioapic); +} void -init_lapic(struct vmrt_vm_vcpu *vcpu) +iinst_ctxt_init(struct vmrt_vm_vcpu *vcpu) +{ + vcpu->inst_ctxt = ss_vcpu_inst_ctxt_alloc(); + assert(vcpu->inst_ctxt); + + ss_vcpu_inst_ctxt_activate(vcpu->inst_ctxt); +} + +void +lapic_init(struct vmrt_vm_vcpu *vcpu) { - struct lapic_regs *lapic; struct acrn_vlapic *vlapic = ss_vm_lapic_alloc(); assert(vlapic); @@ -42,19 +73,8 @@ init_lapic(struct vmrt_vm_vcpu *vcpu) vlapic->apic_page = vcpu->lapic_page; vlapic->vcpu = vcpu; - lapic = vlapic->apic_page; - /* Status: enable APIC and vector be 0xFF */ - lapic->svr.v = 0x1FF; - lapic->version.v = 0x50015; - lapic->id.v = 0x3000000; - - lapic->dfr.v = 0xFFFFFFFFU; - lapic->icr_timer.v = 0U; - lapic->dcr_timer.v = 0U; - - vlapic->svr_last = lapic->svr.v; - vlapic->isrv = 0U; + vlapic_reset(vlapic); ss_vm_lapic_activate(vlapic); return; @@ -63,8 +83,8 @@ init_lapic(struct vmrt_vm_vcpu *vcpu) struct vmrt_vm_comp * vm_comp_create(void) { - u64_t guest_mem_sz = 64*1024*1024; - u64_t num_vpu = 1; + u64_t guest_mem_sz = GUEST_MEM_SZ; + u64_t num_vcpu = NUM_CPU; void *start; void *end; cbuf_t shm_id; @@ -74,14 +94,14 @@ vm_comp_create(void) struct vmrt_vm_comp *vm = ss_vm_comp_alloc(); assert(vm); - vmrt_vm_create(vm, "vmlinux-5.15", num_vpu, guest_mem_sz); + vmrt_vm_create(vm, "vmlinux-5.15", num_vcpu, guest_mem_sz); /* Allocate memory for the VM */ shm_id = contigmem_shared_alloc_aligned(guest_mem_sz / PAGE_SIZE_4K, PAGE_SIZE_4K, (vaddr_t *)&mem); /* Make the memory accessible to VM */ memmgr_shared_page_map_aligned_in_vm(shm_id, PAGE_SIZE_4K, (vaddr_t *)&vm_mem, vm->comp_id); vmrt_vm_mem_init(vm, mem); - printc("created VM with %u cpus, memory size: %luMB, at host vaddr: %p\n", vm->num_vpu, vm->guest_mem_sz/1024/1024, vm->guest_addr); + printc("created VM with %u cpus, memory size: %luMB, at host vaddr: %p\n", vm->num_vcpu, vm->guest_mem_sz/1024/1024, vm->guest_addr); ss_vm_comp_activate(vm); @@ -100,6 +120,8 @@ vm_comp_create(void) #define GUEST_IMAGE_ADDR 0x100000 vmrt_vm_data_copy_to(vm, start, sz, GUEST_IMAGE_ADDR); + ioapic_init(vm); + printc("Guest(%s) image has been loaded into the VM component\n", vm->name); return vm; @@ -115,11 +137,12 @@ void cos_parallel_init(coreid_t cid, int init_core, int ncores) { struct vmrt_vm_vcpu *vcpu; - vmrt_vm_vcpu_init(g_vm, cid); vcpu = vmrt_get_vcpu(g_vm, cid); - init_lapic(vcpu); + lapic_init(vcpu); + iinst_ctxt_init(vcpu); + mmio_init(vcpu); return; } diff --git a/src/components/implementation/simple_vmm/vmm/vio.c b/src/components/implementation/simple_vmm/vmm/vio.c index 4982a00fa4..b63253b7b1 100644 --- a/src/components/implementation/simple_vmm/vmm/vio.c +++ b/src/components/implementation/simple_vmm/vmm/vio.c @@ -79,6 +79,8 @@ io_handler(struct vmrt_vm_vcpu *vcpu) case PIC_MASTER_DATA_PORT: case PIC_SLAVE_CMD_PORT: case PIC_SLAVE_DATA_PORT: + case PIC_ELCR1: + case PIC_ELCR2: vpic_handler(port_id, access_dir, access_sz, vcpu); goto done; case PS2_CONTROL_PORT_A: diff --git a/src/components/implementation/simple_vmm/vmm/vioapic.c b/src/components/implementation/simple_vmm/vmm/vioapic.c new file mode 100644 index 0000000000..1dfcdbdc43 --- /dev/null +++ b/src/components/implementation/simple_vmm/vmm/vioapic.c @@ -0,0 +1,564 @@ +/*- + * Copyright (c) 2013 Tycho Nightingale + * Copyright (c) 2013 Neel Natu + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#define pr_prefix "vioapic: " + +#include +#include +#include +#include +#include +#include +#include +#include + + +#define RTBL_RO_BITS ((uint32_t)0x00004000U | (uint32_t)0x00001000U) /*Remote IRR and Delivery Status bits*/ + +#define DBG_LEVEL_VIOAPIC 6U +#define ACRN_IOAPIC_VERSION 0x11U + +#define MASK_ALL_INTERRUPTS 0x0001000000010000UL + +static inline struct acrn_vioapics *vm_ioapics(const struct vmrt_vm_comp *vm) +{ + return (struct acrn_vioapics *)(vm->ioapic); +} + +/** + * @pre pin < vioapic->chipinfo.nr_pins + */ +static void +vioapic_generate_intr(struct acrn_single_vioapic *vioapic, uint32_t pin) +{ + uint32_t vector, dest, delmode; + union ioapic_rte rte; + bool level, phys; + + rte = vioapic->rtbl[pin]; + + if (rte.bits.intr_mask == IOAPIC_RTE_MASK_SET) { + printc("ioapic pin%hhu: masked\n", pin); + } else { + phys = (rte.bits.dest_mode == IOAPIC_RTE_DESTMODE_PHY); + delmode = rte.bits.delivery_mode; + level = (rte.bits.trigger_mode == IOAPIC_RTE_TRGRMODE_LEVEL); + + /* For level trigger irq, avoid send intr if + * previous one hasn't received EOI + */ + if (!level || (vioapic->rtbl[pin].bits.remote_irr == 0UL)) { + if (level) { + vioapic->rtbl[pin].bits.remote_irr = IOAPIC_RTE_REM_IRR; + } + vector = rte.bits.vector; + dest = rte.bits.dest_field; + vlapic_receive_intr(vioapic->vm, level, dest, phys, delmode, vector, false); + } + } +} + +/** + * @pre pin < vioapic->chipinfo.nr_pins + */ +static void +vioapic_set_pinstate(struct acrn_single_vioapic *vioapic, uint32_t pin, uint32_t level) +{ + uint32_t old_lvl; + union ioapic_rte rte; + + if (pin < vioapic->chipinfo.nr_pins) { + rte = vioapic->rtbl[pin]; + old_lvl = (uint32_t)bitmap_test((uint16_t)(pin & 0x3FU), &vioapic->pin_state[pin >> 6U]); + if (level == 0U) { + /* clear pin_state and deliver interrupt according to polarity */ + bitmap_clear_nolock((uint16_t)(pin & 0x3FU), &vioapic->pin_state[pin >> 6U]); + if ((rte.bits.intr_polarity == IOAPIC_RTE_INTPOL_ALO) + && (old_lvl != level)) { + vioapic_generate_intr(vioapic, pin); + } + } else { + /* set pin_state and deliver intrrupt according to polarity */ + bitmap_set_nolock((uint16_t)(pin & 0x3FU), &vioapic->pin_state[pin >> 6U]); + if ((rte.bits.intr_polarity == IOAPIC_RTE_INTPOL_AHI) + && (old_lvl != level)) { + vioapic_generate_intr(vioapic, pin); + } + } + } +} + + +struct acrn_single_vioapic * +vgsi_to_vioapic_and_vpin(const struct vmrt_vm_comp *vm, uint32_t vgsi, uint32_t *vpin) +{ + struct acrn_single_vioapic *vioapic; + uint8_t vioapic_index = 0U; + + if (vpin != NULL) { + *vpin = vgsi; + } + + vioapic = (struct acrn_single_vioapic *)&(vm_ioapics(vm)->vioapic_array[vioapic_index]); + + return vioapic; +} + +/** + * @brief Set vIOAPIC IRQ line status. + * + * Similar with vioapic_set_irqline_lock(),but would not make sure + * operation be done with ioapic lock. + * + * @param[in] vm Pointer to target VM + * @param[in] vgsi Target GSI number + * @param[in] operation Action options: GSI_SET_HIGH/GSI_SET_LOW/ + * GSI_RAISING_PULSE/GSI_FALLING_PULSE + * + * @pre vgsi < get_vm_gsicount(vm) + * @pre vm != NULL + * @return None + */ +void +vioapic_set_irqline_nolock(const struct vmrt_vm_comp *vm, uint32_t vgsi, uint32_t operation) +{ + struct acrn_single_vioapic *vioapic; + uint32_t pin; + + vioapic = vgsi_to_vioapic_and_vpin(vm, vgsi, &pin); + + switch (operation) { + case GSI_SET_HIGH: + vioapic_set_pinstate(vioapic, pin, 1U); + break; + case GSI_SET_LOW: + vioapic_set_pinstate(vioapic, pin, 0U); + break; + case GSI_RAISING_PULSE: + vioapic_set_pinstate(vioapic, pin, 1U); + vioapic_set_pinstate(vioapic, pin, 0U); + break; + case GSI_FALLING_PULSE: + vioapic_set_pinstate(vioapic, pin, 0U); + vioapic_set_pinstate(vioapic, pin, 1U); + break; + default: + /* + * The function caller could guarantee the pre condition. + */ + break; + } +} + +/** + * @brief Set vIOAPIC IRQ line status. + * + * @param[in] vm Pointer to target VM + * @param[in] vgsi Target GSI number + * @param[in] operation Action options: GSI_SET_HIGH/GSI_SET_LOW/ + * GSI_RAISING_PULSE/GSI_FALLING_PULSE + * + * @pre vgsi < get_vm_gsicount(vm) + * @pre vm != NULL + * + * @return None + */ +void +vioapic_set_irqline_lock(const struct vmrt_vm_comp *vm, uint32_t vgsi, uint32_t operation) +{ + uint64_t rflags; + + vioapic_set_irqline_nolock(vm, vgsi, operation); +} + +static uint32_t +vioapic_indirect_read(struct acrn_single_vioapic *vioapic, uint32_t addr) +{ + uint32_t regnum, ret = 0U; + uint32_t pin, pincount = vioapic->chipinfo.nr_pins; + + regnum = addr & 0xffU; + switch (regnum) { + case IOAPIC_ID: + ret = (uint32_t)vioapic->chipinfo.id << IOAPIC_ID_SHIFT; + break; + case IOAPIC_VER: + ret = ((pincount - 1U) << MAX_RTE_SHIFT) | ACRN_IOAPIC_VERSION; + break; + case IOAPIC_ARB: + ret = (uint32_t)vioapic->chipinfo.id << IOAPIC_ID_SHIFT; + break; + default: + /* + * In this switch statement, regnum shall either be IOAPIC_ID or + * IOAPIC_VER or IOAPIC_ARB. + * All the other cases will be handled properly later after this + * switch statement. + */ + break; + } + + /* redirection table entries */ + if ((regnum >= IOAPIC_REDTBL) && + (regnum < (IOAPIC_REDTBL + (pincount * 2U)))) { + uint32_t addr_offset = regnum - IOAPIC_REDTBL; + uint32_t rte_offset = addr_offset >> 1U; + pin = rte_offset; + if ((addr_offset & 0x1U) != 0U) { + ret = vioapic->rtbl[pin].u.hi_32; + } else { + ret = vioapic->rtbl[pin].u.lo_32; + } + } + + return ret; +} + +static inline bool vioapic_need_intr(const struct acrn_single_vioapic *vioapic, uint16_t pin) +{ + uint32_t lvl; + union ioapic_rte rte; + bool ret = false; + + if ((uint32_t)pin < vioapic->chipinfo.nr_pins) { + rte = vioapic->rtbl[pin]; + lvl = (uint32_t)bitmap_test(pin & 0x3FU, &vioapic->pin_state[pin >> 6U]); + ret = !!(((rte.bits.intr_polarity == IOAPIC_RTE_INTPOL_ALO) && (lvl == 0U)) || + ((rte.bits.intr_polarity == IOAPIC_RTE_INTPOL_AHI) && (lvl != 0U))); + } + + return ret; +} + +/* + * Due to the race between vcpus and vioapic->lock could be accessed from softirq, ensure to do + * spinlock_irqsave_obtain(&(vioapic->lock), &rflags) & spinlock_irqrestore_release(&(vioapic->lock), rflags) + * by caller. + */ +static void vioapic_indirect_write(struct acrn_single_vioapic *vioapic, uint32_t addr, uint32_t data) +{ + union ioapic_rte last, new, changed; + uint32_t regnum; + uint32_t pin, pincount = vioapic->chipinfo.nr_pins; + + regnum = addr & 0xffUL; + switch (regnum) { + case IOAPIC_ID: + vioapic->chipinfo.id = (uint8_t)((data & IOAPIC_ID_MASK) >> IOAPIC_ID_SHIFT); + break; + case IOAPIC_VER: + case IOAPIC_ARB: + /* readonly */ + break; + default: + /* + * In this switch statement, regnum shall either be IOAPIC_ID or + * IOAPIC_VER or IOAPIC_ARB. + * All the other cases will be handled properly later after this + * switch statement. + */ + break; + } + + /* redirection table entries */ + if ((regnum >= IOAPIC_REDTBL) && (regnum < (IOAPIC_REDTBL + (pincount * 2U)))) { + bool wire_mode_valid = true; + uint32_t addr_offset = regnum - IOAPIC_REDTBL; + uint32_t rte_offset = addr_offset >> 1U; + pin = rte_offset; + + last = vioapic->rtbl[pin]; + new = last; + if ((addr_offset & 1U) != 0U) { + new.u.hi_32 = data; + } else { + new.u.lo_32 &= RTBL_RO_BITS; + new.u.lo_32 |= (data & ~RTBL_RO_BITS); + } + + /* In some special scenarios, the LAPIC somehow hasn't send + * EOI to IOAPIC which cause the Remote IRR bit can't be clear. + * To clear it, some OSes will use EOI Register to clear it for + * 0x20 version IOAPIC, otherwise use switch Trigger Mode to + * Edge Sensitive to clear it. + */ + if (new.bits.trigger_mode == IOAPIC_RTE_TRGRMODE_EDGE) { + new.bits.remote_irr = 0U; + } + + changed.full = last.full ^ new.full; + /* pin0 from vpic mask/unmask */ + if ((pin == 0U) && (changed.bits.intr_mask != 0UL)) { + /* mask -> umask */ + if (last.bits.intr_mask == IOAPIC_RTE_MASK_SET) { + if ((vioapic->vm->wire_mode == VPIC_WIRE_NULL) || + (vioapic->vm->wire_mode == VPIC_WIRE_INTR)) { + vioapic->vm->wire_mode = VPIC_WIRE_IOAPIC; + printc("vpic wire mode -> IOAPIC\n"); + } else { + printc("WARNING: invalid vpic wire mode change\n"); + wire_mode_valid = false; + } + /* unmask -> mask */ + } else { + if (vioapic->vm->wire_mode == VPIC_WIRE_IOAPIC) { + vioapic->vm->wire_mode = VPIC_WIRE_INTR; + printc("vpic wire mode -> INTR\n"); + } + } + } + + if (wire_mode_valid) { + vioapic->rtbl[pin] = new; + + /* remap for ptdev */ + if ((new.bits.intr_mask == IOAPIC_RTE_MASK_CLR) || (last.bits.intr_mask == IOAPIC_RTE_MASK_CLR)) { + /* TODO: set pin remap*/ + } + + /* + * Generate an interrupt if the following conditions are met: + * - pin is not masked + * - previous interrupt has been EOIed + * - pin level is asserted + */ + if ((vioapic->rtbl[pin].bits.intr_mask == IOAPIC_RTE_MASK_CLR) && + (vioapic->rtbl[pin].bits.remote_irr == 0UL) && + vioapic_need_intr(vioapic, (uint16_t)pin)) { + vioapic_generate_intr(vioapic, pin); + } + } + } +} + +static void +vioapic_mmio_rw(struct acrn_single_vioapic *vioapic, uint64_t gpa, + uint32_t *data, bool do_read) +{ + uint32_t offset; + uint64_t rflags; + + offset = (uint32_t)(gpa - vioapic->chipinfo.addr); + + /* The IOAPIC specification allows 32-bit wide accesses to the + * IOAPIC_REGSEL (offset 0) and IOAPIC_WINDOW (offset 16) registers. + */ + switch (offset) { + case IOAPIC_REGSEL: + if (do_read) { + *data = vioapic->ioregsel; + } else { + vioapic->ioregsel = *data & 0xFFU; + } + break; + case IOAPIC_WINDOW: + if (do_read) { + *data = vioapic_indirect_read(vioapic, + vioapic->ioregsel); + } else { + vioapic_indirect_write(vioapic, + vioapic->ioregsel, *data); + } + break; + default: + assert(0); + if (do_read) { + *data = 0xFFFFFFFFU; + } + break; + } +} + +/* + * @pre vm != NULL + */ +static void +vioapic_process_eoi(struct acrn_single_vioapic *vioapic, uint32_t vector) +{ + uint32_t pin, pincount = vioapic->chipinfo.nr_pins; + union ioapic_rte rte; + uint64_t rflags; + + if ((vector < VECTOR_DYNAMIC_START) || (vector > NR_MAX_VECTOR)) { + printc("vioapic_process_eoi: invalid vector %u", vector); + } + + printc("ioapic processing eoi for vector %u\n", vector); + + /* notify device to ack if assigned pin */ + for (pin = 0U; pin < pincount; pin++) { + rte = vioapic->rtbl[pin]; + if ((rte.bits.vector != vector) || + (rte.bits.remote_irr == 0U)) { + continue; + } + } + + /* + * XXX keep track of the pins associated with this vector instead + * of iterating on every single pin each time. + */ + for (pin = 0U; pin < pincount; pin++) { + rte = vioapic->rtbl[pin]; + if ((rte.bits.vector != vector) || + (rte.bits.remote_irr == 0U)) { + continue; + } + + vioapic->rtbl[pin].bits.remote_irr = 0U; + if (vioapic_need_intr(vioapic, (uint16_t)pin)) { + printc("ioapic pin%hhu: asserted at eoi\n", pin); + vioapic_generate_intr(vioapic, pin); + } + } +} + +void vioapic_broadcast_eoi(const struct vmrt_vm_comp *vm, uint32_t vector) +{ + struct acrn_single_vioapic *vioapic; + uint8_t vioapic_index; + + /* + * For platforms with multiple IO-APICs, EOI message from LAPIC is + * broadcast to all IO-APICs. Emulating the same behavior here. + */ + + for (vioapic_index = 0U; vioapic_index < vm_ioapics(vm)->ioapic_num; vioapic_index++) { + vioapic = &(vm_ioapics(vm)->vioapic_array[vioapic_index]); + vioapic_process_eoi(vioapic, vector); + } +} + +static void reset_one_vioapic(struct acrn_single_vioapic *vioapic) +{ + uint32_t pin, pincount; + + /* Initialize all redirection entries to mask all interrupts */ + pincount = vioapic->chipinfo.nr_pins; + for (pin = 0U; pin < pincount; pin++) { + vioapic->rtbl[pin].full = MASK_ALL_INTERRUPTS; + } + vioapic->chipinfo.id = 0U; + vioapic->ioregsel = 0U; +} + +void reset_vioapics(const struct vmrt_vm_comp *vm) +{ + struct acrn_vioapics *vioapics = vm_ioapics(vm); + uint8_t vioapic_index; + + for (vioapic_index = 0U; vioapic_index < vioapics->ioapic_num; vioapic_index++) { + reset_one_vioapic(&vioapics->vioapic_array[vioapic_index]); + } +} + +void +vioapic_init(struct vmrt_vm_comp *vm) +{ + static struct ioapic_info virt_ioapic_info = { + .nr_pins = VIOAPIC_RTE_NUM, + .addr = VIOAPIC_BASE + }; + + struct ioapic_info *vioapic_info; + uint8_t vioapic_index; + struct acrn_single_vioapic *vioapic = NULL; + struct acrn_vioapics *vioapics = vm_ioapics(vm); + + /* only set one io apic */ + vioapics->ioapic_num = 1U; + vioapic_info = &virt_ioapic_info; + + for (vioapic_index = 0U; vioapic_index < vioapics->ioapic_num; vioapic_index++) { + vioapic = &vioapics->vioapic_array[vioapic_index]; + vioapic->chipinfo = vioapic_info[vioapic_index]; + + vioapic->vm = vm; + reset_one_vioapic(vioapic); + } + + /* + * Maximum number of GSI is computed as GSI base of the IOAPIC i.e. enumerated last in ACPI MADT + * plus the number of interrupt pins of that IOAPIC. + */ + if (vioapic != NULL) { + vioapics->nr_gsi = vioapic->chipinfo.gsi_base + vioapic->chipinfo.nr_pins; + } +} + +uint32_t +get_vm_gsicount(const struct vmrt_vm_comp *vm) +{ + struct acrn_vioapics *vioapics = vm_ioapics(vm); + return vioapics->nr_gsi; +} + +/* + * @pre handler_private_data != NULL + */ +int32_t vioapic_mmio_access_handler(struct vmrt_vm_vcpu *vcpu) +{ + struct acrn_mmio_request *mmio = vcpu->mmio_request; + struct acrn_single_vioapic *vioapic = &vm_ioapics(vcpu->vm)->vioapic_array[0]; + uint64_t gpa = mmio->address; + int32_t ret = 0; + + /* Note all RW to IOAPIC are 32-Bit in size */ + if (mmio->size == 4UL) { + uint32_t data = (uint32_t)mmio->value; + + if (mmio->direction == ACRN_IOREQ_DIR_READ) { + vioapic_mmio_rw(vioapic, gpa, &data, true); + mmio->value = (uint64_t)data; + } else if (mmio->direction == ACRN_IOREQ_DIR_WRITE) { + vioapic_mmio_rw(vioapic, gpa, &data, false); + } else { + ret = -EINVAL; + } + } else { + printc("All RW to IOAPIC must be 32-bits in size\n"); + assert(0); + } + + return ret; +} + +/** + * @pre vm->arch_vm.vioapics != NULL + * @pre vgsi < get_vm_gsicount(vm) + * @pre rte != NULL + */ +void vioapic_get_rte(const struct vmrt_vm_comp *vm, uint32_t vgsi, union ioapic_rte *rte) +{ + struct acrn_single_vioapic *vioapic; + uint32_t pin; + vioapic = vgsi_to_vioapic_and_vpin(vm, vgsi, &pin); + + *rte = vioapic->rtbl[pin]; +} diff --git a/src/components/implementation/simple_vmm/vmm/vioapic.h b/src/components/implementation/simple_vmm/vmm/vioapic.h new file mode 100644 index 0000000000..73794a091e --- /dev/null +++ b/src/components/implementation/simple_vmm/vmm/vioapic.h @@ -0,0 +1,128 @@ +/*- + * Copyright (c) 2013 Tycho Nightingale + * Copyright (c) 2013 Neel Natu + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef VIOAPIC_H +#define VIOAPIC_H + +/** + * @file vioapic.h + * + * @brief public APIs for virtual I/O APIC + */ + +#include +#include +#include + +#define VIOAPIC_BASE 0xFEC00000UL +#define VIOAPIC_SIZE 4096UL +#define MAX_IOAPIC_NUM 1 + +#define REDIR_ENTRIES_HW 120U /* Service VM align with native ioapic */ +#define STATE_BITMAP_SIZE INT_DIV_ROUNDUP(REDIR_ENTRIES_HW, 64U) + +#define IOAPIC_RTE_LOW_INTVEC ((uint32_t)IOAPIC_RTE_INTVEC) + +/* + * id field is used to emulate the IOAPIC_ID register of vIOAPIC + */ + +struct acrn_single_vioapic { + // spinlock_t lock; + struct vmrt_vm_comp *vm; + struct ioapic_info chipinfo; + uint32_t ioregsel; + union ioapic_rte rtbl[REDIR_ENTRIES_HW]; + /* pin_state status bitmap: 1 - high, 0 - low */ + uint64_t pin_state[STATE_BITMAP_SIZE]; +}; + +/* + * ioapic_num represents the number of IO-APICs emulated for the VM. + * nr_gsi represents the maximum number of GSI emulated for the VM. + */ +struct acrn_vioapics { + uint8_t ioapic_num; + uint32_t nr_gsi; + struct acrn_single_vioapic vioapic_array[MAX_IOAPIC_NUM]; +}; + +void dump_vioapic(struct vmrt_vm_comp *vm); +void vioapic_init(struct vmrt_vm_comp *vm); +void reset_vioapics(const struct vmrt_vm_comp *vm); + + +/** + * @brief virtual I/O APIC + * + * @addtogroup acrn_vioapic ACRN vIOAPIC + * @{ + */ + +/** + * @brief Set vIOAPIC IRQ line status. + * + * @param[in] vm Pointer to target VM + * @param[in] vgsi GSI for the virtual interrupt + * @param[in] operation Action options: GSI_SET_HIGH/GSI_SET_LOW/ + * GSI_RAISING_PULSE/GSI_FALLING_PULSE + * + * @pre irqline < vioapic_pincount(vm) + * + * @return None + */ +void vioapic_set_irqline_lock(const struct vmrt_vm_comp *vm, uint32_t vgsi, uint32_t operation); + +/** + * @brief Set vIOAPIC IRQ line status. + * + * Similar with vioapic_set_irqline_lock(),but would not make sure + * operation be done with ioapic lock. + * + * @param[in] vm Pointer to target VM + * @param[in] vgsi GSI for the virtual interrupt + * @param[in] operation Action options: GSI_SET_HIGH/GSI_SET_LOW/ + * GSI_RAISING_PULSE/GSI_FALLING_PULSE + * + * @pre irqline < vioapic_pincount(vm) + * @return None + */ +void vioapic_set_irqline_nolock(const struct vmrt_vm_comp *vm, uint32_t vgsi, uint32_t operation); + +uint32_t get_vm_gsicount(const struct vmrt_vm_comp *vm); +void vioapic_broadcast_eoi(const struct vmrt_vm_comp *vm, uint32_t vector); +void vioapic_get_rte(const struct vmrt_vm_comp *vm, uint32_t vgsi, union ioapic_rte *rte); +int32_t vioapic_mmio_access_handler(struct vmrt_vm_vcpu *vcpu); +struct acrn_single_vioapic *vgsi_to_vioapic_and_vpin(const struct vmrt_vm_comp *vm, uint32_t vgsi, uint32_t *vpin); + +/** + * @} + */ +/* End of acrn_vioapic */ +#endif /* VIOAPIC_H */ diff --git a/src/components/implementation/simple_vmm/vmm/vlapic.c b/src/components/implementation/simple_vmm/vmm/vlapic.c index 0d6bfe54ed..155eed10e3 100644 --- a/src/components/implementation/simple_vmm/vmm/vlapic.c +++ b/src/components/implementation/simple_vmm/vmm/vlapic.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include "vpic.h" @@ -86,13 +87,13 @@ static void vlapic_x2apic_self_ipi_handler(struct acrn_vlapic *vlapic); */ static void vlapic_set_error(struct acrn_vlapic *vlapic, uint32_t mask); -static void vlapic_timer_expired(void *data); +void vlapic_timer_expired(struct vmrt_vm_vcpu *vcpu); +static struct pi_desc *get_pi_desc(struct vmrt_vm_vcpu *vcpu); static inline bool vlapic_enabled(const struct acrn_vlapic *vlapic) { const struct lapic_regs *lapic = vlapic->apic_page; - assert(0); return (((vlapic->msr_apicbase & APICBASE_ENABLED) != 0UL) && ((lapic->svr.v & APIC_SVR_ENABLE) != 0U)); } @@ -155,9 +156,7 @@ vlapic_write_ldr(struct acrn_vlapic *vlapic) struct lapic_regs *lapic; lapic = vlapic->apic_page; - printc("ori vlapic LDR set to %x\n", lapic->ldr.v); lapic->ldr.v &= ~APIC_LDR_RESERVED; - printc("vlapic LDR set to(masked) %x\n", lapic->ldr.v); } static inline uint32_t @@ -200,7 +199,6 @@ static bool set_expiration(struct acrn_vlapic *vlapic) { struct vlapic_timer *vtimer; - // struct hv_timer *timer; uint32_t tmicr, divisor_shift; bool ret; @@ -235,7 +233,6 @@ static void vlapic_update_lvtt(struct acrn_vlapic *vlapic, /* TODO: reset timer */ vtimer->mode = timer_mode; } - printc("Guest updated lvt timer, val:%x, mode:%x\n", val, timer_mode); } static uint32_t vlapic_get_ccr(const struct acrn_vlapic *vlapic) @@ -269,7 +266,6 @@ static void vlapic_write_icrtmr(struct acrn_vlapic *vlapic) struct vlapic_timer *vtimer; if (!vlapic_lvtt_tsc_deadline(vlapic)) { - printc("vlapic is not tsc deadline, and setting a timer in ICR\n"); lapic = vlapic->apic_page; vtimer = &vlapic->vtimer; vtimer->tmicr = lapic->icr_timer.v; @@ -325,7 +321,6 @@ static void apicv_advanced_accept_intr(struct acrn_vlapic *vlapic, uint32_t vect vlapic_set_tmr(vlapic, vector, level); if (apicv_set_intr_ready(vlapic, vector)) { - struct vmrt_vm_vcpu *vcpu = vlapic2vcpu(vlapic); /* * Send interrupt to vCPU via posted interrupt way: * 1. If target vCPU is in root mode(isn't running), @@ -336,7 +331,8 @@ static void apicv_advanced_accept_intr(struct acrn_vlapic *vlapic, uint32_t vect * send PI notification to vCPU and hardware will * sync PIR to vIRR automatically. */ - assert(0); + + /* TODO: handle cross-core virtual interrupt notification */ } } @@ -353,8 +349,7 @@ static void vlapic_accept_intr(struct acrn_vlapic *vlapic, uint32_t vector, bool printc("vlapic is software disabled, ignoring interrupt %u", vector); assert(0); } else { - assert(0); - vlapic->ops->accept_intr(vlapic, vector, level); + apicv_advanced_accept_intr(vlapic, vector, level); } } @@ -514,7 +509,6 @@ vlapic_write_lvt(struct acrn_vlapic *vlapic, uint32_t offset) } else { printc("WARNING:invalid vpic wire mode change\n"); assert(0); - error = true; } /* unmask -> mask: only from the vlapic LINT0-ExtINT enabled */ } else if (((last & APIC_LVT_M) == 0U) && ((val & APIC_LVT_M) != 0U)) { @@ -602,14 +596,11 @@ vlapic_process_eoi(struct acrn_vlapic *vlapic) bitpos = (vector & 0x1fU); bitmap32_clear_nolock((uint16_t)bitpos, &isrptr[i].v); - printc("EOI vector %u", vector); vlapic_dump_isr(vlapic, "vlapic_process_eoi"); vlapic->isrv = vlapic_find_isrv(vlapic); vlapic_update_ppr(vlapic); } - - printc("Gratuitous EOI"); } static void @@ -663,11 +654,11 @@ static void vlapic_write_icrlo(struct acrn_vlapic *vlapic) if ((mode == APIC_DELMODE_FIXED) && (vec < 16U)) { vlapic_set_error(vlapic, APIC_ESR_SEND_ILLEGAL_VECTOR); printc("Ignoring invalid IPI %u", vec); + assert(0); } else if (((shorthand == APIC_DEST_SELF) || (shorthand == APIC_DEST_ALLISELF)) && ((mode == APIC_DELMODE_NMI) || (mode == APIC_DELMODE_INIT) || (mode == APIC_DELMODE_STARTUP))) { - printc("Invalid ICR value"); - assert(0); + printc("unsupported ICR command, ignore it\n"); } else { struct vmrt_vm_vcpu *vcpu = vlapic2vcpu(vlapic); @@ -935,92 +926,7 @@ static int32_t vlapic_read(struct acrn_vlapic *vlapic, uint32_t offset_arg, uint return ret; } -static int32_t vlapic_write(struct acrn_vlapic *vlapic, uint32_t offset, uint64_t data) -{ - struct lapic_regs *lapic = vlapic->apic_page; - uint32_t *regptr; - uint32_t data32 = (uint32_t)data; - int32_t ret = 0; - - printc("vlapic write offset %#x, data %#lx", offset, data); - - if (offset <= sizeof(*lapic)) { - switch (offset) { - case APIC_OFFSET_ID: - /* Force APIC ID as read only */ - break; - case APIC_OFFSET_EOI: - vlapic_process_eoi(vlapic); - break; - case APIC_OFFSET_LDR: - lapic->ldr.v = data32; - vlapic_write_ldr(vlapic); - break; - case APIC_OFFSET_DFR: - lapic->dfr.v = data32; - vlapic_write_dfr(vlapic); - break; - case APIC_OFFSET_SVR: - lapic->svr.v = data32; - vlapic_write_svr(vlapic); - break; - case APIC_OFFSET_ICR_LOW: - if (is_x2apic_enabled(vlapic)) { - lapic->icr_hi.v = (uint32_t)(data >> 32U); - } - lapic->icr_lo.v = data32; - vlapic_write_icrlo(vlapic); - break; - case APIC_OFFSET_ICR_HI: - lapic->icr_hi.v = data32; - break; - case APIC_OFFSET_CMCI_LVT: - case APIC_OFFSET_TIMER_LVT: - case APIC_OFFSET_THERM_LVT: - case APIC_OFFSET_PERF_LVT: - case APIC_OFFSET_LINT0_LVT: - case APIC_OFFSET_LINT1_LVT: - case APIC_OFFSET_ERROR_LVT: - regptr = vlapic_get_lvtptr(vlapic, offset); - *regptr = data32; - vlapic_write_lvt(vlapic, offset); - break; - case APIC_OFFSET_TIMER_ICR: - /* if TSCDEADLINE mode ignore icr_timer */ - if (vlapic_lvtt_tsc_deadline(vlapic)) { - break; - } - lapic->icr_timer.v = data32; - vlapic_write_icrtmr(vlapic); - break; - - case APIC_OFFSET_TIMER_DCR: - lapic->dcr_timer.v = data32; - vlapic_write_dcr(vlapic); - break; - case APIC_OFFSET_ESR: - vlapic_write_esr(vlapic); - break; - case APIC_OFFSET_SELF_IPI: - if (is_x2apic_enabled(vlapic)) { - lapic->self_ipi.v = data32; - vlapic_x2apic_self_ipi_handler(vlapic); - break; - } - /* falls through */ - - default: - ret = -EACCES; - /* Read only */ - break; - } - } else { - ret = -EACCES; - } - - return ret; -} /* * @pre vcpu != NULL @@ -1034,17 +940,14 @@ vlapic_set_intr(struct vmrt_vm_vcpu *vcpu, uint32_t vector, bool level) vlapic = vcpu_vlapic(vcpu); if (vector < 16U) { vlapic_set_error(vlapic, APIC_ESR_RECEIVE_ILLEGAL_VECTOR); - printc( - "vlapic ignoring interrupt to vector %u", vector); + assert(0); } else { vlapic_accept_intr(vlapic, vector, level); } } -/* interrupt context */ -static void vlapic_timer_expired(void *data) +void vlapic_timer_expired(struct vmrt_vm_vcpu *vcpu) { - struct vmrt_vm_vcpu *vcpu = (struct vmrt_vm_vcpu *)data; struct acrn_vlapic *vlapic; struct lapic_regs *lapic; @@ -1107,8 +1010,12 @@ apicv_set_intr_ready(struct acrn_vlapic *vlapic, uint32_t vector) struct pi_desc *pid; uint32_t idx; bool notify = false; - assert(0); + pid = get_pi_desc(vlapic2vcpu(vlapic)); + idx = vector >> 6U; + if (!bitmap_test_and_set_lock((uint16_t)(vector & 0x3fU), &pid->pir[idx])) { + notify = !bitmap_test_and_set_lock(POSTED_INTR_ON, &pid->control.value); + } return notify; } @@ -1141,7 +1048,7 @@ static void apicv_basic_inject_intr(struct acrn_vlapic *vlapic, */ static inline struct pi_desc *get_pi_desc(struct vmrt_vm_vcpu *vcpu) { - return NULL; + return (struct pi_desc *)&(vcpu->shared_region->pi_desc); } static void apicv_advanced_inject_intr(struct acrn_vlapic *vlapic, @@ -1149,27 +1056,16 @@ static void apicv_advanced_inject_intr(struct acrn_vlapic *vlapic, { struct vmrt_vm_vcpu *vcpu = vlapic2vcpu(vlapic); struct pi_desc *pid = get_pi_desc(vcpu); - /* - * From SDM Vol3 26.3.2.5: - * Once the virtual interrupt is recognized, it will be delivered - * in VMX non-root operation immediately after VM entry(including - * any specified event injection) completes. - * - * So the hardware can handle vmcs event injection and - * evaluation/delivery of apicv virtual interrupts in one time - * vm-entry. - * - * Here to sync the pending interrupts to irr and update rvi - * self-IPI with Posted Interrupt Notification Vector is sent. - */ + if (bitmap_test(POSTED_INTR_ON, &(pid->control.value))) { - assert(0); + vcpu->shared_region->inject_evt = 1; } } -void vlapic_inject_intr(struct acrn_vlapic *vlapic, bool guest_irq_enabled, bool injected) +void vlapic_inject_intr(struct vmrt_vm_vcpu *vcpu) { - vlapic->ops->inject_intr(vlapic, guest_irq_enabled, injected); + struct acrn_vlapic *vlapic = vcpu_vlapic(vcpu); + apicv_advanced_inject_intr(vlapic, 0, 0); } static bool apicv_basic_has_pending_delivery_intr(struct vmrt_vm_vcpu *vcpu) @@ -1333,6 +1229,234 @@ void vlapic_set_apicv_ops(void) } } +static uint16_t vm_apicid2vcpu_id(struct vmrt_vm_comp *vm, uint32_t lapicid) +{ + uint16_t i; + struct vmrt_vm_vcpu *vcpu = NULL; + uint16_t cpu_id = INVALID_CPU_ID; + + for (int i = 0; i < vm->num_vcpu; i++) { + vcpu = &vm->vcpus[i]; + if (vcpu_vlapic(vcpu)->vapic_id == lapicid) { + cpu_id = vcpu->cpuid; + break; + } + } + + if (cpu_id == INVALID_CPU_ID) { + printc("%s: bad lapicid %u", __func__, lapicid); + assert(0); + } + + return cpu_id; + +} + +static inline void set_dest_mask_phys(struct vmrt_vm_comp *vm, uint64_t *dmask, uint32_t dest) +{ + uint16_t vcpu_id; + + vcpu_id = vm_apicid2vcpu_id(vm, dest); + if (vcpu_id < vm->num_vcpu) { + bitmap_set_nolock(vcpu_id, dmask); + } +} + +/* + * This function tells if a vlapic belongs to the destination. + * If yes, return true, else reture false. + * + * @pre vlapic != NULL + */ +static inline bool is_dest_field_matched(const struct acrn_vlapic *vlapic, uint32_t dest) +{ + uint32_t logical_id, cluster_id, dest_logical_id, dest_cluster_id; + uint32_t ldr = vlapic->apic_page->ldr.v; + bool ret = false; + + if (is_x2apic_enabled(vlapic)) { + logical_id = ldr & 0xFFFFU; + cluster_id = (ldr >> 16U) & 0xFFFFU; + dest_logical_id = dest & 0xFFFFU; + dest_cluster_id = (dest >> 16U) & 0xFFFFU; + if ((cluster_id == dest_cluster_id) && ((logical_id & dest_logical_id) != 0U)) { + ret = true; + } + } else { + uint32_t dfr = vlapic->apic_page->dfr.v; + if ((dfr & APIC_DFR_MODEL_MASK) == APIC_DFR_MODEL_FLAT) { + /* + * In the "Flat Model" the MDA is interpreted as an 8-bit wide + * bitmask. This model is available in the xAPIC mode only. + */ + logical_id = ldr >> 24U; + dest_logical_id = dest & 0xffU; + if ((logical_id & dest_logical_id) != 0U) { + ret = true; + } + } else if ((dfr & APIC_DFR_MODEL_MASK) == APIC_DFR_MODEL_CLUSTER) { + /* + * In the "Cluster Model" the MDA is used to identify a + * specific cluster and a set of APICs in that cluster. + */ + logical_id = (ldr >> 24U) & 0xfU; + cluster_id = ldr >> 28U; + dest_logical_id = dest & 0xfU; + dest_cluster_id = (dest >> 4U) & 0xfU; + if ((cluster_id == dest_cluster_id) && ((logical_id & dest_logical_id) != 0U)) { + ret = true; + } + } else { + /* Guest has configured a bad logical model for this vcpu. */ + printc("vlapic has bad logical model %x", dfr); + assert(0); + } + } + + return ret; +} + +/* + * This function populates 'dmask' with the set of vcpus that match the + * addressing specified by the (dest, phys, lowprio) tuple. + */ +uint64_t +vlapic_calc_dest_noshort(struct vmrt_vm_comp *vm, bool is_broadcast, + uint32_t dest, bool phys, bool lowprio) +{ + uint64_t dmask = 0UL; + struct acrn_vlapic *vlapic, *lowprio_dest = NULL; + struct vmrt_vm_vcpu *vcpu; + uint16_t vcpu_id; + + if (is_broadcast) { + /* Broadcast in both logical and physical modes. */ + printc("Broadcast is not supported now\n"); + assert(0); + } else if (phys) { + /* Physical mode: "dest" is local APIC ID. */ + printc("vlapic phy dst mode to find cpu\n"); + set_dest_mask_phys(vm, &dmask, dest); + } else { + /* + * Logical mode: "dest" is message destination addr + * to be compared with the logical APIC ID in LDR. + */ + for (int i = 0; i < vm->num_vcpu; i++) { + vcpu = &vm->vcpus[i]; + vcpu_id = i; + vlapic = vcpu_vlapic(vcpu); + if (!is_dest_field_matched(vlapic, dest)) { + continue; + } + + if (lowprio) { + /* + * for lowprio delivery mode, the lowest-priority one + * among all "dest" matched processors accepts the intr. + */ + if (lowprio_dest == NULL) { + lowprio_dest = vlapic; + } else if (lowprio_dest->apic_page->ppr.v > vlapic->apic_page->ppr.v) { + lowprio_dest = vlapic; + } else { + /* No other state currently, do nothing */ + } + } else { + bitmap_set_nolock(vcpu_id, &dmask); + } + } + + if (lowprio && (lowprio_dest != NULL)) { + bitmap_set_nolock(vlapic2vcpu(lowprio_dest)->cpuid, &dmask); + } + } + + return dmask; +} + +void +vlapic_receive_intr(struct vmrt_vm_comp *vm, bool level, uint32_t dest, bool phys, + uint32_t delmode, uint32_t vec, bool rh) +{ + bool lowprio; + uint16_t vcpu_id; + uint64_t dmask; + struct vmrt_vm_vcpu *target_vcpu; + + if ((delmode != IOAPIC_RTE_DELMODE_FIXED) && + (delmode != IOAPIC_RTE_DELMODE_LOPRI) && + (delmode != IOAPIC_RTE_DELMODE_EXINT)) { + printc("vlapic intr invalid delmode %#x", delmode); + assert(0); + } else { + lowprio = (delmode == IOAPIC_RTE_DELMODE_LOPRI) || rh; + + /* + * We don't provide any virtual interrupt redirection hardware so + * all interrupts originating from the ioapic or MSI specify the + * 'dest' in the legacy xAPIC format. + */ + dmask = vlapic_calc_dest_noshort(vm, false, dest, phys, lowprio); + + for (vcpu_id = 0U; vcpu_id < vm->num_vcpu; vcpu_id++) { + struct acrn_vlapic *vlapic; + if ((dmask & (1UL << vcpu_id)) != 0UL) { + target_vcpu = vmrt_get_vcpu(vm, vcpu_id); + + /* only make request when vlapic enabled */ + vlapic = vcpu_vlapic(target_vcpu); + if (vlapic_enabled(vlapic)) { + if (delmode == IOAPIC_RTE_DELMODE_EXINT) { + assert(0); + } else { + vlapic_set_intr(target_vcpu, vec, level); + } + } else {assert(0);} + } + } + } +} + +void +vlapic_reset(struct acrn_vlapic *vlapic) +{ + struct lapic_regs *lapic; + + vlapic->msr_apicbase = DEFAULT_APIC_BASE; + + if (vlapic2vcpu(vlapic)->cpuid == BSP_CPU_ID) { + vlapic->msr_apicbase |= APICBASE_BSP; + } + vlapic->vapic_id = vlapic2vcpu(vlapic)->cpuid; + + /* Upon reset, vlapic is set to xAPIC mode. */ + vlapic->msr_apicbase |= APICBASE_XAPIC; + + lapic = vlapic->apic_page; + (void)memset((void *)lapic, 0U, sizeof(struct lapic_regs)); + + lapic->id.v = vlapic->vapic_id; + if (!is_x2apic_enabled(vlapic)) { + lapic->id.v <<= APIC_ID_SHIFT; + } + + lapic->version.v = VLAPIC_VERSION; + lapic->version.v |= (VLAPIC_MAXLVT_INDEX << MAXLVTSHIFT); + lapic->dfr.v = 0xffffffffU; + lapic->svr.v = APIC_SVR_VECTOR; + vlapic_mask_lvts(vlapic); + + lapic->icr_timer.v = 0U; + lapic->dcr_timer.v = 0U; + vlapic_write_dcr(vlapic); + + vlapic->svr_last = lapic->svr.v; + + vlapic->isrv = 0U; +} + + int32_t apic_write_vmexit_handler(struct vmrt_vm_vcpu *vcpu) { uint64_t qual; diff --git a/src/components/implementation/simple_vmm/vmm/vlapic.h b/src/components/implementation/simple_vmm/vmm/vlapic.h index 559af17a1c..d4e8645661 100644 --- a/src/components/implementation/simple_vmm/vmm/vlapic.h +++ b/src/components/implementation/simple_vmm/vmm/vlapic.h @@ -119,7 +119,7 @@ void vlapic_set_apicv_ops(void); * @{ */ -void vlapic_inject_intr(struct acrn_vlapic *vlapic, bool guest_irq_enabled, bool injected); +void vlapic_inject_intr(struct vmrt_vm_vcpu *vcpu); bool vlapic_has_pending_delivery_intr(struct vmrt_vm_vcpu *vcpu); bool vlapic_has_pending_intr(struct vmrt_vm_vcpu *vcpu); @@ -205,7 +205,7 @@ void vlapic_create(struct vmrt_vm_vcpu *vcpu, uint16_t pcpu_id); */ void vlapic_free(struct vmrt_vm_vcpu *vcpu); -void vlapic_reset(struct acrn_vlapic *vlapic, const struct acrn_apicv_ops *ops, enum reset_mode mode); +void vlapic_reset(struct acrn_vlapic *vlapic); void vlapic_restore(struct acrn_vlapic *vlapic, const struct lapic_regs *regs); uint64_t vlapic_apicv_get_apic_access_addr(void); uint64_t vlapic_apicv_get_apic_page_addr(struct acrn_vlapic *vlapic); diff --git a/src/components/implementation/simple_vmm/vmm/vmmio.c b/src/components/implementation/simple_vmm/vmm/vmmio.c new file mode 100644 index 0000000000..1efb26ee1b --- /dev/null +++ b/src/components/implementation/simple_vmm/vmm/vmmio.c @@ -0,0 +1,53 @@ +#include +#include +#include +#include + +void +ept_violation_handler(struct vmrt_vm_vcpu *vcpu) +{ + volatile struct vm_vcpu_shared_region *regs = vcpu->shared_region; + u64_t qualification = regs->qualification; + u64_t gpa; + struct acrn_mmio_request *mmio_req = vcpu->mmio_request; + + gpa = regs->gpa; + + /* Specify if read or write operation */ + if ((qualification & 0x2UL) != 0UL) { + /* Write operation */ + mmio_req->direction = ACRN_IOREQ_DIR_WRITE; + mmio_req->value = 0UL; + } else { + /* Read operation */ + mmio_req->direction = ACRN_IOREQ_DIR_READ; + } + + mmio_req->address = gpa; + + if (gpa >= IOAPIC_BASE_ADDR && gpa < IOAPIC_BASE_ADDR + PAGE_SIZE_4K) { + int ret = decode_instruction(vcpu); + + if (ret > 0) { + mmio_req->size = (uint64_t)ret; + } else { + VM_PANIC(vcpu); + } + + if (mmio_req->direction == ACRN_IOREQ_DIR_WRITE) { + if (emulate_instruction(vcpu) != 0) { + VM_PANIC(vcpu); + } + } + + vioapic_mmio_access_handler(vcpu); + + if (mmio_req->direction == ACRN_IOREQ_DIR_READ) { + /* Emulate instruction and update vcpu register set */ + (void)emulate_instruction(vcpu); + } + GOTO_NEXT_INST(regs); + } else { + VM_PANIC(vcpu); + } +} diff --git a/src/components/implementation/simple_vmm/vmm/vmsr.c b/src/components/implementation/simple_vmm/vmm/vmsr.c index e3c50d2fcb..1f45f13692 100644 --- a/src/components/implementation/simple_vmm/vmm/vmsr.c +++ b/src/components/implementation/simple_vmm/vmm/vmsr.c @@ -34,7 +34,6 @@ rdmsr_handler(struct vmrt_vm_vcpu *vcpu) { /* TODO: need to handle tsc adjustment in VM */ u32_t ax, dx; - printc("MSR_IA32_TSC_ADJUST:%llx, %llx\n", regs->ax, regs->dx); regs->ax = 0; regs->dx = 0; goto done; @@ -235,6 +234,11 @@ wrmsr_handler(struct vmrt_vm_vcpu *vcpu) /* This MSR has a value of 0 after reset, thus just keep it ad default, don't modify */ goto done; } + case MSR_IA32_APIC_BASE: + { + VM_PANIC(vcpu); + goto done; + } default: VM_PANIC(vcpu);; } diff --git a/src/components/interface/netio/Makefile b/src/components/interface/netio/Makefile new file mode 100644 index 0000000000..85d853ee45 --- /dev/null +++ b/src/components/interface/netio/Makefile @@ -0,0 +1,30 @@ +# Required variables used to drive the compilation process. It is OK +# for many of these to be empty. +# +# The library names associated with .a files output that are linked +# (via, for example, -lmemmgr) into dependents. This list should be +# "memmgr" for output files such as libmemmgr.a. +LIBRARY_OUTPUT = +# The .o files that are mandatorily linked into dependents. This is +# rarely used, and only when normal .a linking rules will avoid +# linking some necessary objects. This list is of names (for example, +# memmgr) which will generate memmgr.lib.o. Do NOT include the list of .o +# files here. Please note that using this list is *very rare* and +# should only be used when the .a support above is not appropriate. +OBJECT_OUTPUT = +# The path within this directory that holds the .h files for +# dependents to compile with (./ by default). Will be fed into the -I +# compiler arguments. It is unlikely you want to change this. +INCLUDE_PATHS = . +# The interfaces this component is dependent on for compilation (this +# is a list of directory names in interface/) +INTERFACE_DEPENDENCIES = +# The library dependencies this component is reliant on for +# compilation/linking (this is a list of directory names in lib/) +LIBRARY_DEPENDENCIES = stubs component shm_bm +# Note: Both the interface and library dependencies should be +# *minimal*. That is to say that removing a dependency should cause +# the build to fail. The build system does not validate this +# minimality; that's on you! + +include ../Makefile.subdir diff --git a/src/components/interface/netio/netio.h b/src/components/interface/netio/netio.h new file mode 100644 index 0000000000..c49214a011 --- /dev/null +++ b/src/components/interface/netio/netio.h @@ -0,0 +1,13 @@ +#ifndef NETIO_H +#define NETIO_H + +#include +#include +#include +#include + +shm_bm_objid_t netio_get_a_packet(u16_t *pkt_len); +int netio_send_packet(shm_bm_objid_t pktid, u16_t pkt_len); +void netio_shmem_map(cbuf_t shm_id); + +#endif diff --git a/src/components/interface/netio/stubs/Makefile b/src/components/interface/netio/stubs/Makefile new file mode 100644 index 0000000000..eaee12b7fb --- /dev/null +++ b/src/components/interface/netio/stubs/Makefile @@ -0,0 +1 @@ +include ../../Makefile.subsubdir diff --git a/src/components/interface/netio/stubs/c_stub.c b/src/components/interface/netio/stubs/c_stub.c new file mode 100644 index 0000000000..44107f563d --- /dev/null +++ b/src/components/interface/netio/stubs/c_stub.c @@ -0,0 +1,16 @@ +#include +#include +#include + + +COS_CLIENT_STUB(shm_bm_objid_t, netio_get_a_packet, u16_t *pkt_len) +{ + COS_CLIENT_INVCAP; + word_t r1, r2; + int ret; + + ret = cos_sinv_2rets(uc, 0, 0, 0, 0, &r1, &r2); + *pkt_len = (u16_t)r1; + + return ret; +} diff --git a/src/components/interface/netio/stubs/s_stub.c b/src/components/interface/netio/stubs/s_stub.c new file mode 100644 index 0000000000..30ea4609bb --- /dev/null +++ b/src/components/interface/netio/stubs/s_stub.c @@ -0,0 +1,7 @@ +#include +#include + +COS_SERVER_3RET_STUB(shm_bm_objid_t, netio_get_a_packet) +{ + return netio_get_a_packet((u16_t *)r1); +} diff --git a/src/components/interface/netio/stubs/stubs.S b/src/components/interface/netio/stubs/stubs.S new file mode 100644 index 0000000000..d40a9d9128 --- /dev/null +++ b/src/components/interface/netio/stubs/stubs.S @@ -0,0 +1,5 @@ +#include + +cos_asm_stub_indirect(netio_get_a_packet) +cos_asm_stub(netio_send_packet) +cos_asm_stub(netio_shmem_map) diff --git a/src/components/interface/netshmem/lib.c b/src/components/interface/netshmem/lib.c index fc31fc9c96..d67671834d 100644 --- a/src/components/interface/netshmem/lib.c +++ b/src/components/interface/netshmem/lib.c @@ -5,13 +5,18 @@ struct netshmem netshmems[NETSHMEM_REGION_SZ] = {0}; void -netshmem_create(void) +netshmem_create(thdid_t tid) { shm_bm_objid_t objid; struct netshmem_pkt_buf *obj; + thdid_t thd; void *mem; - thdid_t thd = cos_thdid(); + if (!tid) { + thd = cos_thdid(); + } else { + thd = tid; + } assert(thd < NETSHMEM_REGION_SZ); /* init rx shmem */ diff --git a/src/components/interface/netshmem/netshmem.h b/src/components/interface/netshmem/netshmem.h index 2df6ec37c4..f908d3dbb9 100644 --- a/src/components/interface/netshmem/netshmem.h +++ b/src/components/interface/netshmem/netshmem.h @@ -4,7 +4,7 @@ #include #include -#define PKT_BUF_NUM 64 +#define PKT_BUF_NUM 128 #define PKT_BUF_SIZE 2048 struct netshmem { @@ -44,7 +44,7 @@ struct netshmem_pkt_buf { SHM_BM_INTERFACE_CREATE(net_pkt_buf, sizeof (struct netshmem_pkt_buf), PKT_BUF_NUM); /* This will create a shmem for the current component*/ -void netshmem_create(void); +void netshmem_create(thdid_t tid); cbuf_t netshmem_get_shm_id(); shm_bm_t netshmem_get_shm(); diff --git a/src/components/lib/dpdk/adapter/cos_dpdk_adapter.c b/src/components/lib/dpdk/adapter/cos_dpdk_adapter.c index b6f4d68bb5..79d6e2d93e 100644 --- a/src/components/lib/dpdk/adapter/cos_dpdk_adapter.c +++ b/src/components/lib/dpdk/adapter/cos_dpdk_adapter.c @@ -198,3 +198,4 @@ COS_DPDK_DECLARE_NIC_MODULE(net_e1000_em); COS_DPDK_DECLARE_NIC_MODULE(mempool_ring); COS_DPDK_DECLARE_NIC_MODULE(net_ice); COS_DPDK_DECLARE_NIC_MODULE(net_ice_dcf); +COS_DPDK_DECLARE_NIC_MODULE(net_vmxnet3); diff --git a/src/components/lib/dpdk/cos_dpdk.c b/src/components/lib/dpdk/cos_dpdk.c index 25c2bc144a..2e5d9067be 100644 --- a/src/components/lib/dpdk/cos_dpdk.c +++ b/src/components/lib/dpdk/cos_dpdk.c @@ -295,12 +295,14 @@ cos_dev_port_tx_queue_setup(cos_portid_t port_id, uint16_t tx_queue_id, ret = rte_eth_dev_info_get(real_port_id, &dev_info); txq_conf = dev_info.default_txconf; + +#if E810_NIC /* We assume the NIC provides both IP & UDP offload capability */ assert(dev_info.tx_offload_capa & DEV_TX_OFFLOAD_IPV4_CKSUM); assert(dev_info.tx_offload_capa & DEV_TX_OFFLOAD_UDP_CKSUM); +#endif - // txq_conf.tx_free_thresh = 4096; - txq_conf.tx_free_thresh = 1024 - 32; + txq_conf.tx_free_thresh = nb_tx_desc - 32; /* set the txq to enable IP and UDP offload */ if (ENABLE_OFFLOAD) { txq_conf.offloads |= DEV_TX_OFFLOAD_IPV4_CKSUM; diff --git a/src/components/lib/dpdk/cos_dpdk.h b/src/components/lib/dpdk/cos_dpdk.h index f3298b0ac2..044ffb1bd3 100644 --- a/src/components/lib/dpdk/cos_dpdk.h +++ b/src/components/lib/dpdk/cos_dpdk.h @@ -8,7 +8,8 @@ #define COS_ETH_NAME_SZ 16 -#define COS_MBUF_DEFAULT_DATAROOM 1500 +/* vmxnet3 needs at least 1700 */ +#define COS_MBUF_DEFAULT_DATAROOM 1700 #define COS_PKTMBUF_HEADROOM 128 /* diff --git a/src/components/lib/slm/quantum.c b/src/components/lib/slm/quantum.c index 2daeca2c03..3c05c94588 100644 --- a/src/components/lib/slm/quantum.c +++ b/src/components/lib/slm/quantum.c @@ -164,8 +164,7 @@ slm_policy_timer_init(microsec_t period) int slm_timer_quantum_init(void) { - /* 10ms */ - slm_policy_timer_init(10000); + slm_policy_timer_init(50); return 0; } diff --git a/src/components/lib/vmrt/doc.md b/src/components/lib/vmrt/doc.md index b7d84fe80f..296da51b70 100644 --- a/src/components/lib/vmrt/doc.md +++ b/src/components/lib/vmrt/doc.md @@ -44,7 +44,7 @@ struct vmrt_vm_comp { char name[VMRT_VM_NAME_SIZE]; - u8_t num_vpu; + u8_t num_vcpu; struct vmrt_vm_vcpu vcpus[VMRT_VM_MAX_VCPU]; }; ``` @@ -62,7 +62,7 @@ vmrt_vm_create(struct vmrt_vm_comp *vm, char *name, u8_t num_vcpu, u64_t vm_mem_ /* 2. Initialize vm members */ assert(num_vcpu < VMRT_VM_MAX_VCPU); - vm->num_vpu = num_vcpu; + vm->num_vcpu = num_vcpu; vm->guest_mem_sz = vm_mem_sz; strcpy((char *)&vm->name, name); diff --git a/src/components/lib/vmrt/vmrt.c b/src/components/lib/vmrt/vmrt.c index 0f36f3abe8..053ebdc2a8 100644 --- a/src/components/lib/vmrt/vmrt.c +++ b/src/components/lib/vmrt/vmrt.c @@ -30,7 +30,61 @@ vmrt_dump_vcpu(struct vmrt_vm_vcpu *vcpu) printc("\tRIP: %016llx\tRSP: %016llx\tInst Len: %llu\n", regs->ip, regs->sp, regs->inst_length); printc("\tGPA: %016llx\n", regs->gpa); printc("\tEFER: %016llx\t\n", regs->efer); - printc("\tCR0: %016llx\tCR2: %016llx\tCR4: %016llx\n", regs->cr0, regs->cr2, regs->cr4); + printc("\tCR0: %016llx\tCR2: %016llx\tCR3: %016llx\tCR4: %016llx\n", regs->cr0, regs->cr2, regs->cr3, regs->cr4); +} + +paddr_t +vmrt_vm_gva2gpa(struct vmrt_vm_vcpu *vcpu, vaddr_t gva) +{ + struct vm_vcpu_shared_region *shared_region; + u64_t cr3; + u64_t *hva; + u64_t paddr; + u64_t l4, l3, l2, l1; + u64_t l4_entry, l3_entry, l2_entry, l1_entry; + + shared_region = vcpu->shared_region; + + cr3 = shared_region->cr3 & ~(u64_t)0xFFF; + + hva = GPA2HVA(cr3, vcpu->vm); + + l4 = PGTBL_LVL_4_IDX(gva); + l3 = PGTBL_LVL_3_IDX(gva); + l2 = PGTBL_LVL_2_IDX(gva); + l1 = PGTBL_LVL_1_IDX(gva); + + l4_entry = hva[l4]; + + assert(PGTBL_ENTRY_PRESENT(l4_entry)); + + paddr = (l4_entry & PGTBL_ENTRY_ADDR_MASK); + hva = GPA2HVA(paddr, vcpu->vm); + l3_entry = hva[l3]; + + assert(PGTBL_ENTRY_PRESENT(l3_entry)); + + if (PGTBL_ENTRY_SUPER_PAGE(l3_entry)) { + return (paddr_t)(l3_entry & PGTBL_ENTRY_ADDR_MASK) + (gva & 0x3FFFFFFF); + } + + paddr = (l3_entry & PGTBL_ENTRY_ADDR_MASK); + hva = GPA2HVA(paddr, vcpu->vm); + l2_entry = hva[l2]; + + assert(PGTBL_ENTRY_PRESENT(l2_entry)); + + if (PGTBL_ENTRY_SUPER_PAGE(l2_entry)) { + return (paddr_t)(l2_entry & PGTBL_ENTRY_ADDR_MASK) + (gva & 0x1FFFFF); + } + + paddr = (l2_entry & PGTBL_ENTRY_ADDR_MASK); + hva = GPA2HVA(paddr, vcpu->vm); + l1_entry = hva[l1]; + + assert(PGTBL_ENTRY_PRESENT(l1_entry)); + + return (paddr_t)(l1_entry & PGTBL_ENTRY_ADDR_MASK) + (gva & 0xFFF); } void @@ -82,7 +136,7 @@ vmrt_vm_vcpu_init(struct vmrt_vm_comp *vm, u32_t vcpu_nr) thdid_t tid, handler_tid; thdcap_t cap; vaddr_t resource; - assert(vcpu_nr < vm->num_vpu); + assert(vcpu_nr < vm->num_vcpu); vcpu = &vm->vcpus[vcpu_nr]; assert(!vcpu->shared_region); @@ -150,7 +204,7 @@ vmrt_vm_create(struct vmrt_vm_comp *vm, char *name, u8_t num_vcpu, u64_t vm_mem_ vm->lapic_access_page = lapic_access_page; assert(num_vcpu < VMRT_VM_MAX_VCPU); - vm->num_vpu = num_vcpu; + vm->num_vcpu = num_vcpu; vm->guest_mem_sz = vm_mem_sz; strcpy((char *)&vm->name, name); @@ -184,6 +238,12 @@ wrmsr_handler(struct vmrt_vm_vcpu *vcpu) VM_PANIC(vcpu);; } +CWEAKSYMB void +ept_violation_handler(struct vmrt_vm_vcpu *vcpu) +{ + VM_PANIC(vcpu); +} + CWEAKSYMB void ept_misconfig_handler(struct vmrt_vm_vcpu *vcpu) { @@ -373,6 +433,9 @@ vmrt_handle_reason(struct vmrt_vm_vcpu *vcpu, u64_t reason) /* TODO: handle pause exception */ GOTO_NEXT_INST(vcpu->shared_region); break; + case VM_EXIT_REASON_EPT_VIOLATION: + ept_violation_handler(vcpu); + break; case VM_EXIT_REASON_EPT_MISCONFIG: ept_misconfig_handler(vcpu); break; @@ -420,8 +483,17 @@ vmrt_vm_exception_handler(void *_vcpu) vmrt_handle_reason(vcpu, reason); rdtscll(curr_tsc); if (curr_tsc >= vcpu->next_timer) { +#if VMX_SUPPORT_POSTED_INTR + vlapic_timer_expired(vcpu); +#else /* 236 is Linux's fixed timer interrrupt */ lapic_intr_inject(vcpu, 236, 0); +#endif + vcpu->next_timer = ~0ULL; } + +#if VMX_SUPPORT_POSTED_INTR + vlapic_inject_intr(vcpu); +#endif } } diff --git a/src/components/lib/vmrt/vmrt.h b/src/components/lib/vmrt/vmrt.h index b573a08627..a04a6bb5fb 100644 --- a/src/components/lib/vmrt/vmrt.h +++ b/src/components/lib/vmrt/vmrt.h @@ -17,6 +17,11 @@ struct vmrt_vm_vcpu { */ void *vlapic; + /* Instruction emulation context */ + void *inst_ctxt; + + void *mmio_request; + thdid_t tid; thdcap_t cap; @@ -40,17 +45,18 @@ struct vmrt_vm_comp { void *guest_addr; word_t guest_mem_sz; + void *ioapic; vm_lapicaccesscap_t lapic_access_page; char name[VMRT_VM_NAME_SIZE]; - u8_t num_vpu; + u8_t num_vcpu; struct vmrt_vm_vcpu vcpus[VMRT_VM_MAX_VCPU]; int wire_mode; }; -#define VMRT_GPA2HVA(gpa, vm, offset) { ((gpa - offset) + vm->guest_addr) } +#define VMRT_GPA2HVA(gpa, vm, offset) ((gpa - offset) + vm->guest_addr) #define GPA2HVA(gpa, vm) VMRT_GPA2HVA(gpa, vm, PAGE_SIZE_4K) typedef void vmrt_exception_handler(struct vmrt_vm_vcpu *vcpu); @@ -62,7 +68,8 @@ void vmrt_vm_vcpu_resume(struct vmrt_vm_vcpu *vcpu); void vmrt_vm_data_copy_to(struct vmrt_vm_comp *vm, char *image, u64_t size, paddr_t gpa); void vmrt_vm_exception_handler(void *vcpu); void vmrt_vm_vcpu_start(struct vmrt_vm_vcpu *vcpu); -static inline struct vmrt_vm_vcpu *vmrt_get_vcpu(struct vmrt_vm_comp *vm, u32_t vcpu_nr) { return &vm->vcpus[vcpu_nr]; } +paddr_t vmrt_vm_gva2gpa(struct vmrt_vm_vcpu *vcpu, vaddr_t gva); +static inline struct vmrt_vm_vcpu *vmrt_get_vcpu(struct vmrt_vm_comp *vm, u32_t vcpu_nr) { assert(vcpu_nr < vm->num_vcpu);return &vm->vcpus[vcpu_nr]; } void lapic_intr_inject(struct vmrt_vm_vcpu *vcpu, u8_t vector, int autoeoi); @@ -106,3 +113,12 @@ enum { }; #define LAPIC_BASE_ADDR (0xFEE00000) +#define IOAPIC_BASE_ADDR (0xFEC00000) + +#define PGTBL_LVL_4_IDX(addr) ((((u64_t)(addr)) >> 39) & 0x1FF) +#define PGTBL_LVL_3_IDX(addr) ((((u64_t)(addr)) >> 30) & 0x1FF) +#define PGTBL_LVL_2_IDX(addr) ((((u64_t)(addr)) >> 21) & 0x1FF) +#define PGTBL_LVL_1_IDX(addr) ((((u64_t)(addr)) >> 12) & 0x1FF) +#define PGTBL_ENTRY_ADDR_MASK 0X000FFFFFFFFFF000 +#define PGTBL_ENTRY_PRESENT(entry) ((u64_t)entry & 0x1) +#define PGTBL_ENTRY_SUPER_PAGE(entry) ((u64_t)entry & 0x80) diff --git a/src/kernel/capinv.c b/src/kernel/capinv.c index d023088934..51f86e2b1b 100644 --- a/src/kernel/capinv.c +++ b/src/kernel/capinv.c @@ -1265,9 +1265,20 @@ static int __attribute__((noinline)) composite_syscall_slowpath(struct pt_regs * word_t flags; ret = cap_kmem_activate(ct, pgtbl_cap, pgtbl_addr, (unsigned long *)&page, &pte); + if (ret == -EEXIST || ret == -ECASFAIL) { + /* apic access mem has been activated by other vcpu, thus just get the page addr */ + pgtblc = (struct cap_pgtbl *)captbl_lkup(ct, pgtbl_cap); + page = (vaddr_t)pgtbl_lkup(pgtblc->pgtbl, pgtbl_addr & PGTBL_FRAME_MASK, &flags); + assert(page); + ret = 0; + } + if (likely(!ret)) { ret = vm_lapic_access_activate(ct, cap, lapic_access_cap, page); + /* TODO: improve it for multi-vcpu case */ + assert(!ret); } + assert(!ret); if (ret) kmem_unalloc(pte); break; diff --git a/src/kernel/include/chal.h b/src/kernel/include/chal.h index 70a6d261c0..77d405e924 100644 --- a/src/kernel/include/chal.h +++ b/src/kernel/include/chal.h @@ -87,6 +87,7 @@ int chal_attempt_ainv(struct async_cap *acap); /* IPI sending */ void chal_send_ipi(int cpu_id); +void chal_selfipi(u8_t vector); /* static const struct cos_trans_fns *trans_fns = NULL; */ void chal_idle(void); diff --git a/src/kernel/include/shared/cos_types.h b/src/kernel/include/shared/cos_types.h index 8423981c87..e09257eb53 100644 --- a/src/kernel/include/shared/cos_types.h +++ b/src/kernel/include/shared/cos_types.h @@ -604,6 +604,23 @@ typedef unsigned short int cos_channelkey_t; /* 0 == PRIVATE KEY. >= 1 GLOBAL KE /* VM shared data structures */ +struct vm_pi_desc { + /* posted-intr desc is defined to be 64B by the hardware */ + + u64_t pir[4]; /* interrupt vectors, 256 bits together */ + + union { + struct { + u8_t on :1; + u8_t padding:7; + } outstanding_noti; + + u64_t val; + } info; + + u64_t padding[3]; +} __attribute__((aligned(CACHE_LINE), packed)); + #define MAX_VM_EXIT_REASONS 70 struct vm_vcpu_shared_region { u64_t cr2; @@ -635,9 +652,13 @@ struct vm_vcpu_shared_region { u64_t gpa; u64_t efer; u64_t cr0; + u64_t cr3; u64_t cr4; u64_t microcode_version; + u16_t inject_evt; + + struct vm_pi_desc pi_desc __attribute__((aligned(CACHE_LINE))); /* posted interrupt support, which is essentially an interface to record interrupt vectors */ }; enum { @@ -660,8 +681,9 @@ enum { #define VM_EXIT_REASON_RDMSR 31 #define VM_EXIT_REASON_WRMSR 32 #define VM_EXIT_REASON_PAUSE 40 -#define VM_EXIT_REASON_EPT_MISCONFIG 49 #define VM_EXIT_REASON_APIC_ACCESS 44 +#define VM_EXIT_REASON_EPT_VIOLATION 48 +#define VM_EXIT_REASON_EPT_MISCONFIG 49 #define VM_EXIT_REASON_PREEMPTION_TIMER 52 #define VM_EXIT_REASON_XSETBV 55 #define VM_EXIT_REASON_APIC_WRITE 56 diff --git a/src/platform/i386/chal.c b/src/platform/i386/chal.c index 588347010f..c2b5d20a6e 100644 --- a/src/platform/i386/chal.c +++ b/src/platform/i386/chal.c @@ -38,6 +38,12 @@ chal_send_ipi(int cpu_id) return; } +void +chal_selfipi(u8_t vector) +{ + lapic_selfipi(vector); +} + void chal_khalt(void) { diff --git a/src/platform/i386/chal/chal_config.h b/src/platform/i386/chal/chal_config.h index 65c1b28f9b..980d8a26ca 100644 --- a/src/platform/i386/chal/chal_config.h +++ b/src/platform/i386/chal/chal_config.h @@ -46,8 +46,9 @@ typedef enum { HW_ID30, HW_ID31, HW_LAPIC_SPURIOUS, - HW_LAPIC_IPI_ASND = 254, /* ipi interrupt for asnd */ - HW_LAPIC_TIMER = 255, /* Local APIC TSC-DEADLINE mode - Timer interrupts */ + HW_LAPIC_IPI_ASND = 253, /* ipi interrupt for asnd */ + HW_LAPIC_TIMER = 254, /* Local APIC TSC-DEADLINE mode - Timer interrupts */ + HW_LAPIC_POSTED_INTR = 255, /* posted interrupt, needs to make sure it is posted into VM, thus it's priority is higher than timer */ } hwid_t; typedef struct { diff --git a/src/platform/i386/chal/shared/cos_config.h b/src/platform/i386/chal/shared/cos_config.h index 09169ace28..24636f93bd 100644 --- a/src/platform/i386/chal/shared/cos_config.h +++ b/src/platform/i386/chal/shared/cos_config.h @@ -143,6 +143,7 @@ #if defined(__x86_64__) #define CONFIG_VMX 1 +#define VMX_SUPPORT_POSTED_INTR 0 /* root page tbale is 0, then second level page table is 1, etc.*/ #define COS_PGTBL_DEPTH 4 diff --git a/src/platform/i386/chal_cpu.h b/src/platform/i386/chal_cpu.h index 6500a565d4..ebd783cb2e 100644 --- a/src/platform/i386/chal_cpu.h +++ b/src/platform/i386/chal_cpu.h @@ -284,8 +284,8 @@ chal_cpu_init(void) writemsr(MSR_LSTAR, (u32_t)((u64_t)sysenter_entry), (u32_t)((u64_t)sysenter_entry >> 32)); writemsr(MSR_SFMASK, 512, 0); writemsr(MSR_USER_GSBASE, 0, 0); - writemsr(MSR_KERNEL_GSBASE, (u32_t)((u64_t)(&kernel_stack_info[cpu_id])), - (u32_t)((u64_t)(&kernel_stack_info[cpu_id]) >> 32)); + writemsr(MSR_KERNEL_GSBASE, (u32_t)((u64_t)(&kernel_stack_info[cpu_id])), (u32_t)((u64_t)(&kernel_stack_info[cpu_id]) >> 32)); + #elif defined(__i386__) chal_cpu_cr4_set(cr4 | CR4_PSE | CR4_PGE); diff --git a/src/platform/i386/idt.c b/src/platform/i386/idt.c index 8905b5e51c..26ff439ecf 100644 --- a/src/platform/i386/idt.c +++ b/src/platform/i386/idt.c @@ -175,6 +175,7 @@ idt_init(const cpuid_t cpu_id) idt_set_gate(HW_LAPIC_SPURIOUS, (unsigned long)lapic_spurious_irq, 0x08, 0x8E); idt_set_gate(HW_LAPIC_IPI_ASND, (unsigned long)lapic_ipi_asnd_irq, 0x08, 0x8E); idt_set_gate(HW_LAPIC_TIMER, (unsigned long)lapic_timer_irq, 0x08, 0x8E); + idt_set_gate(HW_LAPIC_POSTED_INTR, (unsigned long)posted_intr_irq, 0x08, 0x8E); flush_idt: /* asm volatile("lidt (%0)" : : "p"(&idtr)); */ diff --git a/src/platform/i386/isr.h b/src/platform/i386/isr.h index cc0fc8f815..9c94333925 100644 --- a/src/platform/i386/isr.h +++ b/src/platform/i386/isr.h @@ -84,6 +84,7 @@ extern void handler_hw_62(struct pt_regs *); extern void lapic_spurious_irq(struct pt_regs *); extern void lapic_ipi_asnd_irq(struct pt_regs *); extern void lapic_timer_irq(struct pt_regs *); +extern void posted_intr_irq(struct pt_regs *); static void ack_irq(int n) diff --git a/src/platform/i386/kernel.h b/src/platform/i386/kernel.h index 5e2b665bf0..b076bd4ada 100644 --- a/src/platform/i386/kernel.h +++ b/src/platform/i386/kernel.h @@ -77,6 +77,7 @@ u32_t lapic_get_ccr(void); void lapic_timer_calibration(u32_t ratio); int lapic_timer_calibrated(void); void lapic_asnd_ipi_send(const cpuid_t cpu_id); +void lapic_selfipi(u8_t vector); void smp_init(volatile int *cores_ready); diff --git a/src/platform/i386/lapic.c b/src/platform/i386/lapic.c index 99624ff7a4..e978518a6f 100644 --- a/src/platform/i386/lapic.c +++ b/src/platform/i386/lapic.c @@ -76,6 +76,7 @@ volatile int apicids[NUM_CPU]; #define LAPIC_ICR_STATUS (1 << 12) #define LAPIC_ICR_INIT 0x500 /* INIT */ #define LAPIC_ICR_SIPI 0x600 /* Startup IPI */ +#define LAPIC_ICR_SELF 0x40000 /* Self IPI */ #define LAPIC_ICR_FIXED 0x000 /* fixed IPI */ #define LAPIC_IPI_ASND_VEC HW_LAPIC_IPI_ASND /* interrupt vec for asnd ipi */ @@ -433,6 +434,17 @@ lapic_ipi_send(u32_t dest, u32_t vect_flags) return 0; } + +void +lapic_selfipi(u8_t vector) +{ + lapic_write_reg(LAPIC_ICR + 0x10, 0 << 24); + lapic_read_reg(LAPIC_ICR + 0x10); + + lapic_write_reg(LAPIC_ICR, LAPIC_ICR_SELF | vector); + lapic_read_reg(LAPIC_ICR); +} + void lapic_asnd_ipi_send(const cpuid_t cpu_id) { diff --git a/src/platform/x86_64/entry.S b/src/platform/x86_64/entry.S index 352d53cfd1..1825432b7b 100644 --- a/src/platform/x86_64/entry.S +++ b/src/platform/x86_64/entry.S @@ -193,6 +193,7 @@ IRQ_ID(62) IRQ(lapic_spurious) IRQ(lapic_ipi_asnd) IRQ(lapic_timer) +IRQ(posted_intr) /* * Loads the IDT into the processor diff --git a/src/platform/x86_64/vmx/include/vmx.h b/src/platform/x86_64/vmx/include/vmx.h index 0d60cbe09d..d69cdd7375 100644 --- a/src/platform/x86_64/vmx/include/vmx.h +++ b/src/platform/x86_64/vmx/include/vmx.h @@ -122,13 +122,18 @@ #define LAPIC_ACCESS_ADDRESS 0x00002014 #define VAPIC_ACCESS_ADDRESS 0x00002012 +#define POSTED_INTERRUPT_NOTIFICATION_VECTOR 0x00000002 +#define POSTED_INTERRUPT_DESCRIPTOR 0x00002016 + #define EXTERNAL_INTERRUPT_EXITING BIT(0) +#define PROCESS_POSTED_INTERRUPTS BIT(7) #define HLT_EXITING BIT(7) #define INVLPG_EXITING BIT(9) #define MWAIT_EXITING BIT(10) #define RDPMC_EXITING BIT(11) #define RDTSC_EXITING BIT(12) +#define ACTIVATE_TERTIARY_CONTROLS BIT(17) #define UNCONDITIONAL_IO_EXITING BIT(24) #define USE_MSR_BITMAPS BIT(28) #define USE_TPR_SHADOW BIT(21) @@ -138,6 +143,7 @@ #define VIRTUALIZE_APIC_ACCESSES BIT(0) #define ENABLE_EPT BIT(1) #define ENABLE_RDTSCP BIT(3) +#define VIRTUALIZE_x2APIC_MODE BIT(4) #define ENABLE_VPID BIT(5) #define UNRESTRICTED_GUEST BIT(7) #define APIC_REGISTER_VIRTUALIZATION BIT(8) diff --git a/src/platform/x86_64/vmx/include/vmx_vmcs.h b/src/platform/x86_64/vmx/include/vmx_vmcs.h index 562bc80d69..70ac5ecc59 100644 --- a/src/platform/x86_64/vmx/include/vmx_vmcs.h +++ b/src/platform/x86_64/vmx/include/vmx_vmcs.h @@ -78,7 +78,7 @@ struct vmx_vmcs { void vmx_env_init(void); void vmx_thd_init(struct thread *thd, void *vm_pgd, struct cap_vm_vmcb *vmcb); void vmx_host_state_init(void); -void vmx_guest_state_init(void); +void vmx_guest_state_init(struct thread *thd); void vmx_thd_start_or_resume(struct thread *thd); #else diff --git a/src/platform/x86_64/vmx/vmx.c b/src/platform/x86_64/vmx/vmx.c index 48f00bca25..9139fb1bc1 100644 --- a/src/platform/x86_64/vmx/vmx.c +++ b/src/platform/x86_64/vmx/vmx.c @@ -79,7 +79,7 @@ vmx_host_state_init(void) } void -vmx_guest_state_init(void) +vmx_guest_state_init(struct thread *thd) { /* Initializing guest state, this will set guest into real mode */ u64_t tmp64; @@ -188,7 +188,7 @@ vmx_pinbased_ctl_init(void) { u32_t pinbased_execution_ctl = 0; - pinbased_execution_ctl |= EXTERNAL_INTERRUPT_EXITING ; + pinbased_execution_ctl |= EXTERNAL_INTERRUPT_EXITING | PROCESS_POSTED_INTERRUPTS ; pinbased_execution_ctl = fix_reserved_ctrl_bits(IA32_VMX_PINBASED_CTLS, pinbased_execution_ctl); vmwrite(PIN_BASED_VM_EXECUTION_CONTROLS, pinbased_execution_ctl); } @@ -360,6 +360,9 @@ vmx_thd_init(struct thread *thd, void *vm_pgd, struct cap_vm_vmcb *vmcb) eptp |= (4 - 1) << 3; eptp |= 1 << 6; vmwrite(EPTP, eptp); + + vmwrite(POSTED_INTERRUPT_NOTIFICATION_VECTOR, HW_LAPIC_POSTED_INTR); + vmwrite(POSTED_INTERRUPT_DESCRIPTOR, chal_va2pa(&((struct vm_vcpu_shared_region *)shared_region)->pi_desc)); } static void @@ -397,7 +400,7 @@ vmx_thd_start_or_resume(struct thread *thd) assert(thd->vcpu_ctx.state = VM_THD_STATE_STOPPED); vmx_host_state_init(); - vmx_guest_state_init(); + vmx_guest_state_init(thd); vmx_pinbased_ctl_init(); vmx_procbased_ctl_init(); vmx_vm_exit_ctl_init(); diff --git a/src/platform/x86_64/vmx/vmx_exit.c b/src/platform/x86_64/vmx/vmx_exit.c index dacae205cd..b49c4527f8 100644 --- a/src/platform/x86_64/vmx/vmx_exit.c +++ b/src/platform/x86_64/vmx/vmx_exit.c @@ -19,7 +19,7 @@ int expended_process(struct pt_regs *regs, struct thread *thd_curr, struct comp_ struct cos_cpu_local_info *cos_info, int timer_intr_context); /* The tmp regs stack used for VM-exit switching to other threads */ -static struct pt_regs tmp_regs; +static struct pt_regs tmp_regs[NUM_CPU]; /* When VMM tries to write cr0/cr4, kernel needs to take care of them */ extern u64_t cr4_fixed1_bits; @@ -27,6 +27,21 @@ extern u64_t cr4_fixed0_bits; extern u64_t cr0_fixed1_bits; extern u64_t cr0_fixed0_bits; +int +posted_intr_handler(struct pt_regs *regs) +{ + /* should not come here by design */ + assert(0); + return 0; +} + +static void +posted_intr_inject(void) +{ + chal_selfipi(HW_LAPIC_POSTED_INTR); +} + + void vmx_resume(struct thread *thd) { @@ -66,6 +81,18 @@ vmx_resume(struct thread *thd) vmwrite(GUEST_INTERRUPT_STATUS, shared_region->interrupt_status); } +#if VMX_SUPPORT_POSTED_INTR + /* + * TODO: We definitely would like to support posted interrupt mechanism since it can reduce multi-core + * interrupt injection overhead. However, this currently cannot work small timer tick like 100us set up. + * Thus, currently just keep the legacy interrupt injection mechanism. + */ + if (unlikely(shared_region->inject_evt)) { + posted_intr_inject(); + shared_region->inject_evt = 0; + } +#endif + /* TODO: some msrs like kernel gs are (per-core) constant, can make host saving code simpler`*/ thd->vcpu_ctx.vmcs.host_msr_gs_base = msr_get(IA32_GS_BASE); thd->vcpu_ctx.vmcs.host_msr_gskernel_base = msr_get(IA32_KERNEL_GSBASE); @@ -133,11 +160,13 @@ vmx_exit_handler(struct vm_vcpu_shared_region *regs) u64_t reason, qualification, gla, gpa, inst_length, inst_info; u8_t reason_nr; int ret = 0; + unsigned long cpuid; struct cos_cpu_local_info *cos_info; struct thread *thd_curr, *thd_exception_handler, *next; struct vm_vcpu_shared_region *shared_region; cos_info = cos_cpu_local_info(); - thd_curr = thd_current(cos_info); + thd_curr = thd_current(cos_info); + cpuid = cos_info->cpuid; thd_curr->vcpu_ctx.vmcs.guest_msr_gs_base = msr_get(IA32_GS_BASE); thd_curr->vcpu_ctx.vmcs.guest_msr_gskernel_base = msr_get(IA32_KERNEL_GSBASE); @@ -188,6 +217,7 @@ vmx_exit_handler(struct vm_vcpu_shared_region *regs) shared_region->sp = vmread(GUEST_RSP); shared_region->efer = vmread(GUEST_IA32_EFER); shared_region->cr0 = vmread(GUEST_CR0); + shared_region->cr3 = vmread(GUEST_CR3); shared_region->cr4 = vmread(GUEST_CR4); shared_region->interrupt_status = vmread(GUEST_INTERRUPT_STATUS); shared_region->inst_length = inst_length; @@ -204,15 +234,15 @@ vmx_exit_handler(struct vm_vcpu_shared_region *regs) if (reason_nr == VM_EXIT_REASON_EXTERNAL_INTERRUPT) { lapic_ack(); /*FIXME: might need a xsave/xrestore for sse/avx for current vcpu thd because current thd is set to be exception handler */ - copy_gp_regs(&thd_exception_handler->regs, &tmp_regs); - ret = timer_process(&tmp_regs, thd_exception_handler); + copy_gp_regs(&thd_exception_handler->regs, &tmp_regs[cpuid]); + ret = timer_process(&tmp_regs[cpuid], thd_exception_handler); } else { next = thd_exception_handler; - ret = cap_thd_switch(&tmp_regs, thd_curr, next, NULL, cos_info); + ret = cap_thd_switch(&tmp_regs[cpuid], thd_curr, next, NULL, cos_info); vmx_assert(ret == 0); } - __asm__ volatile("movq %%rbx, %%rsp; jmpq *%%rcx": : "a"(ret), "b"(&tmp_regs),"c"(&restore_from_vm)); + __asm__ volatile("movq %%rbx, %%rsp; jmpq *%%rcx": : "a"(ret), "b"(&tmp_regs[cpuid]),"c"(&restore_from_vm)); /* Should never come here */ vmx_assert(0); diff --git a/tools/run.sh b/tools/run.sh index 50e2af6d06..af9dd98e2d 100755 --- a/tools/run.sh +++ b/tools/run.sh @@ -42,12 +42,12 @@ then debug_flag="-S" if [ "${nic_flag}" == "enable-nic" ] then - nic_flag=" -netdev type=tap,id=net0,ifname=tap0,script=no,downscript=no -device e1000e,netdev=net0,mac=66:66:66:66:66:66 " + nic_flag=" -netdev type=tap,id=net0,ifname=tap0,script=no,downscript=no -device vmxnet3,netdev=net0,mac=66:66:66:66:66:66 " fi elif [ "${debug_flag}" == "enable-nic" ] then debug_flag="" - nic_flag=" -netdev type=tap,id=net0,ifname=tap0,script=no,downscript=no -device e1000e,netdev=net0,mac=66:66:66:66:66:66 " + nic_flag=" -netdev type=tap,id=net0,ifname=tap0,script=no,downscript=no -device vmxnet3,netdev=net0,mac=66:66:66:66:66:66 " fi if [ "${arch}" == "x86_64" ] From 091ff7a79eea18e7af6dacbe6d29be18d56b2e79 Mon Sep 17 00:00:00 2001 From: betahxy Date: Fri, 22 Dec 2023 00:32:10 -0500 Subject: [PATCH 02/60] add vmxnet3 --- src/components/lib/dpdk/dpdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/lib/dpdk/dpdk b/src/components/lib/dpdk/dpdk index 7eb776b2d1..3a2b0be02a 160000 --- a/src/components/lib/dpdk/dpdk +++ b/src/components/lib/dpdk/dpdk @@ -1 +1 @@ -Subproject commit 7eb776b2d1e5158c0d6d880d273e687026e27c95 +Subproject commit 3a2b0be02ac27f716c16accb0cdb2e8b30da0e21 From cd312b5729f00ad8a9f8ae818b73c64b9da00b12 Mon Sep 17 00:00:00 2001 From: betahxy Date: Wed, 6 Mar 2024 00:10:00 -0500 Subject: [PATCH 03/60] simple no-op NF --- composition_scripts/simple_vmm.toml | 2 +- .../implementation/capmgr/simple/capmgr.c | 2 +- .../implementation/nicmgr/dpdk/init.c | 34 +++- .../implementation/nicmgr/dpdk/nicmgr.c | 160 ++++++++++++++++++ .../no_interface/llbooter/llbooter.c | 2 +- .../sched/pfprr_quantum_static/main.c | 3 + .../simple_nf/simple_nf1/main.c | 121 ++++++++++--- .../implementation/simple_vmm/vmm/Makefile | 2 +- .../implementation/simple_vmm/vmm/cpuid.h | 3 + .../vmm/devices/vpci/virtio_net_io.c | 35 ++-- .../implementation/simple_vmm/vmm/netio.c | 123 +++++++++++++- .../simple_vmm/vmm/simple_vmm.c | 41 +++-- .../implementation/simple_vmm/vmm/vcpuid.c | 7 +- src/components/interface/netio/netio.h | 2 + src/components/interface/netio/stubs/stubs.S | 2 + src/components/interface/netshmem/netshmem.h | 22 ++- src/components/interface/nic/nic.h | 2 + src/components/interface/nic/stubs/stubs.S | 2 + src/components/lib/slm/quantum.c | 2 +- src/components/lib/vmrt/vmrt.c | 10 +- src/platform/x86_64/vmx/vmx.c | 2 +- tools/run.sh | 4 +- 22 files changed, 518 insertions(+), 65 deletions(-) diff --git a/composition_scripts/simple_vmm.toml b/composition_scripts/simple_vmm.toml index 359068b482..3d46031f7d 100644 --- a/composition_scripts/simple_vmm.toml +++ b/composition_scripts/simple_vmm.toml @@ -35,7 +35,7 @@ baseaddr = "0x6000000" [[components]] name = "vmm" img = "simple_vmm.vmm" -deps = [{srv = "sched", interface = "sched"}, {srv = "sched", interface = "init"},{srv = "capmgr", interface = "capmgr"}, {srv = "capmgr", interface = "memmgr"}, {srv = "capmgr", interface = "contigmem"}] +deps = [{srv = "sched", interface = "sched"}, {srv = "sched", interface = "init"},{srv = "capmgr", interface = "capmgr"}, {srv = "capmgr", interface = "memmgr"}, {srv = "capmgr", interface = "contigmem"}, {srv = "nicmgr", interface = "nic"}] implements = [{interface = "netio"}] constructor = "booter" baseaddr = "0x2000000" diff --git a/src/components/implementation/capmgr/simple/capmgr.c b/src/components/implementation/capmgr/simple/capmgr.c index 556c59fff3..cc836bb414 100644 --- a/src/components/implementation/capmgr/simple/capmgr.c +++ b/src/components/implementation/capmgr/simple/capmgr.c @@ -73,7 +73,7 @@ SS_STATIC_SLAB(asnd, struct cm_asnd, MAX_NUM_THREADS); /* 64 MiB */ #define MB2PAGES(mb) (round_up_to_page(mb * 1024 * 1024) / PAGE_SIZE) -#define MM_NPAGES (MB2PAGES(512)) +#define MM_NPAGES (MB2PAGES(1500)) SS_STATIC_SLAB(page, struct mm_page, MM_NPAGES); SS_STATIC_SLAB(span, struct mm_span, MM_NPAGES); diff --git a/src/components/implementation/nicmgr/dpdk/init.c b/src/components/implementation/nicmgr/dpdk/init.c index 04bbf37301..24c01e445d 100644 --- a/src/components/implementation/nicmgr/dpdk/init.c +++ b/src/components/implementation/nicmgr/dpdk/init.c @@ -199,9 +199,6 @@ process_rx_packets(cos_portid_t port_id, char** rx_pkts, uint16_t nb_pkts) sync_sem_give(&session->sem); } - /* yield for some cycles to improve CPU utility */ - sched_thd_block_timeout(0, 100000); - } static void @@ -264,7 +261,6 @@ cos_nic_start(){ #if ENABLE_DEBUG_INFO debug_dump_info(); #endif - // process_tx_packets(); // only port 0, queue 0 receive packets nb_pkts = cos_dev_port_rx_burst(0, 0, rx_packets, MAX_PKT_BURST); @@ -273,7 +269,11 @@ cos_nic_start(){ // if (nb_pkts!= 0) cos_dev_port_tx_burst(0, 0, rx_packets, nb_pkts); /* This is the real processing logic for applications */ - if (nb_pkts != 0) process_rx_packets(0, rx_packets, nb_pkts); + if (nb_pkts != 0) { + process_rx_packets(0, rx_packets, nb_pkts); + } else { + sched_thd_block_timeout(0, ps_tsc() + 2000*1); + } } } @@ -363,6 +363,7 @@ void cos_init(void) { printc("nicmgr init...\n"); +#if 1 cos_nic_init(); cos_hash_init(); #ifdef USE_CK_RING_FREE_MBUF @@ -372,15 +373,36 @@ cos_init(void) sync_lock_init(&tx_lock[i]); } +#endif printc("dpdk init end\n"); } +thdid_t recv_tid = 0; + +#define RECV_THD_PRIORITY 1 + +static void +recv_task(void) +{ + cos_nic_start(); +} + +void +cos_parallel_init(coreid_t cid, int init_core, int ncores) +{ + if(cid == 0) { + recv_tid = sched_thd_create((void *)recv_task, NULL); + printc("dpdk recv tid :%ld\n", recv_tid); + } +} + int parallel_main(coreid_t cid) { /* DPDK rx and tx will only run on core 0 */ if(cid == 0) { - cos_nic_start(); + sched_thd_param_set(recv_tid, sched_param_pack(SCHEDP_PRIO, RECV_THD_PRIORITY)); + sched_thd_block(0); } else { #if 0 #if E810_NIC == 0 diff --git a/src/components/implementation/nicmgr/dpdk/nicmgr.c b/src/components/implementation/nicmgr/dpdk/nicmgr.c index dd61056d54..a78d683e99 100644 --- a/src/components/implementation/nicmgr/dpdk/nicmgr.c +++ b/src/components/implementation/nicmgr/dpdk/nicmgr.c @@ -114,6 +114,67 @@ nic_get_a_packet(u16_t *pkt_len) return objid; } +shm_bm_objid_t +nic_get_a_packet_batch(u8_t batch_limit) +{ + thdid_t thd; + struct pkt_buf buf; + shm_bm_objid_t objid; + struct client_session *session; + struct netshmem_pkt_buf *obj; + shm_bm_objid_t first_objid; + struct netshmem_pkt_buf *first_obj; + struct netshmem_pkt_pri *first_obj_pri; + struct netshmem_meta_tuple *pkt_arr; + char *data_buf; + char *pkt; + int len; + u8_t batch_ct = 0; + + thd = cos_thdid(); + + session = &client_sessions[thd]; + + obj = first_obj = shm_bm_alloc_net_pkt_buf(session->shemem_info.shm, &objid); + assert(obj); + first_objid = objid; + first_obj_pri = netshmem_get_pri(obj); + pkt_arr = (struct netshmem_meta_tuple *)&first_obj_pri->pkt_arr; + first_obj_pri->batch_len = 0; + + sync_sem_take(&session->sem); + + assert(!pkt_ring_buf_empty(&session->pkt_ring_buf)); + + while (batch_ct < batch_limit && pkt_ring_buf_dequeue(&session->pkt_ring_buf, &buf)) { + assert(buf.pkt); + if (likely(batch_ct > 0)) { + obj = shm_bm_alloc_net_pkt_buf(session->shemem_info.shm, &objid); + sync_sem_take(&session->sem); + assert(obj); + } + + pkt = cos_get_packet(buf.pkt, &len); + assert(len < netshmem_get_max_data_buf_sz()); + + data_buf = netshmem_get_data_buf(obj); + memcpy(data_buf, pkt, len); + pkt_arr[batch_ct].obj_id = objid; + pkt_arr[batch_ct].pkt_len = len; + batch_ct++; + +#if USE_CK_RING_FREE_MBUF + while (!pkt_ring_buf_enqueue(&g_free_ring, &buf)); +#else + cos_free_packet(buf.pkt); +#endif + } + + first_obj_pri->batch_len = batch_ct; + + return first_objid; +} + static void ext_buf_free_callback_fn(void *addr, void *opaque) { @@ -179,6 +240,105 @@ nic_send_packet(shm_bm_objid_t pktid, u16_t pkt_offset, u16_t pkt_len) return 0; } +void pkt_hex_dump(void *_data, u16_t len) +{ + int rowsize = 16; + int i, l, linelen, remaining; + int li = 0; + u8_t *data, ch; + + data = _data; + + printc("Packet hex dump, len:%d\n", len); + remaining = len; + for (i = 0; i < len; i += rowsize) { + printc("%06d\t", li); + + linelen = remaining < rowsize ? remaining : rowsize; + remaining -= rowsize; + + for (l = 0; l < linelen; l++) { + ch = data[l]; + printc( "%02X ", (u32_t) ch); + } + + data += linelen; + li += 10; + + printc( "dump done\n"); + } +} + +int +nic_send_packet_batch(shm_bm_objid_t pktid) +{ + thdid_t thd; + shm_bm_objid_t objid; + struct pkt_buf buf; + struct netshmem_pkt_buf *obj; + shm_bm_objid_t first_objid; + struct netshmem_pkt_buf *first_obj; + struct netshmem_pkt_pri *first_obj_pri; + struct netshmem_meta_tuple *pkt_arr; + u16_t pkt_len; + u8_t batch_tc = 0; + shm_bm_t shm; + u64_t paddr, data_paddr; + + thd = cos_thdid(); + objid = pktid; + + paddr = client_sessions[thd].shemem_info.paddr; + shm = client_sessions[thd].shemem_info.shm; + + obj = first_obj = shm_bm_transfer_net_pkt_buf(shm, objid); + + first_obj_pri = netshmem_get_pri(first_obj); + pkt_arr = (struct netshmem_meta_tuple *)&(first_obj_pri->pkt_arr); + batch_tc = first_obj_pri->batch_len; + + pkt_len = pkt_arr[0].pkt_len; + + data_paddr = paddr + (u64_t)obj - (u64_t)shm; + + char *mbuf; + void *ext_shinfo; + char *tx_packets[256]; + + coreid_t core_id = cos_cpuid(); +#if E810_NIC == 0 + core_id = 1; +#endif + + mbuf = cos_allocate_mbuf(g_tx_mp[core_id - 1]); + assert(mbuf); + ext_shinfo = netshmem_get_tailroom((struct netshmem_pkt_buf *)obj); + cos_attach_external_mbuf(mbuf, obj, data_paddr, PKT_BUF_SIZE, ext_buf_free_callback_fn, ext_shinfo); + cos_set_external_packet(mbuf, netshmem_get_data_offset(), pkt_len, 1); + tx_packets[0] = mbuf; + // pkt_hex_dump(netshmem_get_data_buf(obj), pkt_len); + + for (u8_t i = 1; i < batch_tc; i++) { + pkt_len = pkt_arr[i].pkt_len; + pktid = pkt_arr[i].obj_id; + obj = shm_bm_transfer_net_pkt_buf(shm, pktid); + data_paddr = paddr + (u64_t)obj - (u64_t)shm; + + mbuf = cos_allocate_mbuf(g_tx_mp[core_id - 1]); + assert(mbuf); + ext_shinfo = netshmem_get_tailroom((struct netshmem_pkt_buf *)obj); + cos_attach_external_mbuf(mbuf, obj, data_paddr, PKT_BUF_SIZE, ext_buf_free_callback_fn, ext_shinfo); + cos_set_external_packet(mbuf, netshmem_get_data_offset(), pkt_len, 0); + tx_packets[i] = mbuf; + } + + // sync_lock_take(&tx_lock[core_id - 1]); + cos_dev_port_tx_burst(0, core_id - 1, tx_packets, batch_tc); + // sync_lock_release(&tx_lock[core_id - 1]); + + return 0; +} + void nic_shmem_map(cbuf_t shm_id) { diff --git a/src/components/implementation/no_interface/llbooter/llbooter.c b/src/components/implementation/no_interface/llbooter/llbooter.c index 06eda077ee..828f1476ce 100644 --- a/src/components/implementation/no_interface/llbooter/llbooter.c +++ b/src/components/implementation/no_interface/llbooter/llbooter.c @@ -32,7 +32,7 @@ #define INITARGS_MAX_PATHNAME 512 #endif #ifndef BOOTER_CAPMGR_MB -#define BOOTER_CAPMGR_MB 512 +#define BOOTER_CAPMGR_MB 2000 #endif #ifndef BOOTER_MAX_CHKPT #define BOOTER_MAX_CHKPT 64 diff --git a/src/components/implementation/sched/pfprr_quantum_static/main.c b/src/components/implementation/sched/pfprr_quantum_static/main.c index a6ffabf74a..d14e6e4181 100644 --- a/src/components/implementation/sched/pfprr_quantum_static/main.c +++ b/src/components/implementation/sched/pfprr_quantum_static/main.c @@ -587,6 +587,9 @@ slm_ipi_process(void *d) struct slm_thd *current = slm_thd_current(); struct slm_thd *thd; + /* block the IPI thd for test purpose */ + sched_thd_block(0); + while (1) { cos_rcv(r->rcv, RCV_ALL_PENDING, &rcvd); diff --git a/src/components/implementation/simple_nf/simple_nf1/main.c b/src/components/implementation/simple_nf/simple_nf1/main.c index b38d10ec82..fe39b009a7 100644 --- a/src/components/implementation/simple_nf/simple_nf1/main.c +++ b/src/components/implementation/simple_nf/simple_nf1/main.c @@ -7,10 +7,17 @@ #include #include -#define TX_PRIORITY 30 +#define NF_THD_PRIORITY 31 + thdid_t rx_tid = 0; thdid_t tx_tid = 0; +char tx_nf_buffer[4096]; +char rx_nf_buffer[4096]; + +#define RX_BATCH 1 +#define TX_BATCH 1 + static void tx_task(void) { @@ -20,44 +27,120 @@ tx_task(void) netio_shmem_map(netshmem_get_shm_id()); nic_shmem_map(netshmem_get_shm_id()); + shm_bm_objid_t first_objid; + struct netshmem_pkt_buf *first_obj; + struct netshmem_pkt_pri *first_obj_pri; + struct netshmem_meta_tuple *pkt_arr; + u8_t tx_batch_ct = 0; + struct netshmem_pkt_buf *tx_obj; + nic_bind_port(0, 1); + + shm_bm_t tx_shmemd = 0; + tx_shmemd = netshmem_get_shm(); + while(1) { +#if !TX_BATCH objid = netio_get_a_packet(&pkt_len); nic_send_packet(objid, 0, pkt_len); - } -} -void -cos_init(void) -{ - shm_bm_objid_t objid; - struct netshmem_pkt_buf *obj; +#else + u8_t batch_ct = 50; - /* create current component's shmem */ - rx_tid = cos_thdid(); - netshmem_create(rx_tid); - tx_tid = sched_thd_create((void *)tx_task, NULL); - netshmem_create(tx_tid); + first_objid = objid = netio_get_a_packet_batch(batch_ct); + first_obj = shm_bm_transfer_net_pkt_buf(tx_shmemd, objid); + first_obj_pri = netshmem_get_pri(first_obj); + pkt_arr = (struct netshmem_meta_tuple *)&(first_obj_pri->pkt_arr); + tx_batch_ct = first_obj_pri->batch_len; - printc("NF application init shm done\n"); + for (u8_t i = 0; i < tx_batch_ct; i++) { + pkt_len = pkt_arr[i].pkt_len; + objid = pkt_arr[i].obj_id; + tx_obj = shm_bm_transfer_net_pkt_buf(tx_shmemd, objid); + memcpy(tx_nf_buffer, netshmem_get_data_buf(tx_obj), pkt_len); + } + nic_send_packet_batch(first_objid); +#endif + } } -int -parallel_main(coreid_t cid) +static void +rx_task(void) { /* TODO: port NF applications here */ shm_bm_objid_t objid; + struct netshmem_pkt_buf *rx_obj; + shm_bm_objid_t first_objid; + struct netshmem_pkt_buf *first_obj; + struct netshmem_pkt_pri *first_obj_pri; + struct netshmem_meta_tuple *pkt_arr; u16_t pkt_len; - sched_thd_param_set(tx_tid, sched_param_pack(SCHEDP_PRIO, TX_PRIORITY)); + u8_t batch_ct = 50; netio_shmem_map(netshmem_get_shm_id()); nic_shmem_map(netshmem_get_shm_id()); nic_bind_port(0, 0); - while (1) + int i = 0; + u64_t times = 0; + u64_t overhead = 0; + + shm_bm_t rx_shmemd = 0; + + rx_shmemd = netshmem_get_shm(); + while(1) { + u8_t rx_batch_ct = 0; +#if !RX_BATCH objid = nic_get_a_packet(&pkt_len); netio_send_packet(objid, pkt_len); - } +#else + first_objid = nic_get_a_packet_batch(batch_ct); + + first_obj = shm_bm_transfer_net_pkt_buf(rx_shmemd, first_objid); + first_obj_pri = netshmem_get_pri(first_obj); + pkt_arr = (struct netshmem_meta_tuple *)&(first_obj_pri->pkt_arr); + rx_batch_ct = first_obj_pri->batch_len; + + for (u8_t i = 0; i < rx_batch_ct; i++) { + pkt_len = pkt_arr[i].pkt_len; + objid = pkt_arr[i].obj_id; + rx_obj = shm_bm_transfer_net_pkt_buf(rx_shmemd, objid); + memcpy(rx_nf_buffer, netshmem_get_data_buf(rx_obj), pkt_len); + } + + netio_send_packet_batch(first_objid); +#endif + } +} + +void +cos_init(void) +{ +} + + +void +cos_parallel_init(coreid_t cid, int init_core, int ncores) +{ + if (cid == 0) { + rx_tid = sched_thd_create((void *)rx_task, NULL); + netshmem_create(rx_tid); + tx_tid = sched_thd_create((void *)tx_task, NULL); + netshmem_create(tx_tid); + printc("NF rx tid:%ld, tx tid:%ld\n", rx_tid, tx_tid); + } +} + +int +parallel_main(coreid_t cid) +{ + if (cid == 0) { + sched_thd_param_set(rx_tid, sched_param_pack(SCHEDP_PRIO, NF_THD_PRIORITY)); + sched_thd_param_set(tx_tid, sched_param_pack(SCHEDP_PRIO, NF_THD_PRIORITY)); + } + + sched_thd_block(0); + return 0; } diff --git a/src/components/implementation/simple_vmm/vmm/Makefile b/src/components/implementation/simple_vmm/vmm/Makefile index 19294b8eae..4551711ca7 100644 --- a/src/components/implementation/simple_vmm/vmm/Makefile +++ b/src/components/implementation/simple_vmm/vmm/Makefile @@ -6,7 +6,7 @@ INTERFACE_EXPORTS = netio # The interfaces this component is dependent on for compilation (this # is a list of directory names in interface/) -INTERFACE_DEPENDENCIES = contigmem netshmem +INTERFACE_DEPENDENCIES = contigmem netshmem nic # The library dependencies this component is reliant on for # compilation/linking (this is a list of directory names in lib/) LIBRARY_DEPENDENCIES = ubench component kernel initargs vmrt shm_bm diff --git a/src/components/implementation/simple_vmm/vmm/cpuid.h b/src/components/implementation/simple_vmm/vmm/cpuid.h index e178e3305a..cd6bfa93ad 100644 --- a/src/components/implementation/simple_vmm/vmm/cpuid.h +++ b/src/components/implementation/simple_vmm/vmm/cpuid.h @@ -74,6 +74,9 @@ #define CPUID_EDX_TM1 (1U<<29U) #define CPUID_EDX_IA64 (1U<<30U) #define CPUID_EDX_PBE (1U<<31U) + +/* CPUID.06H:EAX.DTHERM */ +#define CPUID_EAX_DTHERM (1U<<0U) /* CPUID.06H:EAX.HWP */ #define CPUID_EAX_HWP (1U<<7U) /* CPUID.06H:EAX.HWP_Notification */ diff --git a/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.c b/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.c index 6c063a21c9..68f42b16bf 100644 --- a/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.c +++ b/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.c @@ -322,16 +322,16 @@ virtio_net_rcv_one_pkt(void *data, int pkt_len) n = vq_getchain(vcpu, vq, &idx, iov, VIRTIO_NET_MAXSEGS, NULL); - if (unlikely (n < 1 || n >= VIRTIO_NET_MAXSEGS )) { - printc("vtnet: virtio_net_tap_rx: vq_getchain = %d\n", n); - assert(0); - } + // if (unlikely (n < 1 || n >= VIRTIO_NET_MAXSEGS )) { + // printc("vtnet: virtio_net_tap_rx: vq_getchain = %d\n", n); + // assert(0); + // } vrx = iov[0].iov_base; /* every packet needs to be proceeded by a virtio_net_rxhdr header space */ riov = rx_iov_trim(iov, &n, sizeof(struct virtio_net_rxhdr)); - assert(iov[0].iov_len >= (size_t)pkt_len); + // assert(iov[0].iov_len >= (size_t)pkt_len); memcpy(iov[0].iov_base, data, pkt_len); @@ -354,7 +354,9 @@ virtio_net_send_one_pkt(void *data, u16_t *pkt_len) u16_t idx; while (!vq_has_descs(vq)) { - sched_thd_block(0); + *pkt_len = 0; + return; + // sched_thd_block(0); } vcpu = vq->vcpu; @@ -398,6 +400,14 @@ virtio_net_outb(u32_t port_id, struct vmrt_vm_vcpu *vcpu) return; } +#define REAL_NIC 0 + +#if REAL_NIC +static u8_t virtio_net_mac[6] = {0x6c, 0xfe, 0x54, 0x40, 0x41, 0x01}; +#else +static u8_t virtio_net_mac[6] = {0x10, 0x10, 0x10, 0x10, 0x10, 0x11}; +#endif + static void virtio_net_inb(u32_t port_id, struct vmrt_vm_vcpu *vcpu) { @@ -420,22 +430,22 @@ virtio_net_inb(u32_t port_id, struct vmrt_vm_vcpu *vcpu) break; /* TODO: read mac address from virtio-net config space */ case VIRTIO_NET_MAC: - vcpu->shared_region->ax = 0x10; + vcpu->shared_region->ax = virtio_net_mac[0]; break; case VIRTIO_NET_MAC1: - vcpu->shared_region->ax = 0x10; + vcpu->shared_region->ax = virtio_net_mac[1]; break; case VIRTIO_NET_MAC2: - vcpu->shared_region->ax = 0x10; + vcpu->shared_region->ax = virtio_net_mac[2]; break; case VIRTIO_NET_MAC3: - vcpu->shared_region->ax = 0x10; + vcpu->shared_region->ax = virtio_net_mac[3]; break; case VIRTIO_NET_MAC4: - vcpu->shared_region->ax = 0x10; + vcpu->shared_region->ax = virtio_net_mac[4]; break; case VIRTIO_NET_MAC5: - vcpu->shared_region->ax = 0x11; + vcpu->shared_region->ax = virtio_net_mac[5]; break; default: VM_PANIC(vcpu); @@ -476,7 +486,6 @@ virtio_net_outw(u32_t port_id, struct vmrt_vm_vcpu *vcpu) break; case VIRTIO_NET_QUEUE_NOTIFY: if (val == VIRTIO_NET_TXQ) { - sched_thd_wakeup(12); } virtio_net_regs.header.queue_notify = val; break; diff --git a/src/components/implementation/simple_vmm/vmm/netio.c b/src/components/implementation/simple_vmm/vmm/netio.c index 89a274cf1e..85c189723a 100644 --- a/src/components/implementation/simple_vmm/vmm/netio.c +++ b/src/components/implementation/simple_vmm/vmm/netio.c @@ -1,6 +1,7 @@ #include #include #include +#include #include @@ -10,16 +11,96 @@ netio_get_a_packet(u16_t *pkt_len) struct netshmem_pkt_buf *tx_obj; shm_bm_t tx_shmemd = 0; shm_bm_objid_t tx_pktid; + u16_t _pkt_len = 0; tx_shmemd = netshmem_get_shm(); tx_obj = shm_bm_alloc_net_pkt_buf(tx_shmemd, &tx_pktid); assert(tx_obj); - virtio_net_send_one_pkt(tx_obj->data, pkt_len); + virtio_net_send_one_pkt(tx_obj->data, &_pkt_len); + *pkt_len = _pkt_len; return tx_pktid; } +void pkt_hex_dump(void *_data, u16_t len) +{ + int rowsize = 16; + int i, l, linelen, remaining; + int li = 0; + u8_t *data, ch; + + data = _data; + + printc("Packet hex dump, len:%d\n", len); + remaining = len; + for (i = 0; i < len; i += rowsize) { + printc("%06d\t", li); + + linelen = remaining < rowsize ? remaining : rowsize; + remaining -= rowsize; + + for (l = 0; l < linelen; l++) { + ch = data[l]; + printc( "%02X ", (u32_t) ch); + } + + data += linelen; + li += 10; + + printc( "dump done\n"); + } +} + +shm_bm_objid_t +netio_get_a_packet_batch(u8_t batch_limit) +{ + struct netshmem_pkt_buf *tx_obj; + shm_bm_t tx_shmemd = 0; + shm_bm_objid_t tx_pktid; + u16_t _pkt_len = 0; + shm_bm_objid_t first_objid; + struct netshmem_pkt_buf *first_obj; + struct netshmem_pkt_pri *first_obj_pri; + struct netshmem_meta_tuple *pkt_arr; + u8_t batch_ct = 0; + + tx_shmemd = netshmem_get_shm(); + tx_obj = first_obj = shm_bm_alloc_net_pkt_buf(tx_shmemd, &tx_pktid); + assert(tx_obj); + first_objid = tx_pktid; + first_obj_pri = netshmem_get_pri(tx_obj); + pkt_arr = (struct netshmem_meta_tuple *)&first_obj_pri->pkt_arr; + first_obj_pri->batch_len = 0; + + while (batch_ct < batch_limit) { + assert(tx_obj); + if (likely(batch_ct > 0)) { + tx_obj = shm_bm_alloc_net_pkt_buf(tx_shmemd, &tx_pktid); + assert(tx_obj); + } + + virtio_net_send_one_pkt(netshmem_get_data_buf(tx_obj), &_pkt_len); + + // pkt_hex_dump(netshmem_get_data_buf(tx_obj), _pkt_len); + if (likely(_pkt_len != 0)) { + pkt_arr[batch_ct].obj_id = tx_pktid; + pkt_arr[batch_ct].pkt_len = _pkt_len; + batch_ct++; + } else { + if (batch_ct == 0) { + extern int sched_thd_block(thdid_t dep_id); + sched_thd_block_timeout(0, ps_tsc() + 2000*1); + } else { + shm_bm_free_net_pkt_buf(tx_obj); + break; + } + } + } + first_obj_pri->batch_len = batch_ct; + return first_objid; +} + int netio_send_packet(shm_bm_objid_t pktid, u16_t pkt_len) { @@ -35,6 +116,46 @@ netio_send_packet(shm_bm_objid_t pktid, u16_t pkt_len) return 0; } +extern int rx_intr; +int +netio_send_packet_batch(shm_bm_objid_t pktid) +{ + struct netshmem_pkt_buf *rx_obj; + shm_bm_objid_t first_objid; + struct netshmem_pkt_buf *first_obj; + struct netshmem_pkt_pri *first_obj_pri; + struct netshmem_meta_tuple *pkt_arr; + u16_t pkt_len; + u8_t batch_tc = 0; + shm_bm_t rx_shmemd = 0; + + rx_shmemd = netshmem_get_shm(); + first_objid = pktid; + + + first_obj = shm_bm_transfer_net_pkt_buf(rx_shmemd, first_objid); + + first_obj_pri = netshmem_get_pri(first_obj); + pkt_arr = (struct netshmem_meta_tuple *)&(first_obj_pri->pkt_arr); + batch_tc = first_obj_pri->batch_len; + + pkt_len = pkt_arr[0].pkt_len; + // pkt_hex_dump(netshmem_get_data_buf(first_obj), pkt_len); + virtio_net_rcv_one_pkt(netshmem_get_data_buf(first_obj), pkt_len); + + for (u8_t i = 1; i < batch_tc; i++) { + pkt_len = pkt_arr[i].pkt_len; + pktid = pkt_arr[i].obj_id; + rx_obj = shm_bm_transfer_net_pkt_buf(rx_shmemd, pktid); + virtio_net_rcv_one_pkt(netshmem_get_data_buf(rx_obj), pkt_len); + shm_bm_free_net_pkt_buf(rx_obj); + } + + shm_bm_free_net_pkt_buf(first_obj); + + return 0; +} + void netio_shmem_map(cbuf_t shm_id) { diff --git a/src/components/implementation/simple_vmm/vmm/simple_vmm.c b/src/components/implementation/simple_vmm/vmm/simple_vmm.c index 716d7a0c80..bdd17c2df3 100644 --- a/src/components/implementation/simple_vmm/vmm/simple_vmm.c +++ b/src/components/implementation/simple_vmm/vmm/simple_vmm.c @@ -24,7 +24,7 @@ INCBIN(bios, "guest/guest.img") static struct vmrt_vm_comp *g_vm; #define VM_MAX_COMPS (2) -#define GUEST_MEM_SZ (64*1024*1024) +#define GUEST_MEM_SZ (320*1024*1024) SS_STATIC_SLAB(vm_comp, struct vmrt_vm_comp, VM_MAX_COMPS); SS_STATIC_SLAB(vm_lapic, struct acrn_vlapic, VM_MAX_COMPS * VMRT_VM_MAX_VCPU); @@ -32,6 +32,13 @@ SS_STATIC_SLAB(vcpu_inst_ctxt, struct instr_emul_ctxt, VM_MAX_COMPS * VMRT_VM_MA SS_STATIC_SLAB(vm_io_apic, struct acrn_vioapics, VM_MAX_COMPS); SS_STATIC_SLAB(vcpu_mmio_req, struct acrn_mmio_request, VM_MAX_COMPS * VMRT_VM_MAX_VCPU); +void +pause_handler(struct vmrt_vm_vcpu *vcpu) +{ + sched_thd_block_timeout(0, ps_tsc() + 2000*1); + GOTO_NEXT_INST(vcpu->shared_region); +} + void mmio_init(struct vmrt_vm_vcpu *vcpu) { @@ -84,7 +91,7 @@ struct vmrt_vm_comp * vm_comp_create(void) { u64_t guest_mem_sz = GUEST_MEM_SZ; - u64_t num_vcpu = NUM_CPU; + u64_t num_vcpu = 1; void *start; void *end; cbuf_t shm_id; @@ -97,7 +104,7 @@ vm_comp_create(void) vmrt_vm_create(vm, "vmlinux-5.15", num_vcpu, guest_mem_sz); /* Allocate memory for the VM */ - shm_id = contigmem_shared_alloc_aligned(guest_mem_sz / PAGE_SIZE_4K, PAGE_SIZE_4K, (vaddr_t *)&mem); + shm_id = memmgr_shared_page_allocn_aligned(guest_mem_sz / PAGE_SIZE_4K, PAGE_SIZE_4K, (vaddr_t *)&mem); /* Make the memory accessible to VM */ memmgr_shared_page_map_aligned_in_vm(shm_id, PAGE_SIZE_4K, (vaddr_t *)&vm_mem, vm->comp_id); vmrt_vm_mem_init(vm, mem); @@ -130,19 +137,25 @@ vm_comp_create(void) void cos_init(void) { - g_vm = vm_comp_create(); } void cos_parallel_init(coreid_t cid, int init_core, int ncores) { struct vmrt_vm_vcpu *vcpu; - vmrt_vm_vcpu_init(g_vm, cid); - vcpu = vmrt_get_vcpu(g_vm, cid); - lapic_init(vcpu); - iinst_ctxt_init(vcpu); - mmio_init(vcpu); + if (cid != 0 || NUM_CPU == 1) + { + cid = 0; + g_vm = vm_comp_create(); + vmrt_vm_vcpu_init(g_vm, cid); + vcpu = vmrt_get_vcpu(g_vm, cid); + + lapic_init(vcpu); + iinst_ctxt_init(vcpu); + mmio_init(vcpu); + } + return; } @@ -150,14 +163,18 @@ void parallel_main(coreid_t cid) { struct vmrt_vm_vcpu *vcpu; - vcpu = vmrt_get_vcpu(g_vm, cid); - - vmrt_vm_vcpu_start(vcpu); + if (cid != 0 || NUM_CPU == 1) { + cid = 0; + vcpu = vmrt_get_vcpu(g_vm, cid); + vmrt_vm_vcpu_start(vcpu); + } while (1) { sched_thd_block(0); /* Should not be here, or there is a bug in the scheduler! */ assert(0); } + + } diff --git a/src/components/implementation/simple_vmm/vmm/vcpuid.c b/src/components/implementation/simple_vmm/vmm/vcpuid.c index 54b8124000..0335ccb596 100644 --- a/src/components/implementation/simple_vmm/vmm/vcpuid.c +++ b/src/components/implementation/simple_vmm/vmm/vcpuid.c @@ -87,7 +87,7 @@ static void init_vcpuid_entry(uint32_t leaf, uint32_t subleaf, case 0x06U: cpuid_subleaf(leaf, subleaf, &entry->eax, &entry->ebx, &entry->ecx, &entry->edx); - entry->eax &= ~(CPUID_EAX_HWP | CPUID_EAX_HWP_N | CPUID_EAX_HWP_AW | CPUID_EAX_HWP_EPP | CPUID_EAX_HWP_PLR); + entry->eax &= ~(CPUID_EAX_DTHERM | CPUID_EAX_HWP | CPUID_EAX_HWP_N | CPUID_EAX_HWP_AW | CPUID_EAX_HWP_EPP | CPUID_EAX_HWP_PLR); entry->ecx &= ~CPUID_ECX_HCFC; break; @@ -545,7 +545,7 @@ static void guest_cpuid_01h(struct vmrt_vm_vcpu *vcpu, uint32_t *eax, uint32_t * /* * Hide MONITOR/MWAIT. */ - *ecx &= ~CPUID_ECX_MONITOR; + // *ecx &= ~CPUID_ECX_MONITOR; /* Warning: should we support CPUID_ECX_OSXSAVE in VM? Let's begin with not setting it first */ *ecx &= ~CPUID_ECX_OSXSAVE; @@ -558,6 +558,9 @@ static void guest_cpuid_01h(struct vmrt_vm_vcpu *vcpu, uint32_t *eax, uint32_t * } } + /* disable thermal ctrl*/ + *edx &= ~CPUID_EDX_TM1; + *edx &= ~CPUID_EDX_VME; *edx &= ~CPUID_EDX_DE; diff --git a/src/components/interface/netio/netio.h b/src/components/interface/netio/netio.h index c49214a011..59913e62ec 100644 --- a/src/components/interface/netio/netio.h +++ b/src/components/interface/netio/netio.h @@ -8,6 +8,8 @@ shm_bm_objid_t netio_get_a_packet(u16_t *pkt_len); int netio_send_packet(shm_bm_objid_t pktid, u16_t pkt_len); +int netio_send_packet_batch(shm_bm_objid_t pktid); +shm_bm_objid_t netio_get_a_packet_batch(u8_t batch_limit); void netio_shmem_map(cbuf_t shm_id); #endif diff --git a/src/components/interface/netio/stubs/stubs.S b/src/components/interface/netio/stubs/stubs.S index d40a9d9128..3cf49d7982 100644 --- a/src/components/interface/netio/stubs/stubs.S +++ b/src/components/interface/netio/stubs/stubs.S @@ -2,4 +2,6 @@ cos_asm_stub_indirect(netio_get_a_packet) cos_asm_stub(netio_send_packet) +cos_asm_stub(netio_send_packet_batch) +cos_asm_stub(netio_get_a_packet_batch) cos_asm_stub(netio_shmem_map) diff --git a/src/components/interface/netshmem/netshmem.h b/src/components/interface/netshmem/netshmem.h index f908d3dbb9..621d103564 100644 --- a/src/components/interface/netshmem/netshmem.h +++ b/src/components/interface/netshmem/netshmem.h @@ -26,10 +26,23 @@ struct netshmem { * This is the offset size of netshmem_pkt_buf.data for application to write data. * HEADROOM is used for lwip to set ether & ip & tcp/udp headers */ -#define NETSHMEM_HEADROOM 128 +#define NETSHMEM_HEADROOM 256 /* This tailroom is the last few bytes in the shmem, used to store user specific data */ -#define NETSHMEM_TAILROOM 128 +#define NETSHMEM_TAILROOM 64 +#define NETSHMEM_MAX_BATCH_LEN 60 + +struct netshmem_meta_tuple +{ + u16_t pkt_len; + u16_t obj_id; +}; + + +struct netshmem_pkt_pri { + u16_t batch_len; + struct netshmem_meta_tuple pkt_arr[NETSHMEM_MAX_BATCH_LEN]; +}; struct netshmem_pkt_buf { char data[PKT_BUF_SIZE]; @@ -53,6 +66,11 @@ void netshemem_move(thdid_t old, thdid_t new); /* map a shmem for a client component */ void netshmem_map_shmem(cbuf_t shm_id); +static inline struct netshmem_pkt_pri *netshmem_get_pri(struct netshmem_pkt_buf *pkt_buf) +{ + return (struct netshmem_pkt_pri *)pkt_buf; +} + static inline void * netshmem_get_data_buf(struct netshmem_pkt_buf *pkt_buf) { return (char *)pkt_buf + NETSHMEM_HEADROOM; diff --git a/src/components/interface/nic/nic.h b/src/components/interface/nic/nic.h index 4ac39f6a55..5624be31fc 100644 --- a/src/components/interface/nic/nic.h +++ b/src/components/interface/nic/nic.h @@ -9,6 +9,7 @@ void nic_shmem_map(cbuf_t shm_id); int nic_send_packet(shm_bm_objid_t pktid, u16_t pkt_offset, u16_t pkt_len); +int nic_send_packet_batch(shm_bm_objid_t pktid); int nic_bind_port(u32_t ip_addr, u16_t port); u64_t nic_get_port_mac_address(u16_t port); @@ -18,4 +19,5 @@ u64_t nic_get_port_mac_address(u16_t port); * and return its shmem objectid. */ shm_bm_objid_t nic_get_a_packet(u16_t *pkt_len); +shm_bm_objid_t nic_get_a_packet_batch(u8_t batch_limit); #endif /* NIC_H */ diff --git a/src/components/interface/nic/stubs/stubs.S b/src/components/interface/nic/stubs/stubs.S index 04fab85efb..c0a895aebe 100644 --- a/src/components/interface/nic/stubs/stubs.S +++ b/src/components/interface/nic/stubs/stubs.S @@ -1,6 +1,8 @@ #include cos_asm_stub(nic_send_packet) +cos_asm_stub(nic_send_packet_batch) +cos_asm_stub(nic_get_a_packet_batch) cos_asm_stub(nic_bind_port) cos_asm_stub_indirect(nic_get_a_packet) cos_asm_stub(nic_shmem_map) diff --git a/src/components/lib/slm/quantum.c b/src/components/lib/slm/quantum.c index 3c05c94588..a77f47ade1 100644 --- a/src/components/lib/slm/quantum.c +++ b/src/components/lib/slm/quantum.c @@ -164,7 +164,7 @@ slm_policy_timer_init(microsec_t period) int slm_timer_quantum_init(void) { - slm_policy_timer_init(50); + slm_policy_timer_init(160); return 0; } diff --git a/src/components/lib/vmrt/vmrt.c b/src/components/lib/vmrt/vmrt.c index 053ebdc2a8..3329e09238 100644 --- a/src/components/lib/vmrt/vmrt.c +++ b/src/components/lib/vmrt/vmrt.c @@ -281,6 +281,12 @@ cpuid_handler(struct vmrt_vm_vcpu *vcpu) VM_PANIC(vcpu); } +CWEAKSYMB void +pause_handler(struct vmrt_vm_vcpu *vcpu) +{ + VM_PANIC(vcpu); +} + CWEAKSYMB void ctrl_register_access_handler(struct vmrt_vm_vcpu *vcpu) @@ -431,7 +437,7 @@ vmrt_handle_reason(struct vmrt_vm_vcpu *vcpu, u64_t reason) break; case VM_EXIT_REASON_PAUSE: /* TODO: handle pause exception */ - GOTO_NEXT_INST(vcpu->shared_region); + pause_handler(vcpu); break; case VM_EXIT_REASON_EPT_VIOLATION: ept_violation_handler(vcpu); @@ -462,7 +468,7 @@ void vmrt_vm_vcpu_start(struct vmrt_vm_vcpu *vcpu) { /* This is actually just to "push" the vcpu handler thread into run queue. */ - sched_thd_param_set(vcpu->handler_tid, sched_param_pack(SCHEDP_PRIO, 30)); + sched_thd_param_set(vcpu->handler_tid, sched_param_pack(SCHEDP_PRIO, 31)); } void diff --git a/src/platform/x86_64/vmx/vmx.c b/src/platform/x86_64/vmx/vmx.c index 9139fb1bc1..09c680fd4d 100644 --- a/src/platform/x86_64/vmx/vmx.c +++ b/src/platform/x86_64/vmx/vmx.c @@ -118,7 +118,7 @@ vmx_guest_state_init(struct thread *thd) #define DATA_ACCESS_RIGHT (0x3 | 1 << 4 | 1 << 7) #define CODE_ACCESS_RIGHT (0x3 | 1 << 4 | 1 << 7 | 1 << 13) #define LDTR_ACCESS_RIGHT (0x2 | 1 << 7) - #define TR_ACCESS_RIGHT (0x3 | 1 << 7) + #define TR_ACCESS_RIGHT (0xB | 1 << 7) vmwrite(GUEST_CS_ACCESS_RIGHTS, CODE_ACCESS_RIGHT); vmwrite(GUEST_DS_ACCESS_RIGHTS, DATA_ACCESS_RIGHT); vmwrite(GUEST_ES_ACCESS_RIGHTS, DATA_ACCESS_RIGHT); diff --git a/tools/run.sh b/tools/run.sh index af9dd98e2d..82aa50840c 100755 --- a/tools/run.sh +++ b/tools/run.sh @@ -42,12 +42,12 @@ then debug_flag="-S" if [ "${nic_flag}" == "enable-nic" ] then - nic_flag=" -netdev type=tap,id=net0,ifname=tap0,script=no,downscript=no -device vmxnet3,netdev=net0,mac=66:66:66:66:66:66 " + nic_flag=" -netdev type=tap,id=net0,vhost=on,ifname=tap0,script=no,downscript=no -device vmxnet3,netdev=net0,mac=66:66:66:66:66:66 " fi elif [ "${debug_flag}" == "enable-nic" ] then debug_flag="" - nic_flag=" -netdev type=tap,id=net0,ifname=tap0,script=no,downscript=no -device vmxnet3,netdev=net0,mac=66:66:66:66:66:66 " + nic_flag=" -netdev type=tap,id=net0,vhost=on,ifname=tap0,script=no,downscript=no -device vmxnet3,netdev=net0,mac=66:66:66:66:66:66 " fi if [ "${arch}" == "x86_64" ] From f6b0d280686a3b9891861d7e88ac31f999ca7562 Mon Sep 17 00:00:00 2001 From: betahxy Date: Wed, 6 Mar 2024 05:59:00 -0500 Subject: [PATCH 04/60] simple vmm without NF interposition --- composition_scripts/vmm_no_nf.toml | 41 ++++++ .../simple_nf/simple_nf1/main.c | 9 +- .../implementation/simple_vmm/vmm/Makefile | 2 +- .../implementation/simple_vmm/vmm/netio.c | 3 +- .../simple_vmm/vmm/simple_vmm.c | 137 ++++++++++++++++++ 5 files changed, 188 insertions(+), 4 deletions(-) create mode 100644 composition_scripts/vmm_no_nf.toml diff --git a/composition_scripts/vmm_no_nf.toml b/composition_scripts/vmm_no_nf.toml new file mode 100644 index 0000000000..5554aaa005 --- /dev/null +++ b/composition_scripts/vmm_no_nf.toml @@ -0,0 +1,41 @@ +[system] +description = "Simple VMM test without NF" + +[[components]] +name = "booter" +img = "no_interface.llbooter" +implements = [{interface = "init"}, {interface = "addr"}] +deps = [{srv = "kernel", interface = "init", variant = "kernel"}] +constructor = "kernel" + +[[components]] +name = "capmgr" +img = "capmgr.simple" +deps = [{srv = "booter", interface = "init"}, {srv = "booter", interface = "addr"}] +implements = [{interface = "capmgr"}, {interface = "init"}, {interface = "memmgr"}, {interface = "capmgr_create"}, {interface = "contigmem"}] +constructor = "booter" +baseaddr = "0x1000000" + +[[components]] +name = "sched" +img = "sched.pfprr_quantum_static" +deps = [{srv = "capmgr", interface = "init"}, {srv = "capmgr", interface = "capmgr"}, {srv = "capmgr", interface = "memmgr"}] +implements = [{interface = "sched"}, {interface = "syncipc"}, {interface = "init"}] +constructor = "booter" +baseaddr = "0x1600000" + +[[components]] +name = "nicmgr" +img = "nicmgr.dpdk" +deps = [{srv = "sched", interface = "sched"}, {srv = "sched", interface = "init"}, {srv = "capmgr", interface = "capmgr_create"}, {srv = "capmgr", interface = "memmgr"}, {srv = "capmgr", interface = "contigmem"}] +implements = [{interface = "nic"}] +constructor = "booter" +baseaddr = "0x6000000" + +[[components]] +name = "vmm" +img = "simple_vmm.vmm" +deps = [{srv = "sched", interface = "sched"}, {srv = "sched", interface = "init"},{srv = "capmgr", interface = "capmgr"}, {srv = "capmgr", interface = "memmgr"}, {srv = "capmgr", interface = "contigmem"}, {srv = "nicmgr", interface = "nic"}] +implements = [{interface = "netio"}] +constructor = "booter" +baseaddr = "0x2000000" diff --git a/src/components/implementation/simple_nf/simple_nf1/main.c b/src/components/implementation/simple_nf/simple_nf1/main.c index fe39b009a7..a3cd96c6ce 100644 --- a/src/components/implementation/simple_nf/simple_nf1/main.c +++ b/src/components/implementation/simple_nf/simple_nf1/main.c @@ -18,6 +18,9 @@ char rx_nf_buffer[4096]; #define RX_BATCH 1 #define TX_BATCH 1 +#define RX_PROCESSING 0 +#define TX_PROCESSING 0 + static void tx_task(void) { @@ -52,13 +55,14 @@ tx_task(void) first_obj_pri = netshmem_get_pri(first_obj); pkt_arr = (struct netshmem_meta_tuple *)&(first_obj_pri->pkt_arr); tx_batch_ct = first_obj_pri->batch_len; - +#if TX_PROCESSING for (u8_t i = 0; i < tx_batch_ct; i++) { pkt_len = pkt_arr[i].pkt_len; objid = pkt_arr[i].obj_id; tx_obj = shm_bm_transfer_net_pkt_buf(tx_shmemd, objid); memcpy(tx_nf_buffer, netshmem_get_data_buf(tx_obj), pkt_len); } +#endif nic_send_packet_batch(first_objid); #endif } @@ -102,13 +106,14 @@ rx_task(void) first_obj_pri = netshmem_get_pri(first_obj); pkt_arr = (struct netshmem_meta_tuple *)&(first_obj_pri->pkt_arr); rx_batch_ct = first_obj_pri->batch_len; - +#if RX_PROCESSING for (u8_t i = 0; i < rx_batch_ct; i++) { pkt_len = pkt_arr[i].pkt_len; objid = pkt_arr[i].obj_id; rx_obj = shm_bm_transfer_net_pkt_buf(rx_shmemd, objid); memcpy(rx_nf_buffer, netshmem_get_data_buf(rx_obj), pkt_len); } +#endif netio_send_packet_batch(first_objid); #endif diff --git a/src/components/implementation/simple_vmm/vmm/Makefile b/src/components/implementation/simple_vmm/vmm/Makefile index 4551711ca7..dc015fe7a8 100644 --- a/src/components/implementation/simple_vmm/vmm/Makefile +++ b/src/components/implementation/simple_vmm/vmm/Makefile @@ -6,7 +6,7 @@ INTERFACE_EXPORTS = netio # The interfaces this component is dependent on for compilation (this # is a list of directory names in interface/) -INTERFACE_DEPENDENCIES = contigmem netshmem nic +INTERFACE_DEPENDENCIES = contigmem netshmem nic sched nic # The library dependencies this component is reliant on for # compilation/linking (this is a list of directory names in lib/) LIBRARY_DEPENDENCIES = ubench component kernel initargs vmrt shm_bm diff --git a/src/components/implementation/simple_vmm/vmm/netio.c b/src/components/implementation/simple_vmm/vmm/netio.c index 85c189723a..683b3af5a4 100644 --- a/src/components/implementation/simple_vmm/vmm/netio.c +++ b/src/components/implementation/simple_vmm/vmm/netio.c @@ -2,6 +2,7 @@ #include #include #include +#include #include @@ -116,7 +117,7 @@ netio_send_packet(shm_bm_objid_t pktid, u16_t pkt_len) return 0; } -extern int rx_intr; + int netio_send_packet_batch(shm_bm_objid_t pktid) { diff --git a/src/components/implementation/simple_vmm/vmm/simple_vmm.c b/src/components/implementation/simple_vmm/vmm/simple_vmm.c index bdd17c2df3..acea92a4f8 100644 --- a/src/components/implementation/simple_vmm/vmm/simple_vmm.c +++ b/src/components/implementation/simple_vmm/vmm/simple_vmm.c @@ -13,10 +13,30 @@ #include #include #include +#include +#include +#include #include #include +#define NF_THD_PRIORITY 31 + +#define NO_NF_TEST 1 + +#define RX_BATCH 1 +#define TX_BATCH 1 + +#define RX_PROCESSING 0 +#define TX_PROCESSING 0 + +thdid_t rx_tid = 0; +thdid_t tx_tid = 0; + +char tx_nf_buffer[4096]; +char rx_nf_buffer[4096]; + + INCBIN(vmlinux, "guest/vmlinux.img") INCBIN(bios, "guest/guest.img") @@ -134,6 +154,106 @@ vm_comp_create(void) return vm; } +static void +tx_task(void) +{ + u16_t pkt_len; + shm_bm_objid_t objid; + + // netio_shmem_map(netshmem_get_shm_id()); + nic_shmem_map(netshmem_get_shm_id()); + + shm_bm_objid_t first_objid; + struct netshmem_pkt_buf *first_obj; + struct netshmem_pkt_pri *first_obj_pri; + struct netshmem_meta_tuple *pkt_arr; + u8_t tx_batch_ct = 0; + struct netshmem_pkt_buf *tx_obj; + + nic_bind_port(0, 1); + + shm_bm_t tx_shmemd = 0; + tx_shmemd = netshmem_get_shm(); + + while(1) { +#if !TX_BATCH + objid = netio_get_a_packet(&pkt_len); + nic_send_packet(objid, 0, pkt_len); + +#else + u8_t batch_ct = 50; + + first_objid = objid = netio_get_a_packet_batch(batch_ct); + first_obj = shm_bm_transfer_net_pkt_buf(tx_shmemd, objid); + first_obj_pri = netshmem_get_pri(first_obj); + pkt_arr = (struct netshmem_meta_tuple *)&(first_obj_pri->pkt_arr); + tx_batch_ct = first_obj_pri->batch_len; + +#if TX_PROCESSING + for (u8_t i = 0; i < tx_batch_ct; i++) { + pkt_len = pkt_arr[i].pkt_len; + objid = pkt_arr[i].obj_id; + tx_obj = shm_bm_transfer_net_pkt_buf(tx_shmemd, objid); + memcpy(tx_nf_buffer, netshmem_get_data_buf(tx_obj), pkt_len); + } +#endif + nic_send_packet_batch(first_objid); +#endif + } +} + +static void +rx_task(void) +{ + /* TODO: port NF applications here */ + shm_bm_objid_t objid; + struct netshmem_pkt_buf *rx_obj; + shm_bm_objid_t first_objid; + struct netshmem_pkt_buf *first_obj; + struct netshmem_pkt_pri *first_obj_pri; + struct netshmem_meta_tuple *pkt_arr; + u16_t pkt_len; + + u8_t batch_ct = 50; + + // netio_shmem_map(netshmem_get_shm_id()); + nic_shmem_map(netshmem_get_shm_id()); + nic_bind_port(0, 0); + + int i = 0; + u64_t times = 0; + u64_t overhead = 0; + + shm_bm_t rx_shmemd = 0; + + rx_shmemd = netshmem_get_shm(); + while(1) + { + u8_t rx_batch_ct = 0; +#if !RX_BATCH + objid = nic_get_a_packet(&pkt_len); + netio_send_packet(objid, pkt_len); +#else + first_objid = nic_get_a_packet_batch(batch_ct); + + first_obj = shm_bm_transfer_net_pkt_buf(rx_shmemd, first_objid); + first_obj_pri = netshmem_get_pri(first_obj); + pkt_arr = (struct netshmem_meta_tuple *)&(first_obj_pri->pkt_arr); + rx_batch_ct = first_obj_pri->batch_len; +#if RX_PROCESSING + for (u8_t i = 0; i < rx_batch_ct; i++) { + pkt_len = pkt_arr[i].pkt_len; + objid = pkt_arr[i].obj_id; + rx_obj = shm_bm_transfer_net_pkt_buf(rx_shmemd, objid); + memcpy(rx_nf_buffer, netshmem_get_data_buf(rx_obj), pkt_len); + } +#endif + + netio_send_packet_batch(first_objid); +#endif + } +} + void cos_init(void) { @@ -143,6 +263,15 @@ void cos_parallel_init(coreid_t cid, int init_core, int ncores) { struct vmrt_vm_vcpu *vcpu; +#if NO_NF_TEST + if (cid == 0) { + rx_tid = sched_thd_create((void *)rx_task, NULL); + netshmem_create(rx_tid); + tx_tid = sched_thd_create((void *)tx_task, NULL); + netshmem_create(tx_tid); + printc("NF rx tid:%ld, tx tid:%ld\n", rx_tid, tx_tid); + } +#endif if (cid != 0 || NUM_CPU == 1) { @@ -169,6 +298,14 @@ parallel_main(coreid_t cid) vcpu = vmrt_get_vcpu(g_vm, cid); vmrt_vm_vcpu_start(vcpu); } + +#if NO_NF_TEST + if (cid == 0) { + sched_thd_param_set(rx_tid, sched_param_pack(SCHEDP_PRIO, NF_THD_PRIORITY)); + sched_thd_param_set(tx_tid, sched_param_pack(SCHEDP_PRIO, NF_THD_PRIORITY)); + } +#endif + while (1) { sched_thd_block(0); From 75a0d2caaee715d3168791563539ee651cefa0fe Mon Sep 17 00:00:00 2001 From: betahxy Date: Tue, 12 Mar 2024 07:00:01 -0400 Subject: [PATCH 05/60] debug nf session --- .../implementation/capmgr/simple/capmgr.c | 2 +- .../implementation/nicmgr/dpdk/init.c | 4 +- .../implementation/nicmgr/dpdk/nicmgr.c | 9 +- .../no_interface/llbooter/llbooter.c | 2 +- .../sched/pfprr_quantum_static/main.c | 12 + .../simple_nf/simple_nf1/main.c | 2 +- .../implementation/simple_vmm/vmm/Makefile | 2 +- .../vmm/devices/vpci/virtio_net_io.c | 248 ++++++++++++++---- .../vmm/devices/vpci/virtio_net_io.h | 12 +- .../simple_vmm/vmm/devices/vpci/vpci.c | 4 +- .../implementation/simple_vmm/vmm/netio.c | 101 ++++++- .../simple_vmm/vmm/nf_session.c | 76 ++++++ .../simple_vmm/vmm/nf_session.h | 46 ++++ .../simple_vmm/vmm/simple_vmm.c | 114 ++++++-- src/components/interface/sched/sched.h | 2 + src/components/interface/sched/stubs/stubs.S | 1 + src/components/lib/slm/quantum.c | 2 +- src/components/lib/vmrt/vmrt.c | 2 +- src/components/lib/vmrt/vmrt.h | 4 + src/composer/src/resources.rs | 2 +- src/platform/i386/chal/shared/cos_config.h | 2 +- 21 files changed, 558 insertions(+), 91 deletions(-) create mode 100644 src/components/implementation/simple_vmm/vmm/nf_session.c create mode 100644 src/components/implementation/simple_vmm/vmm/nf_session.h diff --git a/src/components/implementation/capmgr/simple/capmgr.c b/src/components/implementation/capmgr/simple/capmgr.c index cc836bb414..34f3dd29bf 100644 --- a/src/components/implementation/capmgr/simple/capmgr.c +++ b/src/components/implementation/capmgr/simple/capmgr.c @@ -73,7 +73,7 @@ SS_STATIC_SLAB(asnd, struct cm_asnd, MAX_NUM_THREADS); /* 64 MiB */ #define MB2PAGES(mb) (round_up_to_page(mb * 1024 * 1024) / PAGE_SIZE) -#define MM_NPAGES (MB2PAGES(1500)) +#define MM_NPAGES (MB2PAGES(600)) SS_STATIC_SLAB(page, struct mm_page, MM_NPAGES); SS_STATIC_SLAB(span, struct mm_span, MM_NPAGES); diff --git a/src/components/implementation/nicmgr/dpdk/init.c b/src/components/implementation/nicmgr/dpdk/init.c index 24c01e445d..ae5bf5f4c6 100644 --- a/src/components/implementation/nicmgr/dpdk/init.c +++ b/src/components/implementation/nicmgr/dpdk/init.c @@ -197,7 +197,7 @@ process_rx_packets(cos_portid_t port_id, char** rx_pkts, uint16_t nb_pkts) } enqueued_rx++; - sync_sem_give(&session->sem); + // sync_sem_give(&session->sem); } } @@ -402,7 +402,6 @@ parallel_main(coreid_t cid) /* DPDK rx and tx will only run on core 0 */ if(cid == 0) { sched_thd_param_set(recv_tid, sched_param_pack(SCHEDP_PRIO, RECV_THD_PRIORITY)); - sched_thd_block(0); } else { #if 0 #if E810_NIC == 0 @@ -414,6 +413,7 @@ parallel_main(coreid_t cid) #endif #endif } + sched_thd_block(0); return 0; } diff --git a/src/components/implementation/nicmgr/dpdk/nicmgr.c b/src/components/implementation/nicmgr/dpdk/nicmgr.c index a78d683e99..e88f1df9c9 100644 --- a/src/components/implementation/nicmgr/dpdk/nicmgr.c +++ b/src/components/implementation/nicmgr/dpdk/nicmgr.c @@ -142,15 +142,18 @@ nic_get_a_packet_batch(u8_t batch_limit) pkt_arr = (struct netshmem_meta_tuple *)&first_obj_pri->pkt_arr; first_obj_pri->batch_len = 0; - sync_sem_take(&session->sem); + // sync_sem_take(&session->sem); - assert(!pkt_ring_buf_empty(&session->pkt_ring_buf)); + // assert(!pkt_ring_buf_empty(&session->pkt_ring_buf)); + while (pkt_ring_buf_empty(&session->pkt_ring_buf)) { + sched_thd_yield(); + } while (batch_ct < batch_limit && pkt_ring_buf_dequeue(&session->pkt_ring_buf, &buf)) { assert(buf.pkt); if (likely(batch_ct > 0)) { obj = shm_bm_alloc_net_pkt_buf(session->shemem_info.shm, &objid); - sync_sem_take(&session->sem); + // sync_sem_take(&session->sem); assert(obj); } diff --git a/src/components/implementation/no_interface/llbooter/llbooter.c b/src/components/implementation/no_interface/llbooter/llbooter.c index 828f1476ce..c5c813203e 100644 --- a/src/components/implementation/no_interface/llbooter/llbooter.c +++ b/src/components/implementation/no_interface/llbooter/llbooter.c @@ -32,7 +32,7 @@ #define INITARGS_MAX_PATHNAME 512 #endif #ifndef BOOTER_CAPMGR_MB -#define BOOTER_CAPMGR_MB 2000 +#define BOOTER_CAPMGR_MB 600 #endif #ifndef BOOTER_MAX_CHKPT #define BOOTER_MAX_CHKPT 64 diff --git a/src/components/implementation/sched/pfprr_quantum_static/main.c b/src/components/implementation/sched/pfprr_quantum_static/main.c index d14e6e4181..dd86a9dd29 100644 --- a/src/components/implementation/sched/pfprr_quantum_static/main.c +++ b/src/components/implementation/sched/pfprr_quantum_static/main.c @@ -150,6 +150,18 @@ sched_thd_yield_to(thdid_t t) return ret; } +int +sched_thd_yield(void) +{ + struct slm_thd *current = slm_thd_current(); + int ret; + + slm_cs_enter(current, SLM_CS_NONE); + slm_sched_yield(current, 0); + ret = slm_cs_exit_reschedule(current, SLM_CS_NONE); + + return ret; +} void sched_set_tls(void* tls_addr) diff --git a/src/components/implementation/simple_nf/simple_nf1/main.c b/src/components/implementation/simple_nf/simple_nf1/main.c index a3cd96c6ce..2b054a5545 100644 --- a/src/components/implementation/simple_nf/simple_nf1/main.c +++ b/src/components/implementation/simple_nf/simple_nf1/main.c @@ -7,7 +7,7 @@ #include #include -#define NF_THD_PRIORITY 31 +#define NF_THD_PRIORITY 2 thdid_t rx_tid = 0; thdid_t tx_tid = 0; diff --git a/src/components/implementation/simple_vmm/vmm/Makefile b/src/components/implementation/simple_vmm/vmm/Makefile index dc015fe7a8..c9be9cfe36 100644 --- a/src/components/implementation/simple_vmm/vmm/Makefile +++ b/src/components/implementation/simple_vmm/vmm/Makefile @@ -9,7 +9,7 @@ INTERFACE_EXPORTS = netio INTERFACE_DEPENDENCIES = contigmem netshmem nic sched nic # The library dependencies this component is reliant on for # compilation/linking (this is a list of directory names in lib/) -LIBRARY_DEPENDENCIES = ubench component kernel initargs vmrt shm_bm +LIBRARY_DEPENDENCIES = ubench component kernel initargs vmrt shm_bm sync time ck # Note: Both the interface and library dependencies should be # *minimal*. That is to say that removing a dependency should cause # the build to fail. The build system does not validate this diff --git a/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.c b/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.c index 68f42b16bf..b448e19668 100644 --- a/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.c +++ b/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.c @@ -28,16 +28,68 @@ #include #include #include +#include +#include #include "virtio_net_io.h" #include "vpci.h" #include "virtio_ring.h" +#include +#include +#include +#include + + /* TODO: remove this warning flag when virtio-net is done */ #pragma GCC diagnostic ignored "-Wunused-but-set-variable" -static struct virtio_net_io_reg virtio_net_regs; -static struct virtio_queue virtio_queues[2]; -struct virtio_vq_info virtio_net_vqs[VIRTIO_NET_MAXQ - 1]; +static struct virtio_net_io_reg virtio_net_regs[VMRT_MAX_VM]; +static struct virtio_queue virtio_queues[VMRT_MAX_VM][2]; +static struct virtio_vq_info virtio_net_vqs[VMRT_MAX_VM][VIRTIO_NET_MAXQ - 1]; + +static inline struct virtio_net_io_reg *get_virtio_net_regs(struct vmrt_vm_vcpu *vcpu) { + return &virtio_net_regs[vcpu->vm->comp_id]; +} + +static inline struct virtio_queue *get_virtio_queue(struct vmrt_vm_vcpu *vcpu, int nr_queue) { + return &virtio_queues[vcpu->vm->comp_id][nr_queue]; +} + +static inline struct virtio_vq_info *get_virtio_net_vqs(struct vmrt_vm_comp *vm, int nr_queue) { + return &virtio_net_vqs[vm->comp_id][nr_queue]; +} + +static u8_t virtio_net_mac[VMRT_MAX_VM][6] = { + {0x10, 0x10, 0x10, 0x10, 0x10, 0x11}, + {0x10, 0x10, 0x10, 0x10, 0x10, 0x13}, + {0x10, 0x10, 0x10, 0x10, 0x10, 0x15}, + {0x10, 0x10, 0x10, 0x10, 0x10, 0x17}, + {0x10, 0x10, 0x10, 0x10, 0x10, 0x19}, + {0x10, 0x10, 0x10, 0x10, 0x10, 0x1a}, + {0x10, 0x10, 0x10, 0x10, 0x10, 0x1b}, + {0x10, 0x10, 0x10, 0x10, 0x10, 0x1c}, + {0x10, 0x10, 0x10, 0x10, 0x10, 0x1d}, + {0x10, 0x10, 0x10, 0x10, 0x10, 0x1e}, + }; + + +static struct vmrt_vm_comp *mac_to_vm[VMRT_MAX_VM] = {0}; + +void +vm_mac_tbl_update(compid_t comp_id, struct vmrt_vm_comp *vm) { + mac_to_vm[comp_id] = vm; +} + +struct vmrt_vm_comp *get_vm_from_mac(u8_t *mac) { + for (int i = 0; i < VMRT_MAX_VM; i++) { + if(!memcmp(virtio_net_mac[i], mac, 6)) { + return mac_to_vm[i]; + } + } + + return NULL; +} + static unsigned char icmp_reply[] = { /* TODO: remove icmp reply and process nic input from nic component */ @@ -91,7 +143,7 @@ vq_endchains(struct vmrt_vm_vcpu *vcpu, struct virtio_vq_info *vq, int used_all_ !(vq->avail->flags & VRING_AVAIL_F_NO_INTERRUPT); if (intr) { - virtio_net_regs.header.ISR = 1; + get_virtio_net_regs(vcpu)->header.ISR = 1; /* TODO: 57 is virtio-net interrupt without io apic, 33 is with io apic */ #if VMX_SUPPORT_POSTED_INTR vlapic_set_intr(vcpu, 33, 0); @@ -123,7 +175,8 @@ virtio_vq_init(struct vmrt_vm_vcpu *vcpu, int nr_queue, u32_t pfn) size_t size; char *vb; - vq = &virtio_net_vqs[nr_queue]; + vq = get_virtio_net_vqs(vcpu->vm, nr_queue); + vq->pfn = pfn; phys = (u64_t)pfn << VRING_PAGE_BITS; size = vring_size(vq->qsize, VIRTIO_PCI_VRING_ALIGN); @@ -311,8 +364,10 @@ virtio_net_rcv_one_pkt(void *data, int pkt_len) int n; u16_t idx; int ret; + struct vmrt_vm_comp *vm = get_vm_from_mac(data); + assert(vm); - vq = &virtio_net_vqs[VIRTIO_NET_RXQ]; + vq = get_virtio_net_vqs(vm, VIRTIO_NET_RXQ); vcpu = vq->vcpu; @@ -344,14 +399,21 @@ virtio_net_rcv_one_pkt(void *data, int pkt_len) } void -virtio_net_send_one_pkt(void *data, u16_t *pkt_len) +virtio_net_send_one_pkt(void *data, u16_t *pkt_len, struct vmrt_vm_comp *vm) { - struct virtio_vq_info *vq = &virtio_net_vqs[VIRTIO_NET_TXQ]; struct iovec iov[VIRTIO_NET_MAXSEGS]; struct vmrt_vm_vcpu *vcpu; int i, n; int plen, tlen; u16_t idx; + struct virtio_vq_info *vq; + + if (unlikely(vm == NULL)) { + *pkt_len = 0; + return; + } + + vq = get_virtio_net_vqs(get_vm_from_mac(((u8_t *)data + 6)), VIRTIO_NET_TXQ); while (!vq_has_descs(vq)) { *pkt_len = 0; @@ -391,7 +453,7 @@ virtio_net_outb(u32_t port_id, struct vmrt_vm_vcpu *vcpu) switch (port_id) { case VIRTIO_NET_DEV_STATUS: - virtio_net_regs.header.dev_status = val; + get_virtio_net_regs(vcpu)->header.dev_status = val; break; default: VM_PANIC(vcpu); @@ -400,14 +462,6 @@ virtio_net_outb(u32_t port_id, struct vmrt_vm_vcpu *vcpu) return; } -#define REAL_NIC 0 - -#if REAL_NIC -static u8_t virtio_net_mac[6] = {0x6c, 0xfe, 0x54, 0x40, 0x41, 0x01}; -#else -static u8_t virtio_net_mac[6] = {0x10, 0x10, 0x10, 0x10, 0x10, 0x11}; -#endif - static void virtio_net_inb(u32_t port_id, struct vmrt_vm_vcpu *vcpu) { @@ -416,36 +470,38 @@ virtio_net_inb(u32_t port_id, struct vmrt_vm_vcpu *vcpu) switch (port_id) { case VIRTIO_NET_DEV_STATUS: - vcpu->shared_region->ax = virtio_net_regs.header.dev_status; + vcpu->shared_region->ax = get_virtio_net_regs(vcpu)->header.dev_status; break; case VIRTIO_NET_ISR: - vcpu->shared_region->ax = virtio_net_regs.header.ISR; - virtio_net_regs.header.ISR = 0; + vcpu->shared_region->ax = get_virtio_net_regs(vcpu)->header.ISR; + get_virtio_net_regs(vcpu)->header.ISR = 0; break; case VIRTIO_NET_STATUS: - vcpu->shared_region->ax = virtio_net_regs.config_reg.status; + vcpu->shared_region->ax = get_virtio_net_regs(vcpu)->config_reg.status; break; case VIRTIO_NET_STATUS_H: - vcpu->shared_region->ax = virtio_net_regs.config_reg.status >> 8; + vcpu->shared_region->ax = get_virtio_net_regs(vcpu)->config_reg.status >> 8; break; /* TODO: read mac address from virtio-net config space */ case VIRTIO_NET_MAC: - vcpu->shared_region->ax = virtio_net_mac[0]; + vm_mac_tbl_update(vcpu->vm->comp_id, vcpu->vm); + vcpu->shared_region->ax = virtio_net_mac[vcpu->vm->comp_id][0]; + mac_to_vm[vcpu->vm->comp_id] = vcpu->vm; break; case VIRTIO_NET_MAC1: - vcpu->shared_region->ax = virtio_net_mac[1]; + vcpu->shared_region->ax = virtio_net_mac[vcpu->vm->comp_id][1]; break; case VIRTIO_NET_MAC2: - vcpu->shared_region->ax = virtio_net_mac[2]; + vcpu->shared_region->ax = virtio_net_mac[vcpu->vm->comp_id][2]; break; case VIRTIO_NET_MAC3: - vcpu->shared_region->ax = virtio_net_mac[3]; + vcpu->shared_region->ax = virtio_net_mac[vcpu->vm->comp_id][3]; break; case VIRTIO_NET_MAC4: - vcpu->shared_region->ax = virtio_net_mac[4]; + vcpu->shared_region->ax = virtio_net_mac[vcpu->vm->comp_id][4]; break; case VIRTIO_NET_MAC5: - vcpu->shared_region->ax = virtio_net_mac[5]; + vcpu->shared_region->ax = virtio_net_mac[vcpu->vm->comp_id][5]; break; default: VM_PANIC(vcpu); @@ -459,14 +515,14 @@ virtio_net_inw(u32_t port_id, struct vmrt_vm_vcpu *vcpu) switch (port_id) { case VIRTIO_NET_QUEUE_SIZE: - vcpu->shared_region->ax = virtio_queues[virtio_net_regs.header.queue_select].queue_sz; + vcpu->shared_region->ax = get_virtio_queue(vcpu, get_virtio_net_regs(vcpu)->header.queue_select)->queue_sz; break; case VIRTIO_NET_QUEUE_SELECT: - vcpu->shared_region->ax = virtio_net_regs.header.queue_select; + vcpu->shared_region->ax = get_virtio_net_regs(vcpu)->header.queue_select; break; case VIRTIO_NET_QUEUE_NOTIFY: VM_PANIC(vcpu); - vcpu->shared_region->ax = virtio_net_regs.header.queue_notify; + vcpu->shared_region->ax = get_virtio_net_regs(vcpu)->header.queue_notify; break; default: VM_PANIC(vcpu); @@ -482,12 +538,13 @@ virtio_net_outw(u32_t port_id, struct vmrt_vm_vcpu *vcpu) switch (port_id) { case VIRTIO_NET_QUEUE_SELECT: - virtio_net_regs.header.queue_select = val; + get_virtio_net_regs(vcpu)->header.queue_select = val; break; case VIRTIO_NET_QUEUE_NOTIFY: if (val == VIRTIO_NET_TXQ) { + sched_thd_wakeup(vcpu->vm->tx_thd); } - virtio_net_regs.header.queue_notify = val; + get_virtio_net_regs(vcpu)->header.queue_notify = val; break; default: VM_PANIC(vcpu); @@ -504,11 +561,11 @@ virtio_net_outl(u32_t port_id, struct vmrt_vm_vcpu *vcpu) switch (port_id) { case VIRTIO_NET_GUEST_FEATURES: - virtio_net_regs.header.guest_features = val; + get_virtio_net_regs(vcpu)->header.guest_features = val; break; case VIRTIO_NET_QUEUE_ADDR: - virtio_queues[virtio_net_regs.header.queue_select].queue = (void *)tmp; - virtio_vq_init(vcpu, virtio_net_regs.header.queue_select, val); + get_virtio_queue(vcpu, get_virtio_net_regs(vcpu)->header.queue_select)->queue = (void *)tmp; + virtio_vq_init(vcpu, get_virtio_net_regs(vcpu)->header.queue_select, val); break; default: VM_PANIC(vcpu); @@ -523,13 +580,13 @@ virtio_net_inl(u32_t port_id, struct vmrt_vm_vcpu *vcpu) switch (port_id) { case VIRTIO_NET_DEV_FEATURES: - vcpu->shared_region->ax = virtio_net_regs.header.dev_features; + vcpu->shared_region->ax = get_virtio_net_regs(vcpu)->header.dev_features; break; case VIRTIO_NET_GUEST_FEATURES: - vcpu->shared_region->ax = virtio_net_regs.header.guest_features; + vcpu->shared_region->ax = get_virtio_net_regs(vcpu)->header.guest_features; break; case VIRTIO_NET_QUEUE_ADDR: - vcpu->shared_region->ax = virtio_net_regs.header.queue_addr; + vcpu->shared_region->ax = get_virtio_net_regs(vcpu)->header.queue_addr; break; default: VM_PANIC(vcpu); @@ -573,6 +630,103 @@ virtio_net_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu) } } +void +virtio_tx_task(void *data) +{ + struct vmrt_vm_comp *vm = (struct vmrt_vm_comp *)data; + // printc("virtio tx task :%p, id:%d, tx thd:%d\n", data, vm->comp_id, cos_thdid()); + + struct virtio_vq_info *vq; + struct iovec iov[VIRTIO_NET_MAXSEGS]; + struct vmrt_vm_vcpu *vcpu; + int i, n; + int plen, tlen; + u16_t idx; + char *pkt; + struct netshmem_pkt_buf *tx_obj; + shm_bm_objid_t tx_pktid; + struct nf_pkt_meta_data buf; + + struct nf_session *session = NULL; + shm_bm_t tx_shmemd = 0; + u16_t svc_id = 0; + + struct iphdr *iphdr = NULL; + struct tcphdr *tcphdr = NULL; + struct udphdr *udphdr = NULL; + + vq = get_virtio_net_vqs(vm, VIRTIO_NET_TXQ); + while (1) { + while (!vq_has_descs(vq)) { + sched_thd_block(0); + } + + vcpu = vq->vcpu; + + memset(&iov, 0, sizeof(iov)); + + n = vq_getchain(vcpu, vq, &idx, iov, VIRTIO_NET_MAXSEGS, NULL); + if (unlikely(n < 1 || n >= VIRTIO_NET_MAXSEGS)) { + printc("vtnet: virtio_net_proctx: vq_getchain = %d\n", n); + assert(0); + } + + plen = 0; + tlen = iov[0].iov_len; + assert(n == 2); + + plen += iov[1].iov_len; + tlen += iov[1].iov_len; + + pkt = iov[1].iov_base; + + iphdr = (struct iphdr *) (pkt + ETH_HLEN); + unsigned char *srcip = (unsigned char *)&(iphdr->saddr); + unsigned char *dstip = (unsigned char *)&(iphdr->daddr); + + if(iphdr->protocol == IPPROTO_TCP) + { + tcphdr = (struct tcphdr*)((u_int8_t*)iphdr + (iphdr->ihl << 2)); + svc_id = ntohs(tcphdr->th_sport); + svc_id = 0; + // printc("tcp svc id:%u\n", svc_id); + // length = pdataLen - (iphdr->ihl<<2) - (tcphdr->doff << 2); + // payload = (u_int8_t*)( (u_int8_t*)tcphdr + (tcphdr->doff << 2) ); + // sport = tcphdr->source; + // dport = tcphdr->dest; + + // printf("processed one packet:queue_num:%d, id:%d, plen:%d, ret:%d,src ip:%d.%d.%d.%d, dest ip:%d.%d.%d.%d, src port:%u, dst port:%u \n", queue_num, id, plen, ret, IP_ARG(srcip), IP_ARG(dstip), ntohs(tcphdr->source), ntohs(tcphdr->dest)); + } else if (iphdr->protocol == IPPROTO_UDP) { + udphdr = (struct udphdr*)((u_int8_t*)iphdr + (iphdr->ihl << 2)); + svc_id = ntohs(udphdr->uh_sport); + printc("udp svc id:%u\n", svc_id); + assert(0); + + } + + session = get_nf_session(vm, svc_id); + tx_shmemd = session->tx_shmemd; + assert(tx_shmemd); + + if (tx_shmemd != 0) { + tx_obj = shm_bm_alloc_net_pkt_buf(tx_shmemd, &tx_pktid); + assert(tx_obj); + buf.objid = tx_pktid; + buf.pkt_len = plen; + buf.obj = tx_obj; + memcpy(netshmem_get_data_buf(tx_obj), pkt, plen); + if (unlikely(!nf_tx_ring_buf_enqueue(&(session->nf_tx_ring_buf), &buf))){ + shm_bm_free_net_pkt_buf(tx_obj); + } else { + sched_thd_wakeup(session->tx_thd); + } + } + + vq_relchain(vq, idx, tlen); + vq_endchains(vcpu, vq, 1); + } +} + void virtio_net_io_init(void) { @@ -580,11 +734,13 @@ virtio_net_io_init(void) memset(&virtio_queues, 0, sizeof(virtio_queues)); memset(&virtio_net_vqs, 0, sizeof(virtio_net_vqs)); - virtio_net_regs.header.dev_features |= (1 << VIRTIO_NET_F_STATUS); - virtio_net_regs.header.dev_features |= (1 << VIRTIO_NET_F_MAC); - virtio_net_regs.config_reg.status = VIRTIO_NET_S_LINK_UP; - virtio_queues[0].queue_sz = VQ_MAX_DESCRIPTORS; - virtio_queues[1].queue_sz = VQ_MAX_DESCRIPTORS; - virtio_net_vqs[VIRTIO_NET_RX].qsize = VQ_MAX_DESCRIPTORS; - virtio_net_vqs[VIRTIO_NET_TX].qsize = VQ_MAX_DESCRIPTORS; + for(int i = 0; i < VMRT_MAX_VM; i++) { + virtio_net_regs[i].header.dev_features |= (1 << VIRTIO_NET_F_STATUS); + virtio_net_regs[i].header.dev_features |= (1 << VIRTIO_NET_F_MAC); + virtio_net_regs[i].config_reg.status = VIRTIO_NET_S_LINK_UP; + virtio_queues[i][0].queue_sz = VQ_MAX_DESCRIPTORS; + virtio_queues[i][1].queue_sz = VQ_MAX_DESCRIPTORS; + virtio_net_vqs[i][VIRTIO_NET_RX].qsize = VQ_MAX_DESCRIPTORS; + virtio_net_vqs[i][VIRTIO_NET_TX].qsize = VQ_MAX_DESCRIPTORS; + } } \ No newline at end of file diff --git a/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.h b/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.h index a5239b8c47..b6a13b22b6 100644 --- a/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.h +++ b/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.h @@ -91,11 +91,11 @@ struct virtio_net_io_reg { struct virtio_net_config config_reg; } __attribute__((packed)); -struct iovec -{ - void *iov_base; /* Pointer to data. */ - size_t iov_len; /* Length of data. */ -}; +// struct iovec +// { +// void *iov_base; /* Pointer to data. */ +// size_t iov_len; /* Length of data. */ +// }; struct virtio_vq_info { u16_t qsize; /* size of this queue (a power of 2) */ @@ -141,4 +141,4 @@ struct virtio_net_rxhdr { void virtio_net_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu); void virtio_net_rcv_one_pkt(void *data, int pkt_len); -void virtio_net_send_one_pkt(void *data, u16_t *pkt_len); +void virtio_net_send_one_pkt(void *data, u16_t *pkt_len, struct vmrt_vm_comp *vm); diff --git a/src/components/implementation/simple_vmm/vmm/devices/vpci/vpci.c b/src/components/implementation/simple_vmm/vmm/devices/vpci/vpci.c index e1854c8bac..e1571dc17b 100644 --- a/src/components/implementation/simple_vmm/vmm/devices/vpci/vpci.c +++ b/src/components/implementation/simple_vmm/vmm/devices/vpci/vpci.c @@ -83,10 +83,12 @@ set_vpci_comm_hdr(u8_t* raw_data, u8_t reg, u32_t val) void set_vpci_bar(u8_t* raw_data, u8_t reg, u32_t val) { + u32_t bar0; + switch (reg) { case OFFSET_BAR0: - u32_t bar0 = *(u32_t *)raw_data; + bar0 = *(u32_t *)raw_data; if (bar0 & 0x1) { /* IO bar */ /* mask all bits that should not be writable */ val = val & 0xFFFFC000; diff --git a/src/components/implementation/simple_vmm/vmm/netio.c b/src/components/implementation/simple_vmm/vmm/netio.c index 683b3af5a4..af8974a447 100644 --- a/src/components/implementation/simple_vmm/vmm/netio.c +++ b/src/components/implementation/simple_vmm/vmm/netio.c @@ -4,7 +4,7 @@ #include #include #include - +#include shm_bm_objid_t netio_get_a_packet(u16_t *pkt_len) @@ -18,7 +18,7 @@ netio_get_a_packet(u16_t *pkt_len) tx_obj = shm_bm_alloc_net_pkt_buf(tx_shmemd, &tx_pktid); assert(tx_obj); - virtio_net_send_one_pkt(tx_obj->data, &_pkt_len); + virtio_net_send_one_pkt(tx_obj->data, &_pkt_len, 0); *pkt_len = _pkt_len; return tx_pktid; @@ -53,6 +53,7 @@ void pkt_hex_dump(void *_data, u16_t len) } } +#if 0 shm_bm_objid_t netio_get_a_packet_batch(u8_t batch_limit) { @@ -90,8 +91,7 @@ netio_get_a_packet_batch(u8_t batch_limit) batch_ct++; } else { if (batch_ct == 0) { - extern int sched_thd_block(thdid_t dep_id); - sched_thd_block_timeout(0, ps_tsc() + 2000*1); + sched_thd_yield(); } else { shm_bm_free_net_pkt_buf(tx_obj); break; @@ -101,6 +101,99 @@ netio_get_a_packet_batch(u8_t batch_limit) first_obj_pri->batch_len = batch_ct; return first_objid; } +#endif + +struct nf_svc { + int svc_id; + struct vmrt_vm_comp *vm; +}; + +#define MAX_NFS 10 +#define MAX_THD_PER_NF 100 + +static struct nf_svc nf_svc_tbl[MAX_NFS][MAX_THD_PER_NF]; + +void +nf_svc_update(compid_t nf_id, int thd, int svc_id, struct vmrt_vm_comp *vm) +{ + // printc("svc update:%d, %d, %d\n", nf_id, thd, nf_svc_tbl[nf_id][thd].svc_id); + if (nf_svc_tbl[nf_id][thd].svc_id < 0) { + nf_svc_tbl[nf_id][thd].svc_id = svc_id; + nf_svc_tbl[nf_id][thd].vm = vm; + } else { + return; + } +} + +void +nf_svc_init(void) +{ + for (int i = 0; i < MAX_NFS; i++) { + for (int j = 0; j < MAX_THD_PER_NF; j++) { + nf_svc_tbl[i][j].svc_id = -1; + nf_svc_tbl[i][j].vm = NULL; + } + } +} + +shm_bm_objid_t +netio_get_a_packet_batch(u8_t batch_limit) +{ + shm_bm_objid_t first_objid; + struct netshmem_pkt_buf *first_obj; + struct netshmem_pkt_pri *first_obj_pri; + struct netshmem_pkt_buf *tx_obj; + shm_bm_objid_t tx_pktid; + struct netshmem_meta_tuple *pkt_arr; + + struct nf_session *session; + struct nf_pkt_meta_data buf; + u8_t batch_ct = 0; + compid_t vmm_id = cos_compid(); + compid_t nf_id = (compid_t)cos_inv_token(); + if (nf_id == 0) nf_id = vmm_id; + thdid_t nf_thd = cos_thdid(); + + int svc_id = nf_svc_tbl[nf_id][nf_thd].svc_id; + + if (svc_id < 0) { + printc("no svc available for this nf:%d, thd:%d\n", nf_id, nf_thd); + assert(0); + return 0; + } + + struct vmrt_vm_comp *vm = nf_svc_tbl[nf_id][nf_thd].vm; + + // printc("####################:%d, %d, vm:%d, svc:%d\n", nf_id, nf_thd, vm->comp_id, svc_id); + session = get_nf_session(vm, svc_id); + + + while (nf_tx_ring_buf_empty(&session->nf_tx_ring_buf)) { + // sched_thd_yield(); + sched_thd_block(0); + } + + assert(nf_tx_ring_buf_dequeue(&session->nf_tx_ring_buf, &buf)); + tx_obj = first_obj = buf.obj; + assert(tx_obj); + tx_pktid = first_objid = buf.objid; + first_obj_pri = netshmem_get_pri(tx_obj); + pkt_arr = (struct netshmem_meta_tuple *)&first_obj_pri->pkt_arr; + first_obj_pri->batch_len = 0; + + pkt_arr[batch_ct].obj_id = tx_pktid; + pkt_arr[batch_ct].pkt_len = buf.pkt_len; + batch_ct++; + + while (batch_ct < batch_limit && nf_tx_ring_buf_dequeue(&session->nf_tx_ring_buf, &buf)) { + pkt_arr[batch_ct].obj_id = buf.objid; + pkt_arr[batch_ct].pkt_len = buf.pkt_len; + batch_ct++; + } + + first_obj_pri->batch_len = batch_ct; + return first_objid; +} int netio_send_packet(shm_bm_objid_t pktid, u16_t pkt_len) diff --git a/src/components/implementation/simple_vmm/vmm/nf_session.c b/src/components/implementation/simple_vmm/vmm/nf_session.c new file mode 100644 index 0000000000..7ba4e8a397 --- /dev/null +++ b/src/components/implementation/simple_vmm/vmm/nf_session.c @@ -0,0 +1,76 @@ +#pragma once + +#include + +CK_RING_PROTOTYPE(nf_tx_ring_buf, nf_pkt_meta_data); + +static char ring_buffers[NF_TX_MAX_RING_NUM][NF_TX_PKT_RING_SZ]; +static struct nf_session nf_sessions[VMRT_MAX_VM][MAX_SVC_NUM]; + +void +nf_sessions_init(void) +{ + for (int i = 0; i < VMRT_MAX_VM; i++) { + for (int j = 0; j < MAX_SVC_NUM; j++) { + nf_sessions[i][j].rx_shmemd = 0; + nf_sessions[i][j].rx_thd = 0; + nf_sessions[i][j].tx_shmemd = 0; + nf_sessions[i][j].tx_thd = 0; + nf_sessions[i][j].nf_tx_ring_buf.ring = 0; + nf_sessions[i][j].nf_tx_ring_buf.ringbuf = 0; + + } + } +} + +void +nf_tx_ring_buf_init(struct nf_tx_ring_buf *pkt_ring_buf, size_t ringbuf_num, size_t ringbuf_sz) +{ + struct ck_ring *buf_addr; + + /* prevent multiple thread from contending memory */ + assert(cos_thdid() < 30); + buf_addr = (struct ck_ring *)&ring_buffers[cos_thdid()]; + + ck_ring_init(buf_addr, ringbuf_num); + + pkt_ring_buf->ring = buf_addr; + pkt_ring_buf->ringbuf = (struct pkt_buf *)((char *)buf_addr + sizeof(struct ck_ring)); +} + +inline int +nf_tx_ring_buf_enqueue(struct nf_tx_ring_buf *pkt_ring_buf, struct nf_pkt_meta_data *buf) +{ + assert(pkt_ring_buf->ring && pkt_ring_buf->ringbuf); + + return CK_RING_ENQUEUE_SPSC(nf_tx_ring_buf, pkt_ring_buf->ring, pkt_ring_buf->ringbuf, buf); +} + +inline int +nf_tx_ring_buf_dequeue(struct nf_tx_ring_buf *pkt_ring_buf, struct nf_pkt_meta_data *buf) +{ + assert(pkt_ring_buf->ring && pkt_ring_buf->ringbuf); + + return CK_RING_DEQUEUE_SPSC(nf_tx_ring_buf, pkt_ring_buf->ring, pkt_ring_buf->ringbuf, buf); +} + +inline int +nf_tx_ring_buf_empty(struct nf_tx_ring_buf *pkt_ring_buf) +{ + assert(pkt_ring_buf->ring); + + return (!ck_ring_size(pkt_ring_buf->ring)); +} + +struct nf_session *get_nf_session(struct vmrt_vm_comp *vm, int svc_id) +{ + if (svc_id < 0) return NULL; + else return &nf_sessions[vm->comp_id][svc_id]; +} + +void +nf_session_tx_update(struct nf_session *session, shm_bm_t tx_shmemd, thdid_t tx_thd) +{ + session->tx_shmemd = tx_shmemd; + session->tx_thd = tx_thd; +} diff --git a/src/components/implementation/simple_vmm/vmm/nf_session.h b/src/components/implementation/simple_vmm/vmm/nf_session.h new file mode 100644 index 0000000000..ee00626432 --- /dev/null +++ b/src/components/implementation/simple_vmm/vmm/nf_session.h @@ -0,0 +1,46 @@ +#include +#include +#include + +struct nf_pkt_meta_data { + void *obj; + shm_bm_objid_t objid; + u16_t pkt_len; +}; + +struct nf_tx_ring_buf { + struct ck_ring *ring; + struct nf_pkt_meta_data *ringbuf; +}; + +struct nf_session { + shm_bm_t rx_shmemd; + shm_bm_t tx_shmemd; + + thdid_t rx_thd; + thdid_t tx_thd; + + struct nf_tx_ring_buf nf_tx_ring_buf; +}; + +#define NF_TX_PKT_RBUF_NUM 512 +#define NF_TX_PKT_RBUF_SZ (NF_TX_PKT_RBUF_NUM * sizeof(struct nf_tx_ring_buf)) +#define NF_TX_PKT_RING_SZ (sizeof(struct ck_ring) + NF_TX_PKT_RBUF_SZ) +#define NF_TX_PKT_RING_PAGES (round_up_to_page(NF_TX_PKT_RING_SZ)/PAGE_SIZE) + +#define NF_TX_MAX_RING_NUM 30 + +#define MAX_NF_SESSION 10 + +#define MAX_SVC_NUM (20000) + +struct nf_session *get_nf_session(struct vmrt_vm_comp *vm, int svc_id); +void nf_session_tx_update(struct nf_session *session, shm_bm_t tx_shmemd, thdid_t tx_thd); +void nf_tx_ring_buf_init(struct nf_tx_ring_buf *pkt_ring_buf, size_t ringbuf_num, size_t ringbuf_sz); +int nf_tx_ring_buf_enqueue(struct nf_tx_ring_buf *pkt_ring_buf, struct nf_pkt_meta_data *buf); +int nf_tx_ring_buf_dequeue(struct nf_tx_ring_buf *pkt_ring_buf, struct nf_pkt_meta_data *buf); +int nf_tx_ring_buf_empty(struct nf_tx_ring_buf *pkt_ring_buf); + +void nf_svc_update(compid_t nf_id, int thd_id, int svc_id, struct vmrt_vm_comp *vm); +void nf_svc_init(void); +void nf_sessions_init(void); diff --git a/src/components/implementation/simple_vmm/vmm/simple_vmm.c b/src/components/implementation/simple_vmm/vmm/simple_vmm.c index acea92a4f8..1343cf661c 100644 --- a/src/components/implementation/simple_vmm/vmm/simple_vmm.c +++ b/src/components/implementation/simple_vmm/vmm/simple_vmm.c @@ -19,8 +19,11 @@ #include #include +#include +#include +#include -#define NF_THD_PRIORITY 31 +#define NF_THD_PRIORITY 2 #define NO_NF_TEST 1 @@ -33,6 +36,8 @@ thdid_t rx_tid = 0; thdid_t tx_tid = 0; +thdid_t virtio_tx_tid = 0; + char tx_nf_buffer[4096]; char rx_nf_buffer[4096]; @@ -42,9 +47,10 @@ INCBIN(bios, "guest/guest.img") /* Currently only have one VM component globally managed by this VMM */ static struct vmrt_vm_comp *g_vm; +static struct vmrt_vm_comp *g_vm1; #define VM_MAX_COMPS (2) -#define GUEST_MEM_SZ (320*1024*1024) +#define GUEST_MEM_SZ (100*1024*1024) SS_STATIC_SLAB(vm_comp, struct vmrt_vm_comp, VM_MAX_COMPS); SS_STATIC_SLAB(vm_lapic, struct acrn_vlapic, VM_MAX_COMPS * VMRT_VM_MAX_VCPU); @@ -52,10 +58,12 @@ SS_STATIC_SLAB(vcpu_inst_ctxt, struct instr_emul_ctxt, VM_MAX_COMPS * VMRT_VM_MA SS_STATIC_SLAB(vm_io_apic, struct acrn_vioapics, VM_MAX_COMPS); SS_STATIC_SLAB(vcpu_mmio_req, struct acrn_mmio_request, VM_MAX_COMPS * VMRT_VM_MAX_VCPU); +struct sync_lock vm_boot_lock; + void pause_handler(struct vmrt_vm_vcpu *vcpu) { - sched_thd_block_timeout(0, ps_tsc() + 2000*1); + sched_thd_yield(); GOTO_NEXT_INST(vcpu->shared_region); } @@ -126,7 +134,7 @@ vm_comp_create(void) /* Allocate memory for the VM */ shm_id = memmgr_shared_page_allocn_aligned(guest_mem_sz / PAGE_SIZE_4K, PAGE_SIZE_4K, (vaddr_t *)&mem); /* Make the memory accessible to VM */ - memmgr_shared_page_map_aligned_in_vm(shm_id, PAGE_SIZE_4K, (vaddr_t *)&vm_mem, vm->comp_id); + int ret = memmgr_shared_page_map_aligned_in_vm(shm_id, PAGE_SIZE_4K, (vaddr_t *)&vm_mem, vm->comp_id); vmrt_vm_mem_init(vm, mem); printc("created VM with %u cpus, memory size: %luMB, at host vaddr: %p\n", vm->num_vcpu, vm->guest_mem_sz/1024/1024, vm->guest_addr); @@ -154,6 +162,7 @@ vm_comp_create(void) return vm; } +#if 0 static void tx_task(void) { @@ -181,7 +190,7 @@ tx_task(void) nic_send_packet(objid, 0, pkt_len); #else - u8_t batch_ct = 50; + u8_t batch_ct = 32; first_objid = objid = netio_get_a_packet_batch(batch_ct); first_obj = shm_bm_transfer_net_pkt_buf(tx_shmemd, objid); @@ -201,6 +210,7 @@ tx_task(void) #endif } } +#endif static void rx_task(void) @@ -254,9 +264,60 @@ rx_task(void) } } +static void +tx_task(void) +{ + u16_t pkt_len; + shm_bm_objid_t objid; + + nic_shmem_map(netshmem_get_shm_id()); + + shm_bm_objid_t first_objid; + struct netshmem_pkt_buf *first_obj; + struct netshmem_pkt_pri *first_obj_pri; + struct netshmem_meta_tuple *pkt_arr; + u8_t tx_batch_ct = 0; + struct netshmem_pkt_buf *tx_obj; + + shm_bm_t tx_shmemd = 0; + tx_shmemd = netshmem_get_shm(); + + nic_bind_port(0, 1); + int svc_id = 0; + + nf_svc_update(cos_compid(), cos_thdid(), svc_id, g_vm); + + struct nf_session *session; + session = get_nf_session(g_vm, svc_id); + nf_session_tx_update(session, tx_shmemd, cos_thdid()); + + nf_tx_ring_buf_init(&session->nf_tx_ring_buf, NF_TX_PKT_RBUF_NUM, NF_TX_PKT_RING_SZ); + + while(1) { + u8_t batch_ct = 32; + + first_objid = objid = netio_get_a_packet_batch(batch_ct); + + nic_send_packet_batch(first_objid); + } +} + void cos_init(void) { + + nf_svc_init(); + nf_sessions_init(); + + struct vmrt_vm_vcpu *vcpu; + g_vm = vm_comp_create(); + printc("created vm done:%d, %p\n", g_vm->comp_id, g_vm); + + g_vm1 = vm_comp_create(); + + sync_lock_init(&vm_boot_lock); + + printc("creating vm1 done:%d, %p\n", g_vm1->comp_id, g_vm1); } void @@ -270,20 +331,27 @@ cos_parallel_init(coreid_t cid, int init_core, int ncores) tx_tid = sched_thd_create((void *)tx_task, NULL); netshmem_create(tx_tid); printc("NF rx tid:%ld, tx tid:%ld\n", rx_tid, tx_tid); - } -#endif - if (cid != 0 || NUM_CPU == 1) - { - cid = 0; - g_vm = vm_comp_create(); - vmrt_vm_vcpu_init(g_vm, cid); - vcpu = vmrt_get_vcpu(g_vm, cid); + extern void virtio_tx_task(void *data); + virtio_tx_tid = sched_thd_create((void *)virtio_tx_task, g_vm); + printc("virtio_tx_tid:%d\n", virtio_tx_tid); + g_vm->tx_thd = virtio_tx_tid; + + vmrt_vm_vcpu_init(g_vm, 0); + vcpu = vmrt_get_vcpu(g_vm, 0); lapic_init(vcpu); iinst_ctxt_init(vcpu); mmio_init(vcpu); + + } else { + vmrt_vm_vcpu_init(g_vm1, 0); + vcpu = vmrt_get_vcpu(g_vm1, 0); + lapic_init(vcpu); + iinst_ctxt_init(vcpu); + mmio_init(vcpu); } +#endif return; } @@ -292,19 +360,23 @@ void parallel_main(coreid_t cid) { struct vmrt_vm_vcpu *vcpu; - - if (cid != 0 || NUM_CPU == 1) { - cid = 0; - vcpu = vmrt_get_vcpu(g_vm, cid); + + if (cid == 0) { + vcpu = vmrt_get_vcpu(g_vm, 0); vmrt_vm_vcpu_start(vcpu); - } - #if NO_NF_TEST - if (cid == 0) { sched_thd_param_set(rx_tid, sched_param_pack(SCHEDP_PRIO, NF_THD_PRIORITY)); sched_thd_param_set(tx_tid, sched_param_pack(SCHEDP_PRIO, NF_THD_PRIORITY)); - } + + sched_thd_param_set(virtio_tx_tid, sched_param_pack(SCHEDP_PRIO, NF_THD_PRIORITY)); #endif + } else if(cid == 1) { + /* wait for the first vm to start */ + sched_thd_block_timeout(0, time_now() + time_usec2cyc(10000000)); + printc("----------------------STARTING SECOND VM----------------------\n"); + vcpu = vmrt_get_vcpu(g_vm1, 0); + vmrt_vm_vcpu_start(vcpu); + } while (1) { diff --git a/src/components/interface/sched/sched.h b/src/components/interface/sched/sched.h index a26f6cf28b..8f9b9c3752 100644 --- a/src/components/interface/sched/sched.h +++ b/src/components/interface/sched/sched.h @@ -25,6 +25,8 @@ typedef word_t sched_blkpt_epoch_t; int sched_thd_yield_to(thdid_t t); int COS_STUB_DECL(sched_thd_yield_to)(thdid_t t); +int sched_thd_yield(void); +int COS_STUB_DECL(sched_thd_yield)(void); int sched_thd_wakeup(thdid_t t); int COS_STUB_DECL(sched_thd_wakeup)(thdid_t t); int sched_debug_thd_state(thdid_t t); diff --git a/src/components/interface/sched/stubs/stubs.S b/src/components/interface/sched/stubs/stubs.S index 5717a0ee39..f4a826284e 100644 --- a/src/components/interface/sched/stubs/stubs.S +++ b/src/components/interface/sched/stubs/stubs.S @@ -9,6 +9,7 @@ cos_asm_stub(sched_get_cpu_freq); cos_asm_stub(sched_thd_yield_to); +cos_asm_stub(sched_thd_yield); cos_asm_stub(sched_thd_wakeup); cos_asm_stub(sched_debug_thd_state); cos_asm_stub(sched_thd_block); diff --git a/src/components/lib/slm/quantum.c b/src/components/lib/slm/quantum.c index a77f47ade1..e394eb212a 100644 --- a/src/components/lib/slm/quantum.c +++ b/src/components/lib/slm/quantum.c @@ -164,7 +164,7 @@ slm_policy_timer_init(microsec_t period) int slm_timer_quantum_init(void) { - slm_policy_timer_init(160); + slm_policy_timer_init(130); return 0; } diff --git a/src/components/lib/vmrt/vmrt.c b/src/components/lib/vmrt/vmrt.c index 3329e09238..c1dbff803c 100644 --- a/src/components/lib/vmrt/vmrt.c +++ b/src/components/lib/vmrt/vmrt.c @@ -468,7 +468,7 @@ void vmrt_vm_vcpu_start(struct vmrt_vm_vcpu *vcpu) { /* This is actually just to "push" the vcpu handler thread into run queue. */ - sched_thd_param_set(vcpu->handler_tid, sched_param_pack(SCHEDP_PRIO, 31)); + sched_thd_param_set(vcpu->handler_tid, sched_param_pack(SCHEDP_PRIO, 2)); } void diff --git a/src/components/lib/vmrt/vmrt.h b/src/components/lib/vmrt/vmrt.h index a04a6bb5fb..6740008807 100644 --- a/src/components/lib/vmrt/vmrt.h +++ b/src/components/lib/vmrt/vmrt.h @@ -3,6 +3,8 @@ #include #include +#define VMRT_MAX_VM (10) + #define VMRT_VM_NAME_SIZE (32) #define VMRT_VM_MAX_VCPU (16) @@ -53,6 +55,8 @@ struct vmrt_vm_comp { u8_t num_vcpu; struct vmrt_vm_vcpu vcpus[VMRT_VM_MAX_VCPU]; + thdid_t tx_thd; + int wire_mode; }; diff --git a/src/composer/src/resources.rs b/src/composer/src/resources.rs index 230de46420..587cef6f88 100644 --- a/src/composer/src/resources.rs +++ b/src/composer/src/resources.rs @@ -15,7 +15,7 @@ enum CapRes { Comp(ComponentId), } -const BOOT_CAPTBL_FREE: u32 = 52; +const BOOT_CAPTBL_FREE: u32 = 56; // The equivalent of the C __captbl_cap2sz(c) fn cap_sz(cap: &CapRes) -> u32 { diff --git a/src/platform/i386/chal/shared/cos_config.h b/src/platform/i386/chal/shared/cos_config.h index 24636f93bd..b93de51a7c 100644 --- a/src/platform/i386/chal/shared/cos_config.h +++ b/src/platform/i386/chal/shared/cos_config.h @@ -17,7 +17,7 @@ #include "cpu_ghz.h" -#define NUM_CPU 1 +#define NUM_CPU 2 #define NUM_CPU_BMP_BYTES ((NUM_CPU + 7) / 8) #define NUM_CPU_BMP_WORDS ((NUM_CPU_BMP_BYTES + 3) / 4) /* From 1a9d9c20acb7baa0f08df19c7e5216de933a31fa Mon Sep 17 00:00:00 2001 From: betahxy Date: Fri, 15 Mar 2024 00:00:00 -0400 Subject: [PATCH 06/60] debug --- composition_scripts/vmm_noop_nf.toml | 48 ++++++++ .../implementation/capmgr/simple/capmgr.c | 12 +- .../implementation/nicmgr/dpdk/Makefile | 2 +- .../implementation/nicmgr/dpdk/init.c | 73 ++++++++---- .../implementation/nicmgr/dpdk/nicmgr.c | 5 +- .../implementation/nicmgr/dpdk/nicmgr.h | 2 +- .../implementation/nicmgr/dpdk/simple_hash.c | 32 ++++++ .../implementation/nicmgr/dpdk/simple_hash.h | 9 ++ .../no_interface/llbooter/llbooter.c | 4 +- .../sched/pfprr_quantum_static/main.c | 10 +- .../{simple_nf1 => noop_nf}/Makefile | 0 .../simple_nf/{simple_nf1 => noop_nf}/main.c | 104 +++++++++++++++++- .../vmm/devices/vpci/virtio_net_io.c | 49 ++++++--- .../implementation/simple_vmm/vmm/netio.c | 28 ++++- .../simple_vmm/vmm/nf_session.h | 5 +- .../simple_vmm/vmm/simple_vmm.c | 41 +++++-- src/components/interface/netio/netio.h | 1 + src/components/interface/netio/stubs/stubs.S | 1 + .../lib/component/arch/x86_64/cos_component.h | 22 ++-- src/components/lib/dpdk/cos_dpdk.c | 2 +- src/components/lib/slm/quantum.c | 2 +- src/components/lib/slm/slm_blkpt.c | 4 +- src/components/lib/vmrt/vmrt.c | 11 +- src/components/lib/vmrt/vmrt.h | 1 + src/kernel/capinv.c | 10 +- src/kernel/include/pgtbl.h | 2 +- src/kernel/include/shared/cos_types.h | 1 + src/platform/i386/boot_comp.c | 4 +- src/platform/i386/chal/shared/cos_config.h | 2 +- src/platform/i386/chal_pgtbl.c | 8 +- src/platform/i386/kernel.c | 17 ++- src/platform/x86_64/vmx/vmx.c | 2 +- tools/run.sh | 2 +- 33 files changed, 410 insertions(+), 106 deletions(-) create mode 100644 composition_scripts/vmm_noop_nf.toml create mode 100644 src/components/implementation/nicmgr/dpdk/simple_hash.c create mode 100644 src/components/implementation/nicmgr/dpdk/simple_hash.h rename src/components/implementation/simple_nf/{simple_nf1 => noop_nf}/Makefile (100%) rename src/components/implementation/simple_nf/{simple_nf1 => noop_nf}/main.c (61%) diff --git a/composition_scripts/vmm_noop_nf.toml b/composition_scripts/vmm_noop_nf.toml new file mode 100644 index 0000000000..17b2a8dd0e --- /dev/null +++ b/composition_scripts/vmm_noop_nf.toml @@ -0,0 +1,48 @@ +[system] +description = "Simple VMM component." + +[[components]] +name = "booter" +img = "no_interface.llbooter" +implements = [{interface = "init"}, {interface = "addr"}] +deps = [{srv = "kernel", interface = "init", variant = "kernel"}] +constructor = "kernel" + +[[components]] +name = "capmgr" +img = "capmgr.simple" +deps = [{srv = "booter", interface = "init"}, {srv = "booter", interface = "addr"}] +implements = [{interface = "capmgr"}, {interface = "init"}, {interface = "memmgr"}, {interface = "capmgr_create"}, {interface = "contigmem"}] +constructor = "booter" +baseaddr = "0x1000000" + +[[components]] +name = "sched" +img = "sched.pfprr_quantum_static" +deps = [{srv = "capmgr", interface = "init"}, {srv = "capmgr", interface = "capmgr"}, {srv = "capmgr", interface = "memmgr"}] +implements = [{interface = "sched"}, {interface = "syncipc"}, {interface = "init"}] +constructor = "booter" +baseaddr = "0x1600000" + +[[components]] +name = "nicmgr" +img = "nicmgr.dpdk" +deps = [{srv = "sched", interface = "sched"}, {srv = "sched", interface = "init"}, {srv = "capmgr", interface = "capmgr_create"}, {srv = "capmgr", interface = "memmgr"}, {srv = "capmgr", interface = "contigmem"}] +implements = [{interface = "nic"}] +constructor = "booter" +baseaddr = "0x6000000" + +[[components]] +name = "vmm" +img = "simple_vmm.vmm" +deps = [{srv = "sched", interface = "sched"}, {srv = "sched", interface = "init"},{srv = "capmgr", interface = "capmgr"}, {srv = "capmgr", interface = "memmgr"}, {srv = "capmgr", interface = "contigmem"}, {srv = "nicmgr", interface = "nic"}] +implements = [{interface = "netio"}] +constructor = "booter" +baseaddr = "0x2000000" + +[[components]] +name = "noop_nf" +img = "simple_nf.noop_nf" +deps = [{srv = "sched", interface = "sched"}, {srv = "sched", interface = "init"},{srv = "capmgr", interface = "capmgr_create"}, {srv = "capmgr", interface = "memmgr"}, {srv = "capmgr", interface = "contigmem"}, {srv = "nicmgr", interface = "nic"}, {srv = "vmm", interface = "netio"}] +constructor = "booter" +baseaddr = "0x9000000" diff --git a/src/components/implementation/capmgr/simple/capmgr.c b/src/components/implementation/capmgr/simple/capmgr.c index 34f3dd29bf..c952089d62 100644 --- a/src/components/implementation/capmgr/simple/capmgr.c +++ b/src/components/implementation/capmgr/simple/capmgr.c @@ -73,12 +73,13 @@ SS_STATIC_SLAB(asnd, struct cm_asnd, MAX_NUM_THREADS); /* 64 MiB */ #define MB2PAGES(mb) (round_up_to_page(mb * 1024 * 1024) / PAGE_SIZE) -#define MM_NPAGES (MB2PAGES(600)) +#define MM_NPAGES (MB2PAGES(6000)) SS_STATIC_SLAB(page, struct mm_page, MM_NPAGES); SS_STATIC_SLAB(span, struct mm_span, MM_NPAGES); -#define CONTIG_PHY_PAGES 70000 -static void * contig_phy_pages = 0; +#define CONTIG_PHY_PAGES 300000 +static u8_t *contig_phy_pages = 0; +static u8_t *max_contig_phy_pages = 0; static struct cm_comp * cm_self(void) @@ -316,7 +317,7 @@ contigmem_alloc(unsigned long npages) contigmem_check(cos_inv_token(), (vaddr_t)vaddr, npages); contig_phy_pages += npages * PAGE_SIZE; - assert((word_t)contig_phy_pages < CONTIG_PHY_PAGES * PAGE_SIZE); + assert((word_t)contig_phy_pages < max_contig_phy_pages + CONTIG_PHY_PAGES * PAGE_SIZE); return vaddr; } @@ -375,7 +376,7 @@ contigmem_shared_alloc_aligned(unsigned long npages, unsigned long align, vaddr_ contigmem_check(cos_inv_token(), (vaddr_t)vaddr, npages); contig_phy_pages += npages * PAGE_SIZE; - assert((word_t)contig_phy_pages < CONTIG_PHY_PAGES * PAGE_SIZE); + assert((word_t)contig_phy_pages < max_contig_phy_pages + CONTIG_PHY_PAGES * PAGE_SIZE); return ret; } @@ -1021,6 +1022,7 @@ cos_init(void) /* Reserve some continuous pages */ contig_phy_pages = crt_page_allocn(&cm_self()->comp, CONTIG_PHY_PAGES); + max_contig_phy_pages = contig_phy_pages; contigmem_check(cos_compid(), (vaddr_t)contig_phy_pages, CONTIG_PHY_PAGES); return; diff --git a/src/components/implementation/nicmgr/dpdk/Makefile b/src/components/implementation/nicmgr/dpdk/Makefile index 23a85febe0..5e19701383 100644 --- a/src/components/implementation/nicmgr/dpdk/Makefile +++ b/src/components/implementation/nicmgr/dpdk/Makefile @@ -9,7 +9,7 @@ INTERFACE_EXPORTS = nic INTERFACE_DEPENDENCIES = netshmem # The library dependencies this component is reliant on for # compilation/linking (this is a list of directory names in lib/) -LIBRARY_DEPENDENCIES = component dpdk shm_bm ck sync +LIBRARY_DEPENDENCIES = component dpdk shm_bm ck sync time # Note: Both the interface and library dependencies should be # *minimal*. That is to say that removing a dependency should cause # the build to fail. The build system does not validate this diff --git a/src/components/implementation/nicmgr/dpdk/init.c b/src/components/implementation/nicmgr/dpdk/init.c index ae5bf5f4c6..1e37ce4658 100644 --- a/src/components/implementation/nicmgr/dpdk/init.c +++ b/src/components/implementation/nicmgr/dpdk/init.c @@ -12,12 +12,14 @@ #include #include #include +#include +#include "simple_hash.h" #include "nicmgr.h" #define ENABLE_DEBUG_INFO 0 -#define NB_RX_DESC_DEFAULT 2048 -#define NB_TX_DESC_DEFAULT 1024 +#define NB_RX_DESC_DEFAULT 512 +#define NB_TX_DESC_DEFAULT 512 #define MAX_PKT_BURST NB_RX_DESC_DEFAULT @@ -170,33 +172,53 @@ process_rx_packets(cos_portid_t port_id, char** rx_pkts, uint16_t nb_pkts) int i, ret; int len = 0; + struct eth_hdr *eth; struct ip_hdr *iph; struct arp_hdr *arp_hdr; struct tcp_udp_port *port; struct client_session *session; + char *pkt; struct pkt_buf buf; for (i = 0; i < nb_pkts; i++) { - cos_get_packet(rx_pkts[i], &len); - - /* TODO: need a policy spefic rule to route packets to different receiving threads*/ - - session = cos_hash_lookup(0); - - if (unlikely(session == NULL)) { - cos_free_packet(rx_pkts[i]); + pkt = cos_get_packet(rx_pkts[i], &len); + eth = (struct eth_hdr *)pkt; + if (likely(htons(eth->ether_type) == 0x0800)) { + iph = (struct ip_hdr *)((char *)eth + sizeof(struct eth_hdr)); + port = (struct tcp_udp_port *)((char *)eth + sizeof(struct eth_hdr) + iph->ihl * 4); + u16_t svc_id = ntohs(port->dst_port); + + session = simple_hash_find(iph->dst_addr, svc_id); + // printc("port:%d, session:%p\n", ntohs(port->dst_port), session); + buf.pkt = rx_pkts[i]; + if (likely(session)) { + if (unlikely(!pkt_ring_buf_enqueue(&(session->pkt_ring_buf), &buf))){ + cos_free_packet(rx_pkts[i]); + rx_enqueued_miss++; + continue; + } + enqueued_rx++; + + } else { + session = simple_hash_find(iph->dst_addr, 0); + if (session) { + if (unlikely(!pkt_ring_buf_enqueue(&(session->pkt_ring_buf), &buf))){ + cos_free_packet(rx_pkts[i]); + rx_enqueued_miss++; + continue; + } + enqueued_rx++; + } else { + rx_enqueued_miss++; + cos_free_packet(rx_pkts[i]); + continue; + } + } + } else { + cos_free_packet(buf.pkt); continue; } - buf.pkt = rx_pkts[i]; - - if (unlikely(!pkt_ring_buf_enqueue(&(session->pkt_ring_buf), &buf))){ - cos_free_packet(buf.pkt); - rx_enqueued_miss++; - continue; - } - enqueued_rx++; - // sync_sem_give(&session->sem); } } @@ -272,7 +294,9 @@ cos_nic_start(){ if (nb_pkts != 0) { process_rx_packets(0, rx_packets, nb_pkts); } else { - sched_thd_block_timeout(0, ps_tsc() + 2000*1); + // sched_thd_block_timeout(0, ps_tsc() + 2000*10); + sched_thd_block_timeout(0, time_now() + time_usec2cyc(1)); + // sched_thd_block(0); } } } @@ -293,8 +317,8 @@ cos_nic_init(void) * set max_mbufs 2 times than nb_rx_desc, so that there is enough room * to store packets, or this will fail if nb_rx_desc <= max_mbufs. */ - const size_t max_rx_mbufs = 8 * nb_rx_desc; - const size_t max_tx_mbufs = 2 * nb_tx_desc; + const size_t max_rx_mbufs = 20 * nb_rx_desc; + const size_t max_tx_mbufs = 30 * nb_tx_desc; memset(rx_per_core_mpool_name, 0, sizeof(rx_per_core_mpool_name)); memset(tx_per_core_mpool_name, 0, sizeof(tx_per_core_mpool_name)); @@ -308,7 +332,7 @@ cos_nic_init(void) "--log-level", "*:info", /* log level can be changed to *debug* if needed, this will print lots of information */ "-m", - "128", /* total memory used by dpdk memory subsystem, such as mempool */ + "512", /* total memory used by dpdk memory subsystem, such as mempool */ }; argc = ARRAY_SIZE(argv); @@ -365,7 +389,8 @@ cos_init(void) printc("nicmgr init...\n"); #if 1 cos_nic_init(); - cos_hash_init(); + // cos_hash_init(); + simple_hash_init(); #ifdef USE_CK_RING_FREE_MBUF pkt_ring_buf_init(&g_free_ring, FREE_PKT_RBUF_NUM, FREE_PKT_RING_SZ); #endif diff --git a/src/components/implementation/nicmgr/dpdk/nicmgr.c b/src/components/implementation/nicmgr/dpdk/nicmgr.c index e88f1df9c9..b466ae71d6 100644 --- a/src/components/implementation/nicmgr/dpdk/nicmgr.c +++ b/src/components/implementation/nicmgr/dpdk/nicmgr.c @@ -12,6 +12,7 @@ #include #include #include "nicmgr.h" +#include "simple_hash.h" extern volatile int debug_flag; @@ -183,6 +184,7 @@ ext_buf_free_callback_fn(void *addr, void *opaque) { /* Shared mem uses borrow api, thus do not need to free it here */ if (addr != NULL) { + // printc("???????????????????????????????????\n"); shm_bm_free_net_pkt_buf(addr); } else { printc("External buffer address is invalid\n"); @@ -375,7 +377,8 @@ nic_bind_port(u32_t ip_addr, u16_t port) client_sessions[thd].shemem_info.shmid = shmid; client_sessions[thd].shemem_info.shm = shm; client_sessions[thd].shemem_info.paddr = paddr; - cos_hash_add(client_sessions[thd].port, &client_sessions[thd]); + // cos_hash_add(client_sessions[thd].port, &client_sessions[thd]); + simple_hash_add(client_sessions[thd].ip_addr, client_sessions[thd].port, &client_sessions[thd]); sync_sem_init(&client_sessions[thd].sem, 0); diff --git a/src/components/implementation/nicmgr/dpdk/nicmgr.h b/src/components/implementation/nicmgr/dpdk/nicmgr.h index 6bc416d497..2a802b53b1 100644 --- a/src/components/implementation/nicmgr/dpdk/nicmgr.h +++ b/src/components/implementation/nicmgr/dpdk/nicmgr.h @@ -7,7 +7,7 @@ #include #include -#define NIC_MAX_SESSION 512 +#define NIC_MAX_SESSION 2000 #define NIC_MAX_SHEMEM_REGION 3 #define NIC_SHMEM_RX 0 diff --git a/src/components/implementation/nicmgr/dpdk/simple_hash.c b/src/components/implementation/nicmgr/dpdk/simple_hash.c new file mode 100644 index 0000000000..0113890abe --- /dev/null +++ b/src/components/implementation/nicmgr/dpdk/simple_hash.c @@ -0,0 +1,32 @@ +#pragma once + +#include +#include + +static void *g_hash_tbl[MAX_IP][MAX_PORT]; + +void +simple_hash_add(u32_t ip, u16_t port, void *data) { + if (!g_hash_tbl[ip % MAX_IP][port]) { + g_hash_tbl[ip % MAX_IP][port] = data; + } else { + printc("hash conflict:ip, port\n", ip, port); + assert(0); + } +} + +void +simple_hash_init(void) +{ + for (int i = 0; i < MAX_IP; i++) { + for (int j = 0; j < MAX_PORT; j++) { + g_hash_tbl[i][j] = 0; + } + } +} + +void * +simple_hash_find(u32_t ip, u16_t port) { + if (port > MAX_PORT) return NULL; + return g_hash_tbl[ip % MAX_IP][port]; +} diff --git a/src/components/implementation/nicmgr/dpdk/simple_hash.h b/src/components/implementation/nicmgr/dpdk/simple_hash.h new file mode 100644 index 0000000000..77e653c2f5 --- /dev/null +++ b/src/components/implementation/nicmgr/dpdk/simple_hash.h @@ -0,0 +1,9 @@ +#include + +#define MAX_IP 10 +#define MAX_PORT 1000 + + +void simple_hash_init(void); +void simple_hash_add(u32_t ip, u16_t port, void *data); +void *simple_hash_find(u32_t ip, u16_t port); diff --git a/src/components/implementation/no_interface/llbooter/llbooter.c b/src/components/implementation/no_interface/llbooter/llbooter.c index c5c813203e..b0a2537b5c 100644 --- a/src/components/implementation/no_interface/llbooter/llbooter.c +++ b/src/components/implementation/no_interface/llbooter/llbooter.c @@ -32,7 +32,7 @@ #define INITARGS_MAX_PATHNAME 512 #endif #ifndef BOOTER_CAPMGR_MB -#define BOOTER_CAPMGR_MB 600 +#define BOOTER_CAPMGR_MB 3000 #endif #ifndef BOOTER_MAX_CHKPT #define BOOTER_MAX_CHKPT 64 @@ -428,7 +428,7 @@ comps_init(void) int keylen; struct crt_comp_exec_context ctxt = { 0 }; /* TODO: generalize. Give the capmgr 64MB for now. */ - size_t mem = BOOTER_CAPMGR_MB * 1024 * 1024; + size_t mem = (unsigned long)BOOTER_CAPMGR_MB * 1024 * 1024; printc("Capability manager memory delegation (%d capmgrs): %ld bytes.\n", args_len(&comps), (unsigned long)mem); diff --git a/src/components/implementation/sched/pfprr_quantum_static/main.c b/src/components/implementation/sched/pfprr_quantum_static/main.c index dd86a9dd29..60807005e3 100644 --- a/src/components/implementation/sched/pfprr_quantum_static/main.c +++ b/src/components/implementation/sched/pfprr_quantum_static/main.c @@ -158,7 +158,7 @@ sched_thd_yield(void) slm_cs_enter(current, SLM_CS_NONE); slm_sched_yield(current, 0); - ret = slm_cs_exit_reschedule(current, SLM_CS_NONE); + ret = slm_cs_exit_reschedule(current, SLM_CS_CHECK_TIMEOUT); return ret; } @@ -180,8 +180,8 @@ thd_block(void) slm_cs_enter(current, SLM_CS_NONE); ret = slm_thd_block(current); - if (!ret) ret = slm_cs_exit_reschedule(current, SLM_CS_NONE); - else slm_cs_exit(NULL, SLM_CS_NONE); + if (!ret) ret = slm_cs_exit_reschedule(current, SLM_CS_CHECK_TIMEOUT); + else slm_cs_exit(NULL, SLM_CS_CHECK_TIMEOUT); return ret; } @@ -207,7 +207,7 @@ thd_wakeup(struct slm_thd *t) return ret; } - return slm_cs_exit_reschedule(current, SLM_CS_NONE); + return slm_cs_exit_reschedule(current, SLM_CS_CHECK_TIMEOUT); } int @@ -240,7 +240,7 @@ thd_block_until(cycles_t timeout) slm_timer_cancel(current); } done: - ret = slm_cs_exit_reschedule(current, SLM_CS_NONE); + ret = slm_cs_exit_reschedule(current, SLM_CS_CHECK_TIMEOUT); /* cleanup stale timeouts (e.g. if we were woken outside of the timer) */ slm_timer_cancel(current); } diff --git a/src/components/implementation/simple_nf/simple_nf1/Makefile b/src/components/implementation/simple_nf/noop_nf/Makefile similarity index 100% rename from src/components/implementation/simple_nf/simple_nf1/Makefile rename to src/components/implementation/simple_nf/noop_nf/Makefile diff --git a/src/components/implementation/simple_nf/simple_nf1/main.c b/src/components/implementation/simple_nf/noop_nf/main.c similarity index 61% rename from src/components/implementation/simple_nf/simple_nf1/main.c rename to src/components/implementation/simple_nf/noop_nf/main.c index 2b054a5545..bedfc8f8fb 100644 --- a/src/components/implementation/simple_nf/simple_nf1/main.c +++ b/src/components/implementation/simple_nf/noop_nf/main.c @@ -7,7 +7,7 @@ #include #include -#define NF_THD_PRIORITY 2 +#define NF_THD_PRIORITY 31 thdid_t rx_tid = 0; thdid_t tx_tid = 0; @@ -21,6 +21,7 @@ char rx_nf_buffer[4096]; #define RX_PROCESSING 0 #define TX_PROCESSING 0 +#if 0 static void tx_task(void) { @@ -68,6 +69,10 @@ tx_task(void) } } +#endif + +#if 0 + static void rx_task(void) { @@ -119,6 +124,100 @@ rx_task(void) #endif } } +#endif + +static void +rx_task(void) +{ + shm_bm_objid_t objid; + struct netshmem_pkt_buf *rx_obj; + shm_bm_objid_t first_objid; + struct netshmem_pkt_buf *first_obj; + struct netshmem_pkt_pri *first_obj_pri; + struct netshmem_meta_tuple *pkt_arr; + u16_t pkt_len; + u32_t ip; + + u8_t batch_ct = 50; + + netio_shmem_map(netshmem_get_shm_id()); + nic_shmem_map(netshmem_get_shm_id()); + + ip = inet_addr("10.10.1.2"); + nic_bind_port(ip, 70); + + int i = 0; + u64_t times = 0; + u64_t overhead = 0; + + shm_bm_t rx_shmemd = 0; + + rx_shmemd = netshmem_get_shm(); + assert(rx_shmemd); + + while(1) + { + u8_t rx_batch_ct = 0; +#if !RX_BATCH + objid = nic_get_a_packet(&pkt_len); + netio_send_packet(objid, pkt_len); +#else + first_objid = nic_get_a_packet_batch(batch_ct); + + first_obj = shm_bm_transfer_net_pkt_buf(rx_shmemd, first_objid); + first_obj_pri = netshmem_get_pri(first_obj); + pkt_arr = (struct netshmem_meta_tuple *)&(first_obj_pri->pkt_arr); + rx_batch_ct = first_obj_pri->batch_len; +#if RX_PROCESSING + for (u8_t i = 0; i < rx_batch_ct; i++) { + pkt_len = pkt_arr[i].pkt_len; + objid = pkt_arr[i].obj_id; + rx_obj = shm_bm_transfer_net_pkt_buf(rx_shmemd, objid); + memcpy(rx_nf_buffer, netshmem_get_data_buf(rx_obj), pkt_len); + } +#endif + + netio_send_packet_batch(first_objid); +#endif + } +} + +static void +tx_task(void) +{ + u16_t pkt_len; + shm_bm_objid_t objid; + + netio_shmem_map(netshmem_get_shm_id()); + nic_shmem_map(netshmem_get_shm_id()); + + shm_bm_objid_t first_objid; + struct netshmem_pkt_buf *first_obj; + struct netshmem_pkt_pri *first_obj_pri; + struct netshmem_meta_tuple *pkt_arr; + u8_t tx_batch_ct = 0; + struct netshmem_pkt_buf *tx_obj; + u32_t ip; + + shm_bm_t tx_shmemd = 0; + tx_shmemd = netshmem_get_shm(); + assert(tx_shmemd); + + ip = inet_addr("10.10.1.2"); + nic_bind_port(ip, 71); + + int svc_id = 70; + + netio_svc_update(svc_id, 0); + + while(1) { + u8_t batch_ct = 32; + + first_objid = objid = netio_get_a_packet_batch(batch_ct); + + nic_send_packet_batch(first_objid); + } +} void cos_init(void) @@ -144,8 +243,11 @@ parallel_main(coreid_t cid) if (cid == 0) { sched_thd_param_set(rx_tid, sched_param_pack(SCHEDP_PRIO, NF_THD_PRIORITY)); sched_thd_param_set(tx_tid, sched_param_pack(SCHEDP_PRIO, NF_THD_PRIORITY)); + } else { + } + sched_thd_block(0); return 0; } diff --git a/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.c b/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.c index b448e19668..a7cb01e978 100644 --- a/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.c +++ b/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.c @@ -38,6 +38,7 @@ #include #include #include +#include /* TODO: remove this warning flag when virtio-net is done */ @@ -365,6 +366,10 @@ virtio_net_rcv_one_pkt(void *data, int pkt_len) u16_t idx; int ret; struct vmrt_vm_comp *vm = get_vm_from_mac(data); + if (unlikely(vm == NULL)) { + printc("vm not exist\n"); + return; + } assert(vm); vq = get_virtio_net_vqs(vm, VIRTIO_NET_RXQ); @@ -484,24 +489,24 @@ virtio_net_inb(u32_t port_id, struct vmrt_vm_vcpu *vcpu) break; /* TODO: read mac address from virtio-net config space */ case VIRTIO_NET_MAC: - vm_mac_tbl_update(vcpu->vm->comp_id, vcpu->vm); - vcpu->shared_region->ax = virtio_net_mac[vcpu->vm->comp_id][0]; + vm_mac_tbl_update(vcpu->vm->vm_mac_id, vcpu->vm); + vcpu->shared_region->ax = virtio_net_mac[vcpu->vm->vm_mac_id][0]; mac_to_vm[vcpu->vm->comp_id] = vcpu->vm; break; case VIRTIO_NET_MAC1: - vcpu->shared_region->ax = virtio_net_mac[vcpu->vm->comp_id][1]; + vcpu->shared_region->ax = virtio_net_mac[vcpu->vm->vm_mac_id][1]; break; case VIRTIO_NET_MAC2: - vcpu->shared_region->ax = virtio_net_mac[vcpu->vm->comp_id][2]; + vcpu->shared_region->ax = virtio_net_mac[vcpu->vm->vm_mac_id][2]; break; case VIRTIO_NET_MAC3: - vcpu->shared_region->ax = virtio_net_mac[vcpu->vm->comp_id][3]; + vcpu->shared_region->ax = virtio_net_mac[vcpu->vm->vm_mac_id][3]; break; case VIRTIO_NET_MAC4: - vcpu->shared_region->ax = virtio_net_mac[vcpu->vm->comp_id][4]; + vcpu->shared_region->ax = virtio_net_mac[vcpu->vm->vm_mac_id][4]; break; case VIRTIO_NET_MAC5: - vcpu->shared_region->ax = virtio_net_mac[vcpu->vm->comp_id][5]; + vcpu->shared_region->ax = virtio_net_mac[vcpu->vm->vm_mac_id][5]; break; default: VM_PANIC(vcpu); @@ -543,6 +548,8 @@ virtio_net_outw(u32_t port_id, struct vmrt_vm_vcpu *vcpu) case VIRTIO_NET_QUEUE_NOTIFY: if (val == VIRTIO_NET_TXQ) { sched_thd_wakeup(vcpu->vm->tx_thd); + // void virtio_tx_task(void *data); + // virtio_tx_task(vcpu->vm); } get_virtio_net_regs(vcpu)->header.queue_notify = val; break; @@ -659,6 +666,8 @@ virtio_tx_task(void *data) while (1) { while (!vq_has_descs(vq)) { sched_thd_block(0); + // sched_thd_yield(); + // return; } vcpu = vq->vcpu; @@ -702,23 +711,29 @@ virtio_tx_task(void *data) printc("udp svc id:%u\n", svc_id); assert(0); - } - + } session = get_nf_session(vm, svc_id); tx_shmemd = session->tx_shmemd; assert(tx_shmemd); if (tx_shmemd != 0) { tx_obj = shm_bm_alloc_net_pkt_buf(tx_shmemd, &tx_pktid); - assert(tx_obj); - buf.objid = tx_pktid; - buf.pkt_len = plen; - buf.obj = tx_obj; - memcpy(netshmem_get_data_buf(tx_obj), pkt, plen); - if (unlikely(!nf_tx_ring_buf_enqueue(&(session->nf_tx_ring_buf), &buf))){ - shm_bm_free_net_pkt_buf(tx_obj); + + if (likely(tx_obj != NULL)){ + buf.objid = tx_pktid; + buf.pkt_len = plen; + buf.obj = tx_obj; + memcpy(netshmem_get_data_buf(tx_obj), pkt, plen); + if ((unlikely(!nf_tx_ring_buf_enqueue(&(session->nf_tx_ring_buf), &buf)))){ + shm_bm_free_net_pkt_buf(tx_obj); + sched_thd_yield(); + } else { + // sched_thd_wakeup(session->tx_thd); + // sync_sem_give(&session->tx_sem); + } } else { - sched_thd_wakeup(session->tx_thd); + printc("cannot allocate objects\n"); + assert(0); } } diff --git a/src/components/implementation/simple_vmm/vmm/netio.c b/src/components/implementation/simple_vmm/vmm/netio.c index af8974a447..a37dd7f962 100644 --- a/src/components/implementation/simple_vmm/vmm/netio.c +++ b/src/components/implementation/simple_vmm/vmm/netio.c @@ -5,6 +5,7 @@ #include #include #include +#include shm_bm_objid_t netio_get_a_packet(u16_t *pkt_len) @@ -168,9 +169,10 @@ netio_get_a_packet_batch(u8_t batch_limit) session = get_nf_session(vm, svc_id); + // sync_sem_take(&session->tx_sem); while (nf_tx_ring_buf_empty(&session->nf_tx_ring_buf)) { - // sched_thd_yield(); - sched_thd_block(0); + sched_thd_yield(); + // sched_thd_block(0); } assert(nf_tx_ring_buf_dequeue(&session->nf_tx_ring_buf, &buf)); @@ -186,6 +188,7 @@ netio_get_a_packet_batch(u8_t batch_limit) batch_ct++; while (batch_ct < batch_limit && nf_tx_ring_buf_dequeue(&session->nf_tx_ring_buf, &buf)) { + // printc("netio out a pkt, batch_ct:%d\n", batch_ct); pkt_arr[batch_ct].obj_id = buf.objid; pkt_arr[batch_ct].pkt_len = buf.pkt_len; batch_ct++; @@ -255,3 +258,24 @@ netio_shmem_map(cbuf_t shm_id) { netshmem_map_shmem(shm_id); } + +extern struct vmrt_vm_comp *vm_list[2]; + +void +netio_svc_update(int svc_id, u32_t vm) +{ + compid_t nf_id = cos_inv_token(); + thdid_t thd = cos_thdid(); + assert(vm < 2); + shm_bm_t tx_shm = netshmem_get_shm(); + assert(tx_shm); + + nf_svc_update(nf_id, thd, svc_id, vm_list[vm]); + + struct nf_session *session; + session = get_nf_session(vm_list[vm], svc_id); + nf_session_tx_update(session, tx_shm, thd); + sync_sem_init(&session->tx_sem, 0); + + nf_tx_ring_buf_init(&session->nf_tx_ring_buf, NF_TX_PKT_RBUF_NUM, NF_TX_PKT_RING_SZ); +} diff --git a/src/components/implementation/simple_vmm/vmm/nf_session.h b/src/components/implementation/simple_vmm/vmm/nf_session.h index ee00626432..74abaaf252 100644 --- a/src/components/implementation/simple_vmm/vmm/nf_session.h +++ b/src/components/implementation/simple_vmm/vmm/nf_session.h @@ -1,6 +1,7 @@ #include #include #include +#include struct nf_pkt_meta_data { void *obj; @@ -20,10 +21,12 @@ struct nf_session { thdid_t rx_thd; thdid_t tx_thd; + struct sync_sem tx_sem; + struct nf_tx_ring_buf nf_tx_ring_buf; }; -#define NF_TX_PKT_RBUF_NUM 512 +#define NF_TX_PKT_RBUF_NUM 32 #define NF_TX_PKT_RBUF_SZ (NF_TX_PKT_RBUF_NUM * sizeof(struct nf_tx_ring_buf)) #define NF_TX_PKT_RING_SZ (sizeof(struct ck_ring) + NF_TX_PKT_RBUF_SZ) #define NF_TX_PKT_RING_PAGES (round_up_to_page(NF_TX_PKT_RING_SZ)/PAGE_SIZE) diff --git a/src/components/implementation/simple_vmm/vmm/simple_vmm.c b/src/components/implementation/simple_vmm/vmm/simple_vmm.c index 1343cf661c..b79792e225 100644 --- a/src/components/implementation/simple_vmm/vmm/simple_vmm.c +++ b/src/components/implementation/simple_vmm/vmm/simple_vmm.c @@ -22,8 +22,10 @@ #include #include #include +#include +#include -#define NF_THD_PRIORITY 2 +#define NF_THD_PRIORITY 31 #define NO_NF_TEST 1 @@ -49,8 +51,10 @@ INCBIN(bios, "guest/guest.img") static struct vmrt_vm_comp *g_vm; static struct vmrt_vm_comp *g_vm1; +struct vmrt_vm_comp *vm_list[2] = {0}; + #define VM_MAX_COMPS (2) -#define GUEST_MEM_SZ (100*1024*1024) +#define GUEST_MEM_SZ (310*1024*1024) SS_STATIC_SLAB(vm_comp, struct vmrt_vm_comp, VM_MAX_COMPS); SS_STATIC_SLAB(vm_lapic, struct acrn_vlapic, VM_MAX_COMPS * VMRT_VM_MAX_VCPU); @@ -60,9 +64,21 @@ SS_STATIC_SLAB(vcpu_mmio_req, struct acrn_mmio_request, VM_MAX_COMPS * VMRT_VM_M struct sync_lock vm_boot_lock; +static int pause = 0; +static int hlt = 0; + void pause_handler(struct vmrt_vm_vcpu *vcpu) { + // printc("paused %d\n", pause++); + sched_thd_yield(); + GOTO_NEXT_INST(vcpu->shared_region); +} + +void +hlt_handler(struct vmrt_vm_vcpu *vcpu) +{ + // printc("hlt %d\n", hlt++); sched_thd_yield(); GOTO_NEXT_INST(vcpu->shared_region); } @@ -223,12 +239,14 @@ rx_task(void) struct netshmem_pkt_pri *first_obj_pri; struct netshmem_meta_tuple *pkt_arr; u16_t pkt_len; + u32_t ip; u8_t batch_ct = 50; // netio_shmem_map(netshmem_get_shm_id()); nic_shmem_map(netshmem_get_shm_id()); - nic_bind_port(0, 0); + ip = inet_addr("10.10.1.2"); + nic_bind_port(ip, 0); int i = 0; u64_t times = 0; @@ -278,11 +296,13 @@ tx_task(void) struct netshmem_meta_tuple *pkt_arr; u8_t tx_batch_ct = 0; struct netshmem_pkt_buf *tx_obj; + u32_t ip; shm_bm_t tx_shmemd = 0; tx_shmemd = netshmem_get_shm(); + ip = inet_addr("10.10.1.2"); - nic_bind_port(0, 1); + nic_bind_port(ip, 1); int svc_id = 0; nf_svc_update(cos_compid(), cos_thdid(), svc_id, g_vm); @@ -290,6 +310,7 @@ tx_task(void) struct nf_session *session; session = get_nf_session(g_vm, svc_id); nf_session_tx_update(session, tx_shmemd, cos_thdid()); + sync_sem_init(&session->tx_sem, 0); nf_tx_ring_buf_init(&session->nf_tx_ring_buf, NF_TX_PKT_RBUF_NUM, NF_TX_PKT_RING_SZ); @@ -312,12 +333,16 @@ cos_init(void) struct vmrt_vm_vcpu *vcpu; g_vm = vm_comp_create(); printc("created vm done:%d, %p\n", g_vm->comp_id, g_vm); + g_vm->vm_mac_id = 0; g_vm1 = vm_comp_create(); + g_vm1->vm_mac_id = 1; sync_lock_init(&vm_boot_lock); printc("creating vm1 done:%d, %p\n", g_vm1->comp_id, g_vm1); + vm_list[0] = g_vm; + vm_list[1] = g_vm1; } void @@ -372,10 +397,10 @@ parallel_main(coreid_t cid) #endif } else if(cid == 1) { /* wait for the first vm to start */ - sched_thd_block_timeout(0, time_now() + time_usec2cyc(10000000)); - printc("----------------------STARTING SECOND VM----------------------\n"); - vcpu = vmrt_get_vcpu(g_vm1, 0); - vmrt_vm_vcpu_start(vcpu); + // sched_thd_block_timeout(0, time_now() + time_usec2cyc(10000000)); + // printc("----------------------STARTING SECOND VM----------------------\n"); + // vcpu = vmrt_get_vcpu(g_vm1, 0); + // vmrt_vm_vcpu_start(vcpu); } while (1) diff --git a/src/components/interface/netio/netio.h b/src/components/interface/netio/netio.h index 59913e62ec..69c3c6dc00 100644 --- a/src/components/interface/netio/netio.h +++ b/src/components/interface/netio/netio.h @@ -11,5 +11,6 @@ int netio_send_packet(shm_bm_objid_t pktid, u16_t pkt_len); int netio_send_packet_batch(shm_bm_objid_t pktid); shm_bm_objid_t netio_get_a_packet_batch(u8_t batch_limit); void netio_shmem_map(cbuf_t shm_id); +void netio_svc_update(int svc_id, u32_t vm); #endif diff --git a/src/components/interface/netio/stubs/stubs.S b/src/components/interface/netio/stubs/stubs.S index 3cf49d7982..23ce82e4bf 100644 --- a/src/components/interface/netio/stubs/stubs.S +++ b/src/components/interface/netio/stubs/stubs.S @@ -5,3 +5,4 @@ cos_asm_stub(netio_send_packet) cos_asm_stub(netio_send_packet_batch) cos_asm_stub(netio_get_a_packet_batch) cos_asm_stub(netio_shmem_map) +cos_asm_stub(netio_svc_update) \ No newline at end of file diff --git a/src/components/lib/component/arch/x86_64/cos_component.h b/src/components/lib/component/arch/x86_64/cos_component.h index 1c5b0294b5..d03ff79d3f 100644 --- a/src/components/lib/component/arch/x86_64/cos_component.h +++ b/src/components/lib/component/arch/x86_64/cos_component.h @@ -25,11 +25,11 @@ void libc_init(); char *cos_initargs_tar(); /* temporary */ -static inline int +static inline sword_t call_cap_asm(u32_t cap_no, u32_t op, word_t arg1, word_t arg2, word_t arg3, word_t arg4) { long fault = 0; - int ret; + sword_t ret; /* * We use this frame ctx to save bp(frame pointer) and sp(stack pointer) @@ -77,11 +77,11 @@ call_cap_asm(u32_t cap_no, u32_t op, word_t arg1, word_t arg2, word_t arg3, word return ret; } -static inline int +static inline sword_t call_cap_retvals_asm(u32_t cap_no, u32_t op, word_t arg1, word_t arg2, word_t arg3, word_t arg4, word_t *r1, word_t *r2, word_t *r3) { long fault = 0; - int ret; + sword_t ret; /* * We use this frame ctx to save bp(frame pointer) and sp(stack pointer) * before it goes into the kernel through syscall. @@ -180,32 +180,32 @@ call_cap_2retvals_asm(u32_t cap_no, u32_t op, word_t arg1, word_t arg2, word_t a return ret; } -static inline int +static inline sword_t cap_switch_thd(u32_t cap_no) { return call_cap_asm(cap_no, 0, 0, 0, 0, 0); } -static inline int +static inline sword_t call_cap(u32_t cap_no, word_t arg1, word_t arg2, word_t arg3, word_t arg4) { return call_cap_asm(cap_no, 0, arg1, arg2, arg3, arg4); } -static inline int +static inline sword_t call_cap_op(u32_t cap_no, u32_t op_code, word_t arg1, word_t arg2, word_t arg3, word_t arg4) { return call_cap_asm(cap_no, op_code, arg1, arg2, arg3, arg4); } -static int +static sword_t cos_print(char *s, int len) { u32_t *s_ints = (u32_t *)s; return call_cap(PRINT_CAP_TEMP, s_ints[0], s_ints[1], s_ints[2], len); } -static inline int +static inline sword_t cos_sinv(struct usr_inv_cap *uc, word_t arg1, word_t arg2, word_t arg3, word_t arg4) { word_t r1, r2; @@ -215,7 +215,7 @@ cos_sinv(struct usr_inv_cap *uc, word_t arg1, word_t arg2, word_t arg3, word_t a return call_cap_op(uc->cap_no, 0, arg1, arg2, arg3, arg4); } -static inline int +static inline sword_t cos_sinv_2rets(struct usr_inv_cap *uc, word_t arg1, word_t arg2, word_t arg3, word_t arg4, word_t *ret1, word_t *ret2) { if (likely(uc->alt_fn)) return (uc->alt_fn)(arg1, arg2, arg3, arg4, ret1, ret2); @@ -223,7 +223,7 @@ cos_sinv_2rets(struct usr_inv_cap *uc, word_t arg1, word_t arg2, word_t arg3, wo return call_cap_2retvals_asm(uc->cap_no, 0, arg1, arg2, arg3, arg4, ret1, ret2); } -static inline int +static inline sword_t cos_sinv_rets(u32_t sinv, word_t arg1, word_t arg2, word_t arg3, word_t arg4, word_t *ret1, word_t *ret2, word_t *ret3) { return call_cap_retvals_asm(sinv, 0, arg1, arg2, arg3, arg4, ret1, ret2, ret3); diff --git a/src/components/lib/dpdk/cos_dpdk.c b/src/components/lib/dpdk/cos_dpdk.c index 2e5d9067be..2ff097b85d 100644 --- a/src/components/lib/dpdk/cos_dpdk.c +++ b/src/components/lib/dpdk/cos_dpdk.c @@ -302,7 +302,7 @@ cos_dev_port_tx_queue_setup(cos_portid_t port_id, uint16_t tx_queue_id, assert(dev_info.tx_offload_capa & DEV_TX_OFFLOAD_UDP_CKSUM); #endif - txq_conf.tx_free_thresh = nb_tx_desc - 32; + // txq_conf.tx_free_thresh = nb_tx_desc - 32; /* set the txq to enable IP and UDP offload */ if (ENABLE_OFFLOAD) { txq_conf.offloads |= DEV_TX_OFFLOAD_IPV4_CKSUM; diff --git a/src/components/lib/slm/quantum.c b/src/components/lib/slm/quantum.c index e394eb212a..c3fadf6018 100644 --- a/src/components/lib/slm/quantum.c +++ b/src/components/lib/slm/quantum.c @@ -164,7 +164,7 @@ slm_policy_timer_init(microsec_t period) int slm_timer_quantum_init(void) { - slm_policy_timer_init(130); + slm_policy_timer_init(1000); return 0; } diff --git a/src/components/lib/slm/slm_blkpt.c b/src/components/lib/slm/slm_blkpt.c index 94afb68b7f..ae2f7548c8 100644 --- a/src/components/lib/slm/slm_blkpt.c +++ b/src/components/lib/slm/slm_blkpt.c @@ -101,7 +101,7 @@ slm_blkpt_trigger(sched_blkpt_id_t blkpt, struct slm_thd *current, sched_blkpt_e } ps_lock_release(&m->lock); /* most likely we switch to a woken thread here */ - slm_cs_exit_reschedule(current, SLM_CS_NONE); + slm_cs_exit_reschedule(current, SLM_CS_CHECK_TIMEOUT); return 0; unlock: @@ -156,7 +156,7 @@ slm_blkpt_block(sched_blkpt_id_t blkpt, struct slm_thd *current, sched_blkpt_epo ERR_THROW(0, unlock); } ps_lock_release(&m->lock); - slm_cs_exit_reschedule(current, SLM_CS_NONE); + slm_cs_exit_reschedule(current, SLM_CS_CHECK_TIMEOUT); assert(stacklist_is_removed(&sl)); return 0; diff --git a/src/components/lib/vmrt/vmrt.c b/src/components/lib/vmrt/vmrt.c index c1dbff803c..f5b6493a7c 100644 --- a/src/components/lib/vmrt/vmrt.c +++ b/src/components/lib/vmrt/vmrt.c @@ -400,6 +400,12 @@ ctrl_register_access_handler(struct vmrt_vm_vcpu *vcpu) } } +CWEAKSYMB void +hlt_handler(struct vmrt_vm_vcpu *vcpu) +{ + VM_PANIC(vcpu); +} + static inline void vmrt_handle_reason(struct vmrt_vm_vcpu *vcpu, u64_t reason) { @@ -414,8 +420,7 @@ vmrt_handle_reason(struct vmrt_vm_vcpu *vcpu, u64_t reason) cpuid_handler(vcpu); break; case VM_EXIT_REASON_HLT: - /* TODO: handle hlt exception */ - VM_PANIC(vcpu); + hlt_handler(vcpu); break; case VM_EXIT_REASON_RDTSC: VM_PANIC(vcpu); @@ -468,7 +473,7 @@ void vmrt_vm_vcpu_start(struct vmrt_vm_vcpu *vcpu) { /* This is actually just to "push" the vcpu handler thread into run queue. */ - sched_thd_param_set(vcpu->handler_tid, sched_param_pack(SCHEDP_PRIO, 2)); + sched_thd_param_set(vcpu->handler_tid, sched_param_pack(SCHEDP_PRIO, 31)); } void diff --git a/src/components/lib/vmrt/vmrt.h b/src/components/lib/vmrt/vmrt.h index 6740008807..88e177cce5 100644 --- a/src/components/lib/vmrt/vmrt.h +++ b/src/components/lib/vmrt/vmrt.h @@ -58,6 +58,7 @@ struct vmrt_vm_comp { thdid_t tx_thd; int wire_mode; + u16_t vm_mac_id; }; #define VMRT_GPA2HVA(gpa, vm, offset) ((gpa - offset) + vm->guest_addr) diff --git a/src/kernel/capinv.c b/src/kernel/capinv.c index 51f86e2b1b..af087fb095 100644 --- a/src/kernel/capinv.c +++ b/src/kernel/capinv.c @@ -978,9 +978,9 @@ cap_introspect(struct captbl *ct, capid_t capid, u32_t op, unsigned long *retval #define ENABLE_KERNEL_PRINT -static int composite_syscall_slowpath(struct pt_regs *regs, int *thd_switch); +static sword_t composite_syscall_slowpath(struct pt_regs *regs, int *thd_switch); -COS_SYSCALL __attribute__((section("__ipc_entry"))) int +COS_SYSCALL __attribute__((section("__ipc_entry"))) sword_t composite_syscall_handler(struct pt_regs *regs) { struct cap_header *ch; @@ -994,7 +994,7 @@ composite_syscall_handler(struct pt_regs *regs) * pass it into other functions to avoid redundant lookups. */ struct cos_cpu_local_info *cos_info = cos_cpu_local_info(); - int ret = -ENOENT; + sword_t ret = -ENOENT; int thd_switch = 0; cap = __userregs_getcap(regs); @@ -1075,14 +1075,14 @@ composite_syscall_handler(struct pt_regs *regs) * slowpath: other capability operations, most of which * involve updating the resource tables. */ -static int __attribute__((noinline)) composite_syscall_slowpath(struct pt_regs *regs, int *thd_switch) +static sword_t __attribute__((noinline)) composite_syscall_slowpath(struct pt_regs *regs, int *thd_switch) { struct cap_header * ch; struct captbl * ct; struct thread * thd; capid_t cap, capin; syscall_op_t op; - int ret = -ENOENT; + sword_t ret = -ENOENT; struct cos_cpu_local_info *cos_info = cos_cpu_local_info(); struct comp_info *ci; unsigned long ip, sp; diff --git a/src/kernel/include/pgtbl.h b/src/kernel/include/pgtbl.h index d14c98a207..fa93ce03df 100644 --- a/src/kernel/include/pgtbl.h +++ b/src/kernel/include/pgtbl.h @@ -142,7 +142,7 @@ int chal_pgtbl_cpy(struct captbl *t, capid_t cap_to, capid_t capin_to int chal_pgtbl_cons(struct cap_captbl *ct, struct cap_captbl *ctsub, capid_t expandid, unsigned long depth); int chal_pgtbl_decons(struct cap_header *head, struct cap_header *sub, capid_t pruneid, unsigned long lvl); /* Introspection */ -int chal_pgtbl_introspect(struct cap_header *ch, vaddr_t addr); +word_t chal_pgtbl_introspect(struct cap_header *ch, vaddr_t addr); #endif /* PGTBL_H */ diff --git a/src/kernel/include/shared/cos_types.h b/src/kernel/include/shared/cos_types.h index e09257eb53..ef8fa4ddd5 100644 --- a/src/kernel/include/shared/cos_types.h +++ b/src/kernel/include/shared/cos_types.h @@ -32,6 +32,7 @@ typedef unsigned long word_t; typedef unsigned long long dword_t; +typedef signed long sword_t; typedef u64_t cycles_t; typedef u64_t microsec_t; typedef unsigned long tcap_res_t; diff --git a/src/platform/i386/boot_comp.c b/src/platform/i386/boot_comp.c index a8bcd20349..e81b6d46a9 100644 --- a/src/platform/i386/boot_comp.c +++ b/src/platform/i386/boot_comp.c @@ -146,7 +146,7 @@ boot_pgtbl_expand(struct captbl *ct, capid_t pgdcap, capid_t ptecap, const char pte_cap->lvl = lvl; /* hook the pte into the boot component's page tables */ ret = cap_cons(ct, pgdcap, ptecap, - (capid_t)(user_vaddr + i * (1 << (PAGE_ORDER + (PGTBL_DEPTH - lvl) * PGTBL_ENTRY_ORDER)))); + (user_vaddr + (capid_t)i * (1 << (PAGE_ORDER + (PGTBL_DEPTH - lvl) * PGTBL_ENTRY_ORDER)))); assert(!ret); } } @@ -156,7 +156,7 @@ boot_pgtbl_expand(struct captbl *ct, capid_t pgdcap, capid_t ptecap, const char int boot_pgtbl_mappings_add(struct captbl *ct, capid_t pgdcap, capid_t ptecap, const char *label, void *kern_vaddr, - unsigned long user_vaddr, unsigned int range, int uvm) + unsigned long user_vaddr, u64_t range, int uvm) { int ret; u8_t * ptes; diff --git a/src/platform/i386/chal/shared/cos_config.h b/src/platform/i386/chal/shared/cos_config.h index b93de51a7c..3538596f03 100644 --- a/src/platform/i386/chal/shared/cos_config.h +++ b/src/platform/i386/chal/shared/cos_config.h @@ -61,7 +61,7 @@ #define COS_HW_MMIO_MAX_SZ (1UL << 27) /* Assuming a MAX of 128MB for MMIO. */ #if defined(__x86_64__) #define COS_PHYMEM_MAX_SZ ((1UL << 35) - (1UL << 22) - COS_HW_MMIO_MAX_SZ) /* 1GB - 4MB - MMIO sz */ -#define COS_PHYMEM_END_PA ((1UL << 35) - COS_HW_MMIO_MAX_SZ) /* Maximum usable physical memory */ +#define COS_PHYMEM_END_PA ((1UL << 37) - COS_HW_MMIO_MAX_SZ) /* Maximum usable physical memory */ #else #define COS_PHYMEM_MAX_SZ ((1UL << 30) - (1UL << 22) - COS_HW_MMIO_MAX_SZ) /* 1GB - 4MB - MMIO sz */ #define COS_PHYMEM_END_PA ((1UL << 30) - COS_HW_MMIO_MAX_SZ) /* Maximum usable physical memory */ diff --git a/src/platform/i386/chal_pgtbl.c b/src/platform/i386/chal_pgtbl.c index 399bfdcba5..d0183f64aa 100644 --- a/src/platform/i386/chal_pgtbl.c +++ b/src/platform/i386/chal_pgtbl.c @@ -765,14 +765,14 @@ chal_pgtbl_cons(struct cap_captbl *ct, struct cap_captbl *ctsub, capid_t expandi ret = cos_cas_32((u32_t *)&(((struct cap_pgtbl *)ctsub)->refcnt_flags), old_v, refcnt_flags); if (ret != CAS_SUCCESS) return -ECASFAIL; - new_pte = (u32_t)chal_va2pa( - (void *)((unsigned long)(((struct cap_pgtbl *)ctsub)->pgtbl) & PGTBL_FRAME_MASK)); + new_pte = (u64_t)((chal_va2pa((void *)((struct cap_pgtbl *)ctsub)->pgtbl) & PGTBL_FRAME_MASK)); type = ((struct cap_pgtbl *)ctsub)->type; if (type == PGTBL_TYPE_DEF) { new_pte |= X86_PGTBL_INTERN_DEF; } else if (type == PGTBL_TYPE_EPT) { new_pte |= x86_EPT_INTERN_DEF; + } else { /* Some error has occured in this cap! */ assert(0); @@ -819,12 +819,12 @@ chal_pgtbl_decons(struct cap_header *head, struct cap_header *sub, capid_t prune return 0; } -int +word_t chal_pgtbl_introspect(struct cap_header *ch, vaddr_t addr) { unsigned long *pte; word_t flags; - int ret = 0; + word_t ret = 0; #if defined(__x86_64__) unsigned long *f, old_v; diff --git a/src/platform/i386/kernel.c b/src/platform/i386/kernel.c index 62312f088d..a49de0bdf8 100644 --- a/src/platform/i386/kernel.c +++ b/src/platform/i386/kernel.c @@ -42,7 +42,7 @@ multiboot_mem_parse(struct multiboot_tag *tag) multiboot_memory_map_t *mmap; u8_t * mod_end; u8_t * mem_addr; - unsigned long long mem_len, sz; + unsigned long long mem_len, sz = 0; for (mmap = ((struct multiboot_tag_mmap *) tag)->entries; (multiboot_uint8_t *) mmap < (multiboot_uint8_t *) tag + tag->size; @@ -62,11 +62,18 @@ multiboot_mem_parse(struct multiboot_tag *tag) continue; } /* is this the memory region we'll use for component memory? */ - if (mmap->type == 1 && mod_end >= mem_addr && mod_end < (mem_addr + mem_len)) { - sz = (mem_addr + mem_len) - mod_end; + if (mmap->type == 1 && mem_len > sz) { + if (mod_end > (mem_addr + mem_len)) continue; + if (mod_end > mem_addr) { + sz = (mem_addr + mem_len) - mod_end; + } else { + sz = mem_len; + glb_memlayout.kern_boot_heap = mem_addr; + glb_memlayout.mod_end = mem_addr; + } glb_memlayout.kmem_end = mem_addr + mem_len; - printk("\t memory usable at boot time: %lx (%ld MB + %ld KB)\n", sz, - MEM_MB_ONLY(sz), MEM_KB_ONLY(sz)); + printk("\t memory usable at boot time: %lx (%ld MB + %ld KB) [%lx, %lx)\n", sz, + MEM_MB_ONLY(sz), MEM_KB_ONLY(sz), glb_memlayout.kern_boot_heap, glb_memlayout.kmem_end); } i++; } diff --git a/src/platform/x86_64/vmx/vmx.c b/src/platform/x86_64/vmx/vmx.c index 09c680fd4d..181e703f5d 100644 --- a/src/platform/x86_64/vmx/vmx.c +++ b/src/platform/x86_64/vmx/vmx.c @@ -199,7 +199,7 @@ vmx_procbased_ctl_init(void) u32_t primary_procbased_ctls = 0; u32_t second_procbased_ctls = 0; - primary_procbased_ctls = MWAIT_EXITING | RDPMC_EXITING | USE_TPR_SHADOW + primary_procbased_ctls = HLT_EXITING | MWAIT_EXITING | RDPMC_EXITING | USE_TPR_SHADOW | UNCONDITIONAL_IO_EXITING | USE_MSR_BITMAPS | PAUSE_EXITING | ACTIVATE_SECONDARY_CONTROLS; primary_procbased_ctls = fix_reserved_ctrl_bits(IA32_VMX_TRUE_PROCBASED_CTLS, primary_procbased_ctls); diff --git a/tools/run.sh b/tools/run.sh index 82aa50840c..83e512348b 100755 --- a/tools/run.sh +++ b/tools/run.sh @@ -9,7 +9,7 @@ num_sockets=1 num_cores=16 num_threads=1 vcpus=$[${num_sockets}*${num_cores}*${num_threads}] -mem_size=4096 +mem_size=9000 kvm_flag="" arch=$2 From 6b1098f96b7b57161a5a6db50b1163792ab2a3b5 Mon Sep 17 00:00:00 2001 From: betahxy Date: Mon, 18 Mar 2024 05:00:00 -0400 Subject: [PATCH 07/60] debug --- src/components/Makefile.comp | 1 + .../implementation/nicmgr/dpdk/Makefile | 2 + .../implementation/nicmgr/dpdk/fast_memcpy.h | 689 ++++++++++++++++++ .../implementation/nicmgr/dpdk/init.c | 99 ++- .../implementation/nicmgr/dpdk/nicmgr.c | 7 +- .../implementation/nicmgr/dpdk/simple_hash.c | 2 +- .../sched/pfprr_quantum_static/main.c | 10 +- .../implementation/simple_vmm/vmm/Makefile | 1 + .../vmm/devices/vpci/virtio_net_io.c | 302 ++++---- .../vmm/devices/vpci/virtio_net_io.h | 2 +- .../simple_vmm/vmm/fast_memcpy.h | 689 ++++++++++++++++++ .../implementation/simple_vmm/vmm/netio.c | 13 +- .../simple_vmm/vmm/nf_session.c | 26 +- .../simple_vmm/vmm/nf_session.h | 4 +- .../simple_vmm/vmm/simple_vmm.c | 47 +- src/components/interface/netshmem/netshmem.h | 2 +- src/components/lib/dpdk/Makefile | 4 +- src/components/lib/dpdk/cos_dpdk.c | 5 +- src/components/lib/slm/quantum.c | 2 +- 19 files changed, 1606 insertions(+), 301 deletions(-) create mode 100644 src/components/implementation/nicmgr/dpdk/fast_memcpy.h create mode 100644 src/components/implementation/simple_vmm/vmm/fast_memcpy.h diff --git a/src/components/Makefile.comp b/src/components/Makefile.comp index a4cf3713c7..2b78951a0d 100644 --- a/src/components/Makefile.comp +++ b/src/components/Makefile.comp @@ -23,6 +23,7 @@ CXXFLAGS=-fno-exceptions -fno-threadsafe-statics -Wno-write-strings $(CFLAGS) LDFLAGS=$(ARCH_LDFLAGS) MUSLCFLAGS=$(CFLAGS) -lc -lgcc -Xlinker -r ASFLAGS=$(ARCH_ASFLAGS) $(CINC) $(SHARED_FLAGS) +CFLAGS+= $(COMP_FLAGS) GCC_PIE=$(shell gcc -v 2>&1 | grep -c "\--enable-default-pie") ifeq ($(GCC_PIE),1) diff --git a/src/components/implementation/nicmgr/dpdk/Makefile b/src/components/implementation/nicmgr/dpdk/Makefile index 5e19701383..674068c8b2 100644 --- a/src/components/implementation/nicmgr/dpdk/Makefile +++ b/src/components/implementation/nicmgr/dpdk/Makefile @@ -15,4 +15,6 @@ LIBRARY_DEPENDENCIES = component dpdk shm_bm ck sync time # the build to fail. The build system does not validate this # minimality; that's on you! +COMP_FLAGS= -mavx -mavx2 -mfma + include Makefile.subsubdir diff --git a/src/components/implementation/nicmgr/dpdk/fast_memcpy.h b/src/components/implementation/nicmgr/dpdk/fast_memcpy.h new file mode 100644 index 0000000000..ddd282d4ba --- /dev/null +++ b/src/components/implementation/nicmgr/dpdk/fast_memcpy.h @@ -0,0 +1,689 @@ +//===================================================================== +// +// FastMemcpy.c - skywind3000@163.com, 2015 +// +// feature: +// 50% speed up in avg. vs standard memcpy (tested in vc2012/gcc5.1) +// +//===================================================================== +#ifndef __FAST_MEMCPY_H__ +#define __FAST_MEMCPY_H__ + +#include +#include +#include + + +//--------------------------------------------------------------------- +// force inline for compilers +//--------------------------------------------------------------------- +#ifndef INLINE +#ifdef __GNUC__ +#if (__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1)) + #define INLINE __inline__ __attribute__((always_inline)) +#else + #define INLINE __inline__ +#endif +#elif defined(_MSC_VER) + #define INLINE __forceinline +#elif (defined(__BORLANDC__) || defined(__WATCOMC__)) + #define INLINE __inline +#else + #define INLINE +#endif +#endif + + + +//--------------------------------------------------------------------- +// fast copy for different sizes +//--------------------------------------------------------------------- +static INLINE void memcpy_sse2_16(void *dst, const void *src) { + __m128i m0 = _mm_loadu_si128(((const __m128i*)src) + 0); + _mm_storeu_si128(((__m128i*)dst) + 0, m0); +} + +static INLINE void memcpy_sse2_32(void *dst, const void *src) { + __m128i m0 = _mm_loadu_si128(((const __m128i*)src) + 0); + __m128i m1 = _mm_loadu_si128(((const __m128i*)src) + 1); + _mm_storeu_si128(((__m128i*)dst) + 0, m0); + _mm_storeu_si128(((__m128i*)dst) + 1, m1); +} + +static INLINE void memcpy_sse2_64(void *dst, const void *src) { + __m128i m0 = _mm_loadu_si128(((const __m128i*)src) + 0); + __m128i m1 = _mm_loadu_si128(((const __m128i*)src) + 1); + __m128i m2 = _mm_loadu_si128(((const __m128i*)src) + 2); + __m128i m3 = _mm_loadu_si128(((const __m128i*)src) + 3); + _mm_storeu_si128(((__m128i*)dst) + 0, m0); + _mm_storeu_si128(((__m128i*)dst) + 1, m1); + _mm_storeu_si128(((__m128i*)dst) + 2, m2); + _mm_storeu_si128(((__m128i*)dst) + 3, m3); +} + +static INLINE void memcpy_sse2_128(void *dst, const void *src) { + __m128i m0 = _mm_loadu_si128(((const __m128i*)src) + 0); + __m128i m1 = _mm_loadu_si128(((const __m128i*)src) + 1); + __m128i m2 = _mm_loadu_si128(((const __m128i*)src) + 2); + __m128i m3 = _mm_loadu_si128(((const __m128i*)src) + 3); + __m128i m4 = _mm_loadu_si128(((const __m128i*)src) + 4); + __m128i m5 = _mm_loadu_si128(((const __m128i*)src) + 5); + __m128i m6 = _mm_loadu_si128(((const __m128i*)src) + 6); + __m128i m7 = _mm_loadu_si128(((const __m128i*)src) + 7); + _mm_storeu_si128(((__m128i*)dst) + 0, m0); + _mm_storeu_si128(((__m128i*)dst) + 1, m1); + _mm_storeu_si128(((__m128i*)dst) + 2, m2); + _mm_storeu_si128(((__m128i*)dst) + 3, m3); + _mm_storeu_si128(((__m128i*)dst) + 4, m4); + _mm_storeu_si128(((__m128i*)dst) + 5, m5); + _mm_storeu_si128(((__m128i*)dst) + 6, m6); + _mm_storeu_si128(((__m128i*)dst) + 7, m7); +} + + +//--------------------------------------------------------------------- +// tiny memory copy with jump table optimized +//--------------------------------------------------------------------- +static INLINE void *memcpy_tiny(void *dst, const void *src, size_t size) { + unsigned char *dd = ((unsigned char*)dst) + size; + const unsigned char *ss = ((const unsigned char*)src) + size; + + switch (size) { + case 64: + memcpy_sse2_64(dd - 64, ss - 64); + case 0: + break; + + case 65: + memcpy_sse2_64(dd - 65, ss - 65); + case 1: + dd[-1] = ss[-1]; + break; + + case 66: + memcpy_sse2_64(dd - 66, ss - 66); + case 2: + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 67: + memcpy_sse2_64(dd - 67, ss - 67); + case 3: + *((uint16_t*)(dd - 3)) = *((uint16_t*)(ss - 3)); + dd[-1] = ss[-1]; + break; + + case 68: + memcpy_sse2_64(dd - 68, ss - 68); + case 4: + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 69: + memcpy_sse2_64(dd - 69, ss - 69); + case 5: + *((uint32_t*)(dd - 5)) = *((uint32_t*)(ss - 5)); + dd[-1] = ss[-1]; + break; + + case 70: + memcpy_sse2_64(dd - 70, ss - 70); + case 6: + *((uint32_t*)(dd - 6)) = *((uint32_t*)(ss - 6)); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 71: + memcpy_sse2_64(dd - 71, ss - 71); + case 7: + *((uint32_t*)(dd - 7)) = *((uint32_t*)(ss - 7)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 72: + memcpy_sse2_64(dd - 72, ss - 72); + case 8: + *((uint64_t*)(dd - 8)) = *((uint64_t*)(ss - 8)); + break; + + case 73: + memcpy_sse2_64(dd - 73, ss - 73); + case 9: + *((uint64_t*)(dd - 9)) = *((uint64_t*)(ss - 9)); + dd[-1] = ss[-1]; + break; + + case 74: + memcpy_sse2_64(dd - 74, ss - 74); + case 10: + *((uint64_t*)(dd - 10)) = *((uint64_t*)(ss - 10)); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 75: + memcpy_sse2_64(dd - 75, ss - 75); + case 11: + *((uint64_t*)(dd - 11)) = *((uint64_t*)(ss - 11)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 76: + memcpy_sse2_64(dd - 76, ss - 76); + case 12: + *((uint64_t*)(dd - 12)) = *((uint64_t*)(ss - 12)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 77: + memcpy_sse2_64(dd - 77, ss - 77); + case 13: + *((uint64_t*)(dd - 13)) = *((uint64_t*)(ss - 13)); + *((uint32_t*)(dd - 5)) = *((uint32_t*)(ss - 5)); + dd[-1] = ss[-1]; + break; + + case 78: + memcpy_sse2_64(dd - 78, ss - 78); + case 14: + *((uint64_t*)(dd - 14)) = *((uint64_t*)(ss - 14)); + *((uint64_t*)(dd - 8)) = *((uint64_t*)(ss - 8)); + break; + + case 79: + memcpy_sse2_64(dd - 79, ss - 79); + case 15: + *((uint64_t*)(dd - 15)) = *((uint64_t*)(ss - 15)); + *((uint64_t*)(dd - 8)) = *((uint64_t*)(ss - 8)); + break; + + case 80: + memcpy_sse2_64(dd - 80, ss - 80); + case 16: + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 81: + memcpy_sse2_64(dd - 81, ss - 81); + case 17: + memcpy_sse2_16(dd - 17, ss - 17); + dd[-1] = ss[-1]; + break; + + case 82: + memcpy_sse2_64(dd - 82, ss - 82); + case 18: + memcpy_sse2_16(dd - 18, ss - 18); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 83: + memcpy_sse2_64(dd - 83, ss - 83); + case 19: + memcpy_sse2_16(dd - 19, ss - 19); + *((uint16_t*)(dd - 3)) = *((uint16_t*)(ss - 3)); + dd[-1] = ss[-1]; + break; + + case 84: + memcpy_sse2_64(dd - 84, ss - 84); + case 20: + memcpy_sse2_16(dd - 20, ss - 20); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 85: + memcpy_sse2_64(dd - 85, ss - 85); + case 21: + memcpy_sse2_16(dd - 21, ss - 21); + *((uint32_t*)(dd - 5)) = *((uint32_t*)(ss - 5)); + dd[-1] = ss[-1]; + break; + + case 86: + memcpy_sse2_64(dd - 86, ss - 86); + case 22: + memcpy_sse2_16(dd - 22, ss - 22); + *((uint32_t*)(dd - 6)) = *((uint32_t*)(ss - 6)); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 87: + memcpy_sse2_64(dd - 87, ss - 87); + case 23: + memcpy_sse2_16(dd - 23, ss - 23); + *((uint32_t*)(dd - 7)) = *((uint32_t*)(ss - 7)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 88: + memcpy_sse2_64(dd - 88, ss - 88); + case 24: + memcpy_sse2_16(dd - 24, ss - 24); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 89: + memcpy_sse2_64(dd - 89, ss - 89); + case 25: + memcpy_sse2_16(dd - 25, ss - 25); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 90: + memcpy_sse2_64(dd - 90, ss - 90); + case 26: + memcpy_sse2_16(dd - 26, ss - 26); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 91: + memcpy_sse2_64(dd - 91, ss - 91); + case 27: + memcpy_sse2_16(dd - 27, ss - 27); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 92: + memcpy_sse2_64(dd - 92, ss - 92); + case 28: + memcpy_sse2_16(dd - 28, ss - 28); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 93: + memcpy_sse2_64(dd - 93, ss - 93); + case 29: + memcpy_sse2_16(dd - 29, ss - 29); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 94: + memcpy_sse2_64(dd - 94, ss - 94); + case 30: + memcpy_sse2_16(dd - 30, ss - 30); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 95: + memcpy_sse2_64(dd - 95, ss - 95); + case 31: + memcpy_sse2_16(dd - 31, ss - 31); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 96: + memcpy_sse2_64(dd - 96, ss - 96); + case 32: + memcpy_sse2_32(dd - 32, ss - 32); + break; + + case 97: + memcpy_sse2_64(dd - 97, ss - 97); + case 33: + memcpy_sse2_32(dd - 33, ss - 33); + dd[-1] = ss[-1]; + break; + + case 98: + memcpy_sse2_64(dd - 98, ss - 98); + case 34: + memcpy_sse2_32(dd - 34, ss - 34); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 99: + memcpy_sse2_64(dd - 99, ss - 99); + case 35: + memcpy_sse2_32(dd - 35, ss - 35); + *((uint16_t*)(dd - 3)) = *((uint16_t*)(ss - 3)); + dd[-1] = ss[-1]; + break; + + case 100: + memcpy_sse2_64(dd - 100, ss - 100); + case 36: + memcpy_sse2_32(dd - 36, ss - 36); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 101: + memcpy_sse2_64(dd - 101, ss - 101); + case 37: + memcpy_sse2_32(dd - 37, ss - 37); + *((uint32_t*)(dd - 5)) = *((uint32_t*)(ss - 5)); + dd[-1] = ss[-1]; + break; + + case 102: + memcpy_sse2_64(dd - 102, ss - 102); + case 38: + memcpy_sse2_32(dd - 38, ss - 38); + *((uint32_t*)(dd - 6)) = *((uint32_t*)(ss - 6)); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 103: + memcpy_sse2_64(dd - 103, ss - 103); + case 39: + memcpy_sse2_32(dd - 39, ss - 39); + *((uint32_t*)(dd - 7)) = *((uint32_t*)(ss - 7)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 104: + memcpy_sse2_64(dd - 104, ss - 104); + case 40: + memcpy_sse2_32(dd - 40, ss - 40); + *((uint64_t*)(dd - 8)) = *((uint64_t*)(ss - 8)); + break; + + case 105: + memcpy_sse2_64(dd - 105, ss - 105); + case 41: + memcpy_sse2_32(dd - 41, ss - 41); + *((uint64_t*)(dd - 9)) = *((uint64_t*)(ss - 9)); + dd[-1] = ss[-1]; + break; + + case 106: + memcpy_sse2_64(dd - 106, ss - 106); + case 42: + memcpy_sse2_32(dd - 42, ss - 42); + *((uint64_t*)(dd - 10)) = *((uint64_t*)(ss - 10)); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 107: + memcpy_sse2_64(dd - 107, ss - 107); + case 43: + memcpy_sse2_32(dd - 43, ss - 43); + *((uint64_t*)(dd - 11)) = *((uint64_t*)(ss - 11)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 108: + memcpy_sse2_64(dd - 108, ss - 108); + case 44: + memcpy_sse2_32(dd - 44, ss - 44); + *((uint64_t*)(dd - 12)) = *((uint64_t*)(ss - 12)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 109: + memcpy_sse2_64(dd - 109, ss - 109); + case 45: + memcpy_sse2_32(dd - 45, ss - 45); + *((uint64_t*)(dd - 13)) = *((uint64_t*)(ss - 13)); + *((uint32_t*)(dd - 5)) = *((uint32_t*)(ss - 5)); + dd[-1] = ss[-1]; + break; + + case 110: + memcpy_sse2_64(dd - 110, ss - 110); + case 46: + memcpy_sse2_32(dd - 46, ss - 46); + *((uint64_t*)(dd - 14)) = *((uint64_t*)(ss - 14)); + *((uint64_t*)(dd - 8)) = *((uint64_t*)(ss - 8)); + break; + + case 111: + memcpy_sse2_64(dd - 111, ss - 111); + case 47: + memcpy_sse2_32(dd - 47, ss - 47); + *((uint64_t*)(dd - 15)) = *((uint64_t*)(ss - 15)); + *((uint64_t*)(dd - 8)) = *((uint64_t*)(ss - 8)); + break; + + case 112: + memcpy_sse2_64(dd - 112, ss - 112); + case 48: + memcpy_sse2_32(dd - 48, ss - 48); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 113: + memcpy_sse2_64(dd - 113, ss - 113); + case 49: + memcpy_sse2_32(dd - 49, ss - 49); + memcpy_sse2_16(dd - 17, ss - 17); + dd[-1] = ss[-1]; + break; + + case 114: + memcpy_sse2_64(dd - 114, ss - 114); + case 50: + memcpy_sse2_32(dd - 50, ss - 50); + memcpy_sse2_16(dd - 18, ss - 18); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 115: + memcpy_sse2_64(dd - 115, ss - 115); + case 51: + memcpy_sse2_32(dd - 51, ss - 51); + memcpy_sse2_16(dd - 19, ss - 19); + *((uint16_t*)(dd - 3)) = *((uint16_t*)(ss - 3)); + dd[-1] = ss[-1]; + break; + + case 116: + memcpy_sse2_64(dd - 116, ss - 116); + case 52: + memcpy_sse2_32(dd - 52, ss - 52); + memcpy_sse2_16(dd - 20, ss - 20); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 117: + memcpy_sse2_64(dd - 117, ss - 117); + case 53: + memcpy_sse2_32(dd - 53, ss - 53); + memcpy_sse2_16(dd - 21, ss - 21); + *((uint32_t*)(dd - 5)) = *((uint32_t*)(ss - 5)); + dd[-1] = ss[-1]; + break; + + case 118: + memcpy_sse2_64(dd - 118, ss - 118); + case 54: + memcpy_sse2_32(dd - 54, ss - 54); + memcpy_sse2_16(dd - 22, ss - 22); + *((uint32_t*)(dd - 6)) = *((uint32_t*)(ss - 6)); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 119: + memcpy_sse2_64(dd - 119, ss - 119); + case 55: + memcpy_sse2_32(dd - 55, ss - 55); + memcpy_sse2_16(dd - 23, ss - 23); + *((uint32_t*)(dd - 7)) = *((uint32_t*)(ss - 7)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 120: + memcpy_sse2_64(dd - 120, ss - 120); + case 56: + memcpy_sse2_32(dd - 56, ss - 56); + memcpy_sse2_16(dd - 24, ss - 24); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 121: + memcpy_sse2_64(dd - 121, ss - 121); + case 57: + memcpy_sse2_32(dd - 57, ss - 57); + memcpy_sse2_16(dd - 25, ss - 25); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 122: + memcpy_sse2_64(dd - 122, ss - 122); + case 58: + memcpy_sse2_32(dd - 58, ss - 58); + memcpy_sse2_16(dd - 26, ss - 26); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 123: + memcpy_sse2_64(dd - 123, ss - 123); + case 59: + memcpy_sse2_32(dd - 59, ss - 59); + memcpy_sse2_16(dd - 27, ss - 27); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 124: + memcpy_sse2_64(dd - 124, ss - 124); + case 60: + memcpy_sse2_32(dd - 60, ss - 60); + memcpy_sse2_16(dd - 28, ss - 28); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 125: + memcpy_sse2_64(dd - 125, ss - 125); + case 61: + memcpy_sse2_32(dd - 61, ss - 61); + memcpy_sse2_16(dd - 29, ss - 29); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 126: + memcpy_sse2_64(dd - 126, ss - 126); + case 62: + memcpy_sse2_32(dd - 62, ss - 62); + memcpy_sse2_16(dd - 30, ss - 30); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 127: + memcpy_sse2_64(dd - 127, ss - 127); + case 63: + memcpy_sse2_32(dd - 63, ss - 63); + memcpy_sse2_16(dd - 31, ss - 31); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 128: + memcpy_sse2_128(dd - 128, ss - 128); + break; + } + + return dst; +} + + +//--------------------------------------------------------------------- +// main routine +//--------------------------------------------------------------------- +static void* memcpy_fast(void *destination, const void *source, size_t size) +{ + unsigned char *dst = (unsigned char*)destination; + const unsigned char *src = (const unsigned char*)source; + static size_t cachesize = 0x200000; // L2-cache size + size_t padding; + + // small memory copy + if (size <= 128) { + return memcpy_tiny(dst, src, size); + } + + // align destination to 16 bytes boundary + padding = (16 - (((size_t)dst) & 15)) & 15; + + if (padding > 0) { + __m128i head = _mm_loadu_si128((const __m128i*)src); + _mm_storeu_si128((__m128i*)dst, head); + dst += padding; + src += padding; + size -= padding; + } + + // medium size copy + if (size <= cachesize) { + __m128i c0, c1, c2, c3, c4, c5, c6, c7; + + for (; size >= 128; size -= 128) { + c0 = _mm_loadu_si128(((const __m128i*)src) + 0); + c1 = _mm_loadu_si128(((const __m128i*)src) + 1); + c2 = _mm_loadu_si128(((const __m128i*)src) + 2); + c3 = _mm_loadu_si128(((const __m128i*)src) + 3); + c4 = _mm_loadu_si128(((const __m128i*)src) + 4); + c5 = _mm_loadu_si128(((const __m128i*)src) + 5); + c6 = _mm_loadu_si128(((const __m128i*)src) + 6); + c7 = _mm_loadu_si128(((const __m128i*)src) + 7); + _mm_prefetch((const char*)(src + 256), _MM_HINT_NTA); + src += 128; + _mm_store_si128((((__m128i*)dst) + 0), c0); + _mm_store_si128((((__m128i*)dst) + 1), c1); + _mm_store_si128((((__m128i*)dst) + 2), c2); + _mm_store_si128((((__m128i*)dst) + 3), c3); + _mm_store_si128((((__m128i*)dst) + 4), c4); + _mm_store_si128((((__m128i*)dst) + 5), c5); + _mm_store_si128((((__m128i*)dst) + 6), c6); + _mm_store_si128((((__m128i*)dst) + 7), c7); + dst += 128; + } + } + else { // big memory copy + __m128i c0, c1, c2, c3, c4, c5, c6, c7; + + _mm_prefetch((const char*)(src), _MM_HINT_NTA); + + if ((((size_t)src) & 15) == 0) { // source aligned + for (; size >= 128; size -= 128) { + c0 = _mm_load_si128(((const __m128i*)src) + 0); + c1 = _mm_load_si128(((const __m128i*)src) + 1); + c2 = _mm_load_si128(((const __m128i*)src) + 2); + c3 = _mm_load_si128(((const __m128i*)src) + 3); + c4 = _mm_load_si128(((const __m128i*)src) + 4); + c5 = _mm_load_si128(((const __m128i*)src) + 5); + c6 = _mm_load_si128(((const __m128i*)src) + 6); + c7 = _mm_load_si128(((const __m128i*)src) + 7); + _mm_prefetch((const char*)(src + 256), _MM_HINT_NTA); + src += 128; + _mm_stream_si128((((__m128i*)dst) + 0), c0); + _mm_stream_si128((((__m128i*)dst) + 1), c1); + _mm_stream_si128((((__m128i*)dst) + 2), c2); + _mm_stream_si128((((__m128i*)dst) + 3), c3); + _mm_stream_si128((((__m128i*)dst) + 4), c4); + _mm_stream_si128((((__m128i*)dst) + 5), c5); + _mm_stream_si128((((__m128i*)dst) + 6), c6); + _mm_stream_si128((((__m128i*)dst) + 7), c7); + dst += 128; + } + } + else { // source unaligned + for (; size >= 128; size -= 128) { + c0 = _mm_loadu_si128(((const __m128i*)src) + 0); + c1 = _mm_loadu_si128(((const __m128i*)src) + 1); + c2 = _mm_loadu_si128(((const __m128i*)src) + 2); + c3 = _mm_loadu_si128(((const __m128i*)src) + 3); + c4 = _mm_loadu_si128(((const __m128i*)src) + 4); + c5 = _mm_loadu_si128(((const __m128i*)src) + 5); + c6 = _mm_loadu_si128(((const __m128i*)src) + 6); + c7 = _mm_loadu_si128(((const __m128i*)src) + 7); + _mm_prefetch((const char*)(src + 256), _MM_HINT_NTA); + src += 128; + _mm_stream_si128((((__m128i*)dst) + 0), c0); + _mm_stream_si128((((__m128i*)dst) + 1), c1); + _mm_stream_si128((((__m128i*)dst) + 2), c2); + _mm_stream_si128((((__m128i*)dst) + 3), c3); + _mm_stream_si128((((__m128i*)dst) + 4), c4); + _mm_stream_si128((((__m128i*)dst) + 5), c5); + _mm_stream_si128((((__m128i*)dst) + 6), c6); + _mm_stream_si128((((__m128i*)dst) + 7), c7); + dst += 128; + } + } + _mm_sfence(); + } + + memcpy_tiny(dst, src, size); + + return destination; +} + + +#endif diff --git a/src/components/implementation/nicmgr/dpdk/init.c b/src/components/implementation/nicmgr/dpdk/init.c index 1e37ce4658..1450cf0e0d 100644 --- a/src/components/implementation/nicmgr/dpdk/init.c +++ b/src/components/implementation/nicmgr/dpdk/init.c @@ -10,16 +10,18 @@ #include #include #include +#include +#include +#include #include #include -#include -#include "simple_hash.h" #include "nicmgr.h" +#include "simple_hash.h" #define ENABLE_DEBUG_INFO 0 -#define NB_RX_DESC_DEFAULT 512 -#define NB_TX_DESC_DEFAULT 512 +#define NB_RX_DESC_DEFAULT 2048 +#define NB_TX_DESC_DEFAULT 1024 #define MAX_PKT_BURST NB_RX_DESC_DEFAULT @@ -166,6 +168,7 @@ process_tx_packets(void) } } +static u32_t __ip; static void process_rx_packets(cos_portid_t port_id, char** rx_pkts, uint16_t nb_pkts) { @@ -177,45 +180,37 @@ process_rx_packets(cos_portid_t port_id, char** rx_pkts, uint16_t nb_pkts) struct arp_hdr *arp_hdr; struct tcp_udp_port *port; struct client_session *session; + struct client_session *default_session; char *pkt; struct pkt_buf buf; + u32_t ip = 0; + u16_t svc_id = 0; for (i = 0; i < nb_pkts; i++) { pkt = cos_get_packet(rx_pkts[i], &len); eth = (struct eth_hdr *)pkt; - if (likely(htons(eth->ether_type) == 0x0800)) { - iph = (struct ip_hdr *)((char *)eth + sizeof(struct eth_hdr)); - port = (struct tcp_udp_port *)((char *)eth + sizeof(struct eth_hdr) + iph->ihl * 4); - u16_t svc_id = ntohs(port->dst_port); - - session = simple_hash_find(iph->dst_addr, svc_id); - // printc("port:%d, session:%p\n", ntohs(port->dst_port), session); - buf.pkt = rx_pkts[i]; - if (likely(session)) { - if (unlikely(!pkt_ring_buf_enqueue(&(session->pkt_ring_buf), &buf))){ - cos_free_packet(rx_pkts[i]); - rx_enqueued_miss++; - continue; - } - enqueued_rx++; - - } else { - session = simple_hash_find(iph->dst_addr, 0); - if (session) { - if (unlikely(!pkt_ring_buf_enqueue(&(session->pkt_ring_buf), &buf))){ - cos_free_packet(rx_pkts[i]); - rx_enqueued_miss++; - continue; - } - enqueued_rx++; - } else { - rx_enqueued_miss++; - cos_free_packet(rx_pkts[i]); - continue; - } - } - } else { - cos_free_packet(buf.pkt); + + iph = (struct ip_hdr *)((char *)eth + sizeof(struct eth_hdr)); + port = (struct tcp_udp_port *)((char *)eth + sizeof(struct eth_hdr) + iph->ihl * 4); + ip = iph->dst_addr; + svc_id = ntohs(port->dst_port); + + default_session = simple_hash_find(ip, 0); + if (unlikely(default_session == NULL)) { + cos_free_packet(rx_pkts[i]); + continue; + } + + session = simple_hash_find(ip, svc_id); + + if (session == NULL) { + session = default_session; + } + + buf.pkt = rx_pkts[i]; + if (unlikely(!pkt_ring_buf_enqueue(&(session->pkt_ring_buf), &buf))){ + cos_free_packet(rx_pkts[i]); + rx_enqueued_miss++; continue; } @@ -275,6 +270,8 @@ cos_nic_start(){ uint16_t nb_pkts = 0; char *rx_packets[MAX_PKT_BURST]; + int count = 0; + __ip = inet_addr("10.10.1.2"); while (1) { #if USE_CK_RING_FREE_MBUF @@ -284,19 +281,18 @@ cos_nic_start(){ debug_dump_info(); #endif - // only port 0, queue 0 receive packets nb_pkts = cos_dev_port_rx_burst(0, 0, rx_packets, MAX_PKT_BURST); - /* These are the two test options */ - // if (nb_pkts!= 0) transmit_back(0, rx_packets, nb_pkts); - // if (nb_pkts!= 0) cos_dev_port_tx_burst(0, 0, rx_packets, nb_pkts); /* This is the real processing logic for applications */ if (nb_pkts != 0) { process_rx_packets(0, rx_packets, nb_pkts); } else { - // sched_thd_block_timeout(0, ps_tsc() + 2000*10); - sched_thd_block_timeout(0, time_now() + time_usec2cyc(1)); - // sched_thd_block(0); + // sched_thd_block_timeout(0, ps_tsc() + 2000*2); + count++; + if (count > 5) { + count = 0; + sched_thd_yield(); + } } } } @@ -317,8 +313,8 @@ cos_nic_init(void) * set max_mbufs 2 times than nb_rx_desc, so that there is enough room * to store packets, or this will fail if nb_rx_desc <= max_mbufs. */ - const size_t max_rx_mbufs = 20 * nb_rx_desc; - const size_t max_tx_mbufs = 30 * nb_tx_desc; + const size_t max_rx_mbufs = 8 * nb_rx_desc; + const size_t max_tx_mbufs = 2 * nb_tx_desc; memset(rx_per_core_mpool_name, 0, sizeof(rx_per_core_mpool_name)); memset(tx_per_core_mpool_name, 0, sizeof(tx_per_core_mpool_name)); @@ -332,7 +328,7 @@ cos_nic_init(void) "--log-level", "*:info", /* log level can be changed to *debug* if needed, this will print lots of information */ "-m", - "512", /* total memory used by dpdk memory subsystem, such as mempool */ + "128", /* total memory used by dpdk memory subsystem, such as mempool */ }; argc = ARRAY_SIZE(argv); @@ -389,8 +385,7 @@ cos_init(void) printc("nicmgr init...\n"); #if 1 cos_nic_init(); - // cos_hash_init(); - simple_hash_init(); + cos_hash_init(); #ifdef USE_CK_RING_FREE_MBUF pkt_ring_buf_init(&g_free_ring, FREE_PKT_RBUF_NUM, FREE_PKT_RING_SZ); #endif @@ -403,8 +398,10 @@ cos_init(void) } thdid_t recv_tid = 0; +thdid_t idle_tid = 0; -#define RECV_THD_PRIORITY 1 +#define RECV_THD_PRIORITY 31 +#define IDLE_THD_PRIORITY 31 static void recv_task(void) @@ -427,6 +424,7 @@ parallel_main(coreid_t cid) /* DPDK rx and tx will only run on core 0 */ if(cid == 0) { sched_thd_param_set(recv_tid, sched_param_pack(SCHEDP_PRIO, RECV_THD_PRIORITY)); + sched_thd_block(0); } else { #if 0 #if E810_NIC == 0 @@ -438,7 +436,6 @@ parallel_main(coreid_t cid) #endif #endif } - sched_thd_block(0); return 0; } diff --git a/src/components/implementation/nicmgr/dpdk/nicmgr.c b/src/components/implementation/nicmgr/dpdk/nicmgr.c index b466ae71d6..61c4ca6235 100644 --- a/src/components/implementation/nicmgr/dpdk/nicmgr.c +++ b/src/components/implementation/nicmgr/dpdk/nicmgr.c @@ -8,10 +8,12 @@ #include #include #include +#include #include #include #include #include "nicmgr.h" +#include "fast_memcpy.h" #include "simple_hash.h" extern volatile int debug_flag; @@ -162,7 +164,9 @@ nic_get_a_packet_batch(u8_t batch_limit) assert(len < netshmem_get_max_data_buf_sz()); data_buf = netshmem_get_data_buf(obj); - memcpy(data_buf, pkt, len); + // memcpy_fast(data_buf, pkt, len); + // memcpy(data_buf, pkt, len); + rte_memcpy(data_buf, pkt , len); pkt_arr[batch_ct].obj_id = objid; pkt_arr[batch_ct].pkt_len = len; batch_ct++; @@ -184,7 +188,6 @@ ext_buf_free_callback_fn(void *addr, void *opaque) { /* Shared mem uses borrow api, thus do not need to free it here */ if (addr != NULL) { - // printc("???????????????????????????????????\n"); shm_bm_free_net_pkt_buf(addr); } else { printc("External buffer address is invalid\n"); diff --git a/src/components/implementation/nicmgr/dpdk/simple_hash.c b/src/components/implementation/nicmgr/dpdk/simple_hash.c index 0113890abe..ae84a8c9f8 100644 --- a/src/components/implementation/nicmgr/dpdk/simple_hash.c +++ b/src/components/implementation/nicmgr/dpdk/simple_hash.c @@ -27,6 +27,6 @@ simple_hash_init(void) void * simple_hash_find(u32_t ip, u16_t port) { - if (port > MAX_PORT) return NULL; + if (unlikely(port > MAX_PORT)) return NULL; return g_hash_tbl[ip % MAX_IP][port]; } diff --git a/src/components/implementation/sched/pfprr_quantum_static/main.c b/src/components/implementation/sched/pfprr_quantum_static/main.c index 60807005e3..dd86a9dd29 100644 --- a/src/components/implementation/sched/pfprr_quantum_static/main.c +++ b/src/components/implementation/sched/pfprr_quantum_static/main.c @@ -158,7 +158,7 @@ sched_thd_yield(void) slm_cs_enter(current, SLM_CS_NONE); slm_sched_yield(current, 0); - ret = slm_cs_exit_reschedule(current, SLM_CS_CHECK_TIMEOUT); + ret = slm_cs_exit_reschedule(current, SLM_CS_NONE); return ret; } @@ -180,8 +180,8 @@ thd_block(void) slm_cs_enter(current, SLM_CS_NONE); ret = slm_thd_block(current); - if (!ret) ret = slm_cs_exit_reschedule(current, SLM_CS_CHECK_TIMEOUT); - else slm_cs_exit(NULL, SLM_CS_CHECK_TIMEOUT); + if (!ret) ret = slm_cs_exit_reschedule(current, SLM_CS_NONE); + else slm_cs_exit(NULL, SLM_CS_NONE); return ret; } @@ -207,7 +207,7 @@ thd_wakeup(struct slm_thd *t) return ret; } - return slm_cs_exit_reschedule(current, SLM_CS_CHECK_TIMEOUT); + return slm_cs_exit_reschedule(current, SLM_CS_NONE); } int @@ -240,7 +240,7 @@ thd_block_until(cycles_t timeout) slm_timer_cancel(current); } done: - ret = slm_cs_exit_reschedule(current, SLM_CS_CHECK_TIMEOUT); + ret = slm_cs_exit_reschedule(current, SLM_CS_NONE); /* cleanup stale timeouts (e.g. if we were woken outside of the timer) */ slm_timer_cancel(current); } diff --git a/src/components/implementation/simple_vmm/vmm/Makefile b/src/components/implementation/simple_vmm/vmm/Makefile index c9be9cfe36..96d9511070 100644 --- a/src/components/implementation/simple_vmm/vmm/Makefile +++ b/src/components/implementation/simple_vmm/vmm/Makefile @@ -25,4 +25,5 @@ CFILES+=devices/vrtc/vrtc.c CFILES+=devices/vps2/vps2.c C_OBJS+=$(CFILES:%.c=%.o) +COMP_FLAGS= -mavx -mavx2 -mfma -I$(LIBDIR)/dpdk/dpdk/build/install/include include Makefile.subsubdir diff --git a/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.c b/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.c index a7cb01e978..5ce8e282ed 100644 --- a/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.c +++ b/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.c @@ -28,69 +28,24 @@ #include #include #include -#include -#include #include "virtio_net_io.h" #include "vpci.h" #include "virtio_ring.h" - +#include +#include #include #include #include #include #include - +#include /* TODO: remove this warning flag when virtio-net is done */ #pragma GCC diagnostic ignored "-Wunused-but-set-variable" -static struct virtio_net_io_reg virtio_net_regs[VMRT_MAX_VM]; -static struct virtio_queue virtio_queues[VMRT_MAX_VM][2]; -static struct virtio_vq_info virtio_net_vqs[VMRT_MAX_VM][VIRTIO_NET_MAXQ - 1]; - -static inline struct virtio_net_io_reg *get_virtio_net_regs(struct vmrt_vm_vcpu *vcpu) { - return &virtio_net_regs[vcpu->vm->comp_id]; -} - -static inline struct virtio_queue *get_virtio_queue(struct vmrt_vm_vcpu *vcpu, int nr_queue) { - return &virtio_queues[vcpu->vm->comp_id][nr_queue]; -} - -static inline struct virtio_vq_info *get_virtio_net_vqs(struct vmrt_vm_comp *vm, int nr_queue) { - return &virtio_net_vqs[vm->comp_id][nr_queue]; -} - -static u8_t virtio_net_mac[VMRT_MAX_VM][6] = { - {0x10, 0x10, 0x10, 0x10, 0x10, 0x11}, - {0x10, 0x10, 0x10, 0x10, 0x10, 0x13}, - {0x10, 0x10, 0x10, 0x10, 0x10, 0x15}, - {0x10, 0x10, 0x10, 0x10, 0x10, 0x17}, - {0x10, 0x10, 0x10, 0x10, 0x10, 0x19}, - {0x10, 0x10, 0x10, 0x10, 0x10, 0x1a}, - {0x10, 0x10, 0x10, 0x10, 0x10, 0x1b}, - {0x10, 0x10, 0x10, 0x10, 0x10, 0x1c}, - {0x10, 0x10, 0x10, 0x10, 0x10, 0x1d}, - {0x10, 0x10, 0x10, 0x10, 0x10, 0x1e}, - }; - - -static struct vmrt_vm_comp *mac_to_vm[VMRT_MAX_VM] = {0}; - -void -vm_mac_tbl_update(compid_t comp_id, struct vmrt_vm_comp *vm) { - mac_to_vm[comp_id] = vm; -} - -struct vmrt_vm_comp *get_vm_from_mac(u8_t *mac) { - for (int i = 0; i < VMRT_MAX_VM; i++) { - if(!memcmp(virtio_net_mac[i], mac, 6)) { - return mac_to_vm[i]; - } - } - - return NULL; -} - +static struct virtio_net_io_reg virtio_net_regs; +static struct virtio_queue virtio_queues[2]; +struct virtio_vq_info virtio_net_vqs[VIRTIO_NET_MAXQ - 1]; static unsigned char icmp_reply[] = { /* TODO: remove icmp reply and process nic input from nic component */ @@ -144,7 +99,7 @@ vq_endchains(struct vmrt_vm_vcpu *vcpu, struct virtio_vq_info *vq, int used_all_ !(vq->avail->flags & VRING_AVAIL_F_NO_INTERRUPT); if (intr) { - get_virtio_net_regs(vcpu)->header.ISR = 1; + virtio_net_regs.header.ISR = 1; /* TODO: 57 is virtio-net interrupt without io apic, 33 is with io apic */ #if VMX_SUPPORT_POSTED_INTR vlapic_set_intr(vcpu, 33, 0); @@ -176,8 +131,7 @@ virtio_vq_init(struct vmrt_vm_vcpu *vcpu, int nr_queue, u32_t pfn) size_t size; char *vb; - vq = get_virtio_net_vqs(vcpu->vm, nr_queue); - + vq = &virtio_net_vqs[nr_queue]; vq->pfn = pfn; phys = (u64_t)pfn << VRING_PAGE_BITS; size = vring_size(vq->qsize, VIRTIO_PCI_VRING_ALIGN); @@ -365,14 +319,8 @@ virtio_net_rcv_one_pkt(void *data, int pkt_len) int n; u16_t idx; int ret; - struct vmrt_vm_comp *vm = get_vm_from_mac(data); - if (unlikely(vm == NULL)) { - printc("vm not exist\n"); - return; - } - assert(vm); - vq = get_virtio_net_vqs(vm, VIRTIO_NET_RXQ); + vq = &virtio_net_vqs[VIRTIO_NET_RXQ]; vcpu = vq->vcpu; @@ -393,7 +341,8 @@ virtio_net_rcv_one_pkt(void *data, int pkt_len) // assert(iov[0].iov_len >= (size_t)pkt_len); - memcpy(iov[0].iov_base, data, pkt_len); + // memcpy(iov[0].iov_base, data, pkt_len); + memcpy_fast(iov[0].iov_base, data, pkt_len); memset(vrx, 0, sizeof(struct virtio_net_rxhdr)); @@ -404,21 +353,14 @@ virtio_net_rcv_one_pkt(void *data, int pkt_len) } void -virtio_net_send_one_pkt(void *data, u16_t *pkt_len, struct vmrt_vm_comp *vm) +virtio_net_send_one_pkt(void *data, u16_t *pkt_len) { + struct virtio_vq_info *vq = &virtio_net_vqs[VIRTIO_NET_TXQ]; struct iovec iov[VIRTIO_NET_MAXSEGS]; struct vmrt_vm_vcpu *vcpu; int i, n; int plen, tlen; u16_t idx; - struct virtio_vq_info *vq; - - if (unlikely(vm == NULL)) { - *pkt_len = 0; - return; - } - - vq = get_virtio_net_vqs(get_vm_from_mac(((u8_t *)data + 6)), VIRTIO_NET_TXQ); while (!vq_has_descs(vq)) { *pkt_len = 0; @@ -441,7 +383,8 @@ virtio_net_send_one_pkt(void *data, u16_t *pkt_len, struct vmrt_vm_comp *vm) plen += iov[1].iov_len; tlen += iov[1].iov_len; - memcpy(data, iov[1].iov_base, iov[1].iov_len); + // memcpy(data, iov[1].iov_base, iov[1].iov_len); + memcpy_fast(data, iov[1].iov_base, iov[1].iov_len); *pkt_len = plen; vq_relchain(vq, idx, tlen); @@ -458,7 +401,7 @@ virtio_net_outb(u32_t port_id, struct vmrt_vm_vcpu *vcpu) switch (port_id) { case VIRTIO_NET_DEV_STATUS: - get_virtio_net_regs(vcpu)->header.dev_status = val; + virtio_net_regs.header.dev_status = val; break; default: VM_PANIC(vcpu); @@ -467,6 +410,14 @@ virtio_net_outb(u32_t port_id, struct vmrt_vm_vcpu *vcpu) return; } +#define REAL_NIC 0 + +#if REAL_NIC +static u8_t virtio_net_mac[6] = {0x6c, 0xfe, 0x54, 0x40, 0x41, 0x01}; +#else +static u8_t virtio_net_mac[6] = {0x10, 0x10, 0x10, 0x10, 0x10, 0x11}; +#endif + static void virtio_net_inb(u32_t port_id, struct vmrt_vm_vcpu *vcpu) { @@ -475,38 +426,36 @@ virtio_net_inb(u32_t port_id, struct vmrt_vm_vcpu *vcpu) switch (port_id) { case VIRTIO_NET_DEV_STATUS: - vcpu->shared_region->ax = get_virtio_net_regs(vcpu)->header.dev_status; + vcpu->shared_region->ax = virtio_net_regs.header.dev_status; break; case VIRTIO_NET_ISR: - vcpu->shared_region->ax = get_virtio_net_regs(vcpu)->header.ISR; - get_virtio_net_regs(vcpu)->header.ISR = 0; + vcpu->shared_region->ax = virtio_net_regs.header.ISR; + virtio_net_regs.header.ISR = 0; break; case VIRTIO_NET_STATUS: - vcpu->shared_region->ax = get_virtio_net_regs(vcpu)->config_reg.status; + vcpu->shared_region->ax = virtio_net_regs.config_reg.status; break; case VIRTIO_NET_STATUS_H: - vcpu->shared_region->ax = get_virtio_net_regs(vcpu)->config_reg.status >> 8; + vcpu->shared_region->ax = virtio_net_regs.config_reg.status >> 8; break; /* TODO: read mac address from virtio-net config space */ case VIRTIO_NET_MAC: - vm_mac_tbl_update(vcpu->vm->vm_mac_id, vcpu->vm); - vcpu->shared_region->ax = virtio_net_mac[vcpu->vm->vm_mac_id][0]; - mac_to_vm[vcpu->vm->comp_id] = vcpu->vm; + vcpu->shared_region->ax = virtio_net_mac[0]; break; case VIRTIO_NET_MAC1: - vcpu->shared_region->ax = virtio_net_mac[vcpu->vm->vm_mac_id][1]; + vcpu->shared_region->ax = virtio_net_mac[1]; break; case VIRTIO_NET_MAC2: - vcpu->shared_region->ax = virtio_net_mac[vcpu->vm->vm_mac_id][2]; + vcpu->shared_region->ax = virtio_net_mac[2]; break; case VIRTIO_NET_MAC3: - vcpu->shared_region->ax = virtio_net_mac[vcpu->vm->vm_mac_id][3]; + vcpu->shared_region->ax = virtio_net_mac[3]; break; case VIRTIO_NET_MAC4: - vcpu->shared_region->ax = virtio_net_mac[vcpu->vm->vm_mac_id][4]; + vcpu->shared_region->ax = virtio_net_mac[4]; break; case VIRTIO_NET_MAC5: - vcpu->shared_region->ax = virtio_net_mac[vcpu->vm->vm_mac_id][5]; + vcpu->shared_region->ax = virtio_net_mac[5]; break; default: VM_PANIC(vcpu); @@ -520,14 +469,14 @@ virtio_net_inw(u32_t port_id, struct vmrt_vm_vcpu *vcpu) switch (port_id) { case VIRTIO_NET_QUEUE_SIZE: - vcpu->shared_region->ax = get_virtio_queue(vcpu, get_virtio_net_regs(vcpu)->header.queue_select)->queue_sz; + vcpu->shared_region->ax = virtio_queues[virtio_net_regs.header.queue_select].queue_sz; break; case VIRTIO_NET_QUEUE_SELECT: - vcpu->shared_region->ax = get_virtio_net_regs(vcpu)->header.queue_select; + vcpu->shared_region->ax = virtio_net_regs.header.queue_select; break; case VIRTIO_NET_QUEUE_NOTIFY: VM_PANIC(vcpu); - vcpu->shared_region->ax = get_virtio_net_regs(vcpu)->header.queue_notify; + vcpu->shared_region->ax = virtio_net_regs.header.queue_notify; break; default: VM_PANIC(vcpu); @@ -543,15 +492,14 @@ virtio_net_outw(u32_t port_id, struct vmrt_vm_vcpu *vcpu) switch (port_id) { case VIRTIO_NET_QUEUE_SELECT: - get_virtio_net_regs(vcpu)->header.queue_select = val; + virtio_net_regs.header.queue_select = val; break; case VIRTIO_NET_QUEUE_NOTIFY: - if (val == VIRTIO_NET_TXQ) { - sched_thd_wakeup(vcpu->vm->tx_thd); - // void virtio_tx_task(void *data); - // virtio_tx_task(vcpu->vm); + if (val == VIRTIO_NET_TXQ) { + // sched_thd_yield(); + // sched_thd_wakeup(11); } - get_virtio_net_regs(vcpu)->header.queue_notify = val; + virtio_net_regs.header.queue_notify = val; break; default: VM_PANIC(vcpu); @@ -568,11 +516,11 @@ virtio_net_outl(u32_t port_id, struct vmrt_vm_vcpu *vcpu) switch (port_id) { case VIRTIO_NET_GUEST_FEATURES: - get_virtio_net_regs(vcpu)->header.guest_features = val; + virtio_net_regs.header.guest_features = val; break; case VIRTIO_NET_QUEUE_ADDR: - get_virtio_queue(vcpu, get_virtio_net_regs(vcpu)->header.queue_select)->queue = (void *)tmp; - virtio_vq_init(vcpu, get_virtio_net_regs(vcpu)->header.queue_select, val); + virtio_queues[virtio_net_regs.header.queue_select].queue = (void *)tmp; + virtio_vq_init(vcpu, virtio_net_regs.header.queue_select, val); break; default: VM_PANIC(vcpu); @@ -587,13 +535,13 @@ virtio_net_inl(u32_t port_id, struct vmrt_vm_vcpu *vcpu) switch (port_id) { case VIRTIO_NET_DEV_FEATURES: - vcpu->shared_region->ax = get_virtio_net_regs(vcpu)->header.dev_features; + vcpu->shared_region->ax = virtio_net_regs.header.dev_features; break; case VIRTIO_NET_GUEST_FEATURES: - vcpu->shared_region->ax = get_virtio_net_regs(vcpu)->header.guest_features; + vcpu->shared_region->ax = virtio_net_regs.header.guest_features; break; case VIRTIO_NET_QUEUE_ADDR: - vcpu->shared_region->ax = get_virtio_net_regs(vcpu)->header.queue_addr; + vcpu->shared_region->ax = virtio_net_regs.header.queue_addr; break; default: VM_PANIC(vcpu); @@ -638,11 +586,30 @@ virtio_net_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu) } void -virtio_tx_task(void *data) +virtio_net_io_init(void) +{ + memset(&virtio_net_regs, 0, sizeof(virtio_net_regs)); + memset(&virtio_queues, 0, sizeof(virtio_queues)); + memset(&virtio_net_vqs, 0, sizeof(virtio_net_vqs)); + + virtio_net_regs.header.dev_features |= (1 << VIRTIO_NET_F_STATUS); + virtio_net_regs.header.dev_features |= (1 << VIRTIO_NET_F_MAC); + virtio_net_regs.config_reg.status = VIRTIO_NET_S_LINK_UP; + virtio_queues[0].queue_sz = VQ_MAX_DESCRIPTORS; + virtio_queues[1].queue_sz = VQ_MAX_DESCRIPTORS; + virtio_net_vqs[VIRTIO_NET_RX].qsize = VQ_MAX_DESCRIPTORS; + virtio_net_vqs[VIRTIO_NET_TX].qsize = VQ_MAX_DESCRIPTORS; +} + +struct tcp_udp_port { - struct vmrt_vm_comp *vm = (struct vmrt_vm_comp *)data; - // printc("virtio tx task :%p, id:%d, tx thd:%d\n", data, vm->comp_id, cos_thdid()); + u16_t src_port; + u16_t dst_port; +} __attribute__((packed)); +void +virtio_tx_task(void *data) +{ struct virtio_vq_info *vq; struct iovec iov[VIRTIO_NET_MAXSEGS]; struct vmrt_vm_vcpu *vcpu; @@ -659,15 +626,42 @@ virtio_tx_task(void *data) u16_t svc_id = 0; struct iphdr *iphdr = NULL; - struct tcphdr *tcphdr = NULL; - struct udphdr *udphdr = NULL; + struct tcp_udp_port *port; - vq = get_virtio_net_vqs(vm, VIRTIO_NET_TXQ); + vq = &virtio_net_vqs[VIRTIO_NET_TXQ]; while (1) { while (!vq_has_descs(vq)) { - sched_thd_block(0); - // sched_thd_yield(); - // return; + shm_bm_objid_t first_objid; + struct netshmem_pkt_buf *first_obj; + struct netshmem_pkt_pri *first_obj_pri; + struct netshmem_meta_tuple *pkt_arr; + u8_t batch_ct; + + session = get_nf_session(0); + tx_shmemd = session->tx_shmemd; + + while (nf_tx_ring_buf_dequeue(&session->nf_tx_ring_buf, &buf)) { + batch_ct = 0; + first_obj = buf.obj; + first_objid = buf.objid; + first_obj_pri = netshmem_get_pri(first_obj); + pkt_arr = (struct netshmem_meta_tuple *)&first_obj_pri->pkt_arr; + first_obj_pri->batch_len = 0; + + pkt_arr[batch_ct].obj_id = buf.objid; + pkt_arr[batch_ct].pkt_len = buf.pkt_len; + batch_ct++; + while (batch_ct < 32 && nf_tx_ring_buf_dequeue(&session->nf_tx_ring_buf, &buf)) { + pkt_arr[batch_ct].obj_id = buf.objid; + pkt_arr[batch_ct].pkt_len = buf.pkt_len; + batch_ct++; + } + first_obj_pri->batch_len = batch_ct; + // printc("nic send in tx:%d, %u\n", batch_ct, cos_thdid()); + nic_send_packet_batch(first_objid); + } + + sched_thd_yield(); } vcpu = vq->vcpu; @@ -690,72 +684,42 @@ virtio_tx_task(void *data) pkt = iov[1].iov_base; iphdr = (struct iphdr *) (pkt + ETH_HLEN); - unsigned char *srcip = (unsigned char *)&(iphdr->saddr); - unsigned char *dstip = (unsigned char *)&(iphdr->daddr); - - if(iphdr->protocol == IPPROTO_TCP) - { - tcphdr = (struct tcphdr*)((u_int8_t*)iphdr + (iphdr->ihl << 2)); - svc_id = ntohs(tcphdr->th_sport); + port = (struct tcp_udp_port *)((char *)pkt + ETH_HLEN + iphdr->ihl * 4); + u16_t svc_id = ntohs(port->dst_port); + + session = get_nf_session(svc_id); + + tx_shmemd = session->tx_shmemd; + if (unlikely(!tx_shmemd)) { svc_id = 0; - // printc("tcp svc id:%u\n", svc_id); - // length = pdataLen - (iphdr->ihl<<2) - (tcphdr->doff << 2); - // payload = (u_int8_t*)( (u_int8_t*)tcphdr + (tcphdr->doff << 2) ); - // sport = tcphdr->source; - // dport = tcphdr->dest; - - // printf("processed one packet:queue_num:%d, id:%d, plen:%d, ret:%d,src ip:%d.%d.%d.%d, dest ip:%d.%d.%d.%d, src port:%u, dst port:%u \n", queue_num, id, plen, ret, IP_ARG(srcip), IP_ARG(dstip), ntohs(tcphdr->source), ntohs(tcphdr->dest)); - } else if (iphdr->protocol == IPPROTO_UDP) { - udphdr = (struct udphdr*)((u_int8_t*)iphdr + (iphdr->ihl << 2)); - svc_id = ntohs(udphdr->uh_sport); - printc("udp svc id:%u\n", svc_id); - assert(0); + session = get_nf_session(svc_id); + tx_shmemd = session->tx_shmemd; + } - } - session = get_nf_session(vm, svc_id); - tx_shmemd = session->tx_shmemd; - assert(tx_shmemd); - - if (tx_shmemd != 0) { - tx_obj = shm_bm_alloc_net_pkt_buf(tx_shmemd, &tx_pktid); - - if (likely(tx_obj != NULL)){ - buf.objid = tx_pktid; - buf.pkt_len = plen; - buf.obj = tx_obj; - memcpy(netshmem_get_data_buf(tx_obj), pkt, plen); - if ((unlikely(!nf_tx_ring_buf_enqueue(&(session->nf_tx_ring_buf), &buf)))){ - shm_bm_free_net_pkt_buf(tx_obj); - sched_thd_yield(); - } else { - // sched_thd_wakeup(session->tx_thd); - // sync_sem_give(&session->tx_sem); - } + // printc("tx shmemd:%p, %d\n", tx_shmemd, svc_id); + tx_obj = shm_bm_alloc_net_pkt_buf(tx_shmemd, &tx_pktid); + // printc("tx shmemd:%p, tx_obj:%p\n", tx_shmemd, tx_obj); + + if (likely(tx_obj != NULL)){ + buf.objid = tx_pktid; + buf.pkt_len = plen; + buf.obj = tx_obj; + + // memcpy(netshmem_get_data_buf(tx_obj), pkt, plen); + memcpy_fast(netshmem_get_data_buf(tx_obj), pkt, plen); + + if ((unlikely(!nf_tx_ring_buf_enqueue(&(session->nf_tx_ring_buf), &buf)))){ + shm_bm_free_net_pkt_buf(tx_obj); } else { - printc("cannot allocate objects\n"); - assert(0); + // sched_thd_wakeup(session->tx_thd); + // sync_sem_give(&session->tx_sem); } + } else { + printc("cannot allocate objects\n"); + assert(0); } vq_relchain(vq, idx, tlen); vq_endchains(vcpu, vq, 1); } } - -void -virtio_net_io_init(void) -{ - memset(&virtio_net_regs, 0, sizeof(virtio_net_regs)); - memset(&virtio_queues, 0, sizeof(virtio_queues)); - memset(&virtio_net_vqs, 0, sizeof(virtio_net_vqs)); - - for(int i = 0; i < VMRT_MAX_VM; i++) { - virtio_net_regs[i].header.dev_features |= (1 << VIRTIO_NET_F_STATUS); - virtio_net_regs[i].header.dev_features |= (1 << VIRTIO_NET_F_MAC); - virtio_net_regs[i].config_reg.status = VIRTIO_NET_S_LINK_UP; - virtio_queues[i][0].queue_sz = VQ_MAX_DESCRIPTORS; - virtio_queues[i][1].queue_sz = VQ_MAX_DESCRIPTORS; - virtio_net_vqs[i][VIRTIO_NET_RX].qsize = VQ_MAX_DESCRIPTORS; - virtio_net_vqs[i][VIRTIO_NET_TX].qsize = VQ_MAX_DESCRIPTORS; - } -} \ No newline at end of file diff --git a/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.h b/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.h index b6a13b22b6..ba50bb2b77 100644 --- a/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.h +++ b/src/components/implementation/simple_vmm/vmm/devices/vpci/virtio_net_io.h @@ -141,4 +141,4 @@ struct virtio_net_rxhdr { void virtio_net_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu); void virtio_net_rcv_one_pkt(void *data, int pkt_len); -void virtio_net_send_one_pkt(void *data, u16_t *pkt_len, struct vmrt_vm_comp *vm); +void virtio_net_send_one_pkt(void *data, u16_t *pkt_len); diff --git a/src/components/implementation/simple_vmm/vmm/fast_memcpy.h b/src/components/implementation/simple_vmm/vmm/fast_memcpy.h new file mode 100644 index 0000000000..ddd282d4ba --- /dev/null +++ b/src/components/implementation/simple_vmm/vmm/fast_memcpy.h @@ -0,0 +1,689 @@ +//===================================================================== +// +// FastMemcpy.c - skywind3000@163.com, 2015 +// +// feature: +// 50% speed up in avg. vs standard memcpy (tested in vc2012/gcc5.1) +// +//===================================================================== +#ifndef __FAST_MEMCPY_H__ +#define __FAST_MEMCPY_H__ + +#include +#include +#include + + +//--------------------------------------------------------------------- +// force inline for compilers +//--------------------------------------------------------------------- +#ifndef INLINE +#ifdef __GNUC__ +#if (__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1)) + #define INLINE __inline__ __attribute__((always_inline)) +#else + #define INLINE __inline__ +#endif +#elif defined(_MSC_VER) + #define INLINE __forceinline +#elif (defined(__BORLANDC__) || defined(__WATCOMC__)) + #define INLINE __inline +#else + #define INLINE +#endif +#endif + + + +//--------------------------------------------------------------------- +// fast copy for different sizes +//--------------------------------------------------------------------- +static INLINE void memcpy_sse2_16(void *dst, const void *src) { + __m128i m0 = _mm_loadu_si128(((const __m128i*)src) + 0); + _mm_storeu_si128(((__m128i*)dst) + 0, m0); +} + +static INLINE void memcpy_sse2_32(void *dst, const void *src) { + __m128i m0 = _mm_loadu_si128(((const __m128i*)src) + 0); + __m128i m1 = _mm_loadu_si128(((const __m128i*)src) + 1); + _mm_storeu_si128(((__m128i*)dst) + 0, m0); + _mm_storeu_si128(((__m128i*)dst) + 1, m1); +} + +static INLINE void memcpy_sse2_64(void *dst, const void *src) { + __m128i m0 = _mm_loadu_si128(((const __m128i*)src) + 0); + __m128i m1 = _mm_loadu_si128(((const __m128i*)src) + 1); + __m128i m2 = _mm_loadu_si128(((const __m128i*)src) + 2); + __m128i m3 = _mm_loadu_si128(((const __m128i*)src) + 3); + _mm_storeu_si128(((__m128i*)dst) + 0, m0); + _mm_storeu_si128(((__m128i*)dst) + 1, m1); + _mm_storeu_si128(((__m128i*)dst) + 2, m2); + _mm_storeu_si128(((__m128i*)dst) + 3, m3); +} + +static INLINE void memcpy_sse2_128(void *dst, const void *src) { + __m128i m0 = _mm_loadu_si128(((const __m128i*)src) + 0); + __m128i m1 = _mm_loadu_si128(((const __m128i*)src) + 1); + __m128i m2 = _mm_loadu_si128(((const __m128i*)src) + 2); + __m128i m3 = _mm_loadu_si128(((const __m128i*)src) + 3); + __m128i m4 = _mm_loadu_si128(((const __m128i*)src) + 4); + __m128i m5 = _mm_loadu_si128(((const __m128i*)src) + 5); + __m128i m6 = _mm_loadu_si128(((const __m128i*)src) + 6); + __m128i m7 = _mm_loadu_si128(((const __m128i*)src) + 7); + _mm_storeu_si128(((__m128i*)dst) + 0, m0); + _mm_storeu_si128(((__m128i*)dst) + 1, m1); + _mm_storeu_si128(((__m128i*)dst) + 2, m2); + _mm_storeu_si128(((__m128i*)dst) + 3, m3); + _mm_storeu_si128(((__m128i*)dst) + 4, m4); + _mm_storeu_si128(((__m128i*)dst) + 5, m5); + _mm_storeu_si128(((__m128i*)dst) + 6, m6); + _mm_storeu_si128(((__m128i*)dst) + 7, m7); +} + + +//--------------------------------------------------------------------- +// tiny memory copy with jump table optimized +//--------------------------------------------------------------------- +static INLINE void *memcpy_tiny(void *dst, const void *src, size_t size) { + unsigned char *dd = ((unsigned char*)dst) + size; + const unsigned char *ss = ((const unsigned char*)src) + size; + + switch (size) { + case 64: + memcpy_sse2_64(dd - 64, ss - 64); + case 0: + break; + + case 65: + memcpy_sse2_64(dd - 65, ss - 65); + case 1: + dd[-1] = ss[-1]; + break; + + case 66: + memcpy_sse2_64(dd - 66, ss - 66); + case 2: + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 67: + memcpy_sse2_64(dd - 67, ss - 67); + case 3: + *((uint16_t*)(dd - 3)) = *((uint16_t*)(ss - 3)); + dd[-1] = ss[-1]; + break; + + case 68: + memcpy_sse2_64(dd - 68, ss - 68); + case 4: + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 69: + memcpy_sse2_64(dd - 69, ss - 69); + case 5: + *((uint32_t*)(dd - 5)) = *((uint32_t*)(ss - 5)); + dd[-1] = ss[-1]; + break; + + case 70: + memcpy_sse2_64(dd - 70, ss - 70); + case 6: + *((uint32_t*)(dd - 6)) = *((uint32_t*)(ss - 6)); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 71: + memcpy_sse2_64(dd - 71, ss - 71); + case 7: + *((uint32_t*)(dd - 7)) = *((uint32_t*)(ss - 7)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 72: + memcpy_sse2_64(dd - 72, ss - 72); + case 8: + *((uint64_t*)(dd - 8)) = *((uint64_t*)(ss - 8)); + break; + + case 73: + memcpy_sse2_64(dd - 73, ss - 73); + case 9: + *((uint64_t*)(dd - 9)) = *((uint64_t*)(ss - 9)); + dd[-1] = ss[-1]; + break; + + case 74: + memcpy_sse2_64(dd - 74, ss - 74); + case 10: + *((uint64_t*)(dd - 10)) = *((uint64_t*)(ss - 10)); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 75: + memcpy_sse2_64(dd - 75, ss - 75); + case 11: + *((uint64_t*)(dd - 11)) = *((uint64_t*)(ss - 11)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 76: + memcpy_sse2_64(dd - 76, ss - 76); + case 12: + *((uint64_t*)(dd - 12)) = *((uint64_t*)(ss - 12)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 77: + memcpy_sse2_64(dd - 77, ss - 77); + case 13: + *((uint64_t*)(dd - 13)) = *((uint64_t*)(ss - 13)); + *((uint32_t*)(dd - 5)) = *((uint32_t*)(ss - 5)); + dd[-1] = ss[-1]; + break; + + case 78: + memcpy_sse2_64(dd - 78, ss - 78); + case 14: + *((uint64_t*)(dd - 14)) = *((uint64_t*)(ss - 14)); + *((uint64_t*)(dd - 8)) = *((uint64_t*)(ss - 8)); + break; + + case 79: + memcpy_sse2_64(dd - 79, ss - 79); + case 15: + *((uint64_t*)(dd - 15)) = *((uint64_t*)(ss - 15)); + *((uint64_t*)(dd - 8)) = *((uint64_t*)(ss - 8)); + break; + + case 80: + memcpy_sse2_64(dd - 80, ss - 80); + case 16: + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 81: + memcpy_sse2_64(dd - 81, ss - 81); + case 17: + memcpy_sse2_16(dd - 17, ss - 17); + dd[-1] = ss[-1]; + break; + + case 82: + memcpy_sse2_64(dd - 82, ss - 82); + case 18: + memcpy_sse2_16(dd - 18, ss - 18); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 83: + memcpy_sse2_64(dd - 83, ss - 83); + case 19: + memcpy_sse2_16(dd - 19, ss - 19); + *((uint16_t*)(dd - 3)) = *((uint16_t*)(ss - 3)); + dd[-1] = ss[-1]; + break; + + case 84: + memcpy_sse2_64(dd - 84, ss - 84); + case 20: + memcpy_sse2_16(dd - 20, ss - 20); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 85: + memcpy_sse2_64(dd - 85, ss - 85); + case 21: + memcpy_sse2_16(dd - 21, ss - 21); + *((uint32_t*)(dd - 5)) = *((uint32_t*)(ss - 5)); + dd[-1] = ss[-1]; + break; + + case 86: + memcpy_sse2_64(dd - 86, ss - 86); + case 22: + memcpy_sse2_16(dd - 22, ss - 22); + *((uint32_t*)(dd - 6)) = *((uint32_t*)(ss - 6)); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 87: + memcpy_sse2_64(dd - 87, ss - 87); + case 23: + memcpy_sse2_16(dd - 23, ss - 23); + *((uint32_t*)(dd - 7)) = *((uint32_t*)(ss - 7)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 88: + memcpy_sse2_64(dd - 88, ss - 88); + case 24: + memcpy_sse2_16(dd - 24, ss - 24); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 89: + memcpy_sse2_64(dd - 89, ss - 89); + case 25: + memcpy_sse2_16(dd - 25, ss - 25); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 90: + memcpy_sse2_64(dd - 90, ss - 90); + case 26: + memcpy_sse2_16(dd - 26, ss - 26); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 91: + memcpy_sse2_64(dd - 91, ss - 91); + case 27: + memcpy_sse2_16(dd - 27, ss - 27); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 92: + memcpy_sse2_64(dd - 92, ss - 92); + case 28: + memcpy_sse2_16(dd - 28, ss - 28); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 93: + memcpy_sse2_64(dd - 93, ss - 93); + case 29: + memcpy_sse2_16(dd - 29, ss - 29); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 94: + memcpy_sse2_64(dd - 94, ss - 94); + case 30: + memcpy_sse2_16(dd - 30, ss - 30); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 95: + memcpy_sse2_64(dd - 95, ss - 95); + case 31: + memcpy_sse2_16(dd - 31, ss - 31); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 96: + memcpy_sse2_64(dd - 96, ss - 96); + case 32: + memcpy_sse2_32(dd - 32, ss - 32); + break; + + case 97: + memcpy_sse2_64(dd - 97, ss - 97); + case 33: + memcpy_sse2_32(dd - 33, ss - 33); + dd[-1] = ss[-1]; + break; + + case 98: + memcpy_sse2_64(dd - 98, ss - 98); + case 34: + memcpy_sse2_32(dd - 34, ss - 34); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 99: + memcpy_sse2_64(dd - 99, ss - 99); + case 35: + memcpy_sse2_32(dd - 35, ss - 35); + *((uint16_t*)(dd - 3)) = *((uint16_t*)(ss - 3)); + dd[-1] = ss[-1]; + break; + + case 100: + memcpy_sse2_64(dd - 100, ss - 100); + case 36: + memcpy_sse2_32(dd - 36, ss - 36); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 101: + memcpy_sse2_64(dd - 101, ss - 101); + case 37: + memcpy_sse2_32(dd - 37, ss - 37); + *((uint32_t*)(dd - 5)) = *((uint32_t*)(ss - 5)); + dd[-1] = ss[-1]; + break; + + case 102: + memcpy_sse2_64(dd - 102, ss - 102); + case 38: + memcpy_sse2_32(dd - 38, ss - 38); + *((uint32_t*)(dd - 6)) = *((uint32_t*)(ss - 6)); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 103: + memcpy_sse2_64(dd - 103, ss - 103); + case 39: + memcpy_sse2_32(dd - 39, ss - 39); + *((uint32_t*)(dd - 7)) = *((uint32_t*)(ss - 7)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 104: + memcpy_sse2_64(dd - 104, ss - 104); + case 40: + memcpy_sse2_32(dd - 40, ss - 40); + *((uint64_t*)(dd - 8)) = *((uint64_t*)(ss - 8)); + break; + + case 105: + memcpy_sse2_64(dd - 105, ss - 105); + case 41: + memcpy_sse2_32(dd - 41, ss - 41); + *((uint64_t*)(dd - 9)) = *((uint64_t*)(ss - 9)); + dd[-1] = ss[-1]; + break; + + case 106: + memcpy_sse2_64(dd - 106, ss - 106); + case 42: + memcpy_sse2_32(dd - 42, ss - 42); + *((uint64_t*)(dd - 10)) = *((uint64_t*)(ss - 10)); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 107: + memcpy_sse2_64(dd - 107, ss - 107); + case 43: + memcpy_sse2_32(dd - 43, ss - 43); + *((uint64_t*)(dd - 11)) = *((uint64_t*)(ss - 11)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 108: + memcpy_sse2_64(dd - 108, ss - 108); + case 44: + memcpy_sse2_32(dd - 44, ss - 44); + *((uint64_t*)(dd - 12)) = *((uint64_t*)(ss - 12)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 109: + memcpy_sse2_64(dd - 109, ss - 109); + case 45: + memcpy_sse2_32(dd - 45, ss - 45); + *((uint64_t*)(dd - 13)) = *((uint64_t*)(ss - 13)); + *((uint32_t*)(dd - 5)) = *((uint32_t*)(ss - 5)); + dd[-1] = ss[-1]; + break; + + case 110: + memcpy_sse2_64(dd - 110, ss - 110); + case 46: + memcpy_sse2_32(dd - 46, ss - 46); + *((uint64_t*)(dd - 14)) = *((uint64_t*)(ss - 14)); + *((uint64_t*)(dd - 8)) = *((uint64_t*)(ss - 8)); + break; + + case 111: + memcpy_sse2_64(dd - 111, ss - 111); + case 47: + memcpy_sse2_32(dd - 47, ss - 47); + *((uint64_t*)(dd - 15)) = *((uint64_t*)(ss - 15)); + *((uint64_t*)(dd - 8)) = *((uint64_t*)(ss - 8)); + break; + + case 112: + memcpy_sse2_64(dd - 112, ss - 112); + case 48: + memcpy_sse2_32(dd - 48, ss - 48); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 113: + memcpy_sse2_64(dd - 113, ss - 113); + case 49: + memcpy_sse2_32(dd - 49, ss - 49); + memcpy_sse2_16(dd - 17, ss - 17); + dd[-1] = ss[-1]; + break; + + case 114: + memcpy_sse2_64(dd - 114, ss - 114); + case 50: + memcpy_sse2_32(dd - 50, ss - 50); + memcpy_sse2_16(dd - 18, ss - 18); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 115: + memcpy_sse2_64(dd - 115, ss - 115); + case 51: + memcpy_sse2_32(dd - 51, ss - 51); + memcpy_sse2_16(dd - 19, ss - 19); + *((uint16_t*)(dd - 3)) = *((uint16_t*)(ss - 3)); + dd[-1] = ss[-1]; + break; + + case 116: + memcpy_sse2_64(dd - 116, ss - 116); + case 52: + memcpy_sse2_32(dd - 52, ss - 52); + memcpy_sse2_16(dd - 20, ss - 20); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 117: + memcpy_sse2_64(dd - 117, ss - 117); + case 53: + memcpy_sse2_32(dd - 53, ss - 53); + memcpy_sse2_16(dd - 21, ss - 21); + *((uint32_t*)(dd - 5)) = *((uint32_t*)(ss - 5)); + dd[-1] = ss[-1]; + break; + + case 118: + memcpy_sse2_64(dd - 118, ss - 118); + case 54: + memcpy_sse2_32(dd - 54, ss - 54); + memcpy_sse2_16(dd - 22, ss - 22); + *((uint32_t*)(dd - 6)) = *((uint32_t*)(ss - 6)); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 119: + memcpy_sse2_64(dd - 119, ss - 119); + case 55: + memcpy_sse2_32(dd - 55, ss - 55); + memcpy_sse2_16(dd - 23, ss - 23); + *((uint32_t*)(dd - 7)) = *((uint32_t*)(ss - 7)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 120: + memcpy_sse2_64(dd - 120, ss - 120); + case 56: + memcpy_sse2_32(dd - 56, ss - 56); + memcpy_sse2_16(dd - 24, ss - 24); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 121: + memcpy_sse2_64(dd - 121, ss - 121); + case 57: + memcpy_sse2_32(dd - 57, ss - 57); + memcpy_sse2_16(dd - 25, ss - 25); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 122: + memcpy_sse2_64(dd - 122, ss - 122); + case 58: + memcpy_sse2_32(dd - 58, ss - 58); + memcpy_sse2_16(dd - 26, ss - 26); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 123: + memcpy_sse2_64(dd - 123, ss - 123); + case 59: + memcpy_sse2_32(dd - 59, ss - 59); + memcpy_sse2_16(dd - 27, ss - 27); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 124: + memcpy_sse2_64(dd - 124, ss - 124); + case 60: + memcpy_sse2_32(dd - 60, ss - 60); + memcpy_sse2_16(dd - 28, ss - 28); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 125: + memcpy_sse2_64(dd - 125, ss - 125); + case 61: + memcpy_sse2_32(dd - 61, ss - 61); + memcpy_sse2_16(dd - 29, ss - 29); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 126: + memcpy_sse2_64(dd - 126, ss - 126); + case 62: + memcpy_sse2_32(dd - 62, ss - 62); + memcpy_sse2_16(dd - 30, ss - 30); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 127: + memcpy_sse2_64(dd - 127, ss - 127); + case 63: + memcpy_sse2_32(dd - 63, ss - 63); + memcpy_sse2_16(dd - 31, ss - 31); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 128: + memcpy_sse2_128(dd - 128, ss - 128); + break; + } + + return dst; +} + + +//--------------------------------------------------------------------- +// main routine +//--------------------------------------------------------------------- +static void* memcpy_fast(void *destination, const void *source, size_t size) +{ + unsigned char *dst = (unsigned char*)destination; + const unsigned char *src = (const unsigned char*)source; + static size_t cachesize = 0x200000; // L2-cache size + size_t padding; + + // small memory copy + if (size <= 128) { + return memcpy_tiny(dst, src, size); + } + + // align destination to 16 bytes boundary + padding = (16 - (((size_t)dst) & 15)) & 15; + + if (padding > 0) { + __m128i head = _mm_loadu_si128((const __m128i*)src); + _mm_storeu_si128((__m128i*)dst, head); + dst += padding; + src += padding; + size -= padding; + } + + // medium size copy + if (size <= cachesize) { + __m128i c0, c1, c2, c3, c4, c5, c6, c7; + + for (; size >= 128; size -= 128) { + c0 = _mm_loadu_si128(((const __m128i*)src) + 0); + c1 = _mm_loadu_si128(((const __m128i*)src) + 1); + c2 = _mm_loadu_si128(((const __m128i*)src) + 2); + c3 = _mm_loadu_si128(((const __m128i*)src) + 3); + c4 = _mm_loadu_si128(((const __m128i*)src) + 4); + c5 = _mm_loadu_si128(((const __m128i*)src) + 5); + c6 = _mm_loadu_si128(((const __m128i*)src) + 6); + c7 = _mm_loadu_si128(((const __m128i*)src) + 7); + _mm_prefetch((const char*)(src + 256), _MM_HINT_NTA); + src += 128; + _mm_store_si128((((__m128i*)dst) + 0), c0); + _mm_store_si128((((__m128i*)dst) + 1), c1); + _mm_store_si128((((__m128i*)dst) + 2), c2); + _mm_store_si128((((__m128i*)dst) + 3), c3); + _mm_store_si128((((__m128i*)dst) + 4), c4); + _mm_store_si128((((__m128i*)dst) + 5), c5); + _mm_store_si128((((__m128i*)dst) + 6), c6); + _mm_store_si128((((__m128i*)dst) + 7), c7); + dst += 128; + } + } + else { // big memory copy + __m128i c0, c1, c2, c3, c4, c5, c6, c7; + + _mm_prefetch((const char*)(src), _MM_HINT_NTA); + + if ((((size_t)src) & 15) == 0) { // source aligned + for (; size >= 128; size -= 128) { + c0 = _mm_load_si128(((const __m128i*)src) + 0); + c1 = _mm_load_si128(((const __m128i*)src) + 1); + c2 = _mm_load_si128(((const __m128i*)src) + 2); + c3 = _mm_load_si128(((const __m128i*)src) + 3); + c4 = _mm_load_si128(((const __m128i*)src) + 4); + c5 = _mm_load_si128(((const __m128i*)src) + 5); + c6 = _mm_load_si128(((const __m128i*)src) + 6); + c7 = _mm_load_si128(((const __m128i*)src) + 7); + _mm_prefetch((const char*)(src + 256), _MM_HINT_NTA); + src += 128; + _mm_stream_si128((((__m128i*)dst) + 0), c0); + _mm_stream_si128((((__m128i*)dst) + 1), c1); + _mm_stream_si128((((__m128i*)dst) + 2), c2); + _mm_stream_si128((((__m128i*)dst) + 3), c3); + _mm_stream_si128((((__m128i*)dst) + 4), c4); + _mm_stream_si128((((__m128i*)dst) + 5), c5); + _mm_stream_si128((((__m128i*)dst) + 6), c6); + _mm_stream_si128((((__m128i*)dst) + 7), c7); + dst += 128; + } + } + else { // source unaligned + for (; size >= 128; size -= 128) { + c0 = _mm_loadu_si128(((const __m128i*)src) + 0); + c1 = _mm_loadu_si128(((const __m128i*)src) + 1); + c2 = _mm_loadu_si128(((const __m128i*)src) + 2); + c3 = _mm_loadu_si128(((const __m128i*)src) + 3); + c4 = _mm_loadu_si128(((const __m128i*)src) + 4); + c5 = _mm_loadu_si128(((const __m128i*)src) + 5); + c6 = _mm_loadu_si128(((const __m128i*)src) + 6); + c7 = _mm_loadu_si128(((const __m128i*)src) + 7); + _mm_prefetch((const char*)(src + 256), _MM_HINT_NTA); + src += 128; + _mm_stream_si128((((__m128i*)dst) + 0), c0); + _mm_stream_si128((((__m128i*)dst) + 1), c1); + _mm_stream_si128((((__m128i*)dst) + 2), c2); + _mm_stream_si128((((__m128i*)dst) + 3), c3); + _mm_stream_si128((((__m128i*)dst) + 4), c4); + _mm_stream_si128((((__m128i*)dst) + 5), c5); + _mm_stream_si128((((__m128i*)dst) + 6), c6); + _mm_stream_si128((((__m128i*)dst) + 7), c7); + dst += 128; + } + } + _mm_sfence(); + } + + memcpy_tiny(dst, src, size); + + return destination; +} + + +#endif diff --git a/src/components/implementation/simple_vmm/vmm/netio.c b/src/components/implementation/simple_vmm/vmm/netio.c index a37dd7f962..cc0e4acdbb 100644 --- a/src/components/implementation/simple_vmm/vmm/netio.c +++ b/src/components/implementation/simple_vmm/vmm/netio.c @@ -19,7 +19,7 @@ netio_get_a_packet(u16_t *pkt_len) tx_obj = shm_bm_alloc_net_pkt_buf(tx_shmemd, &tx_pktid); assert(tx_obj); - virtio_net_send_one_pkt(tx_obj->data, &_pkt_len, 0); + virtio_net_send_one_pkt(tx_obj->data, &_pkt_len); *pkt_len = _pkt_len; return tx_pktid; @@ -160,19 +160,12 @@ netio_get_a_packet_batch(u8_t batch_limit) if (svc_id < 0) { printc("no svc available for this nf:%d, thd:%d\n", nf_id, nf_thd); assert(0); - return 0; } - struct vmrt_vm_comp *vm = nf_svc_tbl[nf_id][nf_thd].vm; + session = get_nf_session(svc_id); - // printc("####################:%d, %d, vm:%d, svc:%d\n", nf_id, nf_thd, vm->comp_id, svc_id); - session = get_nf_session(vm, svc_id); - - - // sync_sem_take(&session->tx_sem); while (nf_tx_ring_buf_empty(&session->nf_tx_ring_buf)) { sched_thd_yield(); - // sched_thd_block(0); } assert(nf_tx_ring_buf_dequeue(&session->nf_tx_ring_buf, &buf)); @@ -273,7 +266,7 @@ netio_svc_update(int svc_id, u32_t vm) nf_svc_update(nf_id, thd, svc_id, vm_list[vm]); struct nf_session *session; - session = get_nf_session(vm_list[vm], svc_id); + session = get_nf_session(svc_id); nf_session_tx_update(session, tx_shm, thd); sync_sem_init(&session->tx_sem, 0); diff --git a/src/components/implementation/simple_vmm/vmm/nf_session.c b/src/components/implementation/simple_vmm/vmm/nf_session.c index 7ba4e8a397..a5d56bdb82 100644 --- a/src/components/implementation/simple_vmm/vmm/nf_session.c +++ b/src/components/implementation/simple_vmm/vmm/nf_session.c @@ -5,21 +5,19 @@ CK_RING_PROTOTYPE(nf_tx_ring_buf, nf_pkt_meta_data); static char ring_buffers[NF_TX_MAX_RING_NUM][NF_TX_PKT_RING_SZ]; -static struct nf_session nf_sessions[VMRT_MAX_VM][MAX_SVC_NUM]; +static struct nf_session nf_sessions[MAX_SVC_NUM]; void nf_sessions_init(void) { - for (int i = 0; i < VMRT_MAX_VM; i++) { - for (int j = 0; j < MAX_SVC_NUM; j++) { - nf_sessions[i][j].rx_shmemd = 0; - nf_sessions[i][j].rx_thd = 0; - nf_sessions[i][j].tx_shmemd = 0; - nf_sessions[i][j].tx_thd = 0; - nf_sessions[i][j].nf_tx_ring_buf.ring = 0; - nf_sessions[i][j].nf_tx_ring_buf.ringbuf = 0; - - } + for (int i = 0; i < MAX_SVC_NUM; i++) { + nf_sessions[i].rx_shmemd = 0; + nf_sessions[i].rx_thd = 0; + nf_sessions[i].tx_shmemd = 0; + nf_sessions[i].tx_thd = 0; + nf_sessions[i].nf_tx_ring_buf.ring = 0; + nf_sessions[i].nf_tx_ring_buf.ringbuf = 0; + } } @@ -62,10 +60,10 @@ nf_tx_ring_buf_empty(struct nf_tx_ring_buf *pkt_ring_buf) return (!ck_ring_size(pkt_ring_buf->ring)); } -struct nf_session *get_nf_session(struct vmrt_vm_comp *vm, int svc_id) +struct nf_session *get_nf_session(int svc_id) { - if (svc_id < 0) return NULL; - else return &nf_sessions[vm->comp_id][svc_id]; + if (unlikely(svc_id < 0 || svc_id > 1000)) return &nf_sessions[0]; + else return &nf_sessions[svc_id]; } void diff --git a/src/components/implementation/simple_vmm/vmm/nf_session.h b/src/components/implementation/simple_vmm/vmm/nf_session.h index 74abaaf252..00f81a0d44 100644 --- a/src/components/implementation/simple_vmm/vmm/nf_session.h +++ b/src/components/implementation/simple_vmm/vmm/nf_session.h @@ -26,7 +26,7 @@ struct nf_session { struct nf_tx_ring_buf nf_tx_ring_buf; }; -#define NF_TX_PKT_RBUF_NUM 32 +#define NF_TX_PKT_RBUF_NUM 512 #define NF_TX_PKT_RBUF_SZ (NF_TX_PKT_RBUF_NUM * sizeof(struct nf_tx_ring_buf)) #define NF_TX_PKT_RING_SZ (sizeof(struct ck_ring) + NF_TX_PKT_RBUF_SZ) #define NF_TX_PKT_RING_PAGES (round_up_to_page(NF_TX_PKT_RING_SZ)/PAGE_SIZE) @@ -37,7 +37,7 @@ struct nf_session { #define MAX_SVC_NUM (20000) -struct nf_session *get_nf_session(struct vmrt_vm_comp *vm, int svc_id); +struct nf_session *get_nf_session(int svc_id); void nf_session_tx_update(struct nf_session *session, shm_bm_t tx_shmemd, thdid_t tx_thd); void nf_tx_ring_buf_init(struct nf_tx_ring_buf *pkt_ring_buf, size_t ringbuf_num, size_t ringbuf_sz); int nf_tx_ring_buf_enqueue(struct nf_tx_ring_buf *pkt_ring_buf, struct nf_pkt_meta_data *buf); diff --git a/src/components/implementation/simple_vmm/vmm/simple_vmm.c b/src/components/implementation/simple_vmm/vmm/simple_vmm.c index b79792e225..ccacf9f790 100644 --- a/src/components/implementation/simple_vmm/vmm/simple_vmm.c +++ b/src/components/implementation/simple_vmm/vmm/simple_vmm.c @@ -64,13 +64,9 @@ SS_STATIC_SLAB(vcpu_mmio_req, struct acrn_mmio_request, VM_MAX_COMPS * VMRT_VM_M struct sync_lock vm_boot_lock; -static int pause = 0; -static int hlt = 0; - void pause_handler(struct vmrt_vm_vcpu *vcpu) { - // printc("paused %d\n", pause++); sched_thd_yield(); GOTO_NEXT_INST(vcpu->shared_region); } @@ -78,7 +74,6 @@ pause_handler(struct vmrt_vm_vcpu *vcpu) void hlt_handler(struct vmrt_vm_vcpu *vcpu) { - // printc("hlt %d\n", hlt++); sched_thd_yield(); GOTO_NEXT_INST(vcpu->shared_region); } @@ -246,6 +241,7 @@ rx_task(void) // netio_shmem_map(netshmem_get_shm_id()); nic_shmem_map(netshmem_get_shm_id()); ip = inet_addr("10.10.1.2"); + nic_bind_port(ip, 0); int i = 0; @@ -308,19 +304,13 @@ tx_task(void) nf_svc_update(cos_compid(), cos_thdid(), svc_id, g_vm); struct nf_session *session; - session = get_nf_session(g_vm, svc_id); + session = get_nf_session(svc_id); nf_session_tx_update(session, tx_shmemd, cos_thdid()); sync_sem_init(&session->tx_sem, 0); nf_tx_ring_buf_init(&session->nf_tx_ring_buf, NF_TX_PKT_RBUF_NUM, NF_TX_PKT_RING_SZ); - while(1) { - u8_t batch_ct = 32; - - first_objid = objid = netio_get_a_packet_batch(batch_ct); - - nic_send_packet_batch(first_objid); - } + virtio_tx_task(0); } void @@ -335,21 +325,14 @@ cos_init(void) printc("created vm done:%d, %p\n", g_vm->comp_id, g_vm); g_vm->vm_mac_id = 0; - g_vm1 = vm_comp_create(); - g_vm1->vm_mac_id = 1; - - sync_lock_init(&vm_boot_lock); - - printc("creating vm1 done:%d, %p\n", g_vm1->comp_id, g_vm1); vm_list[0] = g_vm; - vm_list[1] = g_vm1; } void cos_parallel_init(coreid_t cid, int init_core, int ncores) { struct vmrt_vm_vcpu *vcpu; -#if NO_NF_TEST + if (cid == 0) { rx_tid = sched_thd_create((void *)rx_task, NULL); netshmem_create(rx_tid); @@ -357,11 +340,6 @@ cos_parallel_init(coreid_t cid, int init_core, int ncores) netshmem_create(tx_tid); printc("NF rx tid:%ld, tx tid:%ld\n", rx_tid, tx_tid); - extern void virtio_tx_task(void *data); - virtio_tx_tid = sched_thd_create((void *)virtio_tx_task, g_vm); - printc("virtio_tx_tid:%d\n", virtio_tx_tid); - g_vm->tx_thd = virtio_tx_tid; - vmrt_vm_vcpu_init(g_vm, 0); vcpu = vmrt_get_vcpu(g_vm, 0); @@ -370,13 +348,8 @@ cos_parallel_init(coreid_t cid, int init_core, int ncores) mmio_init(vcpu); } else { - vmrt_vm_vcpu_init(g_vm1, 0); - vcpu = vmrt_get_vcpu(g_vm1, 0); - lapic_init(vcpu); - iinst_ctxt_init(vcpu); - mmio_init(vcpu); + } -#endif return; } @@ -389,18 +362,12 @@ parallel_main(coreid_t cid) if (cid == 0) { vcpu = vmrt_get_vcpu(g_vm, 0); vmrt_vm_vcpu_start(vcpu); -#if NO_NF_TEST + sched_thd_param_set(rx_tid, sched_param_pack(SCHEDP_PRIO, NF_THD_PRIORITY)); sched_thd_param_set(tx_tid, sched_param_pack(SCHEDP_PRIO, NF_THD_PRIORITY)); - sched_thd_param_set(virtio_tx_tid, sched_param_pack(SCHEDP_PRIO, NF_THD_PRIORITY)); -#endif } else if(cid == 1) { - /* wait for the first vm to start */ - // sched_thd_block_timeout(0, time_now() + time_usec2cyc(10000000)); - // printc("----------------------STARTING SECOND VM----------------------\n"); - // vcpu = vmrt_get_vcpu(g_vm1, 0); - // vmrt_vm_vcpu_start(vcpu); + } while (1) diff --git a/src/components/interface/netshmem/netshmem.h b/src/components/interface/netshmem/netshmem.h index 621d103564..bf8d28d8e8 100644 --- a/src/components/interface/netshmem/netshmem.h +++ b/src/components/interface/netshmem/netshmem.h @@ -4,7 +4,7 @@ #include #include -#define PKT_BUF_NUM 128 +#define PKT_BUF_NUM 1024 #define PKT_BUF_SIZE 2048 struct netshmem { diff --git a/src/components/lib/dpdk/Makefile b/src/components/lib/dpdk/Makefile index 69d01da074..a986a9a13e 100644 --- a/src/components/lib/dpdk/Makefile +++ b/src/components/lib/dpdk/Makefile @@ -64,8 +64,8 @@ config: $(MUSL_BIN_PATH) meson build \ --cross-file $(shell pwd)/cross_x86_64_composite_with_musl \ -Dmachine=default -Dc_args="-nostdlib -nostdinc -mcmodel=large -DCOMPOSITE_EXISTS $(DPDK_ADAPTER_INC)" \ - -Ddefault_library=static -Ddebug=true \ - -Doptimization=0 -Dincludedir=$(shell pwd)/$(DPDK_INC_DIR) \ + -Ddefault_library=static -Ddebug=false \ + -Doptimization=3 -Dincludedir=$(shell pwd)/$(DPDK_INC_DIR) \ -Dprefix=$(shell pwd)/$(DPDK_INSTALL_DIR) $(DISABLED_DRIVERS) build: $(info Building DPDK) diff --git a/src/components/lib/dpdk/cos_dpdk.c b/src/components/lib/dpdk/cos_dpdk.c index 2ff097b85d..c5fe45ef9e 100644 --- a/src/components/lib/dpdk/cos_dpdk.c +++ b/src/components/lib/dpdk/cos_dpdk.c @@ -114,7 +114,7 @@ cos_eth_ports_init(void) for (i = 0; i < nb_ports; i++) { cos_eth_info_print(ports_ids[i]); } -#if E810_NIC +#if 1 ports_ids[0] = 1; nb_ports = 1; #endif @@ -302,7 +302,7 @@ cos_dev_port_tx_queue_setup(cos_portid_t port_id, uint16_t tx_queue_id, assert(dev_info.tx_offload_capa & DEV_TX_OFFLOAD_UDP_CKSUM); #endif - // txq_conf.tx_free_thresh = nb_tx_desc - 32; + txq_conf.tx_free_thresh = nb_tx_desc - 32; /* set the txq to enable IP and UDP offload */ if (ENABLE_OFFLOAD) { txq_conf.offloads |= DEV_TX_OFFLOAD_IPV4_CKSUM; @@ -453,6 +453,7 @@ cos_dev_port_tx_burst(cos_portid_t port_id, uint16_t queue_id, char* cos_get_packet(char* mbuf, int *len) { + rte_prefetch0((char *)rte_pktmbuf_mtod((struct rte_mbuf*)mbuf, void *) + 16); *len = ((struct rte_mbuf*)mbuf)->pkt_len; return (char *)rte_pktmbuf_mtod((struct rte_mbuf*)mbuf, struct rte_ether_hdr *); } diff --git a/src/components/lib/slm/quantum.c b/src/components/lib/slm/quantum.c index c3fadf6018..551d1d3dcc 100644 --- a/src/components/lib/slm/quantum.c +++ b/src/components/lib/slm/quantum.c @@ -164,7 +164,7 @@ slm_policy_timer_init(microsec_t period) int slm_timer_quantum_init(void) { - slm_policy_timer_init(1000); + slm_policy_timer_init(200); return 0; } From e782f5df387c2ed56001ab91ff770bc3537c8975 Mon Sep 17 00:00:00 2001 From: betahxy Date: Wed, 20 Mar 2024 00:00:00 -0400 Subject: [PATCH 08/60] Integration Testing --- composition_scripts/vmm_no_nf.toml | 2 +- composition_scripts/vmm_no_nf_multi_core.toml | 41 + composition_scripts/vmm_noop_nf.toml | 4 +- .../implementation/capmgr/simple/capmgr.c | 4 + .../implementation/nicmgr/dpdk/nicmgr.c | 18 +- .../implementation/simple_nf/noop_nf/main.c | 109 +- .../simple_vmm/nf_multicore/Makefile | 29 + .../simple_vmm/nf_multicore/acrn_common.h | 797 +++++++++ .../simple_vmm/nf_multicore/acrn_types.h | 51 + .../simple_vmm/nf_multicore/apicreg.h | 444 +++++ .../simple_vmm/nf_multicore/atomic.h | 152 ++ .../simple_vmm/nf_multicore/bits.h | 298 ++++ .../simple_vmm/nf_multicore/cpu.h | 337 ++++ .../simple_vmm/nf_multicore/cpu_caps.h | 68 + .../simple_vmm/nf_multicore/cpuid.h | 186 ++ .../nf_multicore/devices/serial/serial.c | 56 + .../nf_multicore/devices/serial/serial.h | 17 + .../nf_multicore/devices/vpci/virtio_net_io.c | 744 ++++++++ .../nf_multicore/devices/vpci/virtio_net_io.h | 144 ++ .../devices/vpci/virtio_net_vpci.c | 51 + .../nf_multicore/devices/vpci/virtio_ring.h | 260 +++ .../nf_multicore/devices/vpci/vpci.c | 316 ++++ .../nf_multicore/devices/vpci/vpci.h | 180 ++ .../nf_multicore/devices/vpci/vpci_io.c | 191 ++ .../nf_multicore/devices/vpic/vpic.c | 109 ++ .../nf_multicore/devices/vpic/vpic.h | 24 + .../nf_multicore/devices/vps2/vps2.c | 47 + .../nf_multicore/devices/vps2/vps2.h | 6 + .../nf_multicore/devices/vrtc/vrtc.c | 58 + .../nf_multicore/devices/vrtc/vrtc.h | 7 + .../simple_vmm/nf_multicore/fast_memcpy.h | 689 ++++++++ .../simple_vmm/nf_multicore/guest/.gitignore | 2 + .../simple_vmm/nf_multicore/guest/Makefile | 47 + .../simple_vmm/nf_multicore/guest/guest.ld | 34 + .../nf_multicore/guest/guest_realmode.S | 60 + .../simple_vmm/nf_multicore/instr_emul.c | 1381 +++++++++++++++ .../simple_vmm/nf_multicore/instr_emul.h | 95 + .../simple_vmm/nf_multicore/ioapic.h | 99 ++ .../simple_vmm/nf_multicore/irq.h | 136 ++ .../simple_vmm/nf_multicore/netio.c | 275 +++ .../simple_vmm/nf_multicore/nf_session.c | 74 + .../simple_vmm/nf_multicore/nf_session.h | 49 + .../simple_vmm/nf_multicore/simple_vmm.c | 384 ++++ .../simple_vmm/nf_multicore/vcpuid.c | 766 ++++++++ .../simple_vmm/nf_multicore/vcpuid.h | 35 + .../simple_vmm/nf_multicore/vio.c | 106 ++ .../simple_vmm/nf_multicore/vioapic.c | 564 ++++++ .../simple_vmm/nf_multicore/vioapic.h | 128 ++ .../simple_vmm/nf_multicore/vlapic.c | 1554 +++++++++++++++++ .../simple_vmm/nf_multicore/vlapic.h | 260 +++ .../simple_vmm/nf_multicore/vlapic_priv.h | 84 + .../simple_vmm/nf_multicore/vmmio.c | 53 + .../simple_vmm/nf_multicore/vmsr.c | 249 +++ .../simple_vmm/nf_multicore/vpic.h | 191 ++ .../simple_vmm/noop_nf/Makefile | 29 + .../simple_vmm/noop_nf/acrn_common.h | 797 +++++++++ .../simple_vmm/noop_nf/acrn_types.h | 51 + .../simple_vmm/noop_nf/apicreg.h | 444 +++++ .../simple_vmm/noop_nf/atomic.h | 152 ++ .../implementation/simple_vmm/noop_nf/bits.h | 298 ++++ .../implementation/simple_vmm/noop_nf/cpu.h | 337 ++++ .../simple_vmm/noop_nf/cpu_caps.h | 68 + .../implementation/simple_vmm/noop_nf/cpuid.h | 186 ++ .../noop_nf/devices/serial/serial.c | 56 + .../noop_nf/devices/serial/serial.h | 17 + .../noop_nf/devices/vpci/virtio_net_io.c | 693 ++++++++ .../noop_nf/devices/vpci/virtio_net_io.h | 144 ++ .../noop_nf/devices/vpci/virtio_net_vpci.c | 51 + .../noop_nf/devices/vpci/virtio_ring.h | 260 +++ .../simple_vmm/noop_nf/devices/vpci/vpci.c | 316 ++++ .../simple_vmm/noop_nf/devices/vpci/vpci.h | 180 ++ .../simple_vmm/noop_nf/devices/vpci/vpci_io.c | 191 ++ .../simple_vmm/noop_nf/devices/vpic/vpic.c | 109 ++ .../simple_vmm/noop_nf/devices/vpic/vpic.h | 24 + .../simple_vmm/noop_nf/devices/vps2/vps2.c | 47 + .../simple_vmm/noop_nf/devices/vps2/vps2.h | 6 + .../simple_vmm/noop_nf/devices/vrtc/vrtc.c | 58 + .../simple_vmm/noop_nf/devices/vrtc/vrtc.h | 7 + .../simple_vmm/noop_nf/fast_memcpy.h | 689 ++++++++ .../simple_vmm/noop_nf/guest/.gitignore | 2 + .../simple_vmm/noop_nf/guest/Makefile | 47 + .../simple_vmm/noop_nf/guest/guest.ld | 34 + .../simple_vmm/noop_nf/guest/guest_realmode.S | 60 + .../simple_vmm/noop_nf/instr_emul.c | 1381 +++++++++++++++ .../simple_vmm/noop_nf/instr_emul.h | 95 + .../simple_vmm/noop_nf/ioapic.h | 99 ++ .../implementation/simple_vmm/noop_nf/irq.h | 136 ++ .../implementation/simple_vmm/noop_nf/netio.c | 274 +++ .../simple_vmm/noop_nf/nf_session.c | 74 + .../simple_vmm/noop_nf/nf_session.h | 49 + .../simple_vmm/noop_nf/simple_vmm.c | 274 +++ .../simple_vmm/noop_nf/vcpuid.c | 766 ++++++++ .../simple_vmm/noop_nf/vcpuid.h | 35 + .../implementation/simple_vmm/noop_nf/vio.c | 106 ++ .../simple_vmm/noop_nf/vioapic.c | 564 ++++++ .../simple_vmm/noop_nf/vioapic.h | 128 ++ .../simple_vmm/noop_nf/vlapic.c | 1554 +++++++++++++++++ .../simple_vmm/noop_nf/vlapic.h | 260 +++ .../simple_vmm/noop_nf/vlapic_priv.h | 84 + .../implementation/simple_vmm/noop_nf/vmmio.c | 53 + .../implementation/simple_vmm/noop_nf/vmsr.c | 249 +++ .../implementation/simple_vmm/noop_nf/vpic.h | 191 ++ .../simple_vmm/vmm/simple_vmm.c | 2 + src/components/interface/netshmem/lib.c | 7 + src/components/lib/dpdk/cos_dpdk.c | 9 +- src/components/lib/slm/slm_blkpt.c | 4 +- 106 files changed, 23687 insertions(+), 125 deletions(-) create mode 100644 composition_scripts/vmm_no_nf_multi_core.toml create mode 100644 src/components/implementation/simple_vmm/nf_multicore/Makefile create mode 100644 src/components/implementation/simple_vmm/nf_multicore/acrn_common.h create mode 100644 src/components/implementation/simple_vmm/nf_multicore/acrn_types.h create mode 100644 src/components/implementation/simple_vmm/nf_multicore/apicreg.h create mode 100644 src/components/implementation/simple_vmm/nf_multicore/atomic.h create mode 100644 src/components/implementation/simple_vmm/nf_multicore/bits.h create mode 100755 src/components/implementation/simple_vmm/nf_multicore/cpu.h create mode 100644 src/components/implementation/simple_vmm/nf_multicore/cpu_caps.h create mode 100644 src/components/implementation/simple_vmm/nf_multicore/cpuid.h create mode 100644 src/components/implementation/simple_vmm/nf_multicore/devices/serial/serial.c create mode 100644 src/components/implementation/simple_vmm/nf_multicore/devices/serial/serial.h create mode 100644 src/components/implementation/simple_vmm/nf_multicore/devices/vpci/virtio_net_io.c create mode 100644 src/components/implementation/simple_vmm/nf_multicore/devices/vpci/virtio_net_io.h create mode 100644 src/components/implementation/simple_vmm/nf_multicore/devices/vpci/virtio_net_vpci.c create mode 100644 src/components/implementation/simple_vmm/nf_multicore/devices/vpci/virtio_ring.h create mode 100644 src/components/implementation/simple_vmm/nf_multicore/devices/vpci/vpci.c create mode 100644 src/components/implementation/simple_vmm/nf_multicore/devices/vpci/vpci.h create mode 100644 src/components/implementation/simple_vmm/nf_multicore/devices/vpci/vpci_io.c create mode 100644 src/components/implementation/simple_vmm/nf_multicore/devices/vpic/vpic.c create mode 100644 src/components/implementation/simple_vmm/nf_multicore/devices/vpic/vpic.h create mode 100644 src/components/implementation/simple_vmm/nf_multicore/devices/vps2/vps2.c create mode 100644 src/components/implementation/simple_vmm/nf_multicore/devices/vps2/vps2.h create mode 100644 src/components/implementation/simple_vmm/nf_multicore/devices/vrtc/vrtc.c create mode 100644 src/components/implementation/simple_vmm/nf_multicore/devices/vrtc/vrtc.h create mode 100644 src/components/implementation/simple_vmm/nf_multicore/fast_memcpy.h create mode 100644 src/components/implementation/simple_vmm/nf_multicore/guest/.gitignore create mode 100644 src/components/implementation/simple_vmm/nf_multicore/guest/Makefile create mode 100644 src/components/implementation/simple_vmm/nf_multicore/guest/guest.ld create mode 100644 src/components/implementation/simple_vmm/nf_multicore/guest/guest_realmode.S create mode 100644 src/components/implementation/simple_vmm/nf_multicore/instr_emul.c create mode 100644 src/components/implementation/simple_vmm/nf_multicore/instr_emul.h create mode 100644 src/components/implementation/simple_vmm/nf_multicore/ioapic.h create mode 100644 src/components/implementation/simple_vmm/nf_multicore/irq.h create mode 100644 src/components/implementation/simple_vmm/nf_multicore/netio.c create mode 100644 src/components/implementation/simple_vmm/nf_multicore/nf_session.c create mode 100644 src/components/implementation/simple_vmm/nf_multicore/nf_session.h create mode 100644 src/components/implementation/simple_vmm/nf_multicore/simple_vmm.c create mode 100644 src/components/implementation/simple_vmm/nf_multicore/vcpuid.c create mode 100644 src/components/implementation/simple_vmm/nf_multicore/vcpuid.h create mode 100644 src/components/implementation/simple_vmm/nf_multicore/vio.c create mode 100644 src/components/implementation/simple_vmm/nf_multicore/vioapic.c create mode 100644 src/components/implementation/simple_vmm/nf_multicore/vioapic.h create mode 100644 src/components/implementation/simple_vmm/nf_multicore/vlapic.c create mode 100644 src/components/implementation/simple_vmm/nf_multicore/vlapic.h create mode 100644 src/components/implementation/simple_vmm/nf_multicore/vlapic_priv.h create mode 100644 src/components/implementation/simple_vmm/nf_multicore/vmmio.c create mode 100644 src/components/implementation/simple_vmm/nf_multicore/vmsr.c create mode 100644 src/components/implementation/simple_vmm/nf_multicore/vpic.h create mode 100644 src/components/implementation/simple_vmm/noop_nf/Makefile create mode 100644 src/components/implementation/simple_vmm/noop_nf/acrn_common.h create mode 100644 src/components/implementation/simple_vmm/noop_nf/acrn_types.h create mode 100644 src/components/implementation/simple_vmm/noop_nf/apicreg.h create mode 100644 src/components/implementation/simple_vmm/noop_nf/atomic.h create mode 100644 src/components/implementation/simple_vmm/noop_nf/bits.h create mode 100755 src/components/implementation/simple_vmm/noop_nf/cpu.h create mode 100644 src/components/implementation/simple_vmm/noop_nf/cpu_caps.h create mode 100644 src/components/implementation/simple_vmm/noop_nf/cpuid.h create mode 100644 src/components/implementation/simple_vmm/noop_nf/devices/serial/serial.c create mode 100644 src/components/implementation/simple_vmm/noop_nf/devices/serial/serial.h create mode 100644 src/components/implementation/simple_vmm/noop_nf/devices/vpci/virtio_net_io.c create mode 100644 src/components/implementation/simple_vmm/noop_nf/devices/vpci/virtio_net_io.h create mode 100644 src/components/implementation/simple_vmm/noop_nf/devices/vpci/virtio_net_vpci.c create mode 100644 src/components/implementation/simple_vmm/noop_nf/devices/vpci/virtio_ring.h create mode 100644 src/components/implementation/simple_vmm/noop_nf/devices/vpci/vpci.c create mode 100644 src/components/implementation/simple_vmm/noop_nf/devices/vpci/vpci.h create mode 100644 src/components/implementation/simple_vmm/noop_nf/devices/vpci/vpci_io.c create mode 100644 src/components/implementation/simple_vmm/noop_nf/devices/vpic/vpic.c create mode 100644 src/components/implementation/simple_vmm/noop_nf/devices/vpic/vpic.h create mode 100644 src/components/implementation/simple_vmm/noop_nf/devices/vps2/vps2.c create mode 100644 src/components/implementation/simple_vmm/noop_nf/devices/vps2/vps2.h create mode 100644 src/components/implementation/simple_vmm/noop_nf/devices/vrtc/vrtc.c create mode 100644 src/components/implementation/simple_vmm/noop_nf/devices/vrtc/vrtc.h create mode 100644 src/components/implementation/simple_vmm/noop_nf/fast_memcpy.h create mode 100644 src/components/implementation/simple_vmm/noop_nf/guest/.gitignore create mode 100644 src/components/implementation/simple_vmm/noop_nf/guest/Makefile create mode 100644 src/components/implementation/simple_vmm/noop_nf/guest/guest.ld create mode 100644 src/components/implementation/simple_vmm/noop_nf/guest/guest_realmode.S create mode 100644 src/components/implementation/simple_vmm/noop_nf/instr_emul.c create mode 100644 src/components/implementation/simple_vmm/noop_nf/instr_emul.h create mode 100644 src/components/implementation/simple_vmm/noop_nf/ioapic.h create mode 100644 src/components/implementation/simple_vmm/noop_nf/irq.h create mode 100644 src/components/implementation/simple_vmm/noop_nf/netio.c create mode 100644 src/components/implementation/simple_vmm/noop_nf/nf_session.c create mode 100644 src/components/implementation/simple_vmm/noop_nf/nf_session.h create mode 100644 src/components/implementation/simple_vmm/noop_nf/simple_vmm.c create mode 100644 src/components/implementation/simple_vmm/noop_nf/vcpuid.c create mode 100644 src/components/implementation/simple_vmm/noop_nf/vcpuid.h create mode 100644 src/components/implementation/simple_vmm/noop_nf/vio.c create mode 100644 src/components/implementation/simple_vmm/noop_nf/vioapic.c create mode 100644 src/components/implementation/simple_vmm/noop_nf/vioapic.h create mode 100644 src/components/implementation/simple_vmm/noop_nf/vlapic.c create mode 100644 src/components/implementation/simple_vmm/noop_nf/vlapic.h create mode 100644 src/components/implementation/simple_vmm/noop_nf/vlapic_priv.h create mode 100644 src/components/implementation/simple_vmm/noop_nf/vmmio.c create mode 100644 src/components/implementation/simple_vmm/noop_nf/vmsr.c create mode 100644 src/components/implementation/simple_vmm/noop_nf/vpic.h diff --git a/composition_scripts/vmm_no_nf.toml b/composition_scripts/vmm_no_nf.toml index 5554aaa005..aced17932e 100644 --- a/composition_scripts/vmm_no_nf.toml +++ b/composition_scripts/vmm_no_nf.toml @@ -1,5 +1,5 @@ [system] -description = "Simple VMM test without NF" +description = "Simple VMM" [[components]] name = "booter" diff --git a/composition_scripts/vmm_no_nf_multi_core.toml b/composition_scripts/vmm_no_nf_multi_core.toml new file mode 100644 index 0000000000..a22ea3b2a8 --- /dev/null +++ b/composition_scripts/vmm_no_nf_multi_core.toml @@ -0,0 +1,41 @@ +[system] +description = "Simple VMM" + +[[components]] +name = "booter" +img = "no_interface.llbooter" +implements = [{interface = "init"}, {interface = "addr"}] +deps = [{srv = "kernel", interface = "init", variant = "kernel"}] +constructor = "kernel" + +[[components]] +name = "capmgr" +img = "capmgr.simple" +deps = [{srv = "booter", interface = "init"}, {srv = "booter", interface = "addr"}] +implements = [{interface = "capmgr"}, {interface = "init"}, {interface = "memmgr"}, {interface = "capmgr_create"}, {interface = "contigmem"}] +constructor = "booter" +baseaddr = "0x1000000" + +[[components]] +name = "sched" +img = "sched.pfprr_quantum_static" +deps = [{srv = "capmgr", interface = "init"}, {srv = "capmgr", interface = "capmgr"}, {srv = "capmgr", interface = "memmgr"}] +implements = [{interface = "sched"}, {interface = "syncipc"}, {interface = "init"}] +constructor = "booter" +baseaddr = "0x1600000" + +[[components]] +name = "nicmgr" +img = "nicmgr.dpdk" +deps = [{srv = "sched", interface = "sched"}, {srv = "sched", interface = "init"}, {srv = "capmgr", interface = "capmgr_create"}, {srv = "capmgr", interface = "memmgr"}, {srv = "capmgr", interface = "contigmem"}] +implements = [{interface = "nic"}] +constructor = "booter" +baseaddr = "0x6000000" + +[[components]] +name = "vmm" +img = "simple_vmm.nf_multicore" +deps = [{srv = "sched", interface = "sched"}, {srv = "sched", interface = "init"},{srv = "capmgr", interface = "capmgr"}, {srv = "capmgr", interface = "memmgr"}, {srv = "capmgr", interface = "contigmem"}, {srv = "nicmgr", interface = "nic"}] +implements = [{interface = "netio"}] +constructor = "booter" +baseaddr = "0x2000000" diff --git a/composition_scripts/vmm_noop_nf.toml b/composition_scripts/vmm_noop_nf.toml index 17b2a8dd0e..9c7da04f94 100644 --- a/composition_scripts/vmm_noop_nf.toml +++ b/composition_scripts/vmm_noop_nf.toml @@ -1,5 +1,5 @@ [system] -description = "Simple VMM component." +description = "Simple VMM" [[components]] name = "booter" @@ -34,7 +34,7 @@ baseaddr = "0x6000000" [[components]] name = "vmm" -img = "simple_vmm.vmm" +img = "simple_vmm.noop_nf" deps = [{srv = "sched", interface = "sched"}, {srv = "sched", interface = "init"},{srv = "capmgr", interface = "capmgr"}, {srv = "capmgr", interface = "memmgr"}, {srv = "capmgr", interface = "contigmem"}, {srv = "nicmgr", interface = "nic"}] implements = [{interface = "netio"}] constructor = "booter" diff --git a/src/components/implementation/capmgr/simple/capmgr.c b/src/components/implementation/capmgr/simple/capmgr.c index c952089d62..3f64a422e3 100644 --- a/src/components/implementation/capmgr/simple/capmgr.c +++ b/src/components/implementation/capmgr/simple/capmgr.c @@ -512,6 +512,8 @@ memmgr_shared_page_map_aligned_in_vm(cbuf_t id, unsigned long align, vaddr_t *pg return s->n_pages; } +struct ps_lock map_lock = {.o = 0}; + unsigned long memmgr_shared_page_map_aligned(cbuf_t id, unsigned long align, vaddr_t *pgaddr) { @@ -520,6 +522,7 @@ memmgr_shared_page_map_aligned(cbuf_t id, unsigned long align, vaddr_t *pgaddr) struct mm_page *p; unsigned int i; vaddr_t addr; + ps_lock_take(&map_lock); *pgaddr = 0; s = ss_span_get(id); @@ -537,6 +540,7 @@ memmgr_shared_page_map_aligned(cbuf_t id, unsigned long align, vaddr_t *pgaddr) if (*pgaddr == 0) *pgaddr = addr; align = PAGE_SIZE; // only the first page can have special alignment } + ps_lock_release(&map_lock); return s->n_pages; } diff --git a/src/components/implementation/nicmgr/dpdk/nicmgr.c b/src/components/implementation/nicmgr/dpdk/nicmgr.c index 61c4ca6235..5b843b9022 100644 --- a/src/components/implementation/nicmgr/dpdk/nicmgr.c +++ b/src/components/implementation/nicmgr/dpdk/nicmgr.c @@ -138,13 +138,6 @@ nic_get_a_packet_batch(u8_t batch_limit) session = &client_sessions[thd]; - obj = first_obj = shm_bm_alloc_net_pkt_buf(session->shemem_info.shm, &objid); - assert(obj); - first_objid = objid; - first_obj_pri = netshmem_get_pri(obj); - pkt_arr = (struct netshmem_meta_tuple *)&first_obj_pri->pkt_arr; - first_obj_pri->batch_len = 0; - // sync_sem_take(&session->sem); // assert(!pkt_ring_buf_empty(&session->pkt_ring_buf)); @@ -152,6 +145,13 @@ nic_get_a_packet_batch(u8_t batch_limit) sched_thd_yield(); } + obj = first_obj = shm_bm_alloc_net_pkt_buf(session->shemem_info.shm, &objid); + assert(obj); + first_objid = objid; + first_obj_pri = netshmem_get_pri(obj); + pkt_arr = (struct netshmem_meta_tuple *)&first_obj_pri->pkt_arr; + first_obj_pri->batch_len = 0; + while (batch_ct < batch_limit && pkt_ring_buf_dequeue(&session->pkt_ring_buf, &buf)) { assert(buf.pkt); if (likely(batch_ct > 0)) { @@ -340,9 +340,9 @@ nic_send_packet_batch(shm_bm_objid_t pktid) tx_packets[i] = mbuf; } - // sync_lock_take(&tx_lock[core_id - 1]); + sync_lock_take(&tx_lock[core_id - 1]); cos_dev_port_tx_burst(0, core_id - 1, tx_packets, batch_tc); - // sync_lock_release(&tx_lock[core_id - 1]); + sync_lock_release(&tx_lock[core_id - 1]); return 0; } diff --git a/src/components/implementation/simple_nf/noop_nf/main.c b/src/components/implementation/simple_nf/noop_nf/main.c index bedfc8f8fb..786bd58095 100644 --- a/src/components/implementation/simple_nf/noop_nf/main.c +++ b/src/components/implementation/simple_nf/noop_nf/main.c @@ -21,111 +21,6 @@ char rx_nf_buffer[4096]; #define RX_PROCESSING 0 #define TX_PROCESSING 0 -#if 0 -static void -tx_task(void) -{ - u16_t pkt_len; - shm_bm_objid_t objid; - - netio_shmem_map(netshmem_get_shm_id()); - nic_shmem_map(netshmem_get_shm_id()); - - shm_bm_objid_t first_objid; - struct netshmem_pkt_buf *first_obj; - struct netshmem_pkt_pri *first_obj_pri; - struct netshmem_meta_tuple *pkt_arr; - u8_t tx_batch_ct = 0; - struct netshmem_pkt_buf *tx_obj; - - nic_bind_port(0, 1); - - shm_bm_t tx_shmemd = 0; - tx_shmemd = netshmem_get_shm(); - - while(1) { -#if !TX_BATCH - objid = netio_get_a_packet(&pkt_len); - nic_send_packet(objid, 0, pkt_len); - -#else - u8_t batch_ct = 50; - - first_objid = objid = netio_get_a_packet_batch(batch_ct); - first_obj = shm_bm_transfer_net_pkt_buf(tx_shmemd, objid); - first_obj_pri = netshmem_get_pri(first_obj); - pkt_arr = (struct netshmem_meta_tuple *)&(first_obj_pri->pkt_arr); - tx_batch_ct = first_obj_pri->batch_len; -#if TX_PROCESSING - for (u8_t i = 0; i < tx_batch_ct; i++) { - pkt_len = pkt_arr[i].pkt_len; - objid = pkt_arr[i].obj_id; - tx_obj = shm_bm_transfer_net_pkt_buf(tx_shmemd, objid); - memcpy(tx_nf_buffer, netshmem_get_data_buf(tx_obj), pkt_len); - } -#endif - nic_send_packet_batch(first_objid); -#endif - } -} - -#endif - -#if 0 - -static void -rx_task(void) -{ - /* TODO: port NF applications here */ - shm_bm_objid_t objid; - struct netshmem_pkt_buf *rx_obj; - shm_bm_objid_t first_objid; - struct netshmem_pkt_buf *first_obj; - struct netshmem_pkt_pri *first_obj_pri; - struct netshmem_meta_tuple *pkt_arr; - u16_t pkt_len; - - u8_t batch_ct = 50; - - netio_shmem_map(netshmem_get_shm_id()); - nic_shmem_map(netshmem_get_shm_id()); - nic_bind_port(0, 0); - - int i = 0; - u64_t times = 0; - u64_t overhead = 0; - - shm_bm_t rx_shmemd = 0; - - rx_shmemd = netshmem_get_shm(); - while(1) - { - u8_t rx_batch_ct = 0; -#if !RX_BATCH - objid = nic_get_a_packet(&pkt_len); - netio_send_packet(objid, pkt_len); -#else - first_objid = nic_get_a_packet_batch(batch_ct); - - first_obj = shm_bm_transfer_net_pkt_buf(rx_shmemd, first_objid); - first_obj_pri = netshmem_get_pri(first_obj); - pkt_arr = (struct netshmem_meta_tuple *)&(first_obj_pri->pkt_arr); - rx_batch_ct = first_obj_pri->batch_len; -#if RX_PROCESSING - for (u8_t i = 0; i < rx_batch_ct; i++) { - pkt_len = pkt_arr[i].pkt_len; - objid = pkt_arr[i].obj_id; - rx_obj = shm_bm_transfer_net_pkt_buf(rx_shmemd, objid); - memcpy(rx_nf_buffer, netshmem_get_data_buf(rx_obj), pkt_len); - } -#endif - - netio_send_packet_batch(first_objid); -#endif - } -} -#endif - static void rx_task(void) { @@ -144,7 +39,7 @@ rx_task(void) nic_shmem_map(netshmem_get_shm_id()); ip = inet_addr("10.10.1.2"); - nic_bind_port(ip, 70); + nic_bind_port(ip, 0); int i = 0; u64_t times = 0; @@ -206,7 +101,7 @@ tx_task(void) ip = inet_addr("10.10.1.2"); nic_bind_port(ip, 71); - int svc_id = 70; + int svc_id = 0; netio_svc_update(svc_id, 0); diff --git a/src/components/implementation/simple_vmm/nf_multicore/Makefile b/src/components/implementation/simple_vmm/nf_multicore/Makefile new file mode 100644 index 0000000000..96d9511070 --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/Makefile @@ -0,0 +1,29 @@ +# Required variables used to drive the compilation process. It is OK +# for many of these to be empty. +# +# The set of interfaces that this component exports for use by other +# components. This is a list of the interface names. +INTERFACE_EXPORTS = netio +# The interfaces this component is dependent on for compilation (this +# is a list of directory names in interface/) +INTERFACE_DEPENDENCIES = contigmem netshmem nic sched nic +# The library dependencies this component is reliant on for +# compilation/linking (this is a list of directory names in lib/) +LIBRARY_DEPENDENCIES = ubench component kernel initargs vmrt shm_bm sync time ck +# Note: Both the interface and library dependencies should be +# *minimal*. That is to say that removing a dependency should cause +# the build to fail. The build system does not validate this +# minimality; that's on you! + +CFILES+=devices/serial/serial.c +CFILES+=devices/vpci/vpci.c +CFILES+=devices/vpci/vpci_io.c +CFILES+=devices/vpci/virtio_net_vpci.c +CFILES+=devices/vpci/virtio_net_io.c +CFILES+=devices/vpic/vpic.c +CFILES+=devices/vrtc/vrtc.c +CFILES+=devices/vps2/vps2.c + +C_OBJS+=$(CFILES:%.c=%.o) +COMP_FLAGS= -mavx -mavx2 -mfma -I$(LIBDIR)/dpdk/dpdk/build/install/include +include Makefile.subsubdir diff --git a/src/components/implementation/simple_vmm/nf_multicore/acrn_common.h b/src/components/implementation/simple_vmm/nf_multicore/acrn_common.h new file mode 100644 index 0000000000..b97561f61b --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/acrn_common.h @@ -0,0 +1,797 @@ +/* + * common definition + * + * Copyright (C) 2017-2022 Intel Corporation. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/** + * @file acrn_common.h + * + * @brief acrn common data structure for hypercall or ioctl + */ + +#ifndef ACRN_COMMON_H +#define ACRN_COMMON_H + +#include + +/* + * Common structures for ACRN/HSM/DM + */ + +/* + * IO request + */ + +#define ACRN_IO_REQUEST_MAX 16U +#define ACRN_ASYNCIO_MAX 64U + +#define ACRN_IOREQ_STATE_PENDING 0U +#define ACRN_IOREQ_STATE_COMPLETE 1U +#define ACRN_IOREQ_STATE_PROCESSING 2U +#define ACRN_IOREQ_STATE_FREE 3U + +#define ACRN_IOREQ_TYPE_PORTIO 0U +#define ACRN_IOREQ_TYPE_MMIO 1U +#define ACRN_IOREQ_TYPE_PCICFG 2U +#define ACRN_IOREQ_TYPE_WP 3U + +#define ACRN_IOREQ_DIR_READ 0U +#define ACRN_IOREQ_DIR_WRITE 1U + + + +/* IOAPIC device model info */ +#define VIOAPIC_RTE_NUM 48U /* vioapic pins */ + +#if VIOAPIC_RTE_NUM < 24U +#error "VIOAPIC_RTE_NUM must be larger than 23" +#endif + +/* Generic VM flags from guest OS */ +#define GUEST_FLAG_SECURE_WORLD_ENABLED (1UL << 0U) /* Whether secure world is enabled */ +#define GUEST_FLAG_LAPIC_PASSTHROUGH (1UL << 1U) /* Whether LAPIC is passed through */ +#define GUEST_FLAG_IO_COMPLETION_POLLING (1UL << 2U) /* Whether need hypervisor poll IO completion */ +#define GUEST_FLAG_HIDE_MTRR (1UL << 3U) /* Whether hide MTRR from VM */ +#define GUEST_FLAG_RT (1UL << 4U) /* Whether the vm is RT-VM */ +#define GUEST_FLAG_NVMX_ENABLED (1UL << 5U) /* Whether this VM supports nested virtualization */ +#define GUEST_FLAG_SECURITY_VM (1UL << 6U) /* Whether this VM needs to do security-vm related fixup (TPM2 and SMBIOS pt) */ +#define GUEST_FLAG_VCAT_ENABLED (1UL << 7U) /* Whether this VM supports vCAT */ +#define GUEST_FLAG_STATIC_VM (1UL << 8U) /* Whether this VM uses static VM configuration */ +#define GUEST_FLAG_TEE (1UL << 9U) /* Whether the VM is TEE VM */ +#define GUEST_FLAG_REE (1UL << 10U) /* Whether the VM is REE VM */ +#define GUEST_FLAG_PMU_PASSTHROUGH (1UL << 11U) /* Whether PMU is passed through */ + + +/* TODO: We may need to get this addr from guest ACPI instead of hardcode here */ +#define VIRTUAL_SLEEP_CTL_ADDR 0x400U /* Pre-launched VM uses ACPI reduced HW mode and sleep control register */ +#define VIRTUAL_PM1A_CNT_ADDR 0x404U +#define VIRTUAL_PM1A_SCI_EN 0x0001 +#define VIRTUAL_PM1A_SLP_TYP 0x1c00U +#define VIRTUAL_PM1A_SLP_EN 0x2000U +#define VIRTUAL_PM1A_ALWAYS_ZERO 0xc003 + +#define MAX_VM_NAME_LEN (16U) + +/** + * @brief Hypercall + * + * @addtogroup acrn_hypercall ACRN Hypercall + * @{ + */ + +/** + * @brief Representation of a MMIO request + */ +struct acrn_mmio_request { + /** + * @brief Direction of the access + * + * Either \p ACRN_IOREQ_DIR_READ or \p ACRN_IOREQ_DIR_WRITE. + */ + uint32_t direction; + + /** + * @brief reserved + */ + uint32_t reserved; + + /** + * @brief Address of the I/O access + */ + uint64_t address; + + /** + * @brief Width of the I/O access in byte + */ + uint64_t size; + + /** + * @brief The value read for I/O reads or to be written for I/O writes + */ + uint64_t value; +}; + +/** + * @brief Representation of a port I/O request + */ +struct acrn_pio_request { + /** + * @brief Direction of the access + * + * Either \p ACRN_IOREQ_DIR_READ or \p ACRN_IOREQ_DIR_WRITE. + */ + uint32_t direction; + + /** + * @brief reserved + */ + uint32_t reserved; + + /** + * @brief Port address of the I/O access + */ + uint64_t address; + + /** + * @brief Width of the I/O access in byte + */ + uint64_t size; + + /** + * @brief The value read for I/O reads or to be written for I/O writes + */ + uint32_t value; +}; + +/** + * @brief Representation of a PCI configuration space access + */ +struct acrn_pci_request { + /** + * @brief Direction of the access + * + * Either \p ACRN_IOREQ_DIR_READ or \p ACRN_IOREQ_DIR_WRITE. + */ + uint32_t direction; + + /** + * @brief Reserved + */ + uint32_t reserved[3];/* need keep same header fields with pio_request */ + + /** + * @brief Width of the I/O access in byte + */ + int64_t size; + + /** + * @brief The value read for I/O reads or to be written for I/O writes + */ + int32_t value; + + /** + * @brief The \p bus part of the BDF of the device + */ + int32_t bus; + + /** + * @brief The \p device part of the BDF of the device + */ + int32_t dev; + + /** + * @brief The \p function part of the BDF of the device + */ + int32_t func; + + /** + * @brief The register to be accessed in the configuration space + */ + int32_t reg; +}; + +/** + * @brief 256-byte I/O requests + * + * The state transitions of a I/O request are: + * + * FREE -> PENDING -> PROCESSING -> COMPLETE -> FREE -> ... + * + * When a request is in COMPLETE or FREE state, the request is owned by the + * hypervisor. Service VM (HSM or DM) shall not read or write the internals of the + * request except the state. + * + * When a request is in PENDING or PROCESSING state, the request is owned by + * Service VM. The hypervisor shall not read or write the request other than the state. + * + * Based on the rules above, a typical I/O request lifecycle should looks like + * the following. + * + * @verbatim embed:rst:leading-asterisk + * + * +-----------------------+-------------------------+----------------------+ + * | Service VM vCPU 0 | Service VM vCPU x | User VM vCPU y | + * +=======================+=========================+======================+ + * | | | Hypervisor: | + * | | | | + * | | | - Fill in type, | + * | | | addr, etc. | + * | | | - Pause User VM vCPU | + * | | | - Set state to | + * | | | PENDING (a) | + * | | | - Fire upcall to | + * | | | Service VM vCPU 0 | + * | | | | + * +-----------------------+-------------------------+----------------------+ + * | HSM: | | | + * | | | | + * | - Scan for pending | | | + * | requests | | | + * | - Set state to | | | + * | PROCESSING (b) | | | + * | - Assign requests to | | | + * | clients (c) | | | + * | | | | + * +-----------------------+-------------------------+----------------------+ + * | | Client: | | + * | | | | + * | | - Scan for assigned | | + * | | requests | | + * | | - Handle the | | + * | | requests (d) | | + * | | - Set state to COMPLETE | | + * | | - Notify the hypervisor | | + * | | | | + * +-----------------------+-------------------------+----------------------+ + * | | Hypervisor: | | + * | | | | + * | | - resume User VM vCPU y | | + * | | (e) | | + * | | | | + * +-----------------------+-------------------------+----------------------+ + * | | | Hypervisor: | + * | | | | + * | | | - Post-work (f) | + * | | | - set state to FREE | + * | | | | + * +-----------------------+-------------------------+----------------------+ + * + * @endverbatim + * + * Note that the following shall hold. + * + * 1. (a) happens before (b) + * 2. (c) happens before (d) + * 3. (e) happens before (f) + * 4. One vCPU cannot trigger another I/O request before the previous one has + * completed (i.e. the state switched to FREE) + * + * Accesses to the state of a acrn_io_request shall be atomic and proper barriers + * are needed to ensure that: + * + * 1. Setting state to PENDING is the last operation when issuing a request in + * the hypervisor, as the hypervisor shall not access the request any more. + * + * 2. Due to similar reasons, setting state to COMPLETE is the last operation + * of request handling in HSM or clients in Service VM. + */ +struct acrn_io_request { + /** + * @brief Type of this request. + * + * Byte offset: 0. + */ + uint32_t type; + + /** + * @brief Hypervisor will poll completion if set. + * + * Byte offset: 4. + */ + uint32_t completion_polling; + + /** + * @brief Reserved. + * + * Byte offset: 8. + */ + uint32_t reserved0[14]; + + /** + * @brief Details about this request. + * + * Byte offset: 64. + */ + union { + struct acrn_pio_request pio_request; + struct acrn_pci_request pci_request; + struct acrn_mmio_request mmio_request; + uint64_t data[8]; + } reqs; + + /** + * @brief Reserved. + * + * Byte offset: 128. + */ + uint32_t reserved1; + + /** + * @brief If this request has been handled by HSM driver. + * + * Byte offset: 132. + */ + int32_t kernel_handled; + + /** + * @brief The status of this request. + * + * Taking ACRN_IOREQ_STATE_xxx as values. + * + * Byte offset: 136. + */ + uint32_t processed; +}__attribute__((aligned(256))); + +struct acrn_io_request_buffer { + union { + struct acrn_io_request req_slot[ACRN_IO_REQUEST_MAX]; + int8_t reserved[4096]; + }; +}; + +struct acrn_asyncio_info { + uint32_t type; + uint64_t addr; + uint64_t fd; +}; + +/** + * @brief Info to create a VM, the parameter for HC_CREATE_VM hypercall + */ +struct acrn_vm_creation { + /** created vmid return to HSM. Keep it first field */ + uint16_t vmid; + + /** Reserved */ + uint16_t reserved0; + + /** VCPU numbers this VM want to create */ + uint16_t vcpu_num; + + /** Reserved */ + uint16_t reserved1; + + /** the name of this VM */ + uint8_t name[MAX_VM_NAME_LEN]; + + /* VM flag bits from Guest OS, now used + * GUEST_FLAG_SECURE_WORLD_ENABLED (1UL<<0) + */ + uint64_t vm_flag; + + uint64_t ioreq_buf; + + /** + * The least significant set bit is the PCPU # the VCPU 0 maps to; + * second set least significant bit is the PCPU # the VCPU 1 maps to; + * and so on... + */ + uint64_t cpu_affinity; +}; + +/* General-purpose register layout aligned with the general-purpose register idx + * when vmexit, such as vmexit due to CR access, refer to SMD Vol.3C 27-6. + */ +struct acrn_gp_regs { + uint64_t rax; + uint64_t rcx; + uint64_t rdx; + uint64_t rbx; + uint64_t rsp; + uint64_t rbp; + uint64_t rsi; + uint64_t rdi; + uint64_t r8; + uint64_t r9; + uint64_t r10; + uint64_t r11; + uint64_t r12; + uint64_t r13; + uint64_t r14; + uint64_t r15; +}; + +/* struct to define how the descriptor stored in memory. + * Refer SDM Vol3 3.5.1 "Segment Descriptor Tables" + * Figure 3-11 + */ +struct acrn_descriptor_ptr { + uint16_t limit; + uint64_t base; + uint16_t reserved[3]; /* align struct size to 64bit */ +} __packed; + +/** + * @brief registers info for vcpu. + */ +struct acrn_regs { + struct acrn_gp_regs gprs; + struct acrn_descriptor_ptr gdt; + struct acrn_descriptor_ptr idt; + + uint64_t rip; + uint64_t cs_base; + uint64_t cr0; + uint64_t cr4; + uint64_t cr3; + uint64_t ia32_efer; + uint64_t rflags; + uint64_t reserved_64[4]; + + uint32_t cs_ar; + uint32_t cs_limit; + uint32_t reserved_32[3]; + + /* don't change the order of following sel */ + uint16_t cs_sel; + uint16_t ss_sel; + uint16_t ds_sel; + uint16_t es_sel; + uint16_t fs_sel; + uint16_t gs_sel; + uint16_t ldt_sel; + uint16_t tr_sel; +}; + +/** + * @brief Info to set vcpu state + * + * the parameter for HC_SET_VCPU_STATE + */ +struct acrn_vcpu_regs { + /** the virtual CPU ID for the VCPU to set state */ + uint16_t vcpu_id; + + /** reserved space to make cpu_state aligned to 8 bytes */ + uint16_t reserved[3]; + + /** the structure to hold vcpu state */ + struct acrn_regs vcpu_regs; +}; + +/** Operation types for setting IRQ line */ +#define GSI_SET_HIGH 0U +#define GSI_SET_LOW 1U +#define GSI_RAISING_PULSE 2U +#define GSI_FALLING_PULSE 3U + +/** + * @brief Info to Set/Clear/Pulse a virtual IRQ line for a VM + * + * the parameter for HC_SET_IRQLINE hypercall + */ +struct acrn_irqline_ops { + uint32_t gsi; + uint32_t op; +}; + + +/** + * @brief Info to inject a MSI interrupt to VM + * + * the parameter for HC_INJECT_MSI hypercall + */ +struct acrn_msi_entry { + /** MSI addr[19:12] with dest VCPU ID */ + uint64_t msi_addr; + + /** MSI data[7:0] with vector */ + uint64_t msi_data; +}; + +/** + * @brief Info The power state data of a VCPU. + * + */ + +#define SPACE_SYSTEM_MEMORY 0U +#define SPACE_SYSTEM_IO 1U +#define SPACE_PCI_CONFIG 2U +#define SPACE_Embedded_Control 3U +#define SPACE_SMBUS 4U +#define SPACE_PLATFORM_COMM 10U +#define SPACE_FFixedHW 0x7FU + +struct acrn_acpi_generic_address { + uint8_t space_id; + uint8_t bit_width; + uint8_t bit_offset; + uint8_t access_size; + uint64_t address; +} __attribute__ ((__packed__)); + +struct acrn_cstate_data { + struct acrn_acpi_generic_address cx_reg; + uint8_t type; + uint32_t latency; + uint64_t power; +}; + +struct acrn_pstate_data { + uint64_t core_frequency; /* megahertz */ + uint64_t power; /* milliWatts */ + uint64_t transition_latency; /* microseconds */ + uint64_t bus_master_latency; /* microseconds */ + uint64_t control; /* control value */ + uint64_t status; /* success indicator */ +}; + +enum acrn_cpufreq_policy_type { + CPUFREQ_POLICY_PERFORMANCE, + CPUFREQ_POLICY_NOMINAL, +}; + +struct acrn_cpufreq_limits { + /* Performance levels for HWP */ + uint8_t guaranteed_hwp_lvl; + uint8_t highest_hwp_lvl; + uint8_t lowest_hwp_lvl; + /* Index for the p-state table _PSS */ + uint8_t nominal_pstate; + uint8_t performance_pstate; +}; + +struct acpi_sx_pkg { + uint8_t val_pm1a; + uint8_t val_pm1b; + uint16_t reserved; +} __attribute__((aligned(8))); + +struct pm_s_state_data { + struct acrn_acpi_generic_address pm1a_evt; + struct acrn_acpi_generic_address pm1b_evt; + struct acrn_acpi_generic_address pm1a_cnt; + struct acrn_acpi_generic_address pm1b_cnt; + struct acpi_sx_pkg s3_pkg; + struct acpi_sx_pkg s5_pkg; + uint32_t *wake_vector_32; + uint64_t *wake_vector_64; +} __attribute__((aligned(8))); + +/** + * @brief Info PM command from DM/HSM. + * + * The command would specify request type(e.g. get px count or data) for + * specific VM and specific VCPU with specific state number. + * For Px, PMCMD_STATE_NUM means Px number from 0 to (MAX_PSTATE - 1), + * For Cx, PMCMD_STATE_NUM means Cx entry index from 1 to MAX_CX_ENTRY. + */ +#define PMCMD_VMID_MASK 0xff000000U +#define PMCMD_VCPUID_MASK 0x00ff0000U +#define PMCMD_STATE_NUM_MASK 0x0000ff00U +#define PMCMD_TYPE_MASK 0x000000ffU + +#define PMCMD_VMID_SHIFT 24U +#define PMCMD_VCPUID_SHIFT 16U +#define PMCMD_STATE_NUM_SHIFT 8U + +enum acrn_pm_cmd_type { + ACRN_PMCMD_GET_PX_CNT, + ACRN_PMCMD_GET_PX_DATA, + ACRN_PMCMD_GET_CX_CNT, + ACRN_PMCMD_GET_CX_DATA, +}; + +/** + * @brief Info to get a VM interrupt count data + * + * the parameter for HC_VM_INTR_MONITOR hypercall + */ +#define MAX_PTDEV_NUM 24U +struct acrn_intr_monitor { + /** sub command for intr monitor */ + uint32_t cmd; + /** the count of this buffer to save */ + uint32_t buf_cnt; + + /** the buffer which save each interrupt count */ + uint64_t buffer[MAX_PTDEV_NUM * 2]; +} __attribute__((aligned(8))); + +/** cmd for intr monitor **/ +#define INTR_CMD_GET_DATA 0U +#define INTR_CMD_DELAY_INT 1U + +/* + * PRE_LAUNCHED_VM is launched by ACRN hypervisor, with LAPIC_PT; + * Service VM is launched by ACRN hypervisor, without LAPIC_PT; + * POST_LAUNCHED_VM is launched by ACRN devicemodel, with/without LAPIC_PT depends on usecases. + * + * Assumption: vm_configs array is completely initialized w.r.t. load_order member of + * acrn_vm_config for all the VMs. + */ +enum acrn_vm_load_order { + PRE_LAUNCHED_VM = 0, + SERVICE_VM, + POST_LAUNCHED_VM, /* Launched by Devicemodel in Service VM */ + MAX_LOAD_ORDER +}; + +struct acrn_vm_config_header { + enum acrn_vm_load_order load_order; + char name[MAX_VM_NAME_LEN]; + uint8_t reserved[2]; + uint8_t severity; + uint64_t cpu_affinity; + uint64_t guest_flags; + /* + * The following are hv-specific members and are thus opaque. + * vm_config_entry_size determines the real size of this structure. + */ +} __attribute__((aligned(8))); + +/** + * @brief Info to configure virtual root port + * + * Configuration passed to hv when adding a virtual root port which + * is used as PTM root + */ +struct vrp_config +{ + uint16_t phy_bdf; + uint8_t max_payload; /* dev cap's max payload */ + uint8_t primary_bus; + uint8_t secondary_bus; + uint8_t subordinate_bus; + uint8_t ptm_capable; + uint32_t ptm_cap_offset; +}; + +/* Type of PCI device assignment */ +#define ACRN_PTDEV_QUIRK_ASSIGN (1U << 0) + +#define ACRN_PCI_NUM_BARS 6U +/** + * @brief Info to assign or deassign PCI for a VM + * + */ +struct acrn_pcidev { + /** the type of the the pass-through PCI device */ + uint32_t type; + + /** virtual BDF# of the pass-through PCI device */ + uint16_t virt_bdf; + + /** physical BDF# of the pass-through PCI device */ + uint16_t phys_bdf; + + /** the PCI Interrupt Line, initialized by ACRN-DM, which is RO and + * ideally not used for pass-through MSI/MSI-x devices. + */ + uint8_t intr_line; + + /** the PCI Interrupt Pin, initialized by ACRN-DM, which is RO and + * ideally not used for pass-through MSI/MSI-x devices. + */ + uint8_t intr_pin; + + /** the base address of the PCI BAR, initialized by ACRN-DM. */ + uint32_t bar[ACRN_PCI_NUM_BARS]; +}; + +#define MMIODEV_RES_NUM 3 + +/** + * @brief Info to assign or deassign a MMIO device for a VM + */ +struct acrn_mmiodev { + char name[8]; + struct acrn_mmiores { + /** the gpa of the MMIO region for the MMIO device */ + uint64_t user_vm_pa; + /** the hpa of the MMIO region for the MMIO device: for post-launched VM + * it's pa in service vm; for pre-launched VM it's pa in HV. + */ + uint64_t host_pa; + /** the size of the MMIO region for the MMIO resource */ + uint64_t size; + /** the memory type of the MMIO region for the MMIO resource */ + uint64_t mem_type; + } res[MMIODEV_RES_NUM]; +}; + +/** + * @brief Info to create or destroy a virtual PCI or legacy device for a VM + * + * the parameter for HC_CREATE_VDEV or HC_DESTROY_VDEV hypercall + */ +struct acrn_vdev { + /* + * the identifier of the device, the low 32 bits represent the vendor + * id and device id of PCI device and the high 32 bits represent the + * device number of the legacy device + */ + union { + uint64_t value; + struct { + uint16_t vendor; + uint16_t device; + uint32_t legacy_id; + } fields; + } id; + + /* + * the slot of the device, if the device is a PCI device, the slot + * represents BDF, otherwise it represents legacy device slot number + */ + uint64_t slot; + + /** the IO resource address of the device, initialized by ACRN-DM. */ + uint32_t io_addr[ACRN_PCI_NUM_BARS]; + + /** the IO resource size of the device, initialized by ACRN-DM. */ + uint32_t io_size[ACRN_PCI_NUM_BARS]; + + /** the options for the virtual device, initialized by ACRN-DM. */ + uint8_t args[128]; +}; + +#define ACRN_ASYNCIO_PIO (0x01U) +#define ACRN_ASYNCIO_MMIO (0x02U) + +#define SBUF_MAGIC 0x5aa57aa71aa13aa3UL +#define SBUF_MAX_SIZE (1UL << 22U) +#define SBUF_HEAD_SIZE 64U + +/* sbuf flags */ +#define OVERRUN_CNT_EN (1U << 0U) /* whether overrun counting is enabled */ +#define OVERWRITE_EN (1U << 1U) /* whether overwrite is enabled */ + +/** + * (sbuf) head + buf (store (ele_num - 1) elements at most) + * buffer empty: tail == head + * buffer full: (tail + ele_size) % size == head + * + * Base of memory for elements + * | + * | + * ---------------------------------------------------------------------- + * | struct shared_buf | raw data (ele_size)| ... | raw data (ele_size) | + * ---------------------------------------------------------------------- + * | + * | + * struct shared_buf *buf + */ + +enum { + ACRN_TRACE = 0U, + ACRN_HVLOG, + ACRN_SEP, + ACRN_SOCWATCH, + /* The sbuf with above ids are created each pcpu */ + ACRN_SBUF_PER_PCPU_ID_MAX, + ACRN_ASYNCIO = 64, +}; + +/* Make sure sizeof(struct shared_buf) == SBUF_HEAD_SIZE */ +struct shared_buf { + uint64_t magic; + uint32_t ele_num; /* number of elements */ + uint32_t ele_size; /* sizeof of elements */ + uint32_t head; /* offset from base, to read */ + uint32_t tail; /* offset from base, to write */ + uint32_t flags; + uint32_t reserved; + uint32_t overrun_cnt; /* count of overrun */ + uint32_t size; /* ele_num * ele_size */ + uint32_t padding[6]; +}; + +/** + * @} + */ +#endif /* ACRN_COMMON_H */ diff --git a/src/components/implementation/simple_vmm/nf_multicore/acrn_types.h b/src/components/implementation/simple_vmm/nf_multicore/acrn_types.h new file mode 100644 index 0000000000..0d6b92fcd9 --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/acrn_types.h @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2018-2022 Intel Corporation. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef ACRN_TYPES_H +#define ACRN_TYPES_H + +#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) +#define __aligned(x) __attribute__((aligned(x))) +#define __packed __attribute__((packed)) +#define __unused __attribute__((unused)) + +#include + +/** Roundup (x/y) to ( x/y + (x%y) ? 1 : 0) **/ +#define INT_DIV_ROUNDUP(x, y) ((((x)+(y))-1)/(y)) + +/* Define standard data types. These definitions allow software components + * to perform in the same manner on different target platforms. + */ +typedef signed char int8_t; +typedef unsigned char uint8_t; +typedef signed short int16_t; +typedef unsigned short uint16_t; +typedef signed int int32_t; +typedef unsigned int uint32_t; +typedef unsigned long uint64_t; +typedef signed long int64_t; +typedef __builtin_va_list va_list; + +#ifndef NULL +#define NULL ((void *) 0) +#endif + +#ifndef true +#define true ((_Bool) 1) +#define false ((_Bool) 0) +#endif + +#ifndef UINT64_MAX +#define UINT64_MAX (0xffffffffffffffffUL) +#endif + +#ifndef UINT32_MAX +#define UINT32_MAX (0xffffffffU) +#endif + + +#endif /* INCLUDE_TYPES_H defined */ diff --git a/src/components/implementation/simple_vmm/nf_multicore/apicreg.h b/src/components/implementation/simple_vmm/nf_multicore/apicreg.h new file mode 100644 index 0000000000..0b8579ffb2 --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/apicreg.h @@ -0,0 +1,444 @@ +/*- + * Copyright (c) 1996, by Peter Wemm and Steve Passe + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. The name of the developer may NOT be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef APICREG_H +#define APICREG_H + +#include +/* + * Local && I/O APIC definitions. + */ + +/****************************************************************************** + * global defines, etc. + */ + + +/****************************************************************************** + * LOCAL APIC structure + */ +struct lapic_reg { + uint32_t v; + uint32_t pad[3]; +}; + +struct lapic_regs { /*OFFSET(Hex)*/ + struct lapic_reg rsv0[2]; + struct lapic_reg id; /*020*/ + struct lapic_reg version; /*030*/ + struct lapic_reg rsv1[4]; + struct lapic_reg tpr; /*080*/ + struct lapic_reg apr; /*090*/ + struct lapic_reg ppr; /*0A0*/ + struct lapic_reg eoi; /*0B0*/ + struct lapic_reg rrd; /*0C0*/ + struct lapic_reg ldr; /*0D0*/ + struct lapic_reg dfr; /*0EO*/ + struct lapic_reg svr; /*0F0*/ + struct lapic_reg isr[8]; /*100 -- 170*/ + struct lapic_reg tmr[8]; /*180 -- 1F0*/ + struct lapic_reg irr[8]; /*200 -- 270*/ + struct lapic_reg esr; /*280*/ + struct lapic_reg rsv2[6]; + struct lapic_reg lvt_cmci; /*2F0*/ + struct lapic_reg icr_lo; /*300*/ + struct lapic_reg icr_hi; /*310*/ + struct lapic_reg lvt[6]; /*320 -- 370*/ + struct lapic_reg icr_timer;/*380*/ + struct lapic_reg ccr_timer;/*390*/ + struct lapic_reg rsv3[4]; + struct lapic_reg dcr_timer;/*3E0*/ + struct lapic_reg self_ipi; /*3F0*/ + + /*roundup sizeof current struct to 4KB*/ + struct lapic_reg rsv5[192]; /*400 -- FF0*/ +} __attribute__((aligned(4096))); + +enum LAPIC_REGISTERS { + LAPIC_ID = 0x2, + LAPIC_VERSION = 0x3, + LAPIC_TPR = 0x8, + LAPIC_APR = 0x9, + LAPIC_PPR = 0xa, + LAPIC_EOI = 0xb, + LAPIC_LDR = 0xd, + LAPIC_DFR = 0xe, /* Not in x2APIC */ + LAPIC_SVR = 0xf, + LAPIC_ISR0 = 0x10, + LAPIC_ISR1 = 0x11, + LAPIC_ISR2 = 0x12, + LAPIC_ISR3 = 0x13, + LAPIC_ISR4 = 0x14, + LAPIC_ISR5 = 0x15, + LAPIC_ISR6 = 0x16, + LAPIC_ISR7 = 0x17, + LAPIC_TMR0 = 0x18, + LAPIC_TMR1 = 0x19, + LAPIC_TMR2 = 0x1a, + LAPIC_TMR3 = 0x1b, + LAPIC_TMR4 = 0x1c, + LAPIC_TMR5 = 0x1d, + LAPIC_TMR6 = 0x1e, + LAPIC_TMR7 = 0x1f, + LAPIC_IRR0 = 0x20, + LAPIC_IRR1 = 0x21, + LAPIC_IRR2 = 0x22, + LAPIC_IRR3 = 0x23, + LAPIC_IRR4 = 0x24, + LAPIC_IRR5 = 0x25, + LAPIC_IRR6 = 0x26, + LAPIC_IRR7 = 0x27, + LAPIC_ESR = 0x28, + LAPIC_LVT_CMCI = 0x2f, + LAPIC_ICR_LO = 0x30, + LAPIC_ICR_HI = 0x31, /* Not in x2APIC */ + LAPIC_LVT_TIMER = 0x32, + LAPIC_LVT_THERMAL = 0x33, + LAPIC_LVT_PCINT = 0x34, + LAPIC_LVT_LINT0 = 0x35, + LAPIC_LVT_LINT1 = 0x36, + LAPIC_LVT_ERROR = 0x37, + LAPIC_ICR_TIMER = 0x38, + LAPIC_CCR_TIMER = 0x39, + LAPIC_DCR_TIMER = 0x3e, + LAPIC_SELF_IPI = 0x3f, /* Only in x2APIC */ + LAPIC_EXT_FEATURES = 0x40, /* AMD */ + LAPIC_EXT_CTRL = 0x41, /* AMD */ + LAPIC_EXT_SEOI = 0x42, /* AMD */ + LAPIC_EXT_IER0 = 0x48, /* AMD */ + LAPIC_EXT_IER1 = 0x49, /* AMD */ + LAPIC_EXT_IER2 = 0x4a, /* AMD */ + LAPIC_EXT_IER3 = 0x4b, /* AMD */ + LAPIC_EXT_IER4 = 0x4c, /* AMD */ + LAPIC_EXT_IER5 = 0x4d, /* AMD */ + LAPIC_EXT_IER6 = 0x4e, /* AMD */ + LAPIC_EXT_IER7 = 0x4f, /* AMD */ + LAPIC_EXT_LVT0 = 0x50, /* AMD */ + LAPIC_EXT_LVT1 = 0x51, /* AMD */ + LAPIC_EXT_LVT2 = 0x52, /* AMD */ + LAPIC_EXT_LVT3 = 0x53, /* AMD */ +}; + +#define LAPIC_MEM_MUL 0x10 + +/* + * Although some registers are available on AMD processors only, + * it's not a big waste to reserve them on all platforms. + * However, we need to watch out for this space being assigned for + * non-APIC purposes in the future processor models. + */ +#define LAPIC_MEM_REGION ((LAPIC_EXT_LVT3 + 1) * LAPIC_MEM_MUL) + +/****************************************************************************** + * I/O APIC structure + */ + +struct ioapic { + uint32_t ioregsel; + uint32_t rsv0[3]; + uint32_t iowin; + uint32_t rsv1[3]; +}; + +/* + * Macros for bits in union ioapic_rte + */ +#define IOAPIC_RTE_MASK_CLR 0x0U /* Interrupt Mask: Clear */ +#define IOAPIC_RTE_MASK_SET 0x1U /* Interrupt Mask: Set */ + +#define IOAPIC_RTE_TRGRMODE_EDGE 0x0U /* Trigger Mode: Edge */ +#define IOAPIC_RTE_TRGRMODE_LEVEL 0x1U /* Trigger Mode: Level */ + +#define IOAPIC_RTE_REM_IRR 0x1U /* Remote IRR: Read-Only */ + +#define IOAPIC_RTE_INTPOL_AHI 0x0U /* Interrupt Polarity: active high */ +#define IOAPIC_RTE_INTPOL_ALO 0x1U /* Interrupt Polarity: active low */ + +#define IOAPIC_RTE_DELIVS 0x1U /* Delivery Status: Read-Only */ + +#define IOAPIC_RTE_DESTMODE_PHY 0x0U /* Destination Mode: Physical */ +#define IOAPIC_RTE_DESTMODE_LOGICAL 0x1U /* Destination Mode: Logical */ + +#define IOAPIC_RTE_DELMODE_FIXED 0x0U /* Delivery Mode: Fixed */ +#define IOAPIC_RTE_DELMODE_LOPRI 0x1U /* Delivery Mode: Lowest priority */ +#define IOAPIC_RTE_DELMODE_INIT 0x5U /* Delivery Mode: INIT signal */ +#define IOAPIC_RTE_DELMODE_EXINT 0x7U /* Delivery Mode: External INTerrupt */ + +/* IOAPIC Redirection Table (RTE) Entry structure */ +union ioapic_rte { + uint64_t full; + struct { + uint32_t lo_32; + uint32_t hi_32; + } u; + struct { + uint8_t vector:8; + uint64_t delivery_mode:3; + uint64_t dest_mode:1; + uint64_t delivery_status:1; + uint64_t intr_polarity:1; + uint64_t remote_irr:1; + uint64_t trigger_mode:1; + uint64_t intr_mask:1; + uint64_t rsvd_1:39; + uint8_t dest_field:8; + } bits __attribute__((packed)); + struct { + uint32_t vector:8; + uint32_t constant:3; + uint32_t intr_index_high:1; + uint32_t delivery_status:1; + uint32_t intr_polarity:1; + uint32_t remote_irr:1; + uint32_t trigger_mode:1; + uint32_t intr_mask:1; + uint32_t rsvd_1:15; + uint32_t rsvd_2:16; + uint32_t intr_format:1; + uint32_t intr_index_low:15; + } ir_bits __attribute__((packed)); +}; + +/****************************************************************************** + * various code 'logical' values + */ + +/****************************************************************************** + * LOCAL APIC defines + */ + +/* default physical locations of LOCAL (CPU) APICs */ +#define DEFAULT_APIC_BASE 0xfee00000UL + +/* constants relating to APIC ID registers */ +#define APIC_ID_MASK 0xff000000U +#define APIC_ID_SHIFT 24U +#define APIC_ID_CLUSTER 0xf0U +#define APIC_ID_CLUSTER_ID 0x0fU +#define APIC_MAX_CLUSTER 0xeU +#define APIC_MAX_INTRACLUSTER_ID 3 +#define APIC_ID_CLUSTER_SHIFT 4 + +/* fields in VER */ +#define APIC_VER_VERSION 0x000000ffU +#define APIC_VER_MAXLVT 0x00ff0000U +#define MAXLVTSHIFT 16U +#define APIC_VER_EOI_SUPPRESSION 0x01000000U +#define APIC_VER_AMD_EXT_SPACE 0x80000000U + +/* fields in LDR */ +#define APIC_LDR_RESERVED 0x00ffffffU + +/* fields in DFR */ +#define APIC_DFR_RESERVED 0x0fffffffU +#define APIC_DFR_MODEL_MASK 0xf0000000U +#define APIC_DFR_MODEL_FLAT 0xf0000000U +#define APIC_DFR_MODEL_CLUSTER 0x00000000U + +/* fields in SVR */ +#define APIC_SVR_VECTOR 0x000000ffU +#define APIC_SVR_VEC_PROG 0x000000f0U +#define APIC_SVR_VEC_FIX 0x0000000fU +#define APIC_SVR_ENABLE 0x00000100U +#define APIC_SVR_SWDIS 0x00000000U +#define APIC_SVR_SWEN 0x00000100U +#define APIC_SVR_FOCUS 0x00000200U +#define APIC_SVR_FEN 0x00000000U +#define APIC_SVR_FDIS 0x00000200U +#define APIC_SVR_EOI_SUPPRESSION 0x00001000U + +/* fields in TPR */ +#define APIC_TPR_PRIO 0x000000ffU +#define APIC_TPR_INT 0x000000f0U +#define APIC_TPR_SUB 0x0000000fU + +/* fields in ESR */ +#define APIC_ESR_SEND_CS_ERROR 0x00000001U +#define APIC_ESR_RECEIVE_CS_ERROR 0x00000002U +#define APIC_ESR_SEND_ACCEPT 0x00000004U +#define APIC_ESR_RECEIVE_ACCEPT 0x00000008U +#define APIC_ESR_SEND_ILLEGAL_VECTOR 0x00000020U +#define APIC_ESR_RECEIVE_ILLEGAL_VECTOR 0x00000040U +#define APIC_ESR_ILLEGAL_REGISTER 0x00000080U + +/* fields in ICR_LOW */ +#define APIC_VECTOR_MASK 0x000000ffU + +#define APIC_DELMODE_MASK 0x00000700U +#define APIC_DELMODE_FIXED 0x00000000U +#define APIC_DELMODE_LOWPRIO 0x00000100U +#define APIC_DELMODE_SMI 0x00000200U +#define APIC_DELMODE_RR 0x00000300U +#define APIC_DELMODE_NMI 0x00000400U +#define APIC_DELMODE_INIT 0x00000500U +#define APIC_DELMODE_STARTUP 0x00000600U +#define APIC_DELMODE_RESV 0x00000700U + +#define APIC_DESTMODE_MASK 0x00000800U +#define APIC_DESTMODE_PHY 0x00000000U +#define APIC_DESTMODE_LOG 0x00000800U + +#define APIC_DELSTAT_MASK 0x00001000U +#define APIC_DELSTAT_IDLE 0x00000000U +#define APIC_DELSTAT_PEND 0x00001000U + +#define APIC_RESV1_MASK 0x00002000U + +#define APIC_LEVEL_MASK 0x00004000U +#define APIC_LEVEL_DEASSERT 0x00000000U +#define APIC_LEVEL_ASSERT 0x00004000U + +#define APIC_TRIGMOD_MASK 0x00008000U +#define APIC_TRIGMOD_EDGE 0x00000000U +#define APIC_TRIGMOD_LEVEL 0x00008000U + +#define APIC_RRSTAT_MASK 0x00030000U +#define APIC_RRSTAT_INVALID 0x00000000U +#define APIC_RRSTAT_INPROG 0x00010000U +#define APIC_RRSTAT_VALID 0x00020000U +#define APIC_RRSTAT_RESV 0x00030000U + +#define APIC_DEST_MASK 0x000c0000U +#define APIC_DEST_NOSHORT 0x00000000U +#define APIC_DEST_SELF 0x00040000U +#define APIC_DEST_ALLISELF 0x00080000U +#define APIC_DEST_ALLESELF 0x000c0000U + +#define APIC_RESV2_MASK 0xfff00000U + +#define APIC_ICRLO_RESV_MASK (APIC_RESV1_MASK | APIC_RESV2_MASK) + +/* fields in LVT1/2 */ +#define APIC_LVT_VECTOR 0x000000ffU +#define APIC_LVT_DM 0x00000700U +#define APIC_LVT_DM_FIXED 0x00000000U +#define APIC_LVT_DM_SMI 0x00000200U +#define APIC_LVT_DM_NMI 0x00000400U +#define APIC_LVT_DM_INIT 0x00000500U +#define APIC_LVT_DM_EXTINT 0x00000700U +#define APIC_LVT_DS 0x00001000U +#define APIC_LVT_IIPP 0x00002000U +#define APIC_LVT_IIPP_INTALO 0x00002000U +#define APIC_LVT_IIPP_INTAHI 0x00000000U +#define APIC_LVT_RIRR 0x00004000U +#define APIC_LVT_TM 0x00008000U +#define APIC_LVT_M 0x00010000U + + +/* fields in LVT Timer */ +#define APIC_LVTT_VECTOR 0x000000ffU +#define APIC_LVTT_DS 0x00001000U +#define APIC_LVTT_M 0x00010000U +#define APIC_LVTT_TM 0x00060000U +#define APIC_LVTT_TM_ONE_SHOT 0x00000000U +#define APIC_LVTT_TM_PERIODIC 0x00020000U +#define APIC_LVTT_TM_TSCDLT 0x00040000U +#define APIC_LVTT_TM_RSRV 0x00060000U + +/* APIC timer current count */ +#define APIC_TIMER_MAX_COUNT 0xffffffffU + +/* fields in TDCR */ +#define APIC_TDCR_2 0x00U +#define APIC_TDCR_4 0x01U +#define APIC_TDCR_8 0x02U +#define APIC_TDCR_16 0x03U +#define APIC_TDCR_32 0x08U +#define APIC_TDCR_64 0x09U +#define APIC_TDCR_128 0x0aU +#define APIC_TDCR_1 0x0bU + +/* Constants related to AMD Extended APIC Features Register */ +#define APIC_EXTF_ELVT_MASK 0x00ff0000U +#define APIC_EXTF_ELVT_SHIFT 16 +#define APIC_EXTF_EXTID_CAP 0x00000004U +#define APIC_EXTF_SEIO_CAP 0x00000002U +#define APIC_EXTF_IER_CAP 0x00000001U + +/* LVT table indices */ +#define APIC_LVT_TIMER 0U +#define APIC_LVT_THERMAL 1U +#define APIC_LVT_PMC 2U +#define APIC_LVT_LINT0 3U +#define APIC_LVT_LINT1 4U +#define APIC_LVT_ERROR 5U +#define APIC_LVT_CMCI 6U +#define APIC_LVT_MAX APIC_LVT_CMCI + +/* AMD extended LVT constants, seem to be assigned by fiat */ +#define APIC_ELVT_IBS 0 /* Instruction based sampling */ +#define APIC_ELVT_MCA 1 /* MCE thresholding */ +#define APIC_ELVT_DEI 2 /* Deferred error interrupt */ +#define APIC_ELVT_SBI 3 /* Sideband interface */ +#define APIC_ELVT_MAX APIC_ELVT_SBI + +/****************************************************************************** + * I/O APIC defines + */ + +/* window register offset */ +#define IOAPIC_REGSEL 0x00U +#define IOAPIC_WINDOW 0x10U + +/* indexes into IO APIC */ +#define IOAPIC_ID 0x00U +#define IOAPIC_VER 0x01U +#define IOAPIC_ARB 0x02U +#define IOAPIC_REDTBL 0x10U +#define IOAPIC_REDTBL0 IOAPIC_REDTBL +#define IOAPIC_REDTBL1 (IOAPIC_REDTBL+0x02U) +#define IOAPIC_REDTBL2 (IOAPIC_REDTBL+0x04U) +#define IOAPIC_REDTBL3 (IOAPIC_REDTBL+0x06U) +#define IOAPIC_REDTBL4 (IOAPIC_REDTBL+0x08U) +#define IOAPIC_REDTBL5 (IOAPIC_REDTBL+0x0aU) +#define IOAPIC_REDTBL6 (IOAPIC_REDTBL+0x0cU) +#define IOAPIC_REDTBL7 (IOAPIC_REDTBL+0x0eU) +#define IOAPIC_REDTBL8 (IOAPIC_REDTBL+0x10U) +#define IOAPIC_REDTBL9 (IOAPIC_REDTBL+0x12U) +#define IOAPIC_REDTBL10 (IOAPIC_REDTBL+0x14U) +#define IOAPIC_REDTBL11 (IOAPIC_REDTBL+0x16U) +#define IOAPIC_REDTBL12 (IOAPIC_REDTBL+0x18U) +#define IOAPIC_REDTBL13 (IOAPIC_REDTBL+0x1aU) +#define IOAPIC_REDTBL14 (IOAPIC_REDTBL+0x1cU) +#define IOAPIC_REDTBL15 (IOAPIC_REDTBL+0x1eU) +#define IOAPIC_REDTBL16 (IOAPIC_REDTBL+0x20U) +#define IOAPIC_REDTBL17 (IOAPIC_REDTBL+0x22U) +#define IOAPIC_REDTBL18 (IOAPIC_REDTBL+0x24U) +#define IOAPIC_REDTBL19 (IOAPIC_REDTBL+0x26U) +#define IOAPIC_REDTBL20 (IOAPIC_REDTBL+0x28U) +#define IOAPIC_REDTBL21 (IOAPIC_REDTBL+0x2aU) +#define IOAPIC_REDTBL22 (IOAPIC_REDTBL+0x2cU) +#define IOAPIC_REDTBL23 (IOAPIC_REDTBL+0x2eU) + +#define IOAPIC_ID_MASK 0x0f000000U +#define IOAPIC_ID_SHIFT 24U + +/* fields in VER, for redirection entry */ +#define IOAPIC_MAX_RTE_MASK 0x00ff0000U +#define MAX_RTE_SHIFT 16U + +#endif /* APICREG_H */ diff --git a/src/components/implementation/simple_vmm/nf_multicore/atomic.h b/src/components/implementation/simple_vmm/nf_multicore/atomic.h new file mode 100644 index 0000000000..08de71b656 --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/atomic.h @@ -0,0 +1,152 @@ +/*- + * Copyright (c) 1998 Doug Rabson + * Copyright (c) 2018-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef ATOMIC_H +#define ATOMIC_H +#include +#define BUS_LOCK "lock ; " + +#define build_atomic_inc(name, size, type) \ +static inline void name(type *ptr) \ +{ \ + asm volatile(BUS_LOCK "inc" size " %0" \ + : "=m" (*ptr) \ + : "m" (*ptr)); \ +} +build_atomic_inc(atomic_inc16, "w", uint16_t) +build_atomic_inc(atomic_inc32, "l", uint32_t) +build_atomic_inc(atomic_inc64, "q", uint64_t) + +#define build_atomic_dec(name, size, type) \ +static inline void name(type *ptr) \ +{ \ + asm volatile(BUS_LOCK "dec" size " %0" \ + : "=m" (*ptr) \ + : "m" (*ptr)); \ +} +build_atomic_dec(atomic_dec16, "w", uint16_t) +build_atomic_dec(atomic_dec32, "l", uint32_t) +build_atomic_dec(atomic_dec64, "q", uint64_t) + +#define build_atomic_swap(name, size, type) \ +static inline type name(type *ptr, type v) \ +{ \ + asm volatile(BUS_LOCK "xchg" size " %1,%0" \ + : "+m" (*ptr), "+r" (v) \ + : \ + : "cc", "memory"); \ + return v; \ +} +build_atomic_swap(atomic_swap32, "l", uint32_t) +build_atomic_swap(atomic_swap64, "q", uint64_t) + + /* + * #define atomic_readandclear32(P) \ + * (return (*(uint32_t *)(P)); *(uint32_t *)(P) = 0U;) + */ +static inline uint32_t atomic_readandclear32(uint32_t *p) +{ + return atomic_swap32(p, 0U); +} + + /* + * #define atomic_readandclear64(P) \ + * (return (*(uint64_t *)(P)); *(uint64_t *)(P) = 0UL;) + */ +static inline uint64_t atomic_readandclear64(uint64_t *p) +{ + return atomic_swap64(p, 0UL); +} + +#define build_atomic_cmpxchg(name, size, type) \ +static inline type name(volatile type *ptr, type old, type new) \ +{ \ + type ret; \ + asm volatile(BUS_LOCK "cmpxchg" size " %2,%1" \ + : "=a" (ret), "+m" (*ptr) \ + : "r" (new), "0" (old) \ + : "memory"); \ + return ret; \ +} +build_atomic_cmpxchg(atomic_cmpxchg32, "l", uint32_t) +build_atomic_cmpxchg(atomic_cmpxchg64, "q", uint64_t) + +#define build_atomic_xadd(name, size, type) \ +static inline type name(type *ptr, type v) \ +{ \ + asm volatile(BUS_LOCK "xadd" size " %0,%1" \ + : "+r" (v), "+m" (*ptr) \ + : \ + : "cc", "memory"); \ + return v; \ + } +build_atomic_xadd(atomic_xadd16, "w", uint16_t) +build_atomic_xadd(atomic_xadd32, "l", int32_t) +build_atomic_xadd(atomic_xadd64, "q", int64_t) + +static inline int32_t atomic_add_return(int32_t *p, int32_t v) +{ + return (atomic_xadd32(p, v) + v); +} + +static inline int32_t atomic_sub_return(int32_t *p, int32_t v) +{ + return (atomic_xadd32(p, -v) - v); +} + +static inline int32_t atomic_inc_return(int32_t *v) +{ + return atomic_add_return(v, 1); +} + +static inline int32_t atomic_dec_return(int32_t *v) +{ + return atomic_sub_return(v, 1); +} + +static inline int64_t atomic_add64_return(int64_t *p, int64_t v) +{ + return (atomic_xadd64(p, v) + v); +} + +static inline int64_t atomic_sub64_return(int64_t *p, int64_t v) +{ + return (atomic_xadd64(p, -v) - v); +} + +static inline int64_t atomic_inc64_return(int64_t *v) +{ + return atomic_add64_return(v, 1); +} + +static inline int64_t atomic_dec64_return(int64_t *v) +{ + return atomic_sub64_return(v, 1); +} + +#endif /* ATOMIC_H*/ diff --git a/src/components/implementation/simple_vmm/nf_multicore/bits.h b/src/components/implementation/simple_vmm/nf_multicore/bits.h new file mode 100644 index 0000000000..f7f8b732e7 --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/bits.h @@ -0,0 +1,298 @@ +/*- + * Copyright (c) 1998 Doug Rabson + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef BITS_H +#define BITS_H +#include "atomic.h" + +/** + * + * INVALID_BIT_INDEX means when input paramter is zero, + * bit operations function can't find bit set and return + * the invalid bit index directly. + * + **/ +#define INVALID_BIT_INDEX 0xffffU + +/* + * + * fls32 - Find the Last (most significant) bit Set in value and + * return the bit index of that bit. + * + * Bits are numbered starting at 0,the least significant bit. + * A return value of INVALID_BIT_INDEX means return value is + * invalid bit index when the input argument was zero. + * + * Examples: + * fls32 (0x0) = INVALID_BIT_INDEX + * fls32 (0x01) = 0 + * fls32 (0x80) = 7 + * ... + * fls32 (0x80000001) = 31 + * + * @param value: 'uint32_t' type value + * + * @return value: zero-based bit index, INVALID_BIT_INDEX means + * when 'value' was zero, bit operations function can't find bit + * set and return the invalid bit index directly. + * + */ +static inline uint16_t fls32(uint32_t value) +{ + uint32_t ret; + asm volatile("bsrl %1,%0\n\t" + "jnz 1f\n\t" + "mov %2,%0\n" + "1:" : "=r" (ret) + : "rm" (value), "i" (INVALID_BIT_INDEX)); + return (uint16_t)ret; +} + +static inline uint16_t fls64(uint64_t value) +{ + uint64_t ret = 0UL; + asm volatile("bsrq %1,%0\n\t" + "jnz 1f\n\t" + "mov %2,%0\n" + "1:" : "=r" (ret) + : "rm" (value), "i" (INVALID_BIT_INDEX)); + return (uint16_t)ret; +} + +/* + * + * ffs64 - Find the First (least significant) bit Set in value(Long type) + * and return the index of that bit. + * + * Bits are numbered starting at 0,the least significant bit. + * A return value of INVALID_BIT_INDEX means that the return value is the inalid + * bit index when the input argument was zero. + * + * Examples: + * ffs64 (0x0) = INVALID_BIT_INDEX + * ffs64 (0x01) = 0 + * ffs64 (0xf0) = 4 + * ffs64 (0xf00) = 8 + * ... + * ffs64 (0x8000000000000001) = 0 + * ffs64 (0xf000000000000000) = 60 + * + * @param value: 'uint64_t' type value + * + * @return value: zero-based bit index, INVALID_BIT_INDEX means + * when 'value' was zero, bit operations function can't find bit + * set and return the invalid bit index directly. + * + */ +static inline uint16_t ffs64(uint64_t value) +{ + uint64_t ret; + asm volatile("bsfq %1,%0\n\t" + "jnz 1f\n\t" + "mov %2,%0\n" + "1:" : "=r" (ret) + : "rm" (value), "i" (INVALID_BIT_INDEX)); + return (uint16_t)ret; +} + +/*bit scan forward for the least significant bit '0'*/ +static inline uint16_t ffz64(uint64_t value) +{ + return ffs64(~value); +} + + +/* + * find the first zero bit in a uint64_t array. + * @pre: the size must be multiple of 64. + */ +static inline uint64_t ffz64_ex(const uint64_t *addr, uint64_t size) +{ + uint64_t ret = size; + uint64_t idx; + + for (idx = 0UL; (idx << 6U) < size; idx++) { + if (addr[idx] != ~0UL) { + ret = (idx << 6U) + ffz64(addr[idx]); + break; + } + } + + return ret; +} +/* + * Counts leading zeros. + * + * The number of leading zeros is defined as the number of + * most significant bits which are not '1'. E.g.: + * clz(0x80000000)==0 + * clz(0x40000000)==1 + * ... + * clz(0x00000001)==31 + * clz(0x00000000)==32 + * + * @param value:The 32 bit value to count the number of leading zeros. + * + * @return The number of leading zeros in 'value'. + */ +static inline uint16_t clz(uint32_t value) +{ + return ((value != 0U) ? (31U - fls32(value)) : 32U); +} + +/* + * Counts leading zeros (64 bit version). + * + * @param value:The 64 bit value to count the number of leading zeros. + * + * @return The number of leading zeros in 'value'. + */ +static inline uint16_t clz64(uint64_t value) +{ + return ((value != 0UL) ? (63U - fls64(value)) : 64U); +} + +/* + * (*addr) |= (1UL<=64, it will be truncated. + */ +#define build_bitmap_set(name, op_len, op_type, lock) \ +static inline void name(uint16_t nr_arg, volatile op_type *addr) \ +{ \ + uint16_t nr; \ + nr = nr_arg & ((8U * sizeof(op_type)) - 1U); \ + asm volatile(lock "or" op_len " %1,%0" \ + : "+m" (*addr) \ + : "r" ((op_type)(1UL<=64, it will be truncated. + */ +#define build_bitmap_clear(name, op_len, op_type, lock) \ +static inline void name(uint16_t nr_arg, volatile op_type *addr) \ +{ \ + uint16_t nr; \ + nr = nr_arg & ((8U * sizeof(op_type)) - 1U); \ + asm volatile(lock "and" op_len " %1,%0" \ + : "+m" (*addr) \ + : "r" ((op_type)(~(1UL<<(nr)))) \ + : "cc", "memory"); \ +} +build_bitmap_clear(bitmap_clear_nolock, "q", uint64_t, "") +build_bitmap_clear(bitmap_clear_lock, "q", uint64_t, BUS_LOCK) +build_bitmap_clear(bitmap32_clear_nolock, "l", uint32_t, "") +build_bitmap_clear(bitmap32_clear_lock, "l", uint32_t, BUS_LOCK) + +/* + * return !!((*addr) & (1UL<=64, it will + * be truncated. + */ +static inline bool bitmap_test(uint16_t nr, const volatile uint64_t *addr) +{ + int32_t ret = 0; + asm volatile("btq %q2,%1\n\tsbbl %0, %0" + : "=r" (ret) + : "m" (*addr), "r" ((uint64_t)(nr & 0x3fU)) + : "cc", "memory"); + return (ret != 0); +} + +static inline bool bitmap32_test(uint16_t nr, const volatile uint32_t *addr) +{ + int32_t ret = 0; + asm volatile("btl %2,%1\n\tsbbl %0, %0" + : "=r" (ret) + : "m" (*addr), "r" ((uint32_t)(nr & 0x1fU)) + : "cc", "memory"); + return (ret != 0); +} + +/* + * bool ret = (*addr) & (1UL<=64, it + * will be truncated. + */ +#define build_bitmap_testandset(name, op_len, op_type, lock) \ +static inline bool name(uint16_t nr_arg, volatile op_type *addr) \ +{ \ + uint16_t nr; \ + int32_t ret=0; \ + nr = nr_arg & ((8U * sizeof(op_type)) - 1U); \ + asm volatile(lock "bts" op_len " %2,%1\n\tsbbl %0,%0" \ + : "=r" (ret), "=m" (*addr) \ + : "r" ((op_type)nr) \ + : "cc", "memory"); \ + return (ret != 0); \ +} +build_bitmap_testandset(bitmap_test_and_set_nolock, "q", uint64_t, "") +build_bitmap_testandset(bitmap_test_and_set_lock, "q", uint64_t, BUS_LOCK) +build_bitmap_testandset(bitmap32_test_and_set_nolock, "l", uint32_t, "") +build_bitmap_testandset(bitmap32_test_and_set_lock, "l", uint32_t, BUS_LOCK) + +/* + * bool ret = (*addr) & (1UL<=64, + * it will be truncated. + */ +#define build_bitmap_testandclear(name, op_len, op_type, lock) \ +static inline bool name(uint16_t nr_arg, volatile op_type *addr) \ +{ \ + uint16_t nr; \ + int32_t ret=0; \ + nr = nr_arg & ((8U * sizeof(op_type)) - 1U); \ + asm volatile(lock "btr" op_len " %2,%1\n\tsbbl %0,%0" \ + : "=r" (ret), "=m" (*addr) \ + : "r" ((op_type)nr) \ + : "cc", "memory"); \ + return (ret != 0); \ +} +build_bitmap_testandclear(bitmap_test_and_clear_nolock, "q", uint64_t, "") +build_bitmap_testandclear(bitmap_test_and_clear_lock, "q", uint64_t, BUS_LOCK) +build_bitmap_testandclear(bitmap32_test_and_clear_nolock, "l", uint32_t, "") +build_bitmap_testandclear(bitmap32_test_and_clear_lock, "l", uint32_t, BUS_LOCK) + +static inline uint16_t bitmap_weight(uint64_t bits) +{ + return (uint16_t)__builtin_popcountl(bits); +} + +#endif /* BITS_H*/ diff --git a/src/components/implementation/simple_vmm/nf_multicore/cpu.h b/src/components/implementation/simple_vmm/nf_multicore/cpu.h new file mode 100755 index 0000000000..96f6a6ce4d --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/cpu.h @@ -0,0 +1,337 @@ +/*- + * Copyright (c) 1989, 1990 William F. Jolitz + * Copyright (c) 1990 The Regents of the University of California. + * Copyright (c) 2017-2022 Intel Corporation. + * + * This code is derived from software contributed to Berkeley by + * William Jolitz. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * from: @(#)segments.h 7.1 (Berkeley) 5/9/91 + * $FreeBSD$ + */ + +#ifndef CPU_H +#define CPU_H +#include +#include +#include +#include + +/* Define CPU stack alignment */ +#define CPU_STACK_ALIGN 16UL + +/* CR0 register definitions */ +#define CR0_PG (1UL<<31U) /* paging enable */ +#define CR0_CD (1UL<<30U) /* cache disable */ +#define CR0_NW (1UL<<29U) /* not write through */ +#define CR0_AM (1UL<<18U) /* alignment mask */ +#define CR0_WP (1UL<<16U) /* write protect */ +#define CR0_NE (1UL<<5U) /* numeric error */ +#define CR0_ET (1UL<<4U) /* extension type */ +#define CR0_TS (1UL<<3U) /* task switched */ +#define CR0_EM (1UL<<2U) /* emulation */ +#define CR0_MP (1UL<<1U) /* monitor coprocessor */ +#define CR0_PE (1UL<<0U) /* protected mode enabled */ + +/* CR3 register definitions */ +#define CR3_PWT (1UL<<3U) /* page-level write through */ +#define CR3_PCD (1UL<<4U) /* page-level cache disable */ + +/* CR4 register definitions */ +#define CR4_VME (1UL<<0U) /* virtual 8086 mode extensions */ +#define CR4_PVI (1UL<<1U) /* protected mode virtual interrupts */ +#define CR4_TSD (1UL<<2U) /* time stamp disable */ +#define CR4_DE (1UL<<3U) /* debugging extensions */ +#define CR4_PSE (1UL<<4U) /* page size extensions */ +#define CR4_PAE (1UL<<5U) /* physical address extensions */ +#define CR4_MCE (1UL<<6U) /* machine check enable */ +#define CR4_PGE (1UL<<7U) /* page global enable */ +#define CR4_PCE (1UL<<8U) +/* performance monitoring counter enable */ +#define CR4_OSFXSR (1UL<<9U) /* OS support for FXSAVE/FXRSTOR */ +#define CR4_OSXMMEXCPT (1UL<<10U) +/* OS support for unmasked SIMD floating point exceptions */ +#define CR4_UMIP (1UL<<11U) /* User-Mode Inst prevention */ +#define CR4_LA57 (1UL<<12U) /* 57-bit linear address */ +#define CR4_VMXE (1UL<<13U) /* VMX enable */ +#define CR4_SMXE (1UL<<14U) /* SMX enable */ +#define CR4_FSGSBASE (1UL<<16U) /* RD(FS|GS|FS)BASE inst */ +#define CR4_PCIDE (1UL<<17U) /* PCID enable */ +/* XSAVE and Processor Extended States enable bit */ +#define CR4_OSXSAVE (1UL<<18U) +#define CR4_KL (1UL<<19U) /* KeyLocker enable */ +#define CR4_SMEP (1UL<<20U) +#define CR4_SMAP (1UL<<21U) +#define CR4_PKE (1UL<<22U) /* Protect-key-enable */ +#define CR4_CET (1UL<<23U) /* Control-flow Enforcement Technology enable */ +#define CR4_PKS (1UL<<24U) /* Enable protection keys for supervisor-mode pages */ + +/* XCR0_SSE */ +#define XCR0_SSE (1UL<<1U) +/* XCR0_AVX */ +#define XCR0_AVX (1UL<<2U) +/* XCR0_BNDREGS */ +#define XCR0_BNDREGS (1UL<<3U) +/* XCR0_BNDCSR */ +#define XCR0_BNDCSR (1UL<<4U) +/* According to SDM Vol1 13.3: + * XCR0[63:10] and XCR0[8] are reserved. Executing the XSETBV instruction causes + * a general-protection fault if ECX = 0 and any corresponding bit in EDX:EAX + * is not 0. + */ +#define XCR0_RESERVED_BITS ((~((1UL << 10U) - 1UL)) | (1UL << 8U)) + + +/* + * Entries in the Interrupt Descriptor Table (IDT) + */ +#define IDT_DE 0U /* #DE: Divide Error */ +#define IDT_DB 1U /* #DB: Debug */ +#define IDT_NMI 2U /* Nonmaskable External Interrupt */ +#define IDT_BP 3U /* #BP: Breakpoint */ +#define IDT_OF 4U /* #OF: Overflow */ +#define IDT_BR 5U /* #BR: Bound Range Exceeded */ +#define IDT_UD 6U /* #UD: Undefined/Invalid Opcode */ +#define IDT_NM 7U /* #NM: No Math Coprocessor */ +#define IDT_DF 8U /* #DF: Double Fault */ +#define IDT_FPUGP 9U /* Coprocessor Segment Overrun */ +#define IDT_TS 10U /* #TS: Invalid TSS */ +#define IDT_NP 11U /* #NP: Segment Not Present */ +#define IDT_SS 12U /* #SS: Stack Segment Fault */ +#define IDT_GP 13U /* #GP: General Protection Fault */ +#define IDT_PF 14U /* #PF: Page Fault */ +#define IDT_MF 16U /* #MF: FPU Floating-Point Error */ +#define IDT_AC 17U /* #AC: Alignment Check */ +#define IDT_MC 18U /* #MC: Machine Check */ +#define IDT_XF 19U /* #XF: SIMD Floating-Point Exception */ +#define IDT_VE 20U /* #VE: Virtualization Exception */ + +/*Bits in EFER special registers */ +#define EFER_LMA 0x00000400U /* Long mode active (R) */ + +#define RFLAGS_C (1U<<0U) +#define RFLAGS_P (1U<<2U) +#define RFLAGS_A (1U<<4U) +#define RFLAGS_Z (1U<<6U) +#define RFLAGS_S (1U<<7U) +#define RFLAGS_O (1U<<11U) +#define RFLAGS_VM (1U<<17U) +#define RFLAGS_AC (1U<<18U) + +/* CPU clock frequencies (FSB) */ +#define CPU_FSB_83KHZ 83200 +#define CPU_FSB_100KHZ 99840 +#define CPU_FSB_133KHZ 133200 +#define CPU_FSB_166KHZ 166400 + +/* Time conversions */ +#define CPU_GHZ_TO_HZ 1000000000 +#define CPU_GHZ_TO_KHZ 1000000 +#define CPU_GHZ_TO_MHZ 1000 +#define CPU_MHZ_TO_HZ 1000000 +#define CPU_MHZ_TO_KHZ 1000 + + +/* Number of GPRs saved / restored for guest in VCPU structure */ +#define NUM_GPRS 16U + +#define XSAVE_STATE_AREA_SIZE 4096U +#define XSAVE_LEGACY_AREA_SIZE 512U +#define XSAVE_HEADER_AREA_SIZE 64U +#define XSAVE_EXTEND_AREA_SIZE (XSAVE_STATE_AREA_SIZE - \ + XSAVE_HEADER_AREA_SIZE - \ + XSAVE_LEGACY_AREA_SIZE) +#define XSAVE_COMPACTED_FORMAT (1UL << 63U) + +#define XSAVE_FPU (1UL << 0U) +#define XSAVE_SSE (1UL << 1U) + +#define CPU_CONTEXT_OFFSET_RAX 0U +#define CPU_CONTEXT_OFFSET_RCX 8U +#define CPU_CONTEXT_OFFSET_RDX 16U +#define CPU_CONTEXT_OFFSET_RBX 24U +#define CPU_CONTEXT_OFFSET_RSP 32U +#define CPU_CONTEXT_OFFSET_RBP 40U +#define CPU_CONTEXT_OFFSET_RSI 48U +#define CPU_CONTEXT_OFFSET_RDI 56U +#define CPU_CONTEXT_OFFSET_R8 64U +#define CPU_CONTEXT_OFFSET_R9 72U +#define CPU_CONTEXT_OFFSET_R10 80U +#define CPU_CONTEXT_OFFSET_R11 88U +#define CPU_CONTEXT_OFFSET_R12 96U +#define CPU_CONTEXT_OFFSET_R13 104U +#define CPU_CONTEXT_OFFSET_R14 112U +#define CPU_CONTEXT_OFFSET_R15 120U +#define CPU_CONTEXT_OFFSET_CR0 128U +#define CPU_CONTEXT_OFFSET_CR2 136U +#define CPU_CONTEXT_OFFSET_CR4 144U +#define CPU_CONTEXT_OFFSET_RIP 152U +#define CPU_CONTEXT_OFFSET_RFLAGS 160U +#define CPU_CONTEXT_OFFSET_IA32_SPEC_CTRL 168U +#define CPU_CONTEXT_OFFSET_IA32_EFER 176U +#define CPU_CONTEXT_OFFSET_EXTCTX_START 184U +#define CPU_CONTEXT_OFFSET_CR3 184U +#define CPU_CONTEXT_OFFSET_IDTR 192U +#define CPU_CONTEXT_OFFSET_LDTR 216U + +#ifndef ASSEMBLER + +#define ALL_CPUS_MASK ((1UL << get_pcpu_nums()) - 1UL) +#define AP_MASK (ALL_CPUS_MASK & ~(1UL << BSP_CPU_ID)) + +/** + * + * Identifiers for architecturally defined registers. + * + * These register names is used in condition statement. + * Within the following groups,register name need to be + * kept in order: + * General register names group (CPU_REG_RAX~CPU_REG_R15); + * Non general register names group (CPU_REG_CR0~CPU_REG_GDTR); + * Segement register names group (CPU_REG_ES~CPU_REG_GS). + */ +enum cpu_reg_name { + /* General purpose register layout should align with + * struct acrn_gp_regs + */ + CPU_REG_RAX, + CPU_REG_RCX, + CPU_REG_RDX, + CPU_REG_RBX, + CPU_REG_RSP, + CPU_REG_RBP, + CPU_REG_RSI, + CPU_REG_RDI, + CPU_REG_R8, + CPU_REG_R9, + CPU_REG_R10, + CPU_REG_R11, + CPU_REG_R12, + CPU_REG_R13, + CPU_REG_R14, + CPU_REG_R15, + + CPU_REG_CR0, + CPU_REG_CR2, + CPU_REG_CR3, + CPU_REG_CR4, + CPU_REG_DR7, + CPU_REG_RIP, + CPU_REG_RFLAGS, + /*CPU_REG_NATURAL_LAST*/ + CPU_REG_EFER, + CPU_REG_PDPTE0, + CPU_REG_PDPTE1, + CPU_REG_PDPTE2, + CPU_REG_PDPTE3, + /*CPU_REG_64BIT_LAST,*/ + CPU_REG_ES, + CPU_REG_CS, + CPU_REG_SS, + CPU_REG_DS, + CPU_REG_FS, + CPU_REG_GS, + CPU_REG_LDTR, + CPU_REG_TR, + CPU_REG_IDTR, + CPU_REG_GDTR + /*CPU_REG_LAST*/ +}; + +/**********************************/ +/* EXTERNAL VARIABLES */ +/**********************************/ + +/* In trampoline range, hold the jump target which trampline will jump to */ +extern uint64_t main_entry[1]; +extern uint64_t secondary_cpu_stack[1]; + +/* + * To support per_cpu access, we use a special struct "per_cpu_region" to hold + * the pattern of per CPU data. And we allocate memory for per CPU data + * according to multiple this struct size and pcpu number. + * + * +-------------------+------------------+---+------------------+ + * | percpu for pcpu0 | percpu for pcpu1 |...| percpu for pcpuX | + * +-------------------+------------------+---+------------------+ + * ^ ^ + * | | + * + * + * To access per cpu data, we use: + * per_cpu_base_ptr + sizeof(struct per_cpu_region) * curr_pcpu_id + * + offset_of_member_per_cpu_region + * to locate the per cpu data. + */ + +/* Boot CPU ID */ +#define BSP_CPU_ID 0U + +/** + *The invalid cpu_id (INVALID_CPU_ID) is error + *code for error handling, this means that + *caller can't find a valid physical cpu + *or virtual cpu. + */ +#define INVALID_CPU_ID 0xffffU +/** + *The broadcast id (BROADCAST_CPU_ID) + *used to notify all valid phyiscal cpu + *or virtual cpu. + */ +#define BROADCAST_CPU_ID 0xfffeU + +struct descriptor_table { + uint16_t limit; + uint64_t base; +} __packed; + +/* CPU states defined */ +enum pcpu_boot_state { + PCPU_STATE_RESET = 0U, + PCPU_STATE_INITIALIZING, + PCPU_STATE_RUNNING, + PCPU_STATE_HALTED, + PCPU_STATE_DEAD, +}; + +#define NEED_OFFLINE (1U) +#define NEED_SHUTDOWN_VM (2U) +void make_pcpu_offline(uint16_t pcpu_id); +bool need_offline(uint16_t pcpu_id); + +struct segment_sel { + uint16_t selector; + uint64_t base; + uint32_t limit; + uint32_t attr; +}; +#else /* ASSEMBLER defined */ + +#endif /* ASSEMBLER defined */ + +#endif /* CPU_H */ diff --git a/src/components/implementation/simple_vmm/nf_multicore/cpu_caps.h b/src/components/implementation/simple_vmm/nf_multicore/cpu_caps.h new file mode 100644 index 0000000000..466a024840 --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/cpu_caps.h @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2018-2022 Intel Corporation. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef CPUINFO_H +#define CPUINFO_H + +#define MAX_PSTATE 20U /* max num of supported Px count */ +#define MAX_CSTATE 8U /* max num of supported Cx count */ +/* We support MAX_CSTATE num of Cx, means have (MAX_CSTATE - 1) Cx entries, + * i.e. supported Cx entry index range from 1 to MAX_CX_ENTRY. + */ +#define MAX_CX_ENTRY (MAX_CSTATE - 1U) + +/* CPUID feature words */ +#define FEAT_1_ECX 0U /* CPUID[1].ECX */ +#define FEAT_1_EDX 1U /* CPUID[1].EDX */ +#define FEAT_7_0_EBX 2U /* CPUID[EAX=7,ECX=0].EBX */ +#define FEAT_7_0_ECX 3U /* CPUID[EAX=7,ECX=0].ECX */ +#define FEAT_7_0_EDX 4U /* CPUID[EAX=7,ECX=0].EDX */ +#define FEAT_8000_0001_ECX 5U /* CPUID[8000_0001].ECX */ +#define FEAT_8000_0001_EDX 6U /* CPUID[8000_0001].EDX */ +#define FEAT_8000_0007_EDX 7U /* CPUID[8000_0007].EDX */ +#define FEAT_8000_0008_EBX 8U /* CPUID[8000_0008].EBX */ +#define FEAT_D_0_EAX 9U /* CPUID[D][0].EAX */ +#define FEAT_D_0_EDX 10U /* CPUID[D][0].EDX */ +#define FEAT_D_1_EAX 11U /* CPUID[D][1].EAX */ +#define FEAT_D_1_ECX 13U /* CPUID[D][1].ECX */ +#define FEAT_D_1_EDX 14U /* CPUID[D][1].EDX */ +#define FEAT_7_2_EDX 15U /* CPUID[EAX=7,ECX=2].EDX */ +#define FEATURE_WORDS 16U + +struct cpuinfo_x86 { + /* SDM 2-2 Vol.4 Table 2-1 uses DisplayFamily_DisplayModel to + * distinguish Processor Families/Processor Number Series. + */ + uint8_t displayfamily, displaymodel; + uint8_t virt_bits; + uint8_t phys_bits; + uint32_t cpuid_level; + uint32_t extended_cpuid_level; + uint64_t physical_address_mask; + uint32_t cpuid_leaves[FEATURE_WORDS]; + char model_name[64]; +}; + +bool has_monitor_cap(void); +bool disable_host_monitor_wait(void); +bool is_apl_platform(void); +bool pcpu_has_cap(uint32_t bit); +bool pcpu_has_vmx_ept_vpid_cap(uint64_t bit_mask); +bool is_apl_platform(void); +bool has_core_cap(uint32_t bit_mask); +bool is_ac_enabled(void); +bool is_gp_enabled(void); +void init_pcpu_capabilities(void); +void init_pcpu_model_name(void); +int32_t detect_hardware_support(void); +struct cpuinfo_x86 *get_pcpu_info(void); + +/* The bits of MSR IA32_CORE_CAPABILITIES */ +#define CORE_CAP_SPLIT_LOCK (1U << 5U) /* support #AC for Split-locked Access */ +#define CORE_CAP_UC_LOCK (1U << 4U) /* support #GP for non-guaranteed-atomic-locked access at Non-WB memory */ + + +#endif /* CPUINFO_H */ diff --git a/src/components/implementation/simple_vmm/nf_multicore/cpuid.h b/src/components/implementation/simple_vmm/nf_multicore/cpuid.h new file mode 100644 index 0000000000..cd6bfa93ad --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/cpuid.h @@ -0,0 +1,186 @@ +/* + * Copyright (C) 2018-2022 Intel Corporation. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* +* cpuid.h +* +* Created on: Jan 4, 2018 +* Author: don +*/ + +#ifndef CPUID_H_ +#define CPUID_H_ + +/* CPUID bit definitions */ +#define CPUID_ECX_SSE3 (1U<<0U) +#define CPUID_ECX_PCLMUL (1U<<1U) +#define CPUID_ECX_DTES64 (1U<<2U) +#define CPUID_ECX_MONITOR (1U<<3U) +#define CPUID_ECX_DS_CPL (1U<<4U) +#define CPUID_ECX_VMX (1U<<5U) +#define CPUID_ECX_SMX (1U<<6U) +#define CPUID_ECX_EST (1U<<7U) +#define CPUID_ECX_TM2 (1U<<8U) +#define CPUID_ECX_SSSE3 (1U<<9U) +#define CPUID_ECX_CID (1U<<10U) +#define CPUID_ECX_SDBG (1U<<11U) +#define CPUID_ECX_FMA (1U<<12U) +#define CPUID_ECX_CX16 (1U<<13U) +#define CPUID_ECX_ETPRD (1U<<14U) +#define CPUID_ECX_PDCM (1U<<15U) +#define CPUID_ECX_DCA (1U<<18U) +#define CPUID_ECX_SSE4_1 (1U<<19U) +#define CPUID_ECX_SSE4_2 (1U<<20U) +#define CPUID_ECX_x2APIC (1U<<21U) +#define CPUID_ECX_MOVBE (1U<<22U) +#define CPUID_ECX_POPCNT (1U<<23U) +#define CPUID_ECX_AES (1U<<25U) +#define CPUID_ECX_XSAVE (1U<<26U) +#define CPUID_ECX_OSXSAVE (1U<<27U) +#define CPUID_ECX_AVX (1U<<28U) +#define CPUID_ECX_HV (1U<<31U) +#define CPUID_ECX_MWAIT (1U<<0U) +#define CPUID_ECX_MWAIT_INT (1U<<1U) +#define CPUID_EDX_FPU (1U<<0U) +#define CPUID_EDX_VME (1U<<1U) +#define CPUID_EDX_DE (1U<<2U) +#define CPUID_EDX_PSE (1U<<3U) +#define CPUID_EDX_TSC (1U<<4U) +#define CPUID_EDX_MSR (1U<<5U) +#define CPUID_EDX_PAE (1U<<6U) +#define CPUID_EDX_MCE (1U<<7U) +#define CPUID_EDX_CX8 (1U<<8U) +#define CPUID_EDX_APIC (1U<<9U) +#define CPUID_EDX_SEP (1U<<11U) +#define CPUID_EDX_MTRR (1U<<12U) +#define CPUID_EDX_PGE (1U<<13U) +#define CPUID_EDX_MCA (1U<<14U) +#define CPUID_EDX_CMOV (1U<<15U) +#define CPUID_EDX_PAT (1U<<16U) +#define CPUID_EDX_PSE36 (1U<<17U) +#define CPUID_EDX_PSN (1U<<18U) +#define CPUID_EDX_CLF (1U<<19U) +#define CPUID_EDX_DTES (1U<<21U) +#define CPUID_EDX_ACPI (1U<<22U) +#define CPUID_EDX_MMX (1U<<23U) +#define CPUID_EDX_FXSR (1U<<24U) +#define CPUID_EDX_SSE (1U<<25U) +#define CPUID_EDX_SSE2 (1U<<26U) +#define CPUID_EDX_SS (1U<<27U) +#define CPUID_EDX_HTT (1U<<28U) +#define CPUID_EDX_TM1 (1U<<29U) +#define CPUID_EDX_IA64 (1U<<30U) +#define CPUID_EDX_PBE (1U<<31U) + +/* CPUID.06H:EAX.DTHERM */ +#define CPUID_EAX_DTHERM (1U<<0U) +/* CPUID.06H:EAX.HWP */ +#define CPUID_EAX_HWP (1U<<7U) +/* CPUID.06H:EAX.HWP_Notification */ +#define CPUID_EAX_HWP_N (1U<<8U) +/* CPUID.06H:EAX.HWP_Activity_Window */ +#define CPUID_EAX_HWP_AW (1U<<9U) +/* CPUID.06H:EAX.HWP_Energy_Performance_Preference */ +#define CPUID_EAX_HWP_EPP (1U<<10U) +/* CPUID.06H:EAX.HWP_Package_Level_Request */ +#define CPUID_EAX_HWP_PLR (1U<<11U) +/* CPUID.06H:ECX.Hardware_Coordination_Feedback_Capability */ +#define CPUID_ECX_HCFC (1U<<0U) +/* CPUID.07H:EBX.FSGSBASE*/ +#define CPUID_EBX_FSGSBASE (1U<<0U) +/* CPUID.07H:EBX.TSC_ADJUST*/ +#define CPUID_EBX_TSC_ADJ (1U<<1U) +/* CPUID.07H:EBX.SGX */ +#define CPUID_EBX_SGX (1U<<2U) +/* CPUID.07H:EBX.SMEP*/ +#define CPUID_EBX_SMEP (1U<<7U) +/* CPUID.07H:EBX.MPX */ +#define CPUID_EBX_MPX (1U<<14U) +/* CPUID.07H:EBX.SMAP*/ +#define CPUID_EBX_SMAP (1U<<20U) +/* CPUID.07H:ECX.UMIP */ +#define CPUID_ECX_UMIP (1U<<2U) +/* CPUID.07H:ECX.PKE */ +#define CPUID_ECX_PKE (1U<<3U) +/* CPUID.07H:ECX.WAITPKG */ +#define CPUID_ECX_WAITPKG (1U<<5U) +/* CPUID.07H:ECX.CET_SS */ +#define CPUID_ECX_CET_SS (1U<<7U) +/* CPUID.07H:ECX.LA57 */ +#define CPUID_ECX_LA57 (1U<<16U) +/* CPUID.07H:ECX.SGX_LC*/ +#define CPUID_ECX_SGX_LC (1U<<30U) +/* CPUID.07H:ECX.PKS*/ +#define CPUID_ECX_PKS (1U<<31U) +/* CPUID.07H:EDX.CET_IBT */ +#define CPUID_EDX_CET_IBT (1U<<20U) +/* CPUID.07H:EDX.IBRS_IBPB*/ +#define CPUID_EDX_IBRS_IBPB (1U<<26U) +/* CPUID.07H:EDX.STIBP*/ +#define CPUID_EDX_STIBP (1U<<27U) +/* CPUID.80000001H:EDX.Page1GB*/ +#define CPUID_EDX_PAGE1GB (1U<<26U) +/* CPUID.07H:EBX.INVPCID*/ +#define CPUID_EBX_INVPCID (1U<<10U) +/* CPUID.07H:EBX.PQM */ +#define CPUID_EBX_PQM (1U<<12U) +/* CPUID.07H:EBX.PQE */ +#define CPUID_EBX_PQE (1U<<15U) +/* CPUID.07H:EBX.INTEL_PROCESSOR_TRACE */ +#define CPUID_EBX_PROC_TRC (1U<<25U) +/* CPUID.01H:ECX.PCID*/ +#define CPUID_ECX_PCID (1U<<17U) +/* CPUID.0DH.EAX.XCR0_BNDREGS */ +#define CPUID_EAX_XCR0_BNDREGS (1U<<3U) +/* CPUID.0DH.EAX.XCR0_BNDCSR */ +#define CPUID_EAX_XCR0_BNDCSR (1U<<4U) +/* CPUID.0DH.ECX.CET_U_STATE */ +#define CPUID_ECX_CET_U_STATE (1U<<11U) +/* CPUID.0DH.ECX.CET_S_STATE */ +#define CPUID_ECX_CET_S_STATE (1U<<12U) +/* CPUID.12H.EAX.SGX1 */ +#define CPUID_EAX_SGX1 (1U<<0U) +/* CPUID.12H.EAX.SGX2 */ +#define CPUID_EAX_SGX2 (1U<<1U) +/* CPUID.19H.EBX.KL_AES_ENABLED */ +#define CPUID_EBX_KL_AES_EN (1U<<0U) +/* CPUID.19H.EBX.KL_BACKUP_MSR */ +#define CPUID_EBX_KL_BACKUP_MSR (1U<<4U) +/* CPUID.19H.ECX.KL_NOBACKUP */ +#define CPUID_ECX_KL_NOBACKUP (1U<<0U) +/* CPUID.19H.ECX.KL_RANDOM_KS */ +#define CPUID_ECX_KL_RANDOM_KS (1U<<1U) +/* CPUID.80000001H.EDX.XD_BIT_AVAILABLE */ +#define CPUID_EDX_XD_BIT_AVIL (1U<<20U) + +/* CPUID source operands */ +#define CPUID_VENDORSTRING 0U +#define CPUID_FEATURES 1U +#define CPUID_TLB 2U +#define CPUID_SERIALNUM 3U +#define CPUID_EXTEND_FEATURE 7U +#define CPUID_XSAVE_FEATURES 0xDU +#define CPUID_RDT_ALLOCATION 0x10U +#define CPUID_MAX_EXTENDED_FUNCTION 0x80000000U +#define CPUID_EXTEND_FUNCTION_1 0x80000001U +#define CPUID_EXTEND_FUNCTION_2 0x80000002U +#define CPUID_EXTEND_FUNCTION_3 0x80000003U +#define CPUID_EXTEND_FUNCTION_4 0x80000004U +#define CPUID_EXTEND_INVA_TSC 0x80000007U +#define CPUID_EXTEND_ADDRESS_SIZE 0x80000008U + +static inline void cpuid_subleaf(uint32_t leaf, uint32_t subleaf, + uint32_t *eax, uint32_t *ebx, + uint32_t *ecx, uint32_t *edx) +{ + /* Execute CPUID instruction and save results */ + asm volatile("cpuid":"=a"(*eax), "=b"(*ebx), + "=c"(*ecx), "=d"(*edx) + : "a" (leaf), "c" (subleaf) + : "memory"); +} + +#endif /* CPUID_H_ */ diff --git a/src/components/implementation/simple_vmm/nf_multicore/devices/serial/serial.c b/src/components/implementation/simple_vmm/nf_multicore/devices/serial/serial.c new file mode 100644 index 0000000000..41044b056d --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/devices/serial/serial.c @@ -0,0 +1,56 @@ +#include "serial.h" + +static u8_t serial_data[0x08]; +static u8_t send_intr_enable = 0; + +void +serial_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu) +{ + assert(port <= SERIAL_PORT_MAX && port >= SERIAL_PORT_MIN); + assert(sz == IO_BYTE); + + if (dir == IO_IN) { + vcpu->shared_region->ax = serial_data[port - SERIAL_PORT_MIN]; + } else if (dir == IO_OUT) { + serial_data[port - SERIAL_PORT_MIN] = (u8_t)vcpu->shared_region->ax; + switch (port) + { + + case SERIAL_PORT1: + printc("%c", (u8_t)vcpu->shared_region->ax); + if (send_intr_enable) { + /* + * TODO: correctly handle serial output(eg: multiple vcpu case) and inject serial interrupt, + * with io apic, 34 is serial8250_interrupt vector. + */ +#if VMX_SUPPORT_POSTED_INTR + vlapic_set_intr(vcpu, 34, 0); +#else + lapic_intr_inject(vcpu, 34, 1); +#endif + serial_data[SERIAL_IIR - SERIAL_PORT_MIN] = 0x2; + serial_data[MODEM_STATUS_REGISTER - SERIAL_PORT_MIN] = 0x20; + serial_data[SERIAL_LSR - SERIAL_PORT_MIN] = 0x60; + } + break; + case SERIAL_IER: + if (0x2 & (u8_t)vcpu->shared_region->ax) { + send_intr_enable = 1; + } else { + send_intr_enable = 0; + } + break; + } + } else { + VM_PANIC(vcpu); + } + + return; +} + +static void __attribute__((constructor)) +init(void) +{ + memset(&serial_data, 0, sizeof(serial_data)); + serial_data[SERIAL_LSR - SERIAL_PORT_MIN] = 0x60; +} diff --git a/src/components/implementation/simple_vmm/nf_multicore/devices/serial/serial.h b/src/components/implementation/simple_vmm/nf_multicore/devices/serial/serial.h new file mode 100644 index 0000000000..46ac88dd1e --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/devices/serial/serial.h @@ -0,0 +1,17 @@ +#pragma once +#include +#include + +/* Reference: https://www.lammertbies.nl/comm/info/serial-uart */ +#define SERIAL_PORT1 0x3F8 +#define SERIAL_IER 0x3F9 +#define SERIAL_IIR 0x3FA +#define SERIAL_LCR 0x3FB +#define SERIAL_MCR 0x3FC +#define SERIAL_LSR 0x3FD +#define MODEM_STATUS_REGISTER 0x3FE + +#define SERIAL_PORT_MIN SERIAL_PORT1 +#define SERIAL_PORT_MAX MODEM_STATUS_REGISTER + +void serial_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu); diff --git a/src/components/implementation/simple_vmm/nf_multicore/devices/vpci/virtio_net_io.c b/src/components/implementation/simple_vmm/nf_multicore/devices/vpci/virtio_net_io.c new file mode 100644 index 0000000000..268a43d980 --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/devices/vpci/virtio_net_io.c @@ -0,0 +1,744 @@ +/*- + * Copyright (c) 2011 NetApp, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ +#include +#include +#include +#include "virtio_net_io.h" +#include "vpci.h" +#include "virtio_ring.h" +#include +#include +#include +#include +#include +#include +#include +#include + +/* TODO: remove this warning flag when virtio-net is done */ +#pragma GCC diagnostic ignored "-Wunused-but-set-variable" + +static struct virtio_net_io_reg virtio_net_regs; +static struct virtio_queue virtio_queues[2]; +struct virtio_vq_info virtio_net_vqs[VIRTIO_NET_MAXQ - 1]; + +static unsigned char icmp_reply[] = { + /* TODO: remove icmp reply and process nic input from nic component */ +}; + +static inline int +vq_ring_ready(struct virtio_vq_info *vq) +{ + return ((vq->flags & VQ_ALLOC) == VQ_ALLOC); +} + +static inline int +vq_has_descs(struct virtio_vq_info *vq) +{ + int ret = 0; + if (vq_ring_ready(vq) && vq->last_avail != vq->avail->idx) { + if (unlikely((u16_t)((unsigned int)vq->avail->idx - vq->last_avail) > vq->qsize)) { + printc("no valid descriptor\n"); + assert(0); + } + else + ret = 1; + } + return ret; + +} + +void * +paddr_guest2host(uintptr_t gaddr, struct vmrt_vm_comp *vm) +{ + void *va = GPA2HVA(gaddr, vm); + return va; +} + +#define roundup2(x, y) (((x)+((y)-1))&(~((y)-1))) +#define mb() ({ asm volatile("mfence" ::: "memory"); (void)0; }) + +static volatile int __intr = 0; + + +struct ps_lock intr_lock = {.o = 0}; + +void +check_intr(struct vmrt_vm_vcpu *vcpu) { + ps_lock_take(&intr_lock); + if (__intr) { + lapic_intr_inject(vcpu, 33, 0); + __intr = 0; + } + ps_lock_release(&intr_lock); +} + +void +vq_endchains(struct vmrt_vm_vcpu *vcpu, struct virtio_vq_info *vq, int used_all_avail) +{ + u16_t event_idx, new_idx, old_idx; + int intr; + + if (unlikely(!vq || !vq->used)) + return; + + __atomic_thread_fence(__ATOMIC_SEQ_CST); + + old_idx = vq->save_used; + vq->save_used = new_idx = vq->used->idx; + + intr = new_idx != old_idx && + !(vq->avail->flags & VRING_AVAIL_F_NO_INTERRUPT); + + if (intr) { + virtio_net_regs.header.ISR = 1; + /* TODO: 57 is virtio-net interrupt without io apic, 33 is with io apic */ +#if VMX_SUPPORT_POSTED_INTR + vlapic_set_intr(vcpu, 33, 0); +#else + ps_lock_take(&intr_lock); + __intr = 1; + ps_lock_release(&intr_lock); +#endif + } + +} + +static inline struct iovec * +rx_iov_trim(struct iovec *iov, int *niov, size_t tlen) +{ + struct iovec *riov; + + iov[0].iov_len -= tlen; + + iov[0].iov_base = (void *)((uintptr_t)iov[0].iov_base + tlen); + riov = &iov[0]; + + return riov; +} + +static void +virtio_vq_init(struct vmrt_vm_vcpu *vcpu, int nr_queue, u32_t pfn) +{ + struct virtio_vq_info *vq; + u64_t phys; + size_t size; + char *vb; + + vq = &virtio_net_vqs[nr_queue]; + vq->pfn = pfn; + phys = (u64_t)pfn << VRING_PAGE_BITS; + size = vring_size(vq->qsize, VIRTIO_PCI_VRING_ALIGN); + vb = paddr_guest2host(phys, vcpu->vm); + if (!vb) + goto error; + + /* First page(s) are descriptors... */ + vq->desc = (struct vring_desc *)vb; + vb += vq->qsize * sizeof(struct vring_desc); + + /* ... immediately followed by "avail" ring (entirely u16_t's) */ + vq->avail = (struct vring_avail *)vb; + vb += (2 + vq->qsize + 1) * sizeof(u16_t); + + /* Then it's rounded up to the next page... */ + vb = (char *)roundup2((uintptr_t)vb, VIRTIO_PCI_VRING_ALIGN); + + /* ... and the last page(s) are the used ring. */ + vq->used = (struct vring_used *)vb; + + /* Start at 0 when we use it. */ + vq->last_avail = 0; + vq->save_used = 0; + + /* Mark queue as allocated after initialization is complete. */ + mb(); + vq->flags = VQ_ALLOC; + vq->vcpu = vcpu; + + return; + +error: + vq->flags = 0; + printc("%s: vq enable failed\n", __func__); + assert(0); +} + +static inline int +_vq_record(int i, volatile struct vring_desc *vd, + struct iovec *iov, int n_iov, u16_t *flags, struct vmrt_vm_vcpu *vcpu) { + + void *host_addr; + + if (i >= n_iov) { + printc("Number of descs is more than iov slots\n"); + assert(0); + } + + host_addr = paddr_guest2host(vd->addr, vcpu->vm); + if (unlikely(!host_addr)) { + printc("Invalid host addr\n"); + assert(0); + } + iov[i].iov_base = host_addr; + iov[i].iov_len = vd->len; + if (unlikely(flags != NULL)) + flags[i] = vd->flags; + + return 0; +} + +static void +dump_packet(char *p, u16_t sz) +{ + for (int i = 0; i < sz; i++) { + if (i > 0 && (i % 8 == 0)) printc("\n"); + u8_t c = p[i]; + printc("%02x ", c); + } + printc("\n"); +} + +int +vq_getchain(struct vmrt_vm_vcpu *vcpu, struct virtio_vq_info *vq, u16_t *pidx, + struct iovec *iov, int n_iov, u16_t *flags) +{ + int i; + unsigned int ndesc, n_indir; + unsigned int idx, next; + + volatile struct vring_desc *vdir, *vindir, *vp; + /* + * Note: it's the responsibility of the guest not to + * update vq->avail->idx until all of the descriptors + * the guest has written are valid (including all their + * next fields and vd_flags). + * + * Compute (last_avail - idx) in integers mod 2**16. This is + * the number of descriptors the device has made available + * since the last time we updated vq->last_avail. + * + * We just need to do the subtraction as an unsigned int, + * then trim off excess bits. + */ + idx = vq->last_avail; + ndesc = (u16_t)((unsigned int)vq->avail->idx - idx); + if (unlikely(ndesc == 0)) + return 0; + if (unlikely(ndesc > vq->qsize)) { + printc("ndesc (%u) out of range, driver confused?\r\n", + (unsigned int)ndesc); + assert(0); + } + + /* + * Now count/parse "involved" descriptors starting from + * the head of the chain. + * + * To prevent loops, we could be more complicated and + * check whether we're re-visiting a previously visited + * index, but we just abort if the count gets excessive. + */ + *pidx = next = vq->avail->ring[idx & (vq->qsize - 1)]; + vq->last_avail++; + for (i = 0; i < VQ_MAX_DESCRIPTORS; next = vdir->next) { + if (next >= vq->qsize) { + printc("tx: descriptor index %u out of range, " + "driver confused?\r\n", + next); + assert(0); + } + vdir = &vq->desc[next]; + if (likely((vdir->flags & VRING_DESC_F_INDIRECT) == 0)) { + if (unlikely(_vq_record(i, vdir, iov, n_iov, flags, vcpu))) { + printc("mapping to host failed\r\n"); + assert(0); + } + i++; + } else { + printc("descriptor has forbidden INDIRECT flag, " + "driver confused?\r\n"); + assert(0); + } + if ((vdir->flags & VRING_DESC_F_NEXT) == 0) + return i; + } + + /* code should not come here */ + printc("descriptor loop? count > %d - driver confused?\r\n", i); + assert(0); + return -1; +} + +void +vq_relchain(struct virtio_vq_info *vq, u16_t idx, u32_t iolen) +{ + u16_t uidx, mask; + volatile struct vring_used *vuh; + volatile struct vring_used_elem *vue; + + /* + * Notes: + * - mask is N-1 where N is a power of 2 so computes x % N + * - vuh points to the "used" data shared with guest + * - vue points to the "used" ring entry we want to update + * - head is the same value we compute in vq_iovecs(). + * + * (I apologize for the two fields named idx; the + * virtio spec calls the one that vue points to, "id"...) + */ + mask = vq->qsize - 1; + vuh = vq->used; + + uidx = vuh->idx; + vue = &vuh->ring[uidx++ & mask]; + vue->id = idx; + vue->len = iolen; + vuh->idx = uidx; +} + +void +vq_retchain(struct virtio_vq_info *vq) +{ + vq->last_avail--; +} + +void +virtio_net_rcv_one_pkt(void *data, int pkt_len) +{ + struct iovec iov[VIRTIO_NET_MAXSEGS], *riov; + struct virtio_vq_info *vq; + struct vmrt_vm_vcpu *vcpu; + void *vrx; + int n; + u16_t idx; + int ret; + + vq = &virtio_net_vqs[VIRTIO_NET_RXQ]; + + vcpu = vq->vcpu; + + if (unlikely(!vq_has_descs(vq))) { + return; + } + + n = vq_getchain(vcpu, vq, &idx, iov, VIRTIO_NET_MAXSEGS, NULL); + + // if (unlikely (n < 1 || n >= VIRTIO_NET_MAXSEGS )) { + // printc("vtnet: virtio_net_tap_rx: vq_getchain = %d\n", n); + // assert(0); + // } + + vrx = iov[0].iov_base; + /* every packet needs to be proceeded by a virtio_net_rxhdr header space */ + riov = rx_iov_trim(iov, &n, sizeof(struct virtio_net_rxhdr)); + + // assert(iov[0].iov_len >= (size_t)pkt_len); + + // memcpy(iov[0].iov_base, data, pkt_len); + memcpy_fast(iov[0].iov_base, data, pkt_len); + + memset(vrx, 0, sizeof(struct virtio_net_rxhdr)); + + vq_relchain(vq, idx, pkt_len + sizeof(struct virtio_net_rxhdr)); + + vq_endchains(vcpu, vq, 1); + return; +} + +void +virtio_net_send_one_pkt(void *data, u16_t *pkt_len) +{ + struct virtio_vq_info *vq = &virtio_net_vqs[VIRTIO_NET_TXQ]; + struct iovec iov[VIRTIO_NET_MAXSEGS]; + struct vmrt_vm_vcpu *vcpu; + int i, n; + int plen, tlen; + u16_t idx; + + while (!vq_has_descs(vq)) { + *pkt_len = 0; + return; + // sched_thd_block(0); + } + vcpu = vq->vcpu; + + memset(&iov, 0, sizeof(iov)); + n = vq_getchain(vcpu, vq, &idx, iov, VIRTIO_NET_MAXSEGS, NULL); + if (unlikely(n < 1 || n >= VIRTIO_NET_MAXSEGS)) { + printc("vtnet: virtio_net_proctx: vq_getchain = %d\n", n); + assert(0); + } + + plen = 0; + tlen = iov[0].iov_len; + assert(n == 2); + + plen += iov[1].iov_len; + tlen += iov[1].iov_len; + + // memcpy(data, iov[1].iov_base, iov[1].iov_len); + memcpy_fast(data, iov[1].iov_base, iov[1].iov_len); + + *pkt_len = plen; + vq_relchain(vq, idx, tlen); + + vq_endchains(vcpu, vq, 1); + return; +} + +static void +virtio_net_outb(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + u8_t val = vcpu->shared_region->ax; + + switch (port_id) + { + case VIRTIO_NET_DEV_STATUS: + virtio_net_regs.header.dev_status = val; + break; + default: + VM_PANIC(vcpu); + break; + } + return; +} + +#define REAL_NIC 0 + +#if REAL_NIC +static u8_t virtio_net_mac[6] = {0x6c, 0xfe, 0x54, 0x40, 0x41, 0x01}; +#else +static u8_t virtio_net_mac[6] = {0x10, 0x10, 0x10, 0x10, 0x10, 0x11}; +#endif + +static void +virtio_net_inb(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + u32_t bdf = 0; + + switch (port_id) + { + case VIRTIO_NET_DEV_STATUS: + vcpu->shared_region->ax = virtio_net_regs.header.dev_status; + break; + case VIRTIO_NET_ISR: + vcpu->shared_region->ax = virtio_net_regs.header.ISR; + virtio_net_regs.header.ISR = 0; + break; + case VIRTIO_NET_STATUS: + vcpu->shared_region->ax = virtio_net_regs.config_reg.status; + break; + case VIRTIO_NET_STATUS_H: + vcpu->shared_region->ax = virtio_net_regs.config_reg.status >> 8; + break; + /* TODO: read mac address from virtio-net config space */ + case VIRTIO_NET_MAC: + vcpu->shared_region->ax = virtio_net_mac[0]; + break; + case VIRTIO_NET_MAC1: + vcpu->shared_region->ax = virtio_net_mac[1]; + break; + case VIRTIO_NET_MAC2: + vcpu->shared_region->ax = virtio_net_mac[2]; + break; + case VIRTIO_NET_MAC3: + vcpu->shared_region->ax = virtio_net_mac[3]; + break; + case VIRTIO_NET_MAC4: + vcpu->shared_region->ax = virtio_net_mac[4]; + break; + case VIRTIO_NET_MAC5: + vcpu->shared_region->ax = virtio_net_mac[5]; + break; + default: + VM_PANIC(vcpu); + break; + } +} + +static void +virtio_net_inw(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + switch (port_id) + { + case VIRTIO_NET_QUEUE_SIZE: + vcpu->shared_region->ax = virtio_queues[virtio_net_regs.header.queue_select].queue_sz; + break; + case VIRTIO_NET_QUEUE_SELECT: + vcpu->shared_region->ax = virtio_net_regs.header.queue_select; + break; + case VIRTIO_NET_QUEUE_NOTIFY: + VM_PANIC(vcpu); + vcpu->shared_region->ax = virtio_net_regs.header.queue_notify; + break; + default: + VM_PANIC(vcpu); + break; + } +} + +static void +virtio_net_outw(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + u16_t val = vcpu->shared_region->ax; + + switch (port_id) + { + case VIRTIO_NET_QUEUE_SELECT: + virtio_net_regs.header.queue_select = val; + break; + case VIRTIO_NET_QUEUE_NOTIFY: + if (val == VIRTIO_NET_TXQ) { + // sched_thd_yield(); + // sched_thd_wakeup(11); + } + virtio_net_regs.header.queue_notify = val; + break; + default: + VM_PANIC(vcpu); + break; + } +} + +static void +virtio_net_outl(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + u32_t val = vcpu->shared_region->ax; + u64_t tmp = val; + + switch (port_id) + { + case VIRTIO_NET_GUEST_FEATURES: + virtio_net_regs.header.guest_features = val; + break; + case VIRTIO_NET_QUEUE_ADDR: + virtio_queues[virtio_net_regs.header.queue_select].queue = (void *)tmp; + virtio_vq_init(vcpu, virtio_net_regs.header.queue_select, val); + break; + default: + VM_PANIC(vcpu); + break; + } + return; +} + +static void +virtio_net_inl(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + switch (port_id) + { + case VIRTIO_NET_DEV_FEATURES: + vcpu->shared_region->ax = virtio_net_regs.header.dev_features; + break; + case VIRTIO_NET_GUEST_FEATURES: + vcpu->shared_region->ax = virtio_net_regs.header.guest_features; + break; + case VIRTIO_NET_QUEUE_ADDR: + vcpu->shared_region->ax = virtio_net_regs.header.queue_addr; + break; + default: + VM_PANIC(vcpu); + break; + } +} + +void +virtio_net_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu) +{ + if (dir == IO_IN) { + switch (sz) + { + case IO_BYTE: + virtio_net_inb(port, vcpu); + break; + case IO_WORD: + virtio_net_inw(port, vcpu); + break; + case IO_LONG: + virtio_net_inl(port, vcpu); + break; + default: + VM_PANIC(vcpu); + } + } else { + switch (sz) + { + case IO_BYTE: + virtio_net_outb(port, vcpu); + break; + case IO_WORD: + virtio_net_outw(port, vcpu); + break; + case IO_LONG: + virtio_net_outl(port, vcpu); + break; + default: + VM_PANIC(vcpu); + } + } +} + +void +virtio_net_io_init(void) +{ + memset(&virtio_net_regs, 0, sizeof(virtio_net_regs)); + memset(&virtio_queues, 0, sizeof(virtio_queues)); + memset(&virtio_net_vqs, 0, sizeof(virtio_net_vqs)); + + virtio_net_regs.header.dev_features |= (1 << VIRTIO_NET_F_STATUS); + virtio_net_regs.header.dev_features |= (1 << VIRTIO_NET_F_MAC); + virtio_net_regs.config_reg.status = VIRTIO_NET_S_LINK_UP; + virtio_queues[0].queue_sz = VQ_MAX_DESCRIPTORS; + virtio_queues[1].queue_sz = VQ_MAX_DESCRIPTORS; + virtio_net_vqs[VIRTIO_NET_RX].qsize = VQ_MAX_DESCRIPTORS; + virtio_net_vqs[VIRTIO_NET_TX].qsize = VQ_MAX_DESCRIPTORS; +} + +struct tcp_udp_port +{ + u16_t src_port; + u16_t dst_port; +} __attribute__((packed)); + +void +virtio_tx_task(void *data) +{ + volatile struct virtio_vq_info *vq; + struct iovec iov[VIRTIO_NET_MAXSEGS]; + struct vmrt_vm_vcpu *vcpu; + int i, n; + int plen, tlen; + u16_t idx; + char *pkt; + struct netshmem_pkt_buf *tx_obj; + shm_bm_objid_t tx_pktid; + struct nf_pkt_meta_data buf; + + struct nf_session *session = NULL; + shm_bm_t tx_shmemd = 0; + u16_t svc_id = 0; + + struct iphdr *iphdr = NULL; + struct tcp_udp_port *port; + + vq = &virtio_net_vqs[VIRTIO_NET_TXQ]; + while (1) { + while (!vq_has_descs(vq)) { + shm_bm_objid_t first_objid; + struct netshmem_pkt_buf *first_obj; + struct netshmem_pkt_pri *first_obj_pri; + struct netshmem_meta_tuple *pkt_arr; + u8_t batch_ct; + + session = get_nf_session(0); + tx_shmemd = session->tx_shmemd; + + while (nf_tx_ring_buf_dequeue(&session->nf_tx_ring_buf, &buf)) { + batch_ct = 0; + first_obj = buf.obj; + first_objid = buf.objid; + first_obj_pri = netshmem_get_pri(first_obj); + pkt_arr = (struct netshmem_meta_tuple *)&first_obj_pri->pkt_arr; + first_obj_pri->batch_len = 0; + + pkt_arr[batch_ct].obj_id = buf.objid; + pkt_arr[batch_ct].pkt_len = buf.pkt_len; + batch_ct++; + while (batch_ct < 32 && nf_tx_ring_buf_dequeue(&session->nf_tx_ring_buf, &buf)) { + pkt_arr[batch_ct].obj_id = buf.objid; + pkt_arr[batch_ct].pkt_len = buf.pkt_len; + batch_ct++; + } + first_obj_pri->batch_len = batch_ct; + // printc("nic send in tx:%d, %u\n", batch_ct, cos_thdid()); + nic_send_packet_batch(first_objid); + } + + sched_thd_yield(); + } + + vcpu = vq->vcpu; + + memset(&iov, 0, sizeof(iov)); + + n = vq_getchain(vcpu, vq, &idx, iov, VIRTIO_NET_MAXSEGS, NULL); + if (unlikely(n < 1 || n >= VIRTIO_NET_MAXSEGS)) { + printc("vtnet: virtio_net_proctx: vq_getchain = %d\n", n); + assert(0); + } + + plen = 0; + tlen = iov[0].iov_len; + assert(n == 2); + + plen += iov[1].iov_len; + tlen += iov[1].iov_len; + + pkt = iov[1].iov_base; + + iphdr = (struct iphdr *) (pkt + ETH_HLEN); + port = (struct tcp_udp_port *)((char *)pkt + ETH_HLEN + iphdr->ihl * 4); + u16_t svc_id = ntohs(port->dst_port); + + session = get_nf_session(svc_id); + + tx_shmemd = session->tx_shmemd; + if (unlikely(!tx_shmemd)) { + svc_id = 0; + session = get_nf_session(svc_id); + tx_shmemd = session->tx_shmemd; + } + + // printc("tx shmemd:%p, %d\n", tx_shmemd, svc_id); + tx_obj = shm_bm_alloc_net_pkt_buf(tx_shmemd, &tx_pktid); + // printc("tx shmemd:%p, tx_obj:%p\n", tx_shmemd, tx_obj); + + if (likely(tx_obj != NULL)){ + buf.objid = tx_pktid; + buf.pkt_len = plen; + buf.obj = tx_obj; + + // memcpy(netshmem_get_data_buf(tx_obj), pkt, plen); + memcpy_fast(netshmem_get_data_buf(tx_obj), pkt, plen); + + if ((unlikely(!nf_tx_ring_buf_enqueue(&(session->nf_tx_ring_buf), &buf)))){ + shm_bm_free_net_pkt_buf(tx_obj); + } else { + // sched_thd_wakeup(session->tx_thd); + // sync_sem_give(&session->tx_sem); + } + } else { + printc("cannot allocate objects\n"); + assert(0); + } + + vq_relchain(vq, idx, tlen); + vq_endchains(vcpu, vq, 1); + } +} diff --git a/src/components/implementation/simple_vmm/nf_multicore/devices/vpci/virtio_net_io.h b/src/components/implementation/simple_vmm/nf_multicore/devices/vpci/virtio_net_io.h new file mode 100644 index 0000000000..ba50bb2b77 --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/devices/vpci/virtio_net_io.h @@ -0,0 +1,144 @@ +#pragma once + +#include +#include + +#define VIRTIO_NET_IO_ADDR 0x4000 + +#define VIRTIO_NET_DEV_FEATURES (VIRTIO_NET_IO_ADDR + 0) +#define VIRTIO_NET_GUEST_FEATURES (VIRTIO_NET_IO_ADDR + 4) +#define VIRTIO_NET_QUEUE_ADDR (VIRTIO_NET_IO_ADDR + 8) +#define VIRTIO_NET_QUEUE_SIZE (VIRTIO_NET_IO_ADDR + 12) +#define VIRTIO_NET_QUEUE_SELECT (VIRTIO_NET_IO_ADDR + 14) +#define VIRTIO_NET_QUEUE_NOTIFY (VIRTIO_NET_IO_ADDR + 16) +#define VIRTIO_NET_DEV_STATUS (VIRTIO_NET_IO_ADDR + 18) +#define VIRTIO_NET_ISR (VIRTIO_NET_IO_ADDR + 19) + +#define VIRTIO_NET_MAC (VIRTIO_NET_IO_ADDR + 20) +#define VIRTIO_NET_MAC1 (VIRTIO_NET_IO_ADDR + 21) +#define VIRTIO_NET_MAC2 (VIRTIO_NET_IO_ADDR + 22) +#define VIRTIO_NET_MAC3 (VIRTIO_NET_IO_ADDR + 23) +#define VIRTIO_NET_MAC4 (VIRTIO_NET_IO_ADDR + 24) +#define VIRTIO_NET_MAC5 (VIRTIO_NET_IO_ADDR + 25) + +#define VIRTIO_NET_STATUS (VIRTIO_NET_IO_ADDR + 26) +#define VIRTIO_NET_STATUS_H (VIRTIO_NET_IO_ADDR + 27) + +#define VIRTIO_NET_F_CSUM (0) +#define VIRTIO_NET_F_GUEST_CSUM (1) +#define VIRTIO_NET_F_MAC (5) +#define VIRTIO_NET_F_GSO (6) +#define VIRTIO_NET_F_GUEST_TSO4 (7) +#define VIRTIO_NET_F_GUEST_TSO6 (8) +#define VIRTIO_NET_F_GUEST_ECN (9) +#define VIRTIO_NET_F_GUEST_UFO (10) +#define VIRTIO_NET_F_HOST_TSO4 (11) +#define VIRTIO_NET_F_HOST_TSO6 (12) +#define VIRTIO_NET_F_HOST_ECN (13) +#define VIRTIO_NET_F_HOST_UFO (14) +#define VIRTIO_NET_F_MRG_RXBUF (15) +#define VIRTIO_NET_F_STATUS (16) +#define VIRTIO_NET_F_CTRL_VQ (17) +#define VIRTIO_NET_F_CTRL_RX (18) +#define VIRTIO_NET_F_CTRL_VLAN (19) +#define VIRTIO_NET_F_GUEST_ANNOUNCE (21) + +#define VIRTIO_NET_RINGSZ 512 +#define VIRTIO_NET_MAXSEGS 32 +#define VQ_MAX_DESCRIPTORS 512 + +struct virtio_header { + u32_t dev_features; + u32_t guest_features; + u32_t queue_addr; + u16_t queue_size; + u16_t queue_select; + u16_t queue_notify; + u8_t dev_status; + u8_t ISR; +} __attribute__((packed)); + +struct virtio_queue { + u16_t queue_sz; + void *queue; +}; + +#define VIRTIO_NET_S_LINK_UP 1 +#define VIRTIO_NET_S_ANNOUNCE 2 + +#define VIRTIO_NET_RX 0 +#define VIRTIO_NET_TX 1 + +#define VIRTIO_NET_RXQ 0 +#define VIRTIO_NET_TXQ 1 +#define VIRTIO_NET_CTLQ 2 + +#define VIRTIO_NET_MAXQ 3 + +#define VRING_PAGE_BITS 12 +#define VIRTIO_PCI_VRING_ALIGN 4096 + +#define VQ_ALLOC 0x01 /* set once we have a pfn */ +#define VQ_BROKED 0x02 + +struct virtio_net_config { + u8_t mac[6]; + u16_t status; +} __attribute__((packed)); + +struct virtio_net_io_reg { + struct virtio_header header; + struct virtio_net_config config_reg; +} __attribute__((packed)); + +// struct iovec +// { +// void *iov_base; /* Pointer to data. */ +// size_t iov_len; /* Length of data. */ +// }; + +struct virtio_vq_info { + u16_t qsize; /* size of this queue (a power of 2) */ + void (*notify)(void *, struct virtio_vq_info *); + /* called instead of notify, if not NULL */ + + u16_t num; /* the num'th queue in the virtio_base */ + + u16_t flags; /* flags (see above) */ + u16_t last_avail; /* a recent value of avail->idx */ + u16_t save_used; /* saved used->idx; see vq_endchains */ + u16_t msix_idx; /* MSI-X index, or VIRTIO_MSI_NO_VECTOR */ + + u32_t pfn; /* PFN of virt queue (not shifted!) */ + + volatile struct vring_desc *desc; + /* descriptor array */ + volatile struct vring_avail *avail; + /* the "avail" ring */ + volatile struct vring_used *used; + /* the "used" ring */ + + u32_t gpa_desc[2]; /* gpa of descriptors */ + u32_t gpa_avail[2]; /* gpa of avail_ring */ + u32_t gpa_used[2]; /* gpa of used_ring */ + int enabled; /* whether the virtqueue is enabled */ + + /* each vq is bounded to a vcpu */ + struct vmrt_vm_vcpu *vcpu; +}; + +/* + * Fixed network header size + */ +struct virtio_net_rxhdr { + u8_t vrh_flags; + u8_t vrh_gso_type; + u16_t vrh_hdr_len; + u16_t vrh_gso_size; + u16_t vrh_csum_start; + u16_t vrh_csum_offset; +} __attribute__((packed)); + +void virtio_net_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu); +void virtio_net_rcv_one_pkt(void *data, int pkt_len); +void virtio_net_send_one_pkt(void *data, u16_t *pkt_len); diff --git a/src/components/implementation/simple_vmm/nf_multicore/devices/vpci/virtio_net_vpci.c b/src/components/implementation/simple_vmm/nf_multicore/devices/vpci/virtio_net_vpci.c new file mode 100644 index 0000000000..c1c8846def --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/devices/vpci/virtio_net_vpci.c @@ -0,0 +1,51 @@ +#include "vpci.h" + +#define VIRTIO_VENDOR_ID 0x1AF4 +#define VIRTIO_NETWORK_DEV_ID 0x1000 +#define VIRTIO_CLASS_NETWORK 0x02 +#define VIRTIO_TYPE_NET 1 + +struct vpci_config_type0 virtio_net_dev = { + .header.vendor_id = VIRTIO_VENDOR_ID, + .header.device_id = VIRTIO_NETWORK_DEV_ID, + .header.command = 0, + .header.status = 0, + .header.revision_id = 0, + .header.prog_if = 0, + .header.subclass = 0, + .header.class_code = VIRTIO_CLASS_NETWORK, + .header.cache_line_sz = 0, + .header.latency_timer = 0, + .header.header_type = PCI_HDR_TYPE_DEV, + .header.BIST = 0, + + /* Legacy virtio-net only uses bar 0, and it should be a IO bar, no capability is supported */ + .bars[0].io_bar.fixed_bit = 1, + .bars[0].io_bar.reserved = 0, + .bars[0].io_bar.base_addr = 0x1000, + + + .bars[1].raw_data = 0, + .bars[2].raw_data = 0, + .bars[3].raw_data = 0, + .bars[4].raw_data = 0, + .bars[5].raw_data = 0, + + .cardbus_cis_pointer = 0, + .subsystem_vendor_id = VIRTIO_VENDOR_ID, + .subsystem_id = VIRTIO_TYPE_NET, + .exp_rom_base = 0, + .cap_pointer = 0, + .reserved = 0, + .interrupt_line = 0, + .interrupt_pin = 0, + .min_grant = 0, + .max_lentency = 0 +}; + +void +virtio_net_dev_init(void){ + vpci_regist((struct vpci_config_space *)&virtio_net_dev, sizeof(virtio_net_dev)); + extern void virtio_net_io_init(void); + virtio_net_io_init(); +} diff --git a/src/components/implementation/simple_vmm/nf_multicore/devices/vpci/virtio_ring.h b/src/components/implementation/simple_vmm/nf_multicore/devices/vpci/virtio_ring.h new file mode 100644 index 0000000000..f03125851b --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/devices/vpci/virtio_ring.h @@ -0,0 +1,260 @@ +#ifndef _LINUX_VIRTIO_RING_H +#define _LINUX_VIRTIO_RING_H +/* An interface for efficient virtio implementation, currently for use by KVM, + * but hopefully others soon. Do NOT change this since it will + * break existing servers and clients. + * + * This header is BSD licensed so anyone can use the definitions to implement + * compatible drivers/servers. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of IBM nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * Copyright Rusty Russell IBM Corporation 2007. */ + +typedef unsigned short int __virtio16; +typedef unsigned int __virtio32; +typedef unsigned long long __virtio64; + +typedef short int __le16; +typedef short int __be16; +typedef unsigned int __le32; +typedef unsigned int __be32; +typedef unsigned long long __le64; +typedef unsigned long long __be64; + +typedef char __s8; +typedef unsigned char __u8; + +typedef short __s16; +typedef unsigned short __u16; + +typedef int __s32; +typedef unsigned int __u32; + +typedef unsigned long int uintptr_t; + +/* This marks a buffer as continuing via the next field. */ +#define VRING_DESC_F_NEXT 1 +/* This marks a buffer as write-only (otherwise read-only). */ +#define VRING_DESC_F_WRITE 2 +/* This means the buffer contains a list of buffer descriptors. */ +#define VRING_DESC_F_INDIRECT 4 + +/* + * Mark a descriptor as available or used in packed ring. + * Notice: they are defined as shifts instead of shifted values. + */ +#define VRING_PACKED_DESC_F_AVAIL 7 +#define VRING_PACKED_DESC_F_USED 15 + +/* The Host uses this in used->flags to advise the Guest: don't kick me when + * you add a buffer. It's unreliable, so it's simply an optimization. Guest + * will still kick if it's out of buffers. */ +#define VRING_USED_F_NO_NOTIFY 1 +/* The Guest uses this in avail->flags to advise the Host: don't interrupt me + * when you consume a buffer. It's unreliable, so it's simply an + * optimization. */ +#define VRING_AVAIL_F_NO_INTERRUPT 1 + +/* Enable events in packed ring. */ +#define VRING_PACKED_EVENT_FLAG_ENABLE 0x0 +/* Disable events in packed ring. */ +#define VRING_PACKED_EVENT_FLAG_DISABLE 0x1 +/* + * Enable events for a specific descriptor in packed ring. + * (as specified by Descriptor Ring Change Event Offset/Wrap Counter). + * Only valid if VIRTIO_RING_F_EVENT_IDX has been negotiated. + */ +#define VRING_PACKED_EVENT_FLAG_DESC 0x2 + +/* + * Wrap counter bit shift in event suppression structure + * of packed ring. + */ +#define VRING_PACKED_EVENT_F_WRAP_CTR 15 + +/* We support indirect buffer descriptors */ +#define VIRTIO_RING_F_INDIRECT_DESC 28 + +/* The Guest publishes the used index for which it expects an interrupt + * at the end of the avail ring. Host should ignore the avail->flags field. */ +/* The Host publishes the avail index for which it expects a kick + * at the end of the used ring. Guest should ignore the used->flags field. */ +#define VIRTIO_RING_F_EVENT_IDX 29 + +/* Alignment requirements for vring elements. + * When using pre-virtio 1.0 layout, these fall out naturally. + */ +#define VRING_AVAIL_ALIGN_SIZE 2 +#define VRING_USED_ALIGN_SIZE 4 +#define VRING_DESC_ALIGN_SIZE 16 + +/* Virtio ring descriptors: 16 bytes. These can chain together via "next". */ +struct vring_desc { + /* Address (guest-physical). */ + __virtio64 addr; + /* Length. */ + __virtio32 len; + /* The flags as indicated above. */ + __virtio16 flags; + /* We chain unused descriptors via this, too */ + __virtio16 next; +}; + +struct vring_avail { + __virtio16 flags; + __virtio16 idx; + __virtio16 ring[]; +}; + +/* u32 is used here for ids for padding reasons. */ +struct vring_used_elem { + /* Index of start of used descriptor chain. */ + __virtio32 id; + /* Total length of the descriptor chain which was used (written to) */ + __virtio32 len; +}; + +typedef struct vring_used_elem __attribute__((aligned(VRING_USED_ALIGN_SIZE))) + vring_used_elem_t; + +struct vring_used { + __virtio16 flags; + __virtio16 idx; + vring_used_elem_t ring[]; +}; + +/* + * The ring element addresses are passed between components with different + * alignments assumptions. Thus, we might need to decrease the compiler-selected + * alignment, and so must use a typedef to make sure the aligned attribute + * actually takes hold: + * + * https://gcc.gnu.org/onlinedocs//gcc/Common-Type-Attributes.html#Common-Type-Attributes + * + * When used on a struct, or struct member, the aligned attribute can only + * increase the alignment; in order to decrease it, the packed attribute must + * be specified as well. When used as part of a typedef, the aligned attribute + * can both increase and decrease alignment, and specifying the packed + * attribute generates a warning. + */ +typedef struct vring_desc __attribute__((aligned(VRING_DESC_ALIGN_SIZE))) + vring_desc_t; +typedef struct vring_avail __attribute__((aligned(VRING_AVAIL_ALIGN_SIZE))) + vring_avail_t; +typedef struct vring_used __attribute__((aligned(VRING_USED_ALIGN_SIZE))) + vring_used_t; + +struct vring { + unsigned int num; + + vring_desc_t *desc; + + vring_avail_t *avail; + + vring_used_t *used; +}; + +#ifndef VIRTIO_RING_NO_LEGACY + +/* The standard layout for the ring is a continuous chunk of memory which looks + * like this. We assume num is a power of 2. + * + * struct vring + * { + * // The actual descriptors (16 bytes each) + * struct vring_desc desc[num]; + * + * // A ring of available descriptor heads with free-running index. + * __virtio16 avail_flags; + * __virtio16 avail_idx; + * __virtio16 available[num]; + * __virtio16 used_event_idx; + * + * // Padding to the next align boundary. + * char pad[]; + * + * // A ring of used descriptor heads with free-running index. + * __virtio16 used_flags; + * __virtio16 used_idx; + * struct vring_used_elem used[num]; + * __virtio16 avail_event_idx; + * }; + */ +/* We publish the used event index at the end of the available ring, and vice + * versa. They are at the end for backwards compatibility. */ +#define vring_used_event(vr) ((vr)->avail->ring[(vr)->num]) +#define vring_avail_event(vr) (*(__virtio16 *)&(vr)->used->ring[(vr)->num]) + +static __inline__ void vring_init(struct vring *vr, unsigned int num, void *p, + unsigned long align) +{ + vr->num = num; + vr->desc = p; + vr->avail = (struct vring_avail *)((char *)p + num * sizeof(struct vring_desc)); + vr->used = (void *)(((uintptr_t)&vr->avail->ring[num] + sizeof(__virtio16) + + align-1) & ~(align - 1)); +} + +static __inline__ unsigned vring_size(unsigned int num, unsigned long align) +{ + return ((sizeof(struct vring_desc) * num + sizeof(__virtio16) * (3 + num) + + align - 1) & ~(align - 1)) + + sizeof(__virtio16) * 3 + sizeof(struct vring_used_elem) * num; +} + +#endif /* VIRTIO_RING_NO_LEGACY */ + +/* The following is used with USED_EVENT_IDX and AVAIL_EVENT_IDX */ +/* Assuming a given event_idx value from the other side, if + * we have just incremented index from old to new_idx, + * should we trigger an event? */ +static __inline__ int vring_need_event(__u16 event_idx, __u16 new_idx, __u16 old) +{ + /* Note: Xen has similar logic for notification hold-off + * in include/xen/interface/io/ring.h with req_event and req_prod + * corresponding to event_idx + 1 and new_idx respectively. + * Note also that req_event and req_prod in Xen start at 1, + * event indexes in virtio start at 0. */ + return (__u16)(new_idx - event_idx - 1) < (__u16)(new_idx - old); +} + +struct vring_packed_desc_event { + /* Descriptor Ring Change Event Offset/Wrap Counter. */ + __le16 off_wrap; + /* Descriptor Ring Change Event Flags. */ + __le16 flags; +}; + +struct vring_packed_desc { + /* Buffer Address. */ + __le64 addr; + /* Buffer Length. */ + __le32 len; + /* Buffer ID. */ + __le16 id; + /* The flags depending on descriptor type. */ + __le16 flags; +}; +#endif /* _LINUX_VIRTIO_RING_H */ diff --git a/src/components/implementation/simple_vmm/nf_multicore/devices/vpci/vpci.c b/src/components/implementation/simple_vmm/nf_multicore/devices/vpci/vpci.c new file mode 100644 index 0000000000..e1571dc17b --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/devices/vpci/vpci.c @@ -0,0 +1,316 @@ +#include +#include +#include "vpci.h" + +/* Only two are supported: one bridge pci and one virtio-net pci */ +#define MAX_VPCI_NUM 2 + +#define PCI_HOST_BRIDGE_VENDOR 0x8086 +#define PCI_HOST_BRIDGE_DEV 0x29C0 +#define PCI_CLASS_BRIDGE 0x06 +#define PCI_SUBCLASS_BRIDGE_HOST 0x00 + +struct vpci_config_space vpci_devs[MAX_VPCI_NUM]; +static u8_t free_dev = 0; + +struct vpci_config_type1 vpci_host_bridge = { + .header.vendor_id = PCI_HOST_BRIDGE_VENDOR, + .header.device_id = PCI_HOST_BRIDGE_DEV, + .header.command = 0, + .header.status = 0, + .header.revision_id = 0, + .header.prog_if = 0, + .header.subclass = PCI_SUBCLASS_BRIDGE_HOST, + .header.class_code = PCI_CLASS_BRIDGE, + .header.cache_line_sz = 0, + .header.latency_timer = 0, + .header.header_type = PCI_HDR_TYPE_BRIDGE, + .header.BIST = 0, + + .bars[0].raw_data = 0, + .bars[1].raw_data = 0, + + .primary_bus_number = 0, + .secondary_bus_number = 0, + .subordinate_bus_number = 0, + .secondary_latency_timer = 0, + .io_base = 0, + .io_limit = 0, + .secondary_status = 0, + .memory_base = 0, + .memory_limit = 0, + .prefetchable_memory_base = 0, + .prefetchable_memory_limit = 0, + .prefetchable_base_upper_32_bits = 0, + .prefetchable_limit_upper_32_bits = 0, + .io_base_upper_16_bits = 0, + .io_limit_upper_16_bits = 0, + .capability_pointer = 0, + .reserved = 0, + .expansion_rom_base_address = 0, + .interrupt_line = 0, + .interrupt_pin = 0, + .bridge_control = 0 +}; + +void +vpci_regist(struct vpci_config_space *vpci, u32_t sz) +{ + memcpy(&vpci_devs[free_dev++], vpci, sz); +} + +void +set_vpci_comm_hdr(u8_t* raw_data, u8_t reg, u32_t val) +{ + switch (reg) + { + /* TODO: implement necessary pci write emulations */ + case OFFSET_COMMAND: + break; + case OFFSET_CACHE_LINE_SZ: + break; + case OFFSET_LATENCY_TIMER: + break; + case OFFSET_STATUS: + /* Linux writes 0xFFFF to clear errors, thus ignore it */ + break; + default: + printc("trying to write RO reg:0x%x, val:0x%x", reg, val); + assert(0); + } +} + +void +set_vpci_bar(u8_t* raw_data, u8_t reg, u32_t val) +{ + u32_t bar0; + + switch (reg) + { + case OFFSET_BAR0: + bar0 = *(u32_t *)raw_data; + if (bar0 & 0x1) { /* IO bar */ + /* mask all bits that should not be writable */ + val = val & 0xFFFFC000; + val |= 0x1; + *(u32_t *)raw_data = val; + } else { /* Mem bar */ + /* Currently don't support IO bar */ + printc("no vpci bar\n"); + assert(0); + } + + break; + /* Currently only support one bar, other bars are ignored */ + case OFFSET_BAR1: + break; + case OFFSET_BAR2: + break; + case OFFSET_BAR3: + break; + case OFFSET_BAR4: + break; + case OFFSET_BAR5: + break; + default: + printc("trying to write RO reg:0x%x, val:0x%x", reg, val); + assert(0); + } +} + +void +set_vpci_host_bridge_reg(u8_t *raw_data, u8_t reg, u32_t val, u8_t sz) +{ + if (reg < OFFSET_BAR0) { + set_vpci_comm_hdr(raw_data, reg, val); + return; + } + + if (reg < OFFSET_PRIMARY_BUS_NUM) { + /* transparent bridge, ignore the write */ + return; + } + + switch (reg) + { + case OFFSET_PRIMARY_BUS_NUM: + *raw_data = (u8_t) val; + break; + case OFFSET_SECONDARY_BUS_NUMBER: + *raw_data = (u8_t) val; + break; + case OFFSET_SUBORDINATE_BUS_NUMBER: + *raw_data = (u8_t) val; + break; + case OFFSET_SECONDARY_LATENCY_TIMER: + /* Currently ignore this */ + break; + case OFFSET_IO_BASE: + /* this bridge won't support IO base */ + break; + case OFFSET_IO_LIMIT: + /* this bridge won't support IO base */ + assert(0); + break; + case OFFSET_SECONDARY_STATUS: + assert(0); + break; + case OFFSET_MEMORY_BASE: + /* Currently ignore this */ + break; + case OFFSET_MEMORY_LIMIT: + assert(0); + break; + case OFFSET_PREFETCHABLE_MEMORY_BASE: + /* Currently ignore this */ + break; + case OFFSET_PREFETCHABLE_MEMORY_LIMIT: + printc("trying to write RO reg:0x%x, val:0x%x", reg, val); + assert(0); + break; + case OFFSET_PREFETCHABLE_BASE_UPPER_32_BITS: + /* Currently ignore this */ + break; + case OFFSET_PREFETCHABLE_LIMIT_UPPER_32_BITS: + /* Currently ignore this */ + break; + case OFFSET_IO_BASE_UPPER_16_BITS: + /* Currently ignore this */ + break; + case OFFSET_IO_LIMIT_UPPER_16_BITS: + assert(0); + break; + case OFFSET_CAPABILITY_POINTER: + assert(0); + break; + case OFFSET_EXPANSION_ROM_BASE_ADDRESS: + /* Ingore this, we don't support EXP ROM */ + break; + case OFFSET_INTERRUPT_LINE: + assert(0); + break; + case OFFSET_INTERRUPT_PIN: + assert(0); + break; + case OFFSET_BRIDGE_CONTROL: + /* Currently ignore this */ + break; + default: + assert(0); + } +} + +void +set_vpci_dev_reg(u8_t* raw_data, u8_t reg, u32_t val, u8_t sz) +{ + if (reg < OFFSET_BAR0) { + set_vpci_comm_hdr(raw_data, reg, val); + return; + } + + if (reg < OFFSET_CARDBUS_CIS_POINTER) { + set_vpci_bar(raw_data, reg, val); + return; + } + switch (reg) + { + case OFFSET_CARDBUS_CIS_POINTER: + assert(0); + break; + case OFFSET_SUBSYSTEM_VENDOR_ID: + assert(0); + break; + case OFFSET_SUBSYSTEM_ID: + assert(0); + break; + case OFFSET_EXP_ROM_BASE: + /* Currently ignore this */ + break; + case OFFSET_CAP_POINTER: + assert(0); + break; + case OFFSET_RESERVED: + assert(0); + break; + case OFFSET_INTERRUPT_LINE: + assert(0); + break; + case OFFSET_INTERRUPT_PIN: + assert(0); + break; + case OFFSET_MIN_GRANT: + assert(0); + break; + case OFFSET_MAX_LENTENCY: + assert(0); + break; + default: + assert(0); + } +} + +void +set_vpci_reg(u32_t bdf, u32_t val, u8_t idx, u8_t sz) +{ + struct vpci_bdf vbdf; + u8_t index; + struct vpci_config_space *vpci; + u8_t *raw_data; + u8_t reg; + + assert(idx < 4 && sz > 0 && sz < 4); + + memcpy(&vbdf, &bdf, sizeof(vbdf)); + + index = vbdf.bus_num + vbdf.dev_num; + if (vbdf.bus_num > 0 || vbdf.dev_num > 1) return; + + vpci = &vpci_devs[index]; + + raw_data = (u8_t *)(vpci) + vbdf.reg_offset; + + raw_data += idx; + reg = vbdf.reg_offset + idx; + + switch (index) + { + case 0: + /* Process host bridge */ + set_vpci_host_bridge_reg(raw_data, reg, val, sz); + break; + + case 1: + /* Process with device */ + set_vpci_dev_reg(raw_data, reg, val, sz); + break; + default: + assert(0); + } +} + +u32_t +get_vpci_reg(u32_t bdf) +{ + struct vpci_bdf vbdf; + struct vpci_config_space *vpci; + u8_t index; + + memcpy(&vbdf, &bdf, sizeof(vbdf)); + index = vbdf.bus_num + vbdf.dev_num; + + if (vbdf.bus_num > 0 || vbdf.dev_num > 1) return 0XFFFFFFFF; + + vpci = &vpci_devs[index]; + + return *(u32_t *)((char *)(vpci) + vbdf.reg_offset); +} + +extern void virtio_net_dev_init(void); + +static void __attribute__((constructor)) +init(void) +{ + memset(&vpci_devs, 0, sizeof(vpci_devs)); + vpci_regist((struct vpci_config_space *)&vpci_host_bridge, sizeof(vpci_host_bridge)); + virtio_net_dev_init(); +} diff --git a/src/components/implementation/simple_vmm/nf_multicore/devices/vpci/vpci.h b/src/components/implementation/simple_vmm/nf_multicore/devices/vpci/vpci.h new file mode 100644 index 0000000000..6bfcdf004b --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/devices/vpci/vpci.h @@ -0,0 +1,180 @@ +#pragma once + +#include +#include + +#define VPCI_CONFIG_ADDRESS 0xCF8 +#define VPCI_CONFIG_DATA0 0xCFC +#define VPCI_CONFIG_DATA1 0xCFD +#define VPCI_CONFIG_DATA2 0xCFE +#define VPCI_CONFIG_DATA3 0xCFF +#define VPCI_MECHANISM_CONTROL_REG 0xCFB + +#define VPCI_MAX_CONFIG_SPACE_SZ 256 + +#define OFFSET_VENDOR_ID 0x00 +#define OFFSET_DEVICE_ID 0x02 +#define OFFSET_COMMAND 0x04 +#define OFFSET_STATUS 0x06 +#define OFFSET_REVISION_ID 0x08 +#define OFFSET_PROG_IF 0x09 +#define OFFSET_SUBCLASS 0x0A +#define OFFSET_CLASS_CODE 0x0B +#define OFFSET_CACHE_LINE_SZ 0x0C +#define OFFSET_LATENCY_TIMER 0x0D +#define OFFSET_HEADER 0x0E +#define OFFSET_BIST 0x0F + +#define OFFSET_BAR0 0x10 +#define OFFSET_BAR1 0x14 +#define OFFSET_BAR2 0x18 +#define OFFSET_BAR3 0x1C +#define OFFSET_BAR4 0x20 +#define OFFSET_BAR5 0x24 + +#define OFFSET_PRIMARY_BUS_NUM 0x18 +#define OFFSET_SECONDARY_BUS_NUMBER 0x19 +#define OFFSET_SUBORDINATE_BUS_NUMBER 0x1A +#define OFFSET_SECONDARY_LATENCY_TIMER 0x1B +#define OFFSET_IO_BASE 0x1C +#define OFFSET_IO_LIMIT 0x1D +#define OFFSET_SECONDARY_STATUS 0x1E +#define OFFSET_MEMORY_BASE 0x20 +#define OFFSET_MEMORY_LIMIT 0x22 +#define OFFSET_PREFETCHABLE_MEMORY_BASE 0x24 +#define OFFSET_PREFETCHABLE_MEMORY_LIMIT 0x26 +#define OFFSET_PREFETCHABLE_BASE_UPPER_32_BITS 0x28 +#define OFFSET_PREFETCHABLE_LIMIT_UPPER_32_BITS 0x2C +#define OFFSET_IO_BASE_UPPER_16_BITS 0x30 +#define OFFSET_IO_LIMIT_UPPER_16_BITS 0x32 +#define OFFSET_CAPABILITY_POINTER 0x34 +#define OFFSET_EXPANSION_ROM_BASE_ADDRESS 0x38 +#define OFFSET_INTERRUPT_LINE 0x3C +#define OFFSET_INTERRUPT_PIN 0x3D +#define OFFSET_BRIDGE_CONTROL 0x3E + +#define OFFSET_CARDBUS_CIS_POINTER 0x28 +#define OFFSET_SUBSYSTEM_VENDOR_ID 0x2C +#define OFFSET_SUBSYSTEM_ID 0x2E +#define OFFSET_EXP_ROM_BASE 0x30 +#define OFFSET_CAP_POINTER 0x34 +#define OFFSET_RESERVED 0x38 +#define OFFSET_MIN_GRANT 0x3E +#define OFFSET_MAX_LENTENCY 0x3F + +#define PCI_HDR_TYPE_BRIDGE 0x01 +#define PCI_HDR_TYPE_DEV 0x00 + +struct vpci_common_header { + u16_t vendor_id; + u16_t device_id; + u16_t command; + u16_t status; + u8_t revision_id; + u8_t prog_if; + u8_t subclass; + u8_t class_code; + u8_t cache_line_sz; + u8_t latency_timer; + + union + { + u8_t header_type:7; + u8_t MF:1; + u8_t header; + }; + + union + { + u8_t completion_code:4; + u8_t reserved:2; + u8_t Start_BIST:1; + u8_t BIST_capable:1; + u8_t BIST; + }; +} __attribute__((packed)); + +struct mem_bar { + u32_t fixed_bit:1; + u32_t type:2; + u32_t prefetchable:1; + /* Needs to be 16-byte aligned */ + u32_t base_addr:28; +} __attribute__((packed)); + +struct io_bar { + u32_t fixed_bit:1; + u32_t reserved:1; + /* Needs to be 4-byte aligned */ + u32_t base_addr:30; +} __attribute__((packed)); + +struct vpci_bar { + union + { + u32_t raw_data; + struct mem_bar mem_bar; + struct io_bar io_bar; + }; +} __attribute__((packed)); + +#define PCI_TYPE0_BAR_NUM 6 +#define PCI_TYPE1_BAR_NUM 2 + +struct vpci_config_type0 { + struct vpci_common_header header; + struct vpci_bar bars[PCI_TYPE0_BAR_NUM]; + u32_t cardbus_cis_pointer; + u16_t subsystem_vendor_id; + u16_t subsystem_id; + u32_t exp_rom_base; + u32_t cap_pointer; + u32_t reserved; + u8_t interrupt_line; + u8_t interrupt_pin; + u8_t min_grant; + u8_t max_lentency; +} __attribute__((packed)); + +struct vpci_config_type1 { + struct vpci_common_header header; + struct vpci_bar bars[PCI_TYPE1_BAR_NUM]; + u8_t primary_bus_number; + u8_t secondary_bus_number; + u8_t subordinate_bus_number; + u8_t secondary_latency_timer; + u8_t io_base; + u8_t io_limit; + u16_t secondary_status; + u16_t memory_base; + u16_t memory_limit; + u16_t prefetchable_memory_base; + u16_t prefetchable_memory_limit; + u32_t prefetchable_base_upper_32_bits; + u32_t prefetchable_limit_upper_32_bits; + u16_t io_base_upper_16_bits; + u16_t io_limit_upper_16_bits; + u32_t capability_pointer:8; + u32_t reserved:24; + u32_t expansion_rom_base_address; + u8_t interrupt_line; + u8_t interrupt_pin; + u16_t bridge_control; +} __attribute__((packed)); + +struct vpci_config_space { + struct vpci_common_header header; + char data[VPCI_MAX_CONFIG_SPACE_SZ - sizeof(struct vpci_common_header)]; +} __attribute__((packed)); + +struct vpci_bdf { + u8_t reg_offset; + u8_t func_num:3; + u8_t dev_num:5; + u8_t bus_num; + u8_t resverd:7; + u8_t enable_bit:1; +}; + +void vpci_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu); +void vpci_regist(struct vpci_config_space *vpci, u32_t sz); diff --git a/src/components/implementation/simple_vmm/nf_multicore/devices/vpci/vpci_io.c b/src/components/implementation/simple_vmm/nf_multicore/devices/vpci/vpci_io.c new file mode 100644 index 0000000000..98667e1999 --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/devices/vpci/vpci_io.c @@ -0,0 +1,191 @@ +#include +#include +#include +#include "vpci.h" + +static u32_t curr_bdf = 0; + +extern u32_t get_vpci_reg(u32_t bdf); +extern void set_vpci_reg(u32_t bdf, u32_t val, u8_t idx, u8_t sz); + +static void +vpci_outb(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + u8_t val = vcpu->shared_region->ax; + + switch (port_id) + { + case VPCI_MECHANISM_CONTROL_REG: + /* This is the register to configure the PCI access mecanism, we only support type 1 which is commonly used */ + assert(val == 0x1); + break; + case VPCI_CONFIG_DATA0: + set_vpci_reg(curr_bdf, val, 0, 1); + break; + case VPCI_CONFIG_DATA1: + set_vpci_reg(curr_bdf, val, 1, 1); + break; + case VPCI_CONFIG_DATA2: + set_vpci_reg(curr_bdf, val, 2, 1); + break; + case VPCI_CONFIG_DATA3: + set_vpci_reg(curr_bdf, val, 3, 1); + break; + default: + VM_PANIC(vcpu); + break; + } + return; +} + +static void +vpci_inb(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + u32_t bdf = 0; + + switch (port_id) + { + case VPCI_MECHANISM_CONTROL_REG: + vcpu->shared_region->ax = 1; + break; + case VPCI_CONFIG_DATA0: + bdf = get_vpci_reg(curr_bdf); + vcpu->shared_region->ax = (u8_t)bdf; + break; + case VPCI_CONFIG_DATA1: + bdf = get_vpci_reg(curr_bdf); + vcpu->shared_region->ax = (u8_t)(bdf >> 8); + break; + case VPCI_CONFIG_DATA2: + bdf = get_vpci_reg(curr_bdf); + vcpu->shared_region->ax = (u8_t)(bdf >> 16); + break; + case VPCI_CONFIG_DATA3: + bdf = get_vpci_reg(curr_bdf); + vcpu->shared_region->ax = (u8_t)(bdf >> 24); + break; + default: + VM_PANIC(vcpu); + break; + } + + return; +} + +static void +vpci_inw(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + u32_t bdf = 0; + + switch (port_id) + { + case VPCI_CONFIG_DATA0: + bdf = get_vpci_reg(curr_bdf); + vcpu->shared_region->ax = (u16_t)bdf; + break; + case VPCI_CONFIG_DATA2: + bdf = get_vpci_reg(curr_bdf); + vcpu->shared_region->ax = (u16_t)(bdf>>16); + break; + default: + VM_PANIC(vcpu); + break; + } + + return; +} + +static void +vpci_outw(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + u16_t val = vcpu->shared_region->ax; + + switch (port_id) + { + case VPCI_CONFIG_DATA0: + set_vpci_reg(curr_bdf, val, 0, 2); + break; + case VPCI_CONFIG_DATA2: + set_vpci_reg(curr_bdf, val, 2, 2); + break; + default: + VM_PANIC(vcpu); + break; + } + + return; +} + +static void +vpci_outl(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + u32_t val = vcpu->shared_region->ax; + + switch (port_id) + { + case VPCI_CONFIG_ADDRESS: + curr_bdf = val; + break; + case VPCI_CONFIG_DATA0: + set_vpci_reg(curr_bdf, val, 0, 3); + break; + default: + VM_PANIC(vcpu); + break; + } + return; +} + +static u32_t +vpci_inl(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + switch (port_id) + { + case VPCI_CONFIG_DATA0: + vcpu->shared_region->ax = get_vpci_reg(curr_bdf); + break; + case VPCI_CONFIG_ADDRESS: + vcpu->shared_region->ax = curr_bdf; + break; + default: + VM_PANIC(vcpu); + break; + } + return 0; +} + +void +vpci_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu) +{ + if (dir == IO_IN) { + switch (sz) + { + case IO_BYTE: + vpci_inb(port, vcpu); + break; + case IO_WORD: + vpci_inw(port, vcpu); + break; + case IO_LONG: + vpci_inl(port, vcpu); + break; + default: + VM_PANIC(vcpu); + } + } else { + switch (sz) + { + case IO_BYTE: + vpci_outb(port, vcpu); + break; + case IO_WORD: + vpci_outw(port, vcpu); + break; + case IO_LONG: + vpci_outl(port, vcpu); + break; + default: + VM_PANIC(vcpu); + } + } +} diff --git a/src/components/implementation/simple_vmm/nf_multicore/devices/vpic/vpic.c b/src/components/implementation/simple_vmm/nf_multicore/devices/vpic/vpic.c new file mode 100644 index 0000000000..f80471d528 --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/devices/vpic/vpic.c @@ -0,0 +1,109 @@ +#include +#include +#include +#include "vpic.h" + +/* TODO: implement necessary functions needed by VM */ +struct chip_8259 { + u8_t master_cmd; + u8_t master_data; + u8_t is_master_init; + u8_t master_offset; + + u8_t slave_cmd; + u8_t slave_data; + u8_t is_slave_init; + u8_t slave_offset; + + u8_t interrupt_pending; +}; + +static struct chip_8259 chip; + +static u8_t pic_elcr1 = 0, pic_elcr2 = 0; + +void +vpic_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu) +{ + assert(sz == IO_BYTE); + if (dir == IO_IN) { + switch (port) + { + case PIC_MASTER_DATA_PORT: + vcpu->shared_region->ax = chip.master_data; + break; + case PIC_SLAVE_DATA_PORT: + vcpu->shared_region->ax = chip.slave_data; + break; + case PIC_MASTER_CMD_PORT: + vcpu->shared_region->ax = chip.master_cmd; + break; + case PIC_SLAVE_CMD_PORT: + vcpu->shared_region->ax = chip.slave_cmd; + break; + case PIC_ELCR1: + vcpu->shared_region->ax = pic_elcr1; + break; + case PIC_ELCR2: + vcpu->shared_region->ax = pic_elcr2; + break; + default: + printc("vpic_handler: port: 0x%x, dir: %d\n", port, dir); + VM_PANIC(vcpu); + break; + } + } else { + u8_t val = vcpu->shared_region->ax; + switch (port) + { + case PIC_MASTER_CMD_PORT: + chip.master_cmd = val; + if (chip.master_cmd & ICW1_INIT) { + chip.is_master_init = 1; + } + if (chip.master_cmd == PIC_EOI) { + chip.interrupt_pending = 0; + } + break; + case PIC_MASTER_DATA_PORT: + chip.master_data = val; + if (chip.is_master_init) { + chip.master_offset = chip.master_data; + chip.is_master_init = 0; + } + break; + case PIC_SLAVE_CMD_PORT: + chip.slave_cmd = val; + if (chip.slave_cmd & ICW1_INIT) { + chip.is_slave_init = 1; + } + if (chip.slave_cmd == PIC_EOI) { + chip.interrupt_pending = 0; + } + break; + case PIC_SLAVE_DATA_PORT: + chip.slave_data = val; + if (chip.is_slave_init) { + chip.slave_offset = chip.slave_data; + chip.is_slave_init = 0; + } + break; + case PIC_ELCR1: + pic_elcr1 = val; + break; + case PIC_ELCR2: + pic_elcr2 = val; + break; + default: + assert(0); + break; + } + + } +} + +static void __attribute__((constructor)) +init(void) +{ + memset(&chip, 0, sizeof(chip)); +} diff --git a/src/components/implementation/simple_vmm/nf_multicore/devices/vpic/vpic.h b/src/components/implementation/simple_vmm/nf_multicore/devices/vpic/vpic.h new file mode 100644 index 0000000000..a7001a6b52 --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/devices/vpic/vpic.h @@ -0,0 +1,24 @@ +#pragma once + +#define PIC_MASTER_CMD_PORT 0x20 +#define PIC_MASTER_DATA_PORT 0x21 +#define PIC_SLAVE_CMD_PORT 0XA0 +#define PIC_SLAVE_DATA_PORT 0XA1 + +#define ICW1_ICW4 0x01 +#define ICW1_SINGLE 0x02 +#define ICW1_INTERVAL4 0x04 +#define ICW1_LEVEL 0x08 +#define ICW1_INIT 0x10 + +#define ICW4_8086 0x01 +#define ICW4_AUTO 0x02 +#define ICW4_BUF_SLAVE 0x08 +#define ICW4_BUF_MASTER 0x0C +#define ICW4_SFNM 0x10 + +#define PIC_EOI 0x20 +#define PIC_ELCR1 0x4d0 +#define PIC_ELCR2 0x4d1 + +void vpic_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu); diff --git a/src/components/implementation/simple_vmm/nf_multicore/devices/vps2/vps2.c b/src/components/implementation/simple_vmm/nf_multicore/devices/vps2/vps2.c new file mode 100644 index 0000000000..52eb9895b5 --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/devices/vps2/vps2.c @@ -0,0 +1,47 @@ +#include +#include +#include +#include "vps2.h" + +static u8_t ps2_porta_data[0x0F]; +static u8_t ps2_portb_data[0x0F]; + +void +ps2_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu) +{ + assert(port == PS2_CONTROL_PORT_A || port == PS2_CONTROL_PORT_B); + assert(sz == IO_BYTE); + + if (dir == IO_IN) { + switch (port) + { + case PS2_CONTROL_PORT_A: + vcpu->shared_region->ax = ps2_porta_data[port - 0x90]; + break; + default: + VM_PANIC(vcpu); + break; + } + } else if (dir == IO_OUT) { + switch (port) + { + case PS2_CONTROL_PORT_A: + ps2_porta_data[port - 0x90] = (u8_t)vcpu->shared_region->ax; + break; + default: + VM_PANIC(vcpu); + break; + } + } else { + VM_PANIC(vcpu); + } + + return; +} + +static void __attribute__((constructor)) +init(void) +{ + memset(&ps2_porta_data, 0, sizeof(ps2_porta_data)); + memset(&ps2_portb_data, 0, sizeof(ps2_portb_data)); +} diff --git a/src/components/implementation/simple_vmm/nf_multicore/devices/vps2/vps2.h b/src/components/implementation/simple_vmm/nf_multicore/devices/vps2/vps2.h new file mode 100644 index 0000000000..971009a319 --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/devices/vps2/vps2.h @@ -0,0 +1,6 @@ +#pragma once + +/* PS/2 system control port A (port B is at 0061) */ +#define PS2_CONTROL_PORT_A 0x92 +#define PS2_CONTROL_PORT_B 0x61 +void ps2_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu); diff --git a/src/components/implementation/simple_vmm/nf_multicore/devices/vrtc/vrtc.c b/src/components/implementation/simple_vmm/nf_multicore/devices/vrtc/vrtc.c new file mode 100644 index 0000000000..c971cef94e --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/devices/vrtc/vrtc.c @@ -0,0 +1,58 @@ +#include +#include +#include +#include "vrtc.h" + +/* NOTE: this is just to emulate those data indexed by the CMOS data adress, the functionality of rtc is not fully implemented */ +static u8_t rtc_data_address[0x1A]; +static u8_t curr_data_addr; + +void +vrtc_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu) +{ + assert(sz == IO_BYTE); + if (dir == IO_IN) { + switch (port) + { + case CMOS_CMD_PORT: + assert(0); + break;; + case CMOS_DATA_PORT: + vcpu->shared_region->ax = rtc_data_address[curr_data_addr]; + break; + default: + assert(0); + break; + } + } else { + u8_t val = vcpu->shared_region->ax; + switch (port) + { + case CMOS_CMD_PORT: + if (val & 0x80) { + printc("NMI disabled\n"); + } else { + printc("NMI enabled\n"); + } + curr_data_addr = val & 0x7f; + if (curr_data_addr == 0x0f) { + printc("shutdown status byte is set now\n"); + } else { + /* NOTE: do nothing and don't include full functionality */ + } + break; + case CMOS_DATA_PORT: + break; + default: + assert(0); + break; + } + + } +} + +static void __attribute__((constructor)) +init(void) +{ + memset(&rtc_data_address, 0, sizeof(rtc_data_address)); +} diff --git a/src/components/implementation/simple_vmm/nf_multicore/devices/vrtc/vrtc.h b/src/components/implementation/simple_vmm/nf_multicore/devices/vrtc/vrtc.h new file mode 100644 index 0000000000..78074feba9 --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/devices/vrtc/vrtc.h @@ -0,0 +1,7 @@ +#pragma once + +#define CMOS_CMD_PORT 0x70 +#define CMOS_DATA_PORT 0x71 + +void +vrtc_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu); diff --git a/src/components/implementation/simple_vmm/nf_multicore/fast_memcpy.h b/src/components/implementation/simple_vmm/nf_multicore/fast_memcpy.h new file mode 100644 index 0000000000..ddd282d4ba --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/fast_memcpy.h @@ -0,0 +1,689 @@ +//===================================================================== +// +// FastMemcpy.c - skywind3000@163.com, 2015 +// +// feature: +// 50% speed up in avg. vs standard memcpy (tested in vc2012/gcc5.1) +// +//===================================================================== +#ifndef __FAST_MEMCPY_H__ +#define __FAST_MEMCPY_H__ + +#include +#include +#include + + +//--------------------------------------------------------------------- +// force inline for compilers +//--------------------------------------------------------------------- +#ifndef INLINE +#ifdef __GNUC__ +#if (__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1)) + #define INLINE __inline__ __attribute__((always_inline)) +#else + #define INLINE __inline__ +#endif +#elif defined(_MSC_VER) + #define INLINE __forceinline +#elif (defined(__BORLANDC__) || defined(__WATCOMC__)) + #define INLINE __inline +#else + #define INLINE +#endif +#endif + + + +//--------------------------------------------------------------------- +// fast copy for different sizes +//--------------------------------------------------------------------- +static INLINE void memcpy_sse2_16(void *dst, const void *src) { + __m128i m0 = _mm_loadu_si128(((const __m128i*)src) + 0); + _mm_storeu_si128(((__m128i*)dst) + 0, m0); +} + +static INLINE void memcpy_sse2_32(void *dst, const void *src) { + __m128i m0 = _mm_loadu_si128(((const __m128i*)src) + 0); + __m128i m1 = _mm_loadu_si128(((const __m128i*)src) + 1); + _mm_storeu_si128(((__m128i*)dst) + 0, m0); + _mm_storeu_si128(((__m128i*)dst) + 1, m1); +} + +static INLINE void memcpy_sse2_64(void *dst, const void *src) { + __m128i m0 = _mm_loadu_si128(((const __m128i*)src) + 0); + __m128i m1 = _mm_loadu_si128(((const __m128i*)src) + 1); + __m128i m2 = _mm_loadu_si128(((const __m128i*)src) + 2); + __m128i m3 = _mm_loadu_si128(((const __m128i*)src) + 3); + _mm_storeu_si128(((__m128i*)dst) + 0, m0); + _mm_storeu_si128(((__m128i*)dst) + 1, m1); + _mm_storeu_si128(((__m128i*)dst) + 2, m2); + _mm_storeu_si128(((__m128i*)dst) + 3, m3); +} + +static INLINE void memcpy_sse2_128(void *dst, const void *src) { + __m128i m0 = _mm_loadu_si128(((const __m128i*)src) + 0); + __m128i m1 = _mm_loadu_si128(((const __m128i*)src) + 1); + __m128i m2 = _mm_loadu_si128(((const __m128i*)src) + 2); + __m128i m3 = _mm_loadu_si128(((const __m128i*)src) + 3); + __m128i m4 = _mm_loadu_si128(((const __m128i*)src) + 4); + __m128i m5 = _mm_loadu_si128(((const __m128i*)src) + 5); + __m128i m6 = _mm_loadu_si128(((const __m128i*)src) + 6); + __m128i m7 = _mm_loadu_si128(((const __m128i*)src) + 7); + _mm_storeu_si128(((__m128i*)dst) + 0, m0); + _mm_storeu_si128(((__m128i*)dst) + 1, m1); + _mm_storeu_si128(((__m128i*)dst) + 2, m2); + _mm_storeu_si128(((__m128i*)dst) + 3, m3); + _mm_storeu_si128(((__m128i*)dst) + 4, m4); + _mm_storeu_si128(((__m128i*)dst) + 5, m5); + _mm_storeu_si128(((__m128i*)dst) + 6, m6); + _mm_storeu_si128(((__m128i*)dst) + 7, m7); +} + + +//--------------------------------------------------------------------- +// tiny memory copy with jump table optimized +//--------------------------------------------------------------------- +static INLINE void *memcpy_tiny(void *dst, const void *src, size_t size) { + unsigned char *dd = ((unsigned char*)dst) + size; + const unsigned char *ss = ((const unsigned char*)src) + size; + + switch (size) { + case 64: + memcpy_sse2_64(dd - 64, ss - 64); + case 0: + break; + + case 65: + memcpy_sse2_64(dd - 65, ss - 65); + case 1: + dd[-1] = ss[-1]; + break; + + case 66: + memcpy_sse2_64(dd - 66, ss - 66); + case 2: + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 67: + memcpy_sse2_64(dd - 67, ss - 67); + case 3: + *((uint16_t*)(dd - 3)) = *((uint16_t*)(ss - 3)); + dd[-1] = ss[-1]; + break; + + case 68: + memcpy_sse2_64(dd - 68, ss - 68); + case 4: + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 69: + memcpy_sse2_64(dd - 69, ss - 69); + case 5: + *((uint32_t*)(dd - 5)) = *((uint32_t*)(ss - 5)); + dd[-1] = ss[-1]; + break; + + case 70: + memcpy_sse2_64(dd - 70, ss - 70); + case 6: + *((uint32_t*)(dd - 6)) = *((uint32_t*)(ss - 6)); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 71: + memcpy_sse2_64(dd - 71, ss - 71); + case 7: + *((uint32_t*)(dd - 7)) = *((uint32_t*)(ss - 7)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 72: + memcpy_sse2_64(dd - 72, ss - 72); + case 8: + *((uint64_t*)(dd - 8)) = *((uint64_t*)(ss - 8)); + break; + + case 73: + memcpy_sse2_64(dd - 73, ss - 73); + case 9: + *((uint64_t*)(dd - 9)) = *((uint64_t*)(ss - 9)); + dd[-1] = ss[-1]; + break; + + case 74: + memcpy_sse2_64(dd - 74, ss - 74); + case 10: + *((uint64_t*)(dd - 10)) = *((uint64_t*)(ss - 10)); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 75: + memcpy_sse2_64(dd - 75, ss - 75); + case 11: + *((uint64_t*)(dd - 11)) = *((uint64_t*)(ss - 11)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 76: + memcpy_sse2_64(dd - 76, ss - 76); + case 12: + *((uint64_t*)(dd - 12)) = *((uint64_t*)(ss - 12)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 77: + memcpy_sse2_64(dd - 77, ss - 77); + case 13: + *((uint64_t*)(dd - 13)) = *((uint64_t*)(ss - 13)); + *((uint32_t*)(dd - 5)) = *((uint32_t*)(ss - 5)); + dd[-1] = ss[-1]; + break; + + case 78: + memcpy_sse2_64(dd - 78, ss - 78); + case 14: + *((uint64_t*)(dd - 14)) = *((uint64_t*)(ss - 14)); + *((uint64_t*)(dd - 8)) = *((uint64_t*)(ss - 8)); + break; + + case 79: + memcpy_sse2_64(dd - 79, ss - 79); + case 15: + *((uint64_t*)(dd - 15)) = *((uint64_t*)(ss - 15)); + *((uint64_t*)(dd - 8)) = *((uint64_t*)(ss - 8)); + break; + + case 80: + memcpy_sse2_64(dd - 80, ss - 80); + case 16: + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 81: + memcpy_sse2_64(dd - 81, ss - 81); + case 17: + memcpy_sse2_16(dd - 17, ss - 17); + dd[-1] = ss[-1]; + break; + + case 82: + memcpy_sse2_64(dd - 82, ss - 82); + case 18: + memcpy_sse2_16(dd - 18, ss - 18); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 83: + memcpy_sse2_64(dd - 83, ss - 83); + case 19: + memcpy_sse2_16(dd - 19, ss - 19); + *((uint16_t*)(dd - 3)) = *((uint16_t*)(ss - 3)); + dd[-1] = ss[-1]; + break; + + case 84: + memcpy_sse2_64(dd - 84, ss - 84); + case 20: + memcpy_sse2_16(dd - 20, ss - 20); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 85: + memcpy_sse2_64(dd - 85, ss - 85); + case 21: + memcpy_sse2_16(dd - 21, ss - 21); + *((uint32_t*)(dd - 5)) = *((uint32_t*)(ss - 5)); + dd[-1] = ss[-1]; + break; + + case 86: + memcpy_sse2_64(dd - 86, ss - 86); + case 22: + memcpy_sse2_16(dd - 22, ss - 22); + *((uint32_t*)(dd - 6)) = *((uint32_t*)(ss - 6)); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 87: + memcpy_sse2_64(dd - 87, ss - 87); + case 23: + memcpy_sse2_16(dd - 23, ss - 23); + *((uint32_t*)(dd - 7)) = *((uint32_t*)(ss - 7)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 88: + memcpy_sse2_64(dd - 88, ss - 88); + case 24: + memcpy_sse2_16(dd - 24, ss - 24); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 89: + memcpy_sse2_64(dd - 89, ss - 89); + case 25: + memcpy_sse2_16(dd - 25, ss - 25); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 90: + memcpy_sse2_64(dd - 90, ss - 90); + case 26: + memcpy_sse2_16(dd - 26, ss - 26); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 91: + memcpy_sse2_64(dd - 91, ss - 91); + case 27: + memcpy_sse2_16(dd - 27, ss - 27); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 92: + memcpy_sse2_64(dd - 92, ss - 92); + case 28: + memcpy_sse2_16(dd - 28, ss - 28); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 93: + memcpy_sse2_64(dd - 93, ss - 93); + case 29: + memcpy_sse2_16(dd - 29, ss - 29); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 94: + memcpy_sse2_64(dd - 94, ss - 94); + case 30: + memcpy_sse2_16(dd - 30, ss - 30); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 95: + memcpy_sse2_64(dd - 95, ss - 95); + case 31: + memcpy_sse2_16(dd - 31, ss - 31); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 96: + memcpy_sse2_64(dd - 96, ss - 96); + case 32: + memcpy_sse2_32(dd - 32, ss - 32); + break; + + case 97: + memcpy_sse2_64(dd - 97, ss - 97); + case 33: + memcpy_sse2_32(dd - 33, ss - 33); + dd[-1] = ss[-1]; + break; + + case 98: + memcpy_sse2_64(dd - 98, ss - 98); + case 34: + memcpy_sse2_32(dd - 34, ss - 34); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 99: + memcpy_sse2_64(dd - 99, ss - 99); + case 35: + memcpy_sse2_32(dd - 35, ss - 35); + *((uint16_t*)(dd - 3)) = *((uint16_t*)(ss - 3)); + dd[-1] = ss[-1]; + break; + + case 100: + memcpy_sse2_64(dd - 100, ss - 100); + case 36: + memcpy_sse2_32(dd - 36, ss - 36); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 101: + memcpy_sse2_64(dd - 101, ss - 101); + case 37: + memcpy_sse2_32(dd - 37, ss - 37); + *((uint32_t*)(dd - 5)) = *((uint32_t*)(ss - 5)); + dd[-1] = ss[-1]; + break; + + case 102: + memcpy_sse2_64(dd - 102, ss - 102); + case 38: + memcpy_sse2_32(dd - 38, ss - 38); + *((uint32_t*)(dd - 6)) = *((uint32_t*)(ss - 6)); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 103: + memcpy_sse2_64(dd - 103, ss - 103); + case 39: + memcpy_sse2_32(dd - 39, ss - 39); + *((uint32_t*)(dd - 7)) = *((uint32_t*)(ss - 7)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 104: + memcpy_sse2_64(dd - 104, ss - 104); + case 40: + memcpy_sse2_32(dd - 40, ss - 40); + *((uint64_t*)(dd - 8)) = *((uint64_t*)(ss - 8)); + break; + + case 105: + memcpy_sse2_64(dd - 105, ss - 105); + case 41: + memcpy_sse2_32(dd - 41, ss - 41); + *((uint64_t*)(dd - 9)) = *((uint64_t*)(ss - 9)); + dd[-1] = ss[-1]; + break; + + case 106: + memcpy_sse2_64(dd - 106, ss - 106); + case 42: + memcpy_sse2_32(dd - 42, ss - 42); + *((uint64_t*)(dd - 10)) = *((uint64_t*)(ss - 10)); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 107: + memcpy_sse2_64(dd - 107, ss - 107); + case 43: + memcpy_sse2_32(dd - 43, ss - 43); + *((uint64_t*)(dd - 11)) = *((uint64_t*)(ss - 11)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 108: + memcpy_sse2_64(dd - 108, ss - 108); + case 44: + memcpy_sse2_32(dd - 44, ss - 44); + *((uint64_t*)(dd - 12)) = *((uint64_t*)(ss - 12)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 109: + memcpy_sse2_64(dd - 109, ss - 109); + case 45: + memcpy_sse2_32(dd - 45, ss - 45); + *((uint64_t*)(dd - 13)) = *((uint64_t*)(ss - 13)); + *((uint32_t*)(dd - 5)) = *((uint32_t*)(ss - 5)); + dd[-1] = ss[-1]; + break; + + case 110: + memcpy_sse2_64(dd - 110, ss - 110); + case 46: + memcpy_sse2_32(dd - 46, ss - 46); + *((uint64_t*)(dd - 14)) = *((uint64_t*)(ss - 14)); + *((uint64_t*)(dd - 8)) = *((uint64_t*)(ss - 8)); + break; + + case 111: + memcpy_sse2_64(dd - 111, ss - 111); + case 47: + memcpy_sse2_32(dd - 47, ss - 47); + *((uint64_t*)(dd - 15)) = *((uint64_t*)(ss - 15)); + *((uint64_t*)(dd - 8)) = *((uint64_t*)(ss - 8)); + break; + + case 112: + memcpy_sse2_64(dd - 112, ss - 112); + case 48: + memcpy_sse2_32(dd - 48, ss - 48); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 113: + memcpy_sse2_64(dd - 113, ss - 113); + case 49: + memcpy_sse2_32(dd - 49, ss - 49); + memcpy_sse2_16(dd - 17, ss - 17); + dd[-1] = ss[-1]; + break; + + case 114: + memcpy_sse2_64(dd - 114, ss - 114); + case 50: + memcpy_sse2_32(dd - 50, ss - 50); + memcpy_sse2_16(dd - 18, ss - 18); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 115: + memcpy_sse2_64(dd - 115, ss - 115); + case 51: + memcpy_sse2_32(dd - 51, ss - 51); + memcpy_sse2_16(dd - 19, ss - 19); + *((uint16_t*)(dd - 3)) = *((uint16_t*)(ss - 3)); + dd[-1] = ss[-1]; + break; + + case 116: + memcpy_sse2_64(dd - 116, ss - 116); + case 52: + memcpy_sse2_32(dd - 52, ss - 52); + memcpy_sse2_16(dd - 20, ss - 20); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 117: + memcpy_sse2_64(dd - 117, ss - 117); + case 53: + memcpy_sse2_32(dd - 53, ss - 53); + memcpy_sse2_16(dd - 21, ss - 21); + *((uint32_t*)(dd - 5)) = *((uint32_t*)(ss - 5)); + dd[-1] = ss[-1]; + break; + + case 118: + memcpy_sse2_64(dd - 118, ss - 118); + case 54: + memcpy_sse2_32(dd - 54, ss - 54); + memcpy_sse2_16(dd - 22, ss - 22); + *((uint32_t*)(dd - 6)) = *((uint32_t*)(ss - 6)); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 119: + memcpy_sse2_64(dd - 119, ss - 119); + case 55: + memcpy_sse2_32(dd - 55, ss - 55); + memcpy_sse2_16(dd - 23, ss - 23); + *((uint32_t*)(dd - 7)) = *((uint32_t*)(ss - 7)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 120: + memcpy_sse2_64(dd - 120, ss - 120); + case 56: + memcpy_sse2_32(dd - 56, ss - 56); + memcpy_sse2_16(dd - 24, ss - 24); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 121: + memcpy_sse2_64(dd - 121, ss - 121); + case 57: + memcpy_sse2_32(dd - 57, ss - 57); + memcpy_sse2_16(dd - 25, ss - 25); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 122: + memcpy_sse2_64(dd - 122, ss - 122); + case 58: + memcpy_sse2_32(dd - 58, ss - 58); + memcpy_sse2_16(dd - 26, ss - 26); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 123: + memcpy_sse2_64(dd - 123, ss - 123); + case 59: + memcpy_sse2_32(dd - 59, ss - 59); + memcpy_sse2_16(dd - 27, ss - 27); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 124: + memcpy_sse2_64(dd - 124, ss - 124); + case 60: + memcpy_sse2_32(dd - 60, ss - 60); + memcpy_sse2_16(dd - 28, ss - 28); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 125: + memcpy_sse2_64(dd - 125, ss - 125); + case 61: + memcpy_sse2_32(dd - 61, ss - 61); + memcpy_sse2_16(dd - 29, ss - 29); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 126: + memcpy_sse2_64(dd - 126, ss - 126); + case 62: + memcpy_sse2_32(dd - 62, ss - 62); + memcpy_sse2_16(dd - 30, ss - 30); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 127: + memcpy_sse2_64(dd - 127, ss - 127); + case 63: + memcpy_sse2_32(dd - 63, ss - 63); + memcpy_sse2_16(dd - 31, ss - 31); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 128: + memcpy_sse2_128(dd - 128, ss - 128); + break; + } + + return dst; +} + + +//--------------------------------------------------------------------- +// main routine +//--------------------------------------------------------------------- +static void* memcpy_fast(void *destination, const void *source, size_t size) +{ + unsigned char *dst = (unsigned char*)destination; + const unsigned char *src = (const unsigned char*)source; + static size_t cachesize = 0x200000; // L2-cache size + size_t padding; + + // small memory copy + if (size <= 128) { + return memcpy_tiny(dst, src, size); + } + + // align destination to 16 bytes boundary + padding = (16 - (((size_t)dst) & 15)) & 15; + + if (padding > 0) { + __m128i head = _mm_loadu_si128((const __m128i*)src); + _mm_storeu_si128((__m128i*)dst, head); + dst += padding; + src += padding; + size -= padding; + } + + // medium size copy + if (size <= cachesize) { + __m128i c0, c1, c2, c3, c4, c5, c6, c7; + + for (; size >= 128; size -= 128) { + c0 = _mm_loadu_si128(((const __m128i*)src) + 0); + c1 = _mm_loadu_si128(((const __m128i*)src) + 1); + c2 = _mm_loadu_si128(((const __m128i*)src) + 2); + c3 = _mm_loadu_si128(((const __m128i*)src) + 3); + c4 = _mm_loadu_si128(((const __m128i*)src) + 4); + c5 = _mm_loadu_si128(((const __m128i*)src) + 5); + c6 = _mm_loadu_si128(((const __m128i*)src) + 6); + c7 = _mm_loadu_si128(((const __m128i*)src) + 7); + _mm_prefetch((const char*)(src + 256), _MM_HINT_NTA); + src += 128; + _mm_store_si128((((__m128i*)dst) + 0), c0); + _mm_store_si128((((__m128i*)dst) + 1), c1); + _mm_store_si128((((__m128i*)dst) + 2), c2); + _mm_store_si128((((__m128i*)dst) + 3), c3); + _mm_store_si128((((__m128i*)dst) + 4), c4); + _mm_store_si128((((__m128i*)dst) + 5), c5); + _mm_store_si128((((__m128i*)dst) + 6), c6); + _mm_store_si128((((__m128i*)dst) + 7), c7); + dst += 128; + } + } + else { // big memory copy + __m128i c0, c1, c2, c3, c4, c5, c6, c7; + + _mm_prefetch((const char*)(src), _MM_HINT_NTA); + + if ((((size_t)src) & 15) == 0) { // source aligned + for (; size >= 128; size -= 128) { + c0 = _mm_load_si128(((const __m128i*)src) + 0); + c1 = _mm_load_si128(((const __m128i*)src) + 1); + c2 = _mm_load_si128(((const __m128i*)src) + 2); + c3 = _mm_load_si128(((const __m128i*)src) + 3); + c4 = _mm_load_si128(((const __m128i*)src) + 4); + c5 = _mm_load_si128(((const __m128i*)src) + 5); + c6 = _mm_load_si128(((const __m128i*)src) + 6); + c7 = _mm_load_si128(((const __m128i*)src) + 7); + _mm_prefetch((const char*)(src + 256), _MM_HINT_NTA); + src += 128; + _mm_stream_si128((((__m128i*)dst) + 0), c0); + _mm_stream_si128((((__m128i*)dst) + 1), c1); + _mm_stream_si128((((__m128i*)dst) + 2), c2); + _mm_stream_si128((((__m128i*)dst) + 3), c3); + _mm_stream_si128((((__m128i*)dst) + 4), c4); + _mm_stream_si128((((__m128i*)dst) + 5), c5); + _mm_stream_si128((((__m128i*)dst) + 6), c6); + _mm_stream_si128((((__m128i*)dst) + 7), c7); + dst += 128; + } + } + else { // source unaligned + for (; size >= 128; size -= 128) { + c0 = _mm_loadu_si128(((const __m128i*)src) + 0); + c1 = _mm_loadu_si128(((const __m128i*)src) + 1); + c2 = _mm_loadu_si128(((const __m128i*)src) + 2); + c3 = _mm_loadu_si128(((const __m128i*)src) + 3); + c4 = _mm_loadu_si128(((const __m128i*)src) + 4); + c5 = _mm_loadu_si128(((const __m128i*)src) + 5); + c6 = _mm_loadu_si128(((const __m128i*)src) + 6); + c7 = _mm_loadu_si128(((const __m128i*)src) + 7); + _mm_prefetch((const char*)(src + 256), _MM_HINT_NTA); + src += 128; + _mm_stream_si128((((__m128i*)dst) + 0), c0); + _mm_stream_si128((((__m128i*)dst) + 1), c1); + _mm_stream_si128((((__m128i*)dst) + 2), c2); + _mm_stream_si128((((__m128i*)dst) + 3), c3); + _mm_stream_si128((((__m128i*)dst) + 4), c4); + _mm_stream_si128((((__m128i*)dst) + 5), c5); + _mm_stream_si128((((__m128i*)dst) + 6), c6); + _mm_stream_si128((((__m128i*)dst) + 7), c7); + dst += 128; + } + } + _mm_sfence(); + } + + memcpy_tiny(dst, src, size); + + return destination; +} + + +#endif diff --git a/src/components/implementation/simple_vmm/nf_multicore/guest/.gitignore b/src/components/implementation/simple_vmm/nf_multicore/guest/.gitignore new file mode 100644 index 0000000000..4a60f24ce6 --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/guest/.gitignore @@ -0,0 +1,2 @@ +*.elf +*.map \ No newline at end of file diff --git a/src/components/implementation/simple_vmm/nf_multicore/guest/Makefile b/src/components/implementation/simple_vmm/nf_multicore/guest/Makefile new file mode 100644 index 0000000000..0228863f04 --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/guest/Makefile @@ -0,0 +1,47 @@ +CC := gcc -m64 +LD := ld -m elf_x86_64 --nmagic +AS := as --64 -g + +CFLAGS := -g -O0 -ffreestanding -Wno-unused-function -Wno-unused-variable -Wno-unused-but-set-variable -nostdinc -nostdlib -fno-pic -mno-red-zone -mcmodel=large -mno-sse -mno-sse2 -mgeneral-regs-only +LDFLAGS := -nostdlib -fno-builtin -nostartfiles -nostdinc -nodefaultlibs + +GUEST_ELF = guest.elf +GUEST_IMG = guest.img +GUEST_MAP = guest.map + +AS_FILES = guest_realmode.S +AS_OBJS = $(patsubst %.S,%.o,$(AS_FILES)) + +WARNINGS += -Wall +WARNINGS += -Wcast-align +WARNINGS += -Wformat=2 +WARNINGS += -Winit-self +WARNINGS += -Wnested-externs +WARNINGS += -Wno-system-headers +WARNINGS += -Wold-style-definition +WARNINGS += -Wredundant-decls +WARNINGS += -Wsign-compare +WARNINGS += -Wstrict-prototypes +WARNINGS += -Wundef +WARNINGS += -Wvolatile-register-var +WARNINGS += -Wwrite-strings +WARNINGS += -Wno-address-of-packed-member + +CFLAGS += $(WARNINGS) + +all: $(GUEST_IMG) + +%.o: %.S + $(CC) $(CFLAGS) -I. -o $@ -c $< + +$(GUEST_IMG):$(GUEST_ELF) + @echo "[CT] $@" + @cp $< $@ + @objcopy $@ -O binary + +$(GUEST_ELF):$(AS_OBJS) + @echo "[LD] $@" + $(LD) $(LDPARAMS) -static -Map=$(GUEST_MAP) -T guest.ld -o $(GUEST_ELF) $(AS_OBJS) + +clean: + @rm -f $(GUEST_ELF) $(GUEST_IMG) $(GUEST_MAP) *.o \ No newline at end of file diff --git a/src/components/implementation/simple_vmm/nf_multicore/guest/guest.ld b/src/components/implementation/simple_vmm/nf_multicore/guest/guest.ld new file mode 100644 index 0000000000..07f9206c1f --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/guest/guest.ld @@ -0,0 +1,34 @@ +ENTRY(guest_real_mode_entry) +OUTPUT_FORMAT(elf64-x86-64) +OUTPUT_ARCH(i386:x86-64) + + +SECTIONS +{ + . = 0x1000; + + .text BLOCK(4K) : ALIGN(4K) + { + *(.guest_kernel_initfn*) + *(.text*) + *(.rodata*) + } + + .data BLOCK(4K) : ALIGN(4K) + { + KEEP(*( .init_array )); + KEEP(*(SORT_BY_INIT_PRIORITY( .init_array.* ))); + *(.data*) + } + + .bss BLOCK(4K) : ALIGN(4K) + { + *(.bss*) + } + + /DISCARD/ : + { + *(.fini_array*) + *(.comment*) + } +} diff --git a/src/components/implementation/simple_vmm/nf_multicore/guest/guest_realmode.S b/src/components/implementation/simple_vmm/nf_multicore/guest/guest_realmode.S new file mode 100644 index 0000000000..ac2e2ec0a7 --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/guest/guest_realmode.S @@ -0,0 +1,60 @@ +#define SEG_NULLASM \ + .word 0, 0; \ + .byte 0, 0, 0, 0 +#define SEG_ASM(type,base,lim) \ + .word (((lim) >> 12) & 0xffff), ((base) & 0xffff); \ + .byte (((base) >> 16) & 0xff), (0x90 | (type)), \ + (0xC0 | (((lim) >> 28) & 0xf)), (((base) >> 24) & 0xff) + +#define STA_X 0x8 // Executable segment +#define STA_E 0x4 // Expand down (non-executable segments) +#define STA_C 0x4 // Conforming code segment (executable only) +#define STA_W 0x2 // Writeable (non-executable segments) +#define STA_R 0x2 // Readable (executable segments) +#define STA_A 0x1 // Accessed + +#define CR0_PE 0x00000001 // Protection Enable +#define CR0_WP 0x00010000 // Write Protect +#define CR0_PG 0x80000000 // Paging + +#define SEL_KCSEG 0x08 /* Kernel code selector. */ +#define SEL_KDSEG 0x10 /* Kernel data selector. */ + +.global guest_real_mode_entry +/* code start entry */ +.section .guest_kernel_initfn +.code16 +guest_real_mode_entry: + ljmp $0x0, $start + +start: + cli + lgdt smpgdtdesc + movl %cr0, %eax + orl $CR0_PE, %eax + movl %eax, %cr0 + ljmpl $(SEL_KCSEG), $smpstart32 +.align 0x10 +.code32 +smpstart32: + movw $(SEL_KDSEG), %ax + movw %ax, %ds + movw %ax, %es + movw %ax, %ss + movw $0, %ax + movw %ax, %fs + movw %ax, %gs + + /* jmp to vmlinux bootloader at the specific address */ + ljmpl $(SEL_KCSEG), $0x100000 + jmp . + +.p2align 2 +smpgdt: + SEG_NULLASM + SEG_ASM(STA_X|STA_R, 0, 0xffffffff) /* code segment for protected mode, mapping 0-4G memory */ + SEG_ASM(STA_W, 0, 0xffffffff) /* data segment for protected mode, mapping 0-4G memory */ + +smpgdtdesc: + .word (smpgdtdesc - smpgdt - 1) + .long smpgdt diff --git a/src/components/implementation/simple_vmm/nf_multicore/instr_emul.c b/src/components/implementation/simple_vmm/nf_multicore/instr_emul.c new file mode 100644 index 0000000000..230a0a9bdf --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/instr_emul.c @@ -0,0 +1,1381 @@ +/*- + * Copyright (c) 2012 Sandvine, Inc. + * Copyright (c) 2012 NetApp, Inc. + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#include +#include + +#include + +#define CPU_REG_FIRST CPU_REG_RAX +#define CPU_REG_LAST CPU_REG_GDTR +#define CPU_REG_GENERAL_FIRST CPU_REG_RAX +#define CPU_REG_GENERAL_LAST CPU_REG_R15 +#define CPU_REG_NONGENERAL_FIRST CPU_REG_CR0 +#define CPU_REG_NONGENERAL_LAST CPU_REG_GDTR +#define CPU_REG_NATURAL_FIRST CPU_REG_CR0 +#define CPU_REG_NATURAL_LAST CPU_REG_RFLAGS +#define CPU_REG_64BIT_FIRST CPU_REG_EFER +#define CPU_REG_64BIT_LAST CPU_REG_PDPTE3 +#define CPU_REG_SEG_FIRST CPU_REG_ES +#define CPU_REG_SEG_LAST CPU_REG_GS + +#define PSL_C 0x00000001U /* carry bit */ +#define PSL_PF 0x00000004U /* parity bit */ +#define PSL_AF 0x00000010U /* bcd carry bit */ +#define PSL_Z 0x00000040U /* zero bit */ +#define PSL_N 0x00000080U /* negative bit */ +#define PSL_D 0x00000400U /* string instruction direction bit */ +#define PSL_V 0x00000800U /* overflow bit */ +#define PSL_AC 0x00040000U /* alignment checking */ + +/* + * Protections are chosen from these bits, or-ed together + */ +#define PROT_READ 0x01U /* pages can be read */ +#define PROT_WRITE 0x02U /* pages can be written */ + +/* struct vie_op.op_type */ +#define VIE_OP_TYPE_NONE 0U +#define VIE_OP_TYPE_MOV 1U +#define VIE_OP_TYPE_MOVSX 2U +#define VIE_OP_TYPE_MOVZX 3U +#define VIE_OP_TYPE_AND 4U +#define VIE_OP_TYPE_OR 5U +#define VIE_OP_TYPE_SUB 6U +#define VIE_OP_TYPE_TWO_BYTE 7U +#define VIE_OP_TYPE_PUSH 8U +#define VIE_OP_TYPE_CMP 9U +#define VIE_OP_TYPE_POP 10U +#define VIE_OP_TYPE_MOVS 11U +#define VIE_OP_TYPE_GROUP1 12U +#define VIE_OP_TYPE_STOS 13U +#define VIE_OP_TYPE_BITTEST 14U +#define VIE_OP_TYPE_TEST 15U +#define VIE_OP_TYPE_XCHG 16U + +/* struct vie_op.op_flags */ +#define VIE_OP_F_IMM (1U << 0U) /* 16/32-bit immediate operand */ +#define VIE_OP_F_IMM8 (1U << 1U) /* 8-bit immediate operand */ +#define VIE_OP_F_MOFFSET (1U << 2U) /* 16/32/64-bit immediate moffset */ +#define VIE_OP_F_NO_MODRM (1U << 3U) +#define VIE_OP_F_CHECK_GVA_DI (1U << 4U) /* for movs, need to check DI */ +/* + * The VIE_OP_F_BYTE_OP only set when the instruction support + * Encoding of Operand Size (w) Bit and the w bit of opcode is 0. + * according B.2 GENERAL-PURPOSE INSTRUCTION FORMATS AND ENCODINGS + * FOR NON-64-BIT MODES, Vol 2, Intel SDM. + */ +#define VIE_OP_F_BYTE_OP (1U << 5U) /* 8-bit operands. */ +#define VIE_OP_F_WORD_OP (1U << 6U) /* 16-bit operands. */ + +static const struct instr_emul_vie_op two_byte_opcodes[256] = { + [0xB6] = { + .op_type = VIE_OP_TYPE_MOVZX, + .op_flags = VIE_OP_F_BYTE_OP, + }, + [0xB7] = { + .op_type = VIE_OP_TYPE_MOVZX, + .op_flags = VIE_OP_F_WORD_OP, + }, + [0xBA] = { + .op_type = VIE_OP_TYPE_BITTEST, + .op_flags = VIE_OP_F_IMM8, + }, + [0xBE] = { + .op_type = VIE_OP_TYPE_MOVSX, + .op_flags = VIE_OP_F_BYTE_OP, + }, +}; + +static const struct instr_emul_vie_op one_byte_opcodes[256] = { + [0x0F] = { + .op_type = VIE_OP_TYPE_TWO_BYTE + }, + [0x2B] = { + .op_type = VIE_OP_TYPE_SUB, + }, + [0x39] = { + .op_type = VIE_OP_TYPE_CMP, + }, + [0x3B] = { + .op_type = VIE_OP_TYPE_CMP, + }, + [0x88] = { + .op_type = VIE_OP_TYPE_MOV, + .op_flags = VIE_OP_F_BYTE_OP, + }, + [0x89] = { + .op_type = VIE_OP_TYPE_MOV, + }, + [0x8A] = { + .op_type = VIE_OP_TYPE_MOV, + .op_flags = VIE_OP_F_BYTE_OP, + }, + [0x8B] = { + .op_type = VIE_OP_TYPE_MOV, + }, + [0xA1] = { + .op_type = VIE_OP_TYPE_MOV, + .op_flags = VIE_OP_F_MOFFSET | VIE_OP_F_NO_MODRM, + }, + [0xA3] = { + .op_type = VIE_OP_TYPE_MOV, + .op_flags = VIE_OP_F_MOFFSET | VIE_OP_F_NO_MODRM, + }, + [0xA4] = { + .op_type = VIE_OP_TYPE_MOVS, + .op_flags = VIE_OP_F_NO_MODRM | VIE_OP_F_CHECK_GVA_DI | VIE_OP_F_BYTE_OP, + }, + [0xA5] = { + .op_type = VIE_OP_TYPE_MOVS, + .op_flags = VIE_OP_F_NO_MODRM | VIE_OP_F_CHECK_GVA_DI, + }, + [0xAA] = { + .op_type = VIE_OP_TYPE_STOS, + .op_flags = VIE_OP_F_NO_MODRM | VIE_OP_F_BYTE_OP, + }, + [0xAB] = { + .op_type = VIE_OP_TYPE_STOS, + .op_flags = VIE_OP_F_NO_MODRM + }, + [0xC6] = { + /* XXX Group 11 extended opcode - not just MOV */ + .op_type = VIE_OP_TYPE_MOV, + .op_flags = VIE_OP_F_IMM8 | VIE_OP_F_BYTE_OP, + }, + [0xC7] = { + .op_type = VIE_OP_TYPE_MOV, + .op_flags = VIE_OP_F_IMM, + }, + [0x23] = { + .op_type = VIE_OP_TYPE_AND, + }, + [0x80] = { + /* Group 1 extended opcode */ + .op_type = VIE_OP_TYPE_GROUP1, + .op_flags = VIE_OP_F_IMM8, + }, + [0x81] = { + /* Group 1 extended opcode */ + .op_type = VIE_OP_TYPE_GROUP1, + .op_flags = VIE_OP_F_IMM, + }, + [0x83] = { + /* Group 1 extended opcode */ + .op_type = VIE_OP_TYPE_GROUP1, + .op_flags = VIE_OP_F_IMM8, + }, + [0x84] = { + .op_type = VIE_OP_TYPE_TEST, + .op_flags = VIE_OP_F_BYTE_OP, + }, + [0x85] = { + .op_type = VIE_OP_TYPE_TEST, + }, + [0x86] = { + .op_type = VIE_OP_TYPE_XCHG, + }, + [0x87] = { + .op_type = VIE_OP_TYPE_XCHG, + }, + [0x08] = { + .op_type = VIE_OP_TYPE_OR, + .op_flags = VIE_OP_F_BYTE_OP, + }, + [0x09] = { + .op_type = VIE_OP_TYPE_OR, + }, +}; + +/* struct vie.mod */ +#define VIE_MOD_INDIRECT 0U +#define VIE_MOD_INDIRECT_DISP8 1U +#define VIE_MOD_INDIRECT_DISP32 2U +#define VIE_MOD_DIRECT 3U + +/* struct vie.rm */ +#define VIE_RM_SIB 4U +#define VIE_RM_DISP32 5U + +static uint64_t size2mask[9] = { + [1] = (1UL << 8U) - 1UL, + [2] = (1UL << 16U) - 1UL, + [4] = (1UL << 32U) - 1UL, + [8] = ~0UL, +}; + +#define VMX_INVALID_VMCS_FIELD 0xffffffffU + +/* + * This struct vmcs_seg_field is defined separately to hold the vmcs field + * address of segment selector. + */ +struct vmcs_seg_field { + uint32_t base_field; + uint32_t limit_field; + uint32_t access_field; +}; + +/* + * The 'access' field has the format specified in Table 21-2 of the Intel + * Architecture Manual vol 3b. + * + * XXX The contents of the 'access' field are architecturally defined except + * bit 16 - Segment Unusable. + */ +struct seg_desc { + uint64_t base; + uint32_t limit; + uint32_t access; +}; + +static inline struct acrn_mmio_request *vcpu_mmio_req(struct vmrt_vm_vcpu *vcpu) +{ + return (struct acrn_mmio_request *)(vcpu->mmio_request); +} + +static inline uint32_t seg_desc_type(uint32_t access) +{ + return (access & 0x001fU); +} + +static uint64_t vm_get_register(struct vmrt_vm_vcpu *vcpu, enum cpu_reg_name reg) +{ + volatile struct vm_vcpu_shared_region *regs = vcpu->shared_region; + uint64_t reg_val = 0UL; + + switch (reg) + { + case CPU_REG_RAX: + reg_val = regs->ax; + break; + case CPU_REG_RCX: + reg_val = regs->cx; + break; + case CPU_REG_RDX: + reg_val = regs->dx; + break; + case CPU_REG_RBX: + reg_val = regs->bx; + break; + case CPU_REG_RSP: + reg_val = regs->sp; + break; + case CPU_REG_RBP: + reg_val = regs->bp; + break; + case CPU_REG_RSI: + reg_val = regs->si; + break; + case CPU_REG_RDI: + reg_val = regs->di; + break; + case CPU_REG_R8: + reg_val = regs->r8; + break; + case CPU_REG_R9: + reg_val = regs->r9; + break; + case CPU_REG_R10: + reg_val = regs->r10; + break; + case CPU_REG_R11: + reg_val = regs->r11; + break; + case CPU_REG_R12: + reg_val = regs->r12; + break; + case CPU_REG_R13: + reg_val = regs->r13; + break; + case CPU_REG_R14: + reg_val = regs->r14; + break; + case CPU_REG_R15: + reg_val = regs->r15; + break; + default: + VM_PANIC(vcpu); + break; + } + + return reg_val; +} + +static void vm_set_register(struct vmrt_vm_vcpu *vcpu, enum cpu_reg_name reg, + uint64_t val) +{ + volatile struct vm_vcpu_shared_region *regs = vcpu->shared_region; + + switch (reg) + { + case CPU_REG_RAX: + regs->ax = val; + break; + case CPU_REG_RCX: + regs->cx = val; + break; + case CPU_REG_RDX: + regs->dx = val; + break; + case CPU_REG_RBX: + regs->bx = val; + break; + case CPU_REG_RSP: + regs->sp = val; + break; + case CPU_REG_RBP: + regs->bp = val; + break; + case CPU_REG_RSI: + regs->si = val; + break; + case CPU_REG_RDI: + regs->di = val; + break; + case CPU_REG_R8: + regs->r8 = val; + break; + case CPU_REG_R9: + regs->r9 = val; + break; + case CPU_REG_R10: + regs->r10 = val; + break; + case CPU_REG_R11: + regs->r11 = val; + break; + case CPU_REG_R12: + regs->r12 = val; + break; + case CPU_REG_R13: + regs->r13 = val; + break; + case CPU_REG_R14: + regs->r14 = val; + break; + case CPU_REG_R15: + regs->r15 = val; + break; + default: + VM_PANIC(vcpu); + break; + } +} + +static int32_t vie_canonical_check(uint64_t gla) +{ + int32_t ret = 0; + uint64_t mask; + + /* + * The value of the bit 47 in the 'gla' should be replicated in the + * most significant 16 bits. + */ + mask = ~((1UL << 48U) - 1UL); + if ((gla & (1UL << 47U)) != 0U) { + ret = ((gla & mask) != mask) ? 1 : 0; + } else { + ret = ((gla & mask) != 0U) ? 1 : 0; + } + + return ret; +} + +/* + * @pre vcpu != NULL + */ +static inline void vie_mmio_read(struct vmrt_vm_vcpu *vcpu, uint64_t *rval) +{ + *rval = vcpu_mmio_req(vcpu)->value; +} + +/* + * @pre vcpu != NULL + */ +static inline void vie_mmio_write(struct vmrt_vm_vcpu *vcpu, uint64_t wval) +{ + vcpu_mmio_req(vcpu)->value = wval; +} + +static void vie_calc_bytereg(const struct instr_emul_vie *vie, + enum cpu_reg_name *reg, int32_t *lhbr) +{ + *lhbr = 0; + *reg = (enum cpu_reg_name)(vie->reg); + + /* + * 64-bit mode imposes limitations on accessing legacy high byte + * registers (lhbr). + * + * The legacy high-byte registers cannot be addressed if the REX + * prefix is present. In this case the values 4, 5, 6 and 7 of the + * 'ModRM:reg' field address %spl, %bpl, %sil and %dil respectively. + * + * If the REX prefix is not present then the values 4, 5, 6 and 7 + * of the 'ModRM:reg' field address the legacy high-byte registers, + * %ah, %ch, %dh and %bh respectively. + */ + if (vie->rex_present == 0U) { + if ((vie->reg & 0x4U) != 0U) { + *lhbr = 1; + *reg = (enum cpu_reg_name)(vie->reg & 0x3U); + } + } +} + +static uint8_t vie_read_bytereg(struct vmrt_vm_vcpu *vcpu, const struct instr_emul_vie *vie) +{ + int32_t lhbr; + uint64_t val; + uint8_t reg_val; + enum cpu_reg_name reg; + + vie_calc_bytereg(vie, ®, &lhbr); + val = vm_get_register(vcpu, reg); + + /* + * To obtain the value of a legacy high byte register shift the + * base register right by 8 bits (%ah = %rax >> 8). + */ + if (lhbr != 0) { + reg_val = (uint8_t)(val >> 8U); + } else { + reg_val = (uint8_t)val; + } + + return reg_val; +} + +static void vie_write_bytereg(struct vmrt_vm_vcpu *vcpu, const struct instr_emul_vie *vie, + uint8_t byte) +{ + uint64_t origval, val, mask; + enum cpu_reg_name reg; + int32_t lhbr; + + vie_calc_bytereg(vie, ®, &lhbr); + origval = vm_get_register(vcpu, reg); + + val = byte; + mask = 0xffU; + if (lhbr != 0) { + /* + * Shift left by 8 to store 'byte' in a legacy high + * byte register. + */ + val <<= 8U; + mask <<= 8U; + } + val |= origval & ~mask; + vm_set_register(vcpu, reg, val); +} + +/** + * @pre vcpu != NULL + * @pre size = 1, 2, 4 or 8 + * @pre ((reg <= CPU_REG_LAST) && (reg >= CPU_REG_FIRST)) + * @pre ((reg != CPU_REG_CR2) && (reg != CPU_REG_IDTR) && (reg != CPU_REG_GDTR)) + */ +static void vie_update_register(struct vmrt_vm_vcpu *vcpu, enum cpu_reg_name reg, + uint64_t val_arg, uint8_t size) +{ + uint64_t origval; + uint64_t val = val_arg; + + switch (size) { + case 1U: + case 2U: + origval = vm_get_register(vcpu, reg); + val &= size2mask[size]; + val |= origval & ~size2mask[size]; + break; + case 4U: + val &= 0xffffffffUL; + break; + default: /* size == 8 */ + break; + } + + vm_set_register(vcpu, reg, val); +} + +#define RFLAGS_STATUS_BITS (PSL_C | PSL_PF | PSL_AF | PSL_Z | PSL_N | PSL_V) + +static void vie_update_rflags(struct vmrt_vm_vcpu *vcpu, uint64_t rflags2, uint64_t psl) +{ + uint8_t size; + uint64_t rflags; + + rflags = vm_get_register(vcpu, CPU_REG_RFLAGS); + + rflags &= ~RFLAGS_STATUS_BITS; + rflags |= rflags2 & psl; + size = 8U; + + vie_update_register(vcpu, CPU_REG_RFLAGS, rflags, size); +} + +/* + * Return the status flags that would result from doing (x - y). + */ +#define build_getcc(name, type) \ +static uint64_t name(type x, type y) \ +{ \ + uint64_t rflags; \ + \ + __asm __volatile("sub %2,%1; pushfq; popq %0" : \ + "=r" (rflags), "+r" (x) : "m" (y)); \ + return rflags; \ +} +build_getcc(getcc8, uint8_t) +build_getcc(getcc16, uint16_t) +build_getcc(getcc32, uint32_t) +build_getcc(getcc64, uint64_t) + +/** + * @pre opsize = 1, 2, 4 or 8 + */ +static uint64_t getcc(uint8_t opsize, uint64_t x, uint64_t y) +{ + uint64_t rflags; + switch (opsize) { + case 1U: + rflags = getcc8((uint8_t) x, (uint8_t) y); + break; + case 2U: + rflags = getcc16((uint16_t) x, (uint16_t) y); + break; + case 4U: + rflags = getcc32((uint32_t) x, (uint32_t) y); + break; + default: /* opsize == 8 */ + rflags = getcc64(x, y); + break; + } + + return rflags; +} + +static int32_t emulate_mov(struct vmrt_vm_vcpu *vcpu, const struct instr_emul_vie *vie) +{ + int32_t error; + uint8_t size; + enum cpu_reg_name reg; + uint8_t byte; + uint64_t val; + + size = vie->opsize; + error = 0; + switch (vie->opcode) { + case 0x88U: + /* + * MOV byte from reg (ModRM:reg) to mem (ModRM:r/m) + * 88/r: mov r/m8, r8 + * REX + 88/r: mov r/m8, r8 (%ah, %ch, %dh, %bh not available) + */ + byte = vie_read_bytereg(vcpu, vie); + vie_mmio_write(vcpu, byte); + break; + case 0x89U: + /* + * MOV from reg (ModRM:reg) to mem (ModRM:r/m) + * 89/r: mov r/m16, r16 + * 89/r: mov r/m32, r32 + * REX.W + 89/r mov r/m64, r64 + */ + + reg = (enum cpu_reg_name)(vie->reg); + val = vm_get_register(vcpu, reg); + val &= size2mask[size]; + vie_mmio_write(vcpu, val); + break; + case 0x8AU: + /* + * MOV byte from mem (ModRM:r/m) to reg (ModRM:reg) + * 8A/r: mov r8, r/m8 + * REX + 8A/r: mov r8, r/m8 + */ + vie_mmio_read(vcpu, &val); + vie_write_bytereg(vcpu, vie, (uint8_t)val); + break; + case 0x8BU: + /* + * MOV from mem (ModRM:r/m) to reg (ModRM:reg) + * 8B/r: mov r16, r/m16 + * 8B/r: mov r32, r/m32 + * REX.W 8B/r: mov r64, r/m64 + */ + vie_mmio_read(vcpu, &val); + reg = (enum cpu_reg_name)(vie->reg); + vie_update_register(vcpu, reg, val, size); + break; + case 0xA1U: + /* + * MOV from seg:moffset to AX/EAX/RAX + * A1: mov AX, moffs16 + * A1: mov EAX, moffs32 + * REX.W + A1: mov RAX, moffs64 + */ + vie_mmio_read(vcpu, &val); + reg = CPU_REG_RAX; + vie_update_register(vcpu, reg, val, size); + break; + case 0xA3U: + /* + * MOV from AX/EAX/RAX to seg:moffset + * A3: mov moffs16, AX + * A3: mov moffs32, EAX + * REX.W + A3: mov moffs64, RAX + */ + val = vm_get_register(vcpu, CPU_REG_RAX); + val &= size2mask[size]; + vie_mmio_write(vcpu, val); + break; + case 0xC6U: + /* + * MOV from imm8 to mem (ModRM:r/m) + * C6/0 mov r/m8, imm8 + * REX + C6/0 mov r/m8, imm8 + */ + vie_mmio_write(vcpu, (uint64_t)vie->immediate); + break; + case 0xC7U: + /* + * MOV from imm16/imm32 to mem (ModRM:r/m) + * C7/0 mov r/m16, imm16 + * C7/0 mov r/m32, imm32 + * REX.W + C7/0 mov r/m64, imm32 + * (sign-extended to 64-bits) + */ + val = (uint64_t)(vie->immediate) & size2mask[size]; + vie_mmio_write(vcpu, val); + break; + default: + /* + * For the opcode that is not handled (an invalid opcode), the + * error code is assigned to a default value (-EINVAL). + * Gracefully return this error code if prior case clauses have + * not been met. + */ + error = -EINVAL; + break; + } + + return error; +} + +static void copy_from_gva(struct vmrt_vm_vcpu *vcpu, void *buf, u64_t gva, u32_t len) +{ + void *src = GPA2HVA(vmrt_vm_gva2gpa(vcpu, gva), vcpu->vm); + memcpy(buf, src, len); +} + +static int32_t vie_init(struct instr_emul_vie *vie, struct vmrt_vm_vcpu *vcpu) +{ + volatile struct vm_vcpu_shared_region *regs = vcpu->shared_region; + u64_t inst_len = regs->inst_length; + int32_t ret; + + if ((inst_len > VIE_INST_SIZE) || (inst_len == 0U)) { + VM_PANIC(vcpu); + } else { + (void)memset(vie, 0U, sizeof(struct instr_emul_vie)); + + /* init register fields in vie. */ + vie->base_register = CPU_REG_LAST; + vie->index_register = CPU_REG_LAST; + vie->segment_register = CPU_REG_LAST; + + copy_from_gva(vcpu, vie->inst, regs->ip, inst_len); + /* + * Use this to print the inst binary to verify if the decodeed inst is correct + * + printc("inst to be decode: "); + for (u64_t i = 0; i < inst_len; i++) { + printc("%x ", vie->inst[i]); + } + printc("\ninst vie init done\n"); + */ + + vie->num_valid = (uint8_t)inst_len; + ret = 0; + } + + return ret; +} + +static int32_t vie_peek(const struct instr_emul_vie *vie, uint8_t *x) +{ + int32_t ret; + if (vie->num_processed < vie->num_valid) { + *x = vie->inst[vie->num_processed]; + ret = 0; + } else { + ret = -1; + } + return ret; +} + +static void vie_advance(struct instr_emul_vie *vie) +{ + + vie->num_processed++; +} + +static bool segment_override(uint8_t x, enum cpu_reg_name *seg) +{ + bool override = true; + switch (x) { + case 0x2EU: + *seg = CPU_REG_CS; + break; + case 0x36U: + *seg = CPU_REG_SS; + break; + case 0x3EU: + *seg = CPU_REG_DS; + break; + case 0x26U: + *seg = CPU_REG_ES; + break; + case 0x64U: + *seg = CPU_REG_FS; + break; + case 0x65U: + *seg = CPU_REG_GS; + break; + default: + override = false; + break; + } + return override; +} + +static void decode_op_and_addr_size(struct instr_emul_vie *vie) +{ + /* + * Section "Operand-Size And Address-Size Attributes", Intel SDM, Vol 1 + */ + + /* + * Default address size is 64-bits and default operand size + * is 32-bits. + */ + vie->addrsize = ((vie->addrsize_override != 0U) ? 4U : 8U); + if (vie->rex_w != 0U) { + vie->opsize = 8U; + } else if (vie->opsize_override != 0U) { + vie->opsize = 2U; + } else { + vie->opsize = 4U; + } +} +static int32_t decode_prefixes(struct instr_emul_vie *vie) +{ + uint8_t x, i; + int32_t ret = 0; + + for (i = 0U; i < VIE_PREFIX_SIZE; i++) { + if (vie_peek(vie, &x) != 0) { + ret = -1; + break; + } else { + if (x == 0x66U) { + vie->opsize_override = 1U; + } else if (x == 0x67U) { + vie->addrsize_override = 1U; + } else if (x == 0xF3U) { + vie->repz_present = 1U; + } else if (x == 0xF2U) { + vie->repnz_present = 1U; + } else if (segment_override(x, &vie->segment_register)) { + vie->seg_override = 1U; + } else { + break; + } + + vie_advance(vie); + } + } + + if (ret == 0) { + /* + * From section 2.2.1, "REX Prefixes", Intel SDM Vol 2: + * - Only one REX prefix is allowed per instruction. + * - The REX prefix must immediately precede the opcode byte or the + * escape opcode byte. + * - If an instruction has a mandatory prefix (0x66, 0xF2 or 0xF3) + * the mandatory prefix must come before the REX prefix. + */ + if ( (x >= 0x40U) && (x <= 0x4FU)) { + vie->rex_present = 1U; + vie->rex_w = (x >> 0x3U) & 1U; + vie->rex_r = (x >> 0x2U) & 1U; + vie->rex_x = (x >> 0x1U) & 1U; + vie->rex_b = (x >> 0x0U) & 1U; + vie_advance(vie); + } + decode_op_and_addr_size(vie); + } + + return ret; +} + +static int32_t decode_two_byte_opcode(struct instr_emul_vie *vie) +{ + int32_t ret = 0; + uint8_t x; + + if (vie_peek(vie, &x) != 0) { + ret = -1; + } else { + vie->opcode = x; + vie->op = two_byte_opcodes[x]; + + if (vie->op.op_type == VIE_OP_TYPE_NONE) { + ret = -1; + } else { + vie_advance(vie); + } + } + + return ret; +} + +static int32_t decode_opcode(struct instr_emul_vie *vie) +{ + int32_t ret = 0; + uint8_t x; + + if (vie_peek(vie, &x) != 0) { + ret = -1; + } else { + vie->opcode = x; + vie->op = one_byte_opcodes[x]; + + if (vie->op.op_type == VIE_OP_TYPE_NONE) { + ret = -1; + } else { + vie_advance(vie); + + if (vie->op.op_type == VIE_OP_TYPE_TWO_BYTE) { + ret = decode_two_byte_opcode(vie); + } + } + } + + return ret; +} + +static int32_t decode_modrm(struct instr_emul_vie *vie) +{ + uint8_t x; + int32_t ret; + + if ((vie->op.op_flags & VIE_OP_F_NO_MODRM) != 0U) { + ret = 0; + } else if (vie_peek(vie, &x) != 0) { + ret = -1; + } else { + vie->mod = (x >> 6U) & 0x3U; + vie->rm = (x >> 0U) & 0x7U; + vie->reg = (x >> 3U) & 0x7U; + + /* + * A direct addressing mode makes no sense in the context of an EPT + * fault. There has to be a memory access involved to cause the + * EPT fault. + */ + if (vie->mod == VIE_MOD_DIRECT) { + ret = -1; + } else { + if (((vie->mod == VIE_MOD_INDIRECT) && (vie->rm == VIE_RM_DISP32)) || + ((vie->mod != VIE_MOD_DIRECT) && (vie->rm == VIE_RM_SIB))) { + /* + * Table 2-5: Special Cases of REX Encodings + * + * mod=0, r/m=5 is used in the compatibility mode to + * indicate a disp32 without a base register. + * + * mod!=3, r/m=4 is used in the compatibility mode to + * indicate that the SIB byte is present. + * + * The 'b' bit in the REX prefix is don't care in + * this case. + */ + } else { + vie->rm |= (vie->rex_b << 3U); + } + + vie->reg |= (vie->rex_r << 3U); + + /* SIB */ + if ((vie->mod != VIE_MOD_DIRECT) && (vie->rm == VIE_RM_SIB)) { + /* done */ + } else { + vie->base_register = (enum cpu_reg_name)vie->rm; + + switch (vie->mod) { + case VIE_MOD_INDIRECT_DISP8: + vie->disp_bytes = 1U; + break; + case VIE_MOD_INDIRECT_DISP32: + vie->disp_bytes = 4U; + break; + case VIE_MOD_INDIRECT: + if (vie->rm == VIE_RM_DISP32) { + vie->disp_bytes = 4U; + /* + * Table 2-7. RIP-Relative Addressing + * + * In 64-bit mode mod=00 r/m=101 implies [rip] + disp32 + * whereas in compatibility mode it just implies disp32. + */ + + vie->base_register = CPU_REG_RIP; + printc("VM exit with RIP as indirect access"); + assert(0); + } + break; + default: + /* VIE_MOD_DIRECT */ + break; + } + + } + vie_advance(vie); + + ret = 0; + } + } + + return ret; +} + +static int32_t decode_sib(struct instr_emul_vie *vie) +{ + uint8_t x; + int32_t ret; + + /* Proceed only if SIB byte is present */ + if ((vie->mod == VIE_MOD_DIRECT) || (vie->rm != VIE_RM_SIB)) { + ret = 0; + } else if (vie_peek(vie, &x) != 0) { + ret = -1; + } else { + + /* De-construct the SIB byte */ + vie->ss = (x >> 6U) & 0x3U; + vie->index = (x >> 3U) & 0x7U; + vie->base = (x >> 0U) & 0x7U; + + /* Apply the REX prefix modifiers */ + vie->index |= vie->rex_x << 3U; + vie->base |= vie->rex_b << 3U; + + switch (vie->mod) { + case VIE_MOD_INDIRECT_DISP8: + vie->disp_bytes = 1U; + break; + case VIE_MOD_INDIRECT_DISP32: + vie->disp_bytes = 4U; + break; + default: + /* + * All possible values of 'vie->mod': + * 1. VIE_MOD_DIRECT + * has been handled at the start of this function + * 2. VIE_MOD_INDIRECT_DISP8 + * has been handled in prior case clauses + * 3. VIE_MOD_INDIRECT_DISP32 + * has been handled in prior case clauses + * 4. VIE_MOD_INDIRECT + * will be handled later after this switch statement + */ + break; + } + + if ((vie->mod == VIE_MOD_INDIRECT) && ((vie->base == 5U) || (vie->base == 13U))) { + /* + * Special case when base register is unused if mod = 0 + * and base = %rbp or %r13. + * + * Documented in: + * Table 2-3: 32-bit Addressing Forms with the SIB Byte + * Table 2-5: Special Cases of REX Encodings + */ + vie->disp_bytes = 4U; + } else { + vie->base_register = (enum cpu_reg_name)vie->base; + } + + /* + * All encodings of 'index' are valid except for %rsp (4). + * + * Documented in: + * Table 2-3: 32-bit Addressing Forms with the SIB Byte + * Table 2-5: Special Cases of REX Encodings + */ + if (vie->index != 4U) { + vie->index_register = (enum cpu_reg_name)vie->index; + } + + /* 'scale' makes sense only in the context of an index register */ + if (vie->index_register < CPU_REG_LAST) { + vie->scale = 1U << vie->ss; + } + + vie_advance(vie); + + ret = 0; + } + + return ret; +} + +static int32_t decode_displacement(struct instr_emul_vie *vie) +{ + uint8_t n, i, x; + int32_t ret = 0; + + union { + uint8_t buf[4]; + int8_t signed8; + int32_t signed32; + } u; + + n = vie->disp_bytes; + if (n != 0U) { + if ((n != 1U) && (n != 4U)) { + printc("%s: decode_displacement: invalid disp_bytes %d", __func__, n); + ret = -EINVAL; + } else { + + for (i = 0U; i < n; i++) { + if (vie_peek(vie, &x) != 0) { + ret = -1; + break; + } + + u.buf[i] = x; + vie_advance(vie); + } + + if (ret == 0) { + if (n == 1U) { + vie->displacement = u.signed8; /* sign-extended */ + } else { + vie->displacement = u.signed32; /* sign-extended */ + } + } + } + } + + return ret; +} + +static int32_t decode_immediate(struct instr_emul_vie *vie) +{ + uint8_t i, n, x; + int32_t ret = 0; + union { + uint8_t buf[4]; + int8_t signed8; + int16_t signed16; + int32_t signed32; + } u; + + /* Figure out immediate operand size (if any) */ + if ((vie->op.op_flags & VIE_OP_F_IMM) != 0U) { + /* + * Section 2.2.1.5 "Immediates", Intel SDM: + * In 64-bit mode the typical size of immediate operands + * remains 32-bits. When the operand size if 64-bits, the + * processor sign-extends all immediates to 64-bits prior + * to their use. + */ + if ((vie->opsize == 4U) || (vie->opsize == 8U)) { + vie->imm_bytes = 4U; + } + else { + vie->imm_bytes = 2U; + } + } else if ((vie->op.op_flags & VIE_OP_F_IMM8) != 0U) { + vie->imm_bytes = 1U; + } else { + /* No op_flag on immediate operand size */ + } + + n = vie->imm_bytes; + if (n != 0U) { + if ((n != 1U) && (n != 2U) && (n != 4U)) { + printc("%s: invalid number of immediate bytes: %d", __func__, n); + ret = -EINVAL; + } else { + for (i = 0U; i < n; i++) { + if (vie_peek(vie, &x) != 0) { + ret = -1; + break; + } + + u.buf[i] = x; + vie_advance(vie); + } + + if (ret == 0) { + /* sign-extend the immediate value before use */ + if (n == 1U) { + vie->immediate = u.signed8; + } else if (n == 2U) { + vie->immediate = u.signed16; + } else { + vie->immediate = u.signed32; + } + } + } + } + + return ret; +} + +static int32_t decode_moffset(struct instr_emul_vie *vie) +{ + uint8_t i, n, x; + int32_t ret = 0; + union { + uint8_t buf[8]; + uint64_t u64; + } u; + + if ((vie->op.op_flags & VIE_OP_F_MOFFSET) != 0U) { + /* + * Section 2.2.1.4, "Direct Memory-Offset MOVs", Intel SDM: + * The memory offset size follows the address-size of the instruction. + */ + n = vie->addrsize; + if ((n != 2U) && (n != 4U) && (n != 8U)) { + printc("%s: invalid moffset bytes: %hhu", __func__, n); + ret = -EINVAL; + } else { + u.u64 = 0UL; + for (i = 0U; i < n; i++) { + if (vie_peek(vie, &x) != 0) { + ret = -1; + break; + } + + u.buf[i] = x; + vie_advance(vie); + } + if (ret == 0) { + vie->displacement = (int64_t)u.u64; + } + } + } + + return ret; +} + +static int32_t local_decode_instruction(struct instr_emul_vie *vie) +{ + int32_t ret; + + if (decode_prefixes(vie) != 0) { + ret = -1; + } else if (decode_opcode(vie) != 0) { + ret = -1; + } else if (decode_modrm(vie) != 0) { + ret = -1; + } else if (decode_sib(vie) != 0) { + ret = -1; + } else if (decode_displacement(vie) != 0) { + ret = -1; + } else if (decode_immediate(vie) != 0) { + ret = -1; + } else if (decode_moffset(vie) != 0) { + ret = -1; + } else { + vie->decoded = 1U; /* success */ + ret = 0; + } + + return ret; +} + +static int32_t instr_check_gva(struct vmrt_vm_vcpu *vcpu) +{ + int32_t ret = 0; + uint64_t base, segbase, idx, gva; + enum cpu_reg_name seg; + struct instr_emul_vie *vie = &((struct instr_emul_ctxt *)vcpu->inst_ctxt)->vie; + + base = 0UL; + if (vie->base_register != CPU_REG_LAST) { + base = vm_get_register(vcpu, vie->base_register); + + /* RIP relative addressing starts from the + * following instruction + */ + if (vie->base_register == CPU_REG_RIP) { + base += vie->num_processed; + } + + } + + idx = 0UL; + if (vie->index_register != CPU_REG_LAST) { + idx = vm_get_register(vcpu, vie->index_register); + } + + /* "Specifying a Segment Selector" of SDM Vol1 3.7.4 + * + * In legacy IA-32 mode, when ESP or EBP register is used as + * base, the SS segment is default segment. + * + * All data references, except when relative to stack or + * string destination, DS is default segment. + * + * segment override could overwrite the default segment + * + * 64bit mode, segmentation is generally disabled. The + * exception are FS and GS. + */ + if (vie->seg_override != 0U) { + seg = vie->segment_register; + } else if ((vie->base_register == CPU_REG_RSP) || + (vie->base_register == CPU_REG_RBP)) { + seg = CPU_REG_SS; + } else { + seg = CPU_REG_DS; + } + + if ((seg != CPU_REG_FS) && + (seg != CPU_REG_GS)) { + segbase = 0UL; + } else { + struct seg_desc desc; + + VM_PANIC(vcpu); + segbase = desc.base; + } + + gva = segbase + base + (uint64_t)vie->scale * idx + (uint64_t)vie->displacement; + + vie->gva = gva; + + if (vie_canonical_check(gva) != 0) { + VM_PANIC(vcpu); + } else { + #define PAGE_FAULT_WR_FLAG 0x00000002U + + vmrt_vm_gva2gpa(vcpu, gva); + ret = 0; + if (ret < 0) { + VM_PANIC(vcpu); + } else { + ret = 0; + } + } + + return ret; +} + +int32_t decode_instruction(struct vmrt_vm_vcpu *vcpu) +{ + struct instr_emul_ctxt *emul_ctxt; + uint32_t csar; + int32_t retval; + + emul_ctxt = vcpu->inst_ctxt; + retval = vie_init(&emul_ctxt->vie, vcpu); + + if (retval < 0) { + VM_PANIC(vcpu); + } else { + retval = local_decode_instruction(&emul_ctxt->vie); + + if (retval != 0) { + VM_PANIC(vcpu); + } else { + /* + * We do operand check in instruction decode phase and + * inject exception accordingly. In late instruction + * emulation, it will always success. + * + * We only need to do dst check for movs. For other instructions, + * they always has one register and one mmio which trigger EPT + * by access mmio. With VMX enabled, the related check is done + * by VMX itself before hit EPT violation. + * + */ + if ((emul_ctxt->vie.op.op_flags & VIE_OP_F_CHECK_GVA_DI) != 0U) { + VM_PANIC(vcpu); + } else { + retval = instr_check_gva(vcpu); + } + + if (retval >= 0) { + /* return the Memory Operand byte size */ + if ((emul_ctxt->vie.op.op_flags & VIE_OP_F_BYTE_OP) != 0U) { + retval = 1; + } else if ((emul_ctxt->vie.op.op_flags & VIE_OP_F_WORD_OP) != 0U) { + retval = 2; + } else { + retval = (int32_t)emul_ctxt->vie.opsize; + } + } + } + } + + return retval; +} + +int32_t emulate_instruction(struct vmrt_vm_vcpu *vcpu) +{ + struct instr_emul_vie *vie = &((struct instr_emul_ctxt *)vcpu->inst_ctxt)->vie; + int32_t error; + + if (vie->decoded != 0U) { + switch (vie->op.op_type) { + case VIE_OP_TYPE_MOV: + error = emulate_mov(vcpu, vie); + break; + default: + VM_PANIC(vcpu); + error = -EINVAL; + break; + } + } else { + VM_PANIC(vcpu); + error = -EINVAL; + } + + return error; +} diff --git a/src/components/implementation/simple_vmm/nf_multicore/instr_emul.h b/src/components/implementation/simple_vmm/nf_multicore/instr_emul.h new file mode 100644 index 0000000000..901428dcb4 --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/instr_emul.h @@ -0,0 +1,95 @@ +/*- + * Copyright (c) 2012 NetApp, Inc. + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef INSTR_EMUL_H +#define INSTR_EMUL_H + +#include +#include + +struct vmrt_vm_vcpu; +struct instr_emul_vie_op { + uint8_t op_type; /* type of operation (e.g. MOV) */ + uint16_t op_flags; +}; + +#define VIE_PREFIX_SIZE 4U +#define VIE_INST_SIZE 15U +struct instr_emul_vie { + uint8_t inst[VIE_INST_SIZE]; /* instruction bytes */ + uint8_t num_valid; /* size of the instruction */ + uint8_t num_processed; + + uint8_t addrsize:4, opsize:4; /* address and operand sizes */ + uint8_t rex_w:1, /* REX prefix */ + rex_r:1, + rex_x:1, + rex_b:1, + rex_present:1, + repz_present:1, /* REP/REPE/REPZ prefix */ + repnz_present:1, /* REPNE/REPNZ prefix */ + opsize_override:1, /* Operand size override */ + addrsize_override:1, /* Address size override */ + seg_override:1; /* Segment override */ + + uint8_t mod:2, /* ModRM byte */ + reg:4, + rm:4; + + uint8_t ss:2, /* SIB byte */ + index:4, + base:4; + + uint8_t disp_bytes; + uint8_t imm_bytes; + + uint8_t scale; + enum cpu_reg_name base_register; /* CPU_REG_xyz */ + enum cpu_reg_name index_register; /* CPU_REG_xyz */ + enum cpu_reg_name segment_register; /* CPU_REG_xyz */ + + int64_t displacement; /* optional addr displacement */ + int64_t immediate; /* optional immediate operand */ + + uint8_t decoded; /* set to 1 if successfully decoded */ + + uint8_t opcode; + struct instr_emul_vie_op op; /* opcode description */ + + uint64_t dst_gpa; /* saved dst operand gpa. Only for movs */ + uint64_t gva; /* saved gva for instruction emulation */ +}; + +struct instr_emul_ctxt { + struct instr_emul_vie vie; +}; + +int32_t emulate_instruction(struct vmrt_vm_vcpu *vcpu); +int32_t decode_instruction(struct vmrt_vm_vcpu *vcpu); + +#endif diff --git a/src/components/implementation/simple_vmm/nf_multicore/ioapic.h b/src/components/implementation/simple_vmm/nf_multicore/ioapic.h new file mode 100644 index 0000000000..55b214a1e4 --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/ioapic.h @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2018-2022 Intel Corporation. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef ARCH_X86_IOAPIC_H +#define ARCH_X86_IOAPIC_H + +#include + +#define NR_LEGACY_IRQ 16U +#define NR_LEGACY_PIN NR_LEGACY_IRQ + +struct ioapic_info { + uint8_t id; /* IOAPIC ID as indicated in ACPI MADT */ + uint32_t addr; /* IOAPIC Register address */ + uint32_t gsi_base; /* Global System Interrupt where this IO-APIC's interrupt input start */ + uint32_t nr_pins; /* Number of Interrupt inputs as determined by Max. Redir Entry Register */ +}; + +void ioapic_setup_irqs(void); + +bool is_ioapic_irq(uint32_t irq); +uint32_t gsi_to_ioapic_pin(uint32_t gsi); +int32_t init_ioapic_id_info(void); +uint8_t ioapic_irq_to_ioapic_id(uint32_t irq); + +uint8_t get_platform_ioapic_info (struct ioapic_info **plat_ioapic_info); + +/** + * @defgroup ioapic_ext_apis IOAPIC External Interfaces + * + * This is a group that includes IOAPIC External Interfaces. + * + * @{ + */ + +/** + * @brief Get irq num from gsi num + * + * @param[in] gsi The gsi number + * + * @return irq number + */ +uint32_t ioapic_gsi_to_irq(uint32_t gsi); +/** + * @brief Set the redirection table entry + * + * Set the redirection table entry of an interrupt + * + * @param[in] irq The number of irq to set + * @param[in] rte Union of ioapic_rte to set + */ +void ioapic_set_rte(uint32_t irq, union ioapic_rte rte); + +/** + * @brief Get the redirection table entry + * + * Get the redirection table entry of an interrupt + * + * @param[in] irq The number of irq to fetch RTE + * @param[inout] rte Pointer to union ioapic_rte to return result RTE + * + * @pre rte != NULL + */ +void ioapic_get_rte(uint32_t irq, union ioapic_rte *rte); + +/** + * @brief Suspend ioapic + * + * Suspend ioapic, mainly save the RTEs. + */ +void suspend_ioapic(void); + +/** + * @brief Resume ioapic + * + * Resume ioapic, mainly restore the RTEs. + */ +void resume_ioapic(void); + +/** + * @} + */ +/* End of ioapic_ext_apis */ + +void ioapic_gsi_mask_irq(uint32_t irq); +void ioapic_gsi_unmask_irq(uint32_t irq); + +void ioapic_get_rte_entry(void *ioapic_base, uint32_t pin, union ioapic_rte *rte); + +void *gsi_to_ioapic_base(uint32_t gsi); +uint32_t get_max_nr_gsi(void); +uint8_t get_gsi_to_ioapic_index(uint32_t gsi); +uint32_t get_pic_pin_from_ioapic_pin(uint32_t pin_index); +bool is_gsi_valid(uint32_t gsi); + +#endif /* ARCH_X86_IOAPIC_H */ diff --git a/src/components/implementation/simple_vmm/nf_multicore/irq.h b/src/components/implementation/simple_vmm/nf_multicore/irq.h new file mode 100644 index 0000000000..06c21c902a --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/irq.h @@ -0,0 +1,136 @@ +/* + * Copyright (C) 2018-2022 Intel Corporation. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef ARCH_X86_IRQ_H +#define ARCH_X86_IRQ_H + +#include + +/** + * @file arch/x86/asm/irq.h + * + * @brief public APIs for x86 IRQ handling + */ + +#define DBG_LEVEL_PTIRQ 6U +#define DBG_LEVEL_IRQ 6U + +#define NR_MAX_VECTOR 0xFFU +#define VECTOR_INVALID (NR_MAX_VECTOR + 1U) + +/* # of NR_STATIC_MAPPINGS_1 entries for timer, vcpu notify, and PMI */ +#define NR_STATIC_MAPPINGS_1 3U + +/* + * The static IRQ/Vector mapping table in irq.c consists of the following entries: + * # of NR_STATIC_MAPPINGS_1 entries for timer, vcpu notify, and PMI + * + * # of CONFIG_MAX_VM_NUM entries for posted interrupt notification, platform + * specific but known at build time: + * Allocate unique Activation Notification Vectors (ANV) for each vCPU that belongs + * to the same pCPU, the ANVs need only be unique within each pCPU, not across all + * vCPUs. The max numbers of vCPUs may be running on top of a pCPU is CONFIG_MAX_VM_NUM, + * since ACRN does not support 2 vCPUs of same VM running on top of same pCPU. + * This reduces # of pre-allocated ANVs for posted interrupts to CONFIG_MAX_VM_NUM, + * and enables ACRN to avoid switching between active and wake-up vector values + * in the posted interrupt descriptor on vCPU scheduling state changes. + */ +#define NR_STATIC_MAPPINGS (NR_STATIC_MAPPINGS_1 + CONFIG_MAX_VM_NUM) + +#define HYPERVISOR_CALLBACK_HSM_VECTOR 0xF3U + +/* vectors range for dynamic allocation, usually for devices */ +#define VECTOR_DYNAMIC_START 0x20U +#define VECTOR_DYNAMIC_END 0xDFU + +/* vectors range for fixed vectors, usually for HV service */ +#define VECTOR_FIXED_START 0xE0U +#define VECTOR_FIXED_END 0xFFU + +#define TIMER_VECTOR (VECTOR_FIXED_START) +#define NOTIFY_VCPU_VECTOR (VECTOR_FIXED_START + 1U) +#define PMI_VECTOR (VECTOR_FIXED_START + 2U) +/* + * Starting vector for posted interrupts + * # of CONFIG_MAX_VM_NUM (POSTED_INTR_VECTOR ~ (POSTED_INTR_VECTOR + CONFIG_MAX_VM_NUM - 1U)) + * consecutive vectors reserved for posted interrupts + */ +#define POSTED_INTR_VECTOR (VECTOR_FIXED_START + NR_STATIC_MAPPINGS_1) + +#define TIMER_IRQ (NR_IRQS - 1U) +#define NOTIFY_VCPU_IRQ (NR_IRQS - 2U) +#define PMI_IRQ (NR_IRQS - 3U) +/* + * Starting IRQ for posted interrupts + * # of CONFIG_MAX_VM_NUM (POSTED_INTR_IRQ ~ (POSTED_INTR_IRQ + CONFIG_MAX_VM_NUM - 1U)) + * consecutive IRQs reserved for posted interrupts + */ +#define POSTED_INTR_IRQ (NR_IRQS - NR_STATIC_MAPPINGS_1 - CONFIG_MAX_VM_NUM) + +/* the maximum number of msi entry is 2048 according to PCI + * local bus specification + */ +#define MAX_MSI_ENTRY 0x800U + +#define INVALID_INTERRUPT_PIN 0xffffffffU + +/* + * x86 irq data + */ +struct x86_irq_data { + uint32_t vector; /**< assigned vector */ +#ifdef PROFILING_ON + uint64_t ctx_rip; + uint64_t ctx_rflags; + uint64_t ctx_cs; +#endif +}; + +struct intr_excp_ctx; + +/** + * @brief Allocate a vectror and bind it to irq + * + * For legacy irq (num < 16) and statically mapped ones, do nothing + * if mapping is correct. + * + * @param[in] irq The irq num to bind + * + * @return valid vector num on susccess, VECTOR_INVALID on failure + */ +uint32_t alloc_irq_vector(uint32_t irq); + +/** + * @brief Get vector number of an interrupt from irq number + * + * @param[in] irq The irq_num to convert + * + * @return vector number + */ +uint32_t irq_to_vector(uint32_t irq); + +/** + * @brief Dispatch interrupt + * + * To dispatch an interrupt, an action callback will be called if registered. + * + * @param ctx Pointer to interrupt exception context + */ +void dispatch_interrupt(const struct intr_excp_ctx *ctx); + +/* Arch specific routines called from generic IRQ handling */ + +struct irq_desc; + +void init_irq_descs_arch(struct irq_desc *descs); +void setup_irqs_arch(void); +void init_interrupt_arch(uint16_t pcpu_id); +void free_irq_arch(uint32_t irq); +bool request_irq_arch(uint32_t irq); +void pre_irq_arch(const struct irq_desc *desc); +void post_irq_arch(const struct irq_desc *desc); + +#endif /* ARCH_X86_IRQ_H */ diff --git a/src/components/implementation/simple_vmm/nf_multicore/netio.c b/src/components/implementation/simple_vmm/nf_multicore/netio.c new file mode 100644 index 0000000000..7891fd1ee2 --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/netio.c @@ -0,0 +1,275 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +shm_bm_objid_t +netio_get_a_packet(u16_t *pkt_len) +{ + struct netshmem_pkt_buf *tx_obj; + shm_bm_t tx_shmemd = 0; + shm_bm_objid_t tx_pktid; + u16_t _pkt_len = 0; + + tx_shmemd = netshmem_get_shm(); + tx_obj = shm_bm_alloc_net_pkt_buf(tx_shmemd, &tx_pktid); + assert(tx_obj); + + virtio_net_send_one_pkt(tx_obj->data, &_pkt_len); + *pkt_len = _pkt_len; + + return tx_pktid; +} + +void pkt_hex_dump(void *_data, u16_t len) +{ + int rowsize = 16; + int i, l, linelen, remaining; + int li = 0; + u8_t *data, ch; + + data = _data; + + printc("Packet hex dump, len:%d\n", len); + remaining = len; + for (i = 0; i < len; i += rowsize) { + printc("%06d\t", li); + + linelen = remaining < rowsize ? remaining : rowsize; + remaining -= rowsize; + + for (l = 0; l < linelen; l++) { + ch = data[l]; + printc( "%02X ", (u32_t) ch); + } + + data += linelen; + li += 10; + + printc( "dump done\n"); + } +} + +#if 0 +shm_bm_objid_t +netio_get_a_packet_batch(u8_t batch_limit) +{ + struct netshmem_pkt_buf *tx_obj; + shm_bm_t tx_shmemd = 0; + shm_bm_objid_t tx_pktid; + u16_t _pkt_len = 0; + shm_bm_objid_t first_objid; + struct netshmem_pkt_buf *first_obj; + struct netshmem_pkt_pri *first_obj_pri; + struct netshmem_meta_tuple *pkt_arr; + u8_t batch_ct = 0; + + tx_shmemd = netshmem_get_shm(); + tx_obj = first_obj = shm_bm_alloc_net_pkt_buf(tx_shmemd, &tx_pktid); + assert(tx_obj); + first_objid = tx_pktid; + first_obj_pri = netshmem_get_pri(tx_obj); + pkt_arr = (struct netshmem_meta_tuple *)&first_obj_pri->pkt_arr; + first_obj_pri->batch_len = 0; + + while (batch_ct < batch_limit) { + assert(tx_obj); + if (likely(batch_ct > 0)) { + tx_obj = shm_bm_alloc_net_pkt_buf(tx_shmemd, &tx_pktid); + assert(tx_obj); + } + + virtio_net_send_one_pkt(netshmem_get_data_buf(tx_obj), &_pkt_len); + + // pkt_hex_dump(netshmem_get_data_buf(tx_obj), _pkt_len); + if (likely(_pkt_len != 0)) { + pkt_arr[batch_ct].obj_id = tx_pktid; + pkt_arr[batch_ct].pkt_len = _pkt_len; + batch_ct++; + } else { + if (batch_ct == 0) { + sched_thd_yield(); + } else { + shm_bm_free_net_pkt_buf(tx_obj); + break; + } + } + } + first_obj_pri->batch_len = batch_ct; + return first_objid; +} +#endif + +struct nf_svc { + int svc_id; + struct vmrt_vm_comp *vm; +}; + +#define MAX_NFS 10 +#define MAX_THD_PER_NF 100 + +static struct nf_svc nf_svc_tbl[MAX_NFS][MAX_THD_PER_NF]; + +void +nf_svc_update(compid_t nf_id, int thd, int svc_id, struct vmrt_vm_comp *vm) +{ + // printc("svc update:%d, %d, %d\n", nf_id, thd, nf_svc_tbl[nf_id][thd].svc_id); + if (nf_svc_tbl[nf_id][thd].svc_id < 0) { + nf_svc_tbl[nf_id][thd].svc_id = svc_id; + nf_svc_tbl[nf_id][thd].vm = vm; + } else { + return; + } +} + +void +nf_svc_init(void) +{ + for (int i = 0; i < MAX_NFS; i++) { + for (int j = 0; j < MAX_THD_PER_NF; j++) { + nf_svc_tbl[i][j].svc_id = -1; + nf_svc_tbl[i][j].vm = NULL; + } + } +} + +#if 1 +shm_bm_objid_t +netio_get_a_packet_batch(u8_t batch_limit) +{ + shm_bm_objid_t first_objid; + struct netshmem_pkt_buf *first_obj; + struct netshmem_pkt_pri *first_obj_pri; + struct netshmem_pkt_buf *tx_obj; + shm_bm_objid_t tx_pktid; + struct netshmem_meta_tuple *pkt_arr; + + struct nf_session *session; + struct nf_pkt_meta_data buf; + u8_t batch_ct = 0; + compid_t vmm_id = cos_compid(); + compid_t nf_id = (compid_t)cos_inv_token(); + if (nf_id == 0) nf_id = vmm_id; + thdid_t nf_thd = cos_thdid(); + + int svc_id = nf_svc_tbl[nf_id][nf_thd].svc_id; + + if (svc_id < 0) { + printc("no svc available for this nf:%d, thd:%d\n", nf_id, nf_thd); + assert(0); + } + + session = get_nf_session(svc_id); + + while (nf_tx_ring_buf_empty(&session->nf_tx_ring_buf)) { + sched_thd_yield(); + } + + assert(nf_tx_ring_buf_dequeue(&session->nf_tx_ring_buf, &buf)); + tx_obj = first_obj = buf.obj; + assert(tx_obj); + tx_pktid = first_objid = buf.objid; + first_obj_pri = netshmem_get_pri(tx_obj); + pkt_arr = (struct netshmem_meta_tuple *)&first_obj_pri->pkt_arr; + first_obj_pri->batch_len = 0; + + pkt_arr[batch_ct].obj_id = tx_pktid; + pkt_arr[batch_ct].pkt_len = buf.pkt_len; + batch_ct++; + + while (batch_ct < batch_limit && nf_tx_ring_buf_dequeue(&session->nf_tx_ring_buf, &buf)) { + pkt_arr[batch_ct].obj_id = buf.objid; + pkt_arr[batch_ct].pkt_len = buf.pkt_len; + batch_ct++; + } + + first_obj_pri->batch_len = batch_ct; + return first_objid; +} +#endif + +int +netio_send_packet(shm_bm_objid_t pktid, u16_t pkt_len) +{ + struct netshmem_pkt_buf *rx_obj; + shm_bm_t rx_shmemd = 0; + + rx_shmemd = netshmem_get_shm(); + + rx_obj = shm_bm_transfer_net_pkt_buf(rx_shmemd, pktid); + virtio_net_rcv_one_pkt(rx_obj->data, pkt_len); + shm_bm_free_net_pkt_buf(rx_obj); + + return 0; +} + + +int +netio_send_packet_batch(shm_bm_objid_t pktid) +{ + struct netshmem_pkt_buf *rx_obj; + shm_bm_objid_t first_objid; + struct netshmem_pkt_buf *first_obj; + struct netshmem_pkt_pri *first_obj_pri; + struct netshmem_meta_tuple *pkt_arr; + u16_t pkt_len; + u8_t batch_tc = 0; + shm_bm_t rx_shmemd = 0; + + rx_shmemd = netshmem_get_shm(); + first_objid = pktid; + + + first_obj = shm_bm_transfer_net_pkt_buf(rx_shmemd, first_objid); + + first_obj_pri = netshmem_get_pri(first_obj); + pkt_arr = (struct netshmem_meta_tuple *)&(first_obj_pri->pkt_arr); + batch_tc = first_obj_pri->batch_len; + + pkt_len = pkt_arr[0].pkt_len; + // pkt_hex_dump(netshmem_get_data_buf(first_obj), pkt_len); + virtio_net_rcv_one_pkt(netshmem_get_data_buf(first_obj), pkt_len); + + for (u8_t i = 1; i < batch_tc; i++) { + pkt_len = pkt_arr[i].pkt_len; + pktid = pkt_arr[i].obj_id; + rx_obj = shm_bm_transfer_net_pkt_buf(rx_shmemd, pktid); + virtio_net_rcv_one_pkt(netshmem_get_data_buf(rx_obj), pkt_len); + shm_bm_free_net_pkt_buf(rx_obj); + } + + shm_bm_free_net_pkt_buf(first_obj); + + return 0; +} + +void +netio_shmem_map(cbuf_t shm_id) +{ + netshmem_map_shmem(shm_id); +} + +extern struct vmrt_vm_comp *vm_list[2]; + +void +netio_svc_update(int svc_id, u32_t vm) +{ + compid_t nf_id = cos_inv_token(); + thdid_t thd = cos_thdid(); + assert(vm < 2); + shm_bm_t tx_shm = netshmem_get_shm(); + assert(tx_shm); + + nf_svc_update(nf_id, thd, svc_id, vm_list[vm]); + + struct nf_session *session; + session = get_nf_session(svc_id); + nf_session_tx_update(session, tx_shm, thd); + sync_sem_init(&session->tx_sem, 0); + + nf_tx_ring_buf_init(&session->nf_tx_ring_buf, NF_TX_PKT_RBUF_NUM, NF_TX_PKT_RING_SZ); +} diff --git a/src/components/implementation/simple_vmm/nf_multicore/nf_session.c b/src/components/implementation/simple_vmm/nf_multicore/nf_session.c new file mode 100644 index 0000000000..a5d56bdb82 --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/nf_session.c @@ -0,0 +1,74 @@ +#pragma once + +#include + +CK_RING_PROTOTYPE(nf_tx_ring_buf, nf_pkt_meta_data); + +static char ring_buffers[NF_TX_MAX_RING_NUM][NF_TX_PKT_RING_SZ]; +static struct nf_session nf_sessions[MAX_SVC_NUM]; + +void +nf_sessions_init(void) +{ + for (int i = 0; i < MAX_SVC_NUM; i++) { + nf_sessions[i].rx_shmemd = 0; + nf_sessions[i].rx_thd = 0; + nf_sessions[i].tx_shmemd = 0; + nf_sessions[i].tx_thd = 0; + nf_sessions[i].nf_tx_ring_buf.ring = 0; + nf_sessions[i].nf_tx_ring_buf.ringbuf = 0; + + } +} + +void +nf_tx_ring_buf_init(struct nf_tx_ring_buf *pkt_ring_buf, size_t ringbuf_num, size_t ringbuf_sz) +{ + struct ck_ring *buf_addr; + + /* prevent multiple thread from contending memory */ + assert(cos_thdid() < 30); + buf_addr = (struct ck_ring *)&ring_buffers[cos_thdid()]; + + ck_ring_init(buf_addr, ringbuf_num); + + pkt_ring_buf->ring = buf_addr; + pkt_ring_buf->ringbuf = (struct pkt_buf *)((char *)buf_addr + sizeof(struct ck_ring)); +} + +inline int +nf_tx_ring_buf_enqueue(struct nf_tx_ring_buf *pkt_ring_buf, struct nf_pkt_meta_data *buf) +{ + assert(pkt_ring_buf->ring && pkt_ring_buf->ringbuf); + + return CK_RING_ENQUEUE_SPSC(nf_tx_ring_buf, pkt_ring_buf->ring, pkt_ring_buf->ringbuf, buf); +} + +inline int +nf_tx_ring_buf_dequeue(struct nf_tx_ring_buf *pkt_ring_buf, struct nf_pkt_meta_data *buf) +{ + assert(pkt_ring_buf->ring && pkt_ring_buf->ringbuf); + + return CK_RING_DEQUEUE_SPSC(nf_tx_ring_buf, pkt_ring_buf->ring, pkt_ring_buf->ringbuf, buf); +} + +inline int +nf_tx_ring_buf_empty(struct nf_tx_ring_buf *pkt_ring_buf) +{ + assert(pkt_ring_buf->ring); + + return (!ck_ring_size(pkt_ring_buf->ring)); +} + +struct nf_session *get_nf_session(int svc_id) +{ + if (unlikely(svc_id < 0 || svc_id > 1000)) return &nf_sessions[0]; + else return &nf_sessions[svc_id]; +} + +void +nf_session_tx_update(struct nf_session *session, shm_bm_t tx_shmemd, thdid_t tx_thd) +{ + session->tx_shmemd = tx_shmemd; + session->tx_thd = tx_thd; +} diff --git a/src/components/implementation/simple_vmm/nf_multicore/nf_session.h b/src/components/implementation/simple_vmm/nf_multicore/nf_session.h new file mode 100644 index 0000000000..00f81a0d44 --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/nf_session.h @@ -0,0 +1,49 @@ +#include +#include +#include +#include + +struct nf_pkt_meta_data { + void *obj; + shm_bm_objid_t objid; + u16_t pkt_len; +}; + +struct nf_tx_ring_buf { + struct ck_ring *ring; + struct nf_pkt_meta_data *ringbuf; +}; + +struct nf_session { + shm_bm_t rx_shmemd; + shm_bm_t tx_shmemd; + + thdid_t rx_thd; + thdid_t tx_thd; + + struct sync_sem tx_sem; + + struct nf_tx_ring_buf nf_tx_ring_buf; +}; + +#define NF_TX_PKT_RBUF_NUM 512 +#define NF_TX_PKT_RBUF_SZ (NF_TX_PKT_RBUF_NUM * sizeof(struct nf_tx_ring_buf)) +#define NF_TX_PKT_RING_SZ (sizeof(struct ck_ring) + NF_TX_PKT_RBUF_SZ) +#define NF_TX_PKT_RING_PAGES (round_up_to_page(NF_TX_PKT_RING_SZ)/PAGE_SIZE) + +#define NF_TX_MAX_RING_NUM 30 + +#define MAX_NF_SESSION 10 + +#define MAX_SVC_NUM (20000) + +struct nf_session *get_nf_session(int svc_id); +void nf_session_tx_update(struct nf_session *session, shm_bm_t tx_shmemd, thdid_t tx_thd); +void nf_tx_ring_buf_init(struct nf_tx_ring_buf *pkt_ring_buf, size_t ringbuf_num, size_t ringbuf_sz); +int nf_tx_ring_buf_enqueue(struct nf_tx_ring_buf *pkt_ring_buf, struct nf_pkt_meta_data *buf); +int nf_tx_ring_buf_dequeue(struct nf_tx_ring_buf *pkt_ring_buf, struct nf_pkt_meta_data *buf); +int nf_tx_ring_buf_empty(struct nf_tx_ring_buf *pkt_ring_buf); + +void nf_svc_update(compid_t nf_id, int thd_id, int svc_id, struct vmrt_vm_comp *vm); +void nf_svc_init(void); +void nf_sessions_init(void); diff --git a/src/components/implementation/simple_vmm/nf_multicore/simple_vmm.c b/src/components/implementation/simple_vmm/nf_multicore/simple_vmm.c new file mode 100644 index 0000000000..f84f08ebac --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/simple_vmm.c @@ -0,0 +1,384 @@ +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#define NF_THD_PRIORITY 31 + +#define NO_NF_TEST 1 + +#define RX_BATCH 1 +#define TX_BATCH 1 + +#define RX_PROCESSING 0 +#define TX_PROCESSING 0 + +thdid_t rx_tid = 0; +thdid_t tx_tid = 0; + +thdid_t virtio_tx_tid = 0; + +char tx_nf_buffer[4096]; +char rx_nf_buffer[4096]; + + +INCBIN(vmlinux, "guest/vmlinux.img") +INCBIN(bios, "guest/guest.img") + +/* Currently only have one VM component globally managed by this VMM */ +static struct vmrt_vm_comp *g_vm; +static struct vmrt_vm_comp *g_vm1; + +struct vmrt_vm_comp *vm_list[2] = {0}; + +#define VM_MAX_COMPS (2) +#define GUEST_MEM_SZ (310*1024*1024) + +SS_STATIC_SLAB(vm_comp, struct vmrt_vm_comp, VM_MAX_COMPS); +SS_STATIC_SLAB(vm_lapic, struct acrn_vlapic, VM_MAX_COMPS * VMRT_VM_MAX_VCPU); +SS_STATIC_SLAB(vcpu_inst_ctxt, struct instr_emul_ctxt, VM_MAX_COMPS * VMRT_VM_MAX_VCPU); +SS_STATIC_SLAB(vm_io_apic, struct acrn_vioapics, VM_MAX_COMPS); +SS_STATIC_SLAB(vcpu_mmio_req, struct acrn_mmio_request, VM_MAX_COMPS * VMRT_VM_MAX_VCPU); + +struct sync_lock vm_boot_lock; + +void +pause_handler(struct vmrt_vm_vcpu *vcpu) +{ + sched_thd_yield(); + GOTO_NEXT_INST(vcpu->shared_region); +} + +extern void check_intr(struct vmrt_vm_vcpu *vcpu); +void +hlt_handler(struct vmrt_vm_vcpu *vcpu) +{ + sched_thd_yield(); + check_intr(vcpu); + GOTO_NEXT_INST(vcpu->shared_region); +} + +void +mmio_init(struct vmrt_vm_vcpu *vcpu) +{ + vcpu->mmio_request = ss_vcpu_mmio_req_alloc(); + assert(vcpu->mmio_request); + + ss_vcpu_mmio_req_activate(vcpu->mmio_request); +} + +void +ioapic_init(struct vmrt_vm_comp *vm) +{ + vm->ioapic = ss_vm_io_apic_alloc(); + assert(vm->ioapic); + + vioapic_init(vm); + ss_vm_io_apic_activate(vm->ioapic); +} + +void +iinst_ctxt_init(struct vmrt_vm_vcpu *vcpu) +{ + vcpu->inst_ctxt = ss_vcpu_inst_ctxt_alloc(); + assert(vcpu->inst_ctxt); + + ss_vcpu_inst_ctxt_activate(vcpu->inst_ctxt); +} + +void +lapic_init(struct vmrt_vm_vcpu *vcpu) +{ + struct acrn_vlapic *vlapic = ss_vm_lapic_alloc(); + assert(vlapic); + + /* A vcpu can only have one vlapic */ + assert(vcpu->vlapic == NULL); + + vcpu->vlapic = vlapic; + vlapic->apic_page = vcpu->lapic_page; + vlapic->vcpu = vcpu; + + /* Status: enable APIC and vector be 0xFF */ + vlapic_reset(vlapic); + + ss_vm_lapic_activate(vlapic); + return; +} + +struct vmrt_vm_comp * +vm_comp_create(void) +{ + u64_t guest_mem_sz = GUEST_MEM_SZ; + u64_t num_vcpu = 1; + void *start; + void *end; + cbuf_t shm_id; + void *mem, *vm_mem; + size_t sz; + + struct vmrt_vm_comp *vm = ss_vm_comp_alloc(); + assert(vm); + + vmrt_vm_create(vm, "vmlinux-5.15", num_vcpu, guest_mem_sz); + + /* Allocate memory for the VM */ + shm_id = memmgr_shared_page_allocn_aligned(guest_mem_sz / PAGE_SIZE_4K, PAGE_SIZE_4K, (vaddr_t *)&mem); + /* Make the memory accessible to VM */ + int ret = memmgr_shared_page_map_aligned_in_vm(shm_id, PAGE_SIZE_4K, (vaddr_t *)&vm_mem, vm->comp_id); + vmrt_vm_mem_init(vm, mem); + printc("created VM with %u cpus, memory size: %luMB, at host vaddr: %p\n", vm->num_vcpu, vm->guest_mem_sz/1024/1024, vm->guest_addr); + + ss_vm_comp_activate(vm); + + start = &incbin_bios_start; + end = &incbin_bios_end; + sz = end - start + 1; + + printc("BIOS image start: %p, end: %p, size: %lu(%luKB)\n", start, end, sz, sz/1024); + vmrt_vm_data_copy_to(vm, start, sz, PAGE_SIZE_4K); + + start = &incbin_vmlinux_start; + end = &incbin_vmlinux_end; + sz = end - start + 1; + + printc("Guest Linux image start: %p, end: %p, size: %lu(%luMB)\n", start, end, sz, sz/1024/1024); + #define GUEST_IMAGE_ADDR 0x100000 + vmrt_vm_data_copy_to(vm, start, sz, GUEST_IMAGE_ADDR); + + ioapic_init(vm); + + printc("Guest(%s) image has been loaded into the VM component\n", vm->name); + + return vm; +} + +#if 0 +static void +tx_task(void) +{ + u16_t pkt_len; + shm_bm_objid_t objid; + + // netio_shmem_map(netshmem_get_shm_id()); + nic_shmem_map(netshmem_get_shm_id()); + + shm_bm_objid_t first_objid; + struct netshmem_pkt_buf *first_obj; + struct netshmem_pkt_pri *first_obj_pri; + struct netshmem_meta_tuple *pkt_arr; + u8_t tx_batch_ct = 0; + struct netshmem_pkt_buf *tx_obj; + + nic_bind_port(0, 1); + + shm_bm_t tx_shmemd = 0; + tx_shmemd = netshmem_get_shm(); + + while(1) { +#if !TX_BATCH + objid = netio_get_a_packet(&pkt_len); + nic_send_packet(objid, 0, pkt_len); + +#else + u8_t batch_ct = 32; + + first_objid = objid = netio_get_a_packet_batch(batch_ct); + first_obj = shm_bm_transfer_net_pkt_buf(tx_shmemd, objid); + first_obj_pri = netshmem_get_pri(first_obj); + pkt_arr = (struct netshmem_meta_tuple *)&(first_obj_pri->pkt_arr); + tx_batch_ct = first_obj_pri->batch_len; + +#if TX_PROCESSING + for (u8_t i = 0; i < tx_batch_ct; i++) { + pkt_len = pkt_arr[i].pkt_len; + objid = pkt_arr[i].obj_id; + tx_obj = shm_bm_transfer_net_pkt_buf(tx_shmemd, objid); + memcpy(tx_nf_buffer, netshmem_get_data_buf(tx_obj), pkt_len); + } +#endif + nic_send_packet_batch(first_objid); +#endif + } +} +#endif + +static void +rx_task(void) +{ + /* TODO: port NF applications here */ + shm_bm_objid_t objid; + struct netshmem_pkt_buf *rx_obj; + shm_bm_objid_t first_objid; + struct netshmem_pkt_buf *first_obj; + struct netshmem_pkt_pri *first_obj_pri; + struct netshmem_meta_tuple *pkt_arr; + u16_t pkt_len; + u32_t ip; + + u8_t batch_ct = 50; + + // netio_shmem_map(netshmem_get_shm_id()); + nic_shmem_map(netshmem_get_shm_id()); + ip = inet_addr("10.10.1.2"); + + nic_bind_port(ip, 0); + + int i = 0; + u64_t times = 0; + u64_t overhead = 0; + + shm_bm_t rx_shmemd = 0; + + rx_shmemd = netshmem_get_shm(); + while(1) + { + u8_t rx_batch_ct = 0; +#if !RX_BATCH + objid = nic_get_a_packet(&pkt_len); + netio_send_packet(objid, pkt_len); +#else + first_objid = nic_get_a_packet_batch(batch_ct); + + first_obj = shm_bm_transfer_net_pkt_buf(rx_shmemd, first_objid); + first_obj_pri = netshmem_get_pri(first_obj); + pkt_arr = (struct netshmem_meta_tuple *)&(first_obj_pri->pkt_arr); + rx_batch_ct = first_obj_pri->batch_len; +#if RX_PROCESSING + for (u8_t i = 0; i < rx_batch_ct; i++) { + pkt_len = pkt_arr[i].pkt_len; + objid = pkt_arr[i].obj_id; + rx_obj = shm_bm_transfer_net_pkt_buf(rx_shmemd, objid); + memcpy(rx_nf_buffer, netshmem_get_data_buf(rx_obj), pkt_len); + } +#endif + + netio_send_packet_batch(first_objid); +#endif + } +} + +static void +tx_task(void) +{ + u16_t pkt_len; + shm_bm_objid_t objid; + + nic_shmem_map(netshmem_get_shm_id()); + + shm_bm_objid_t first_objid; + struct netshmem_pkt_buf *first_obj; + struct netshmem_pkt_pri *first_obj_pri; + struct netshmem_meta_tuple *pkt_arr; + u8_t tx_batch_ct = 0; + struct netshmem_pkt_buf *tx_obj; + u32_t ip; + + shm_bm_t tx_shmemd = 0; + tx_shmemd = netshmem_get_shm(); + ip = inet_addr("10.10.1.2"); + + nic_bind_port(ip, 1); + int svc_id = 0; + + nf_svc_update(cos_compid(), cos_thdid(), svc_id, g_vm); + + struct nf_session *session; + session = get_nf_session(svc_id); + nf_session_tx_update(session, tx_shmemd, cos_thdid()); + sync_sem_init(&session->tx_sem, 0); + + nf_tx_ring_buf_init(&session->nf_tx_ring_buf, NF_TX_PKT_RBUF_NUM, NF_TX_PKT_RING_SZ); + + virtio_tx_task(0); +} + +void +cos_init(void) +{ + + nf_svc_init(); + nf_sessions_init(); + + struct vmrt_vm_vcpu *vcpu; + g_vm = vm_comp_create(); + printc("created vm done:%d, %p\n", g_vm->comp_id, g_vm); + g_vm->vm_mac_id = 0; + + vm_list[0] = g_vm; +} + +struct ps_lock shmem_lock = {.o = 0}; + +void +cos_parallel_init(coreid_t cid, int init_core, int ncores) +{ + struct vmrt_vm_vcpu *vcpu; + + if (cid == 0) { + ps_lock_take(&shmem_lock); + rx_tid = sched_thd_create((void *)rx_task, NULL); + netshmem_create(rx_tid); + ps_lock_release(&shmem_lock); + tx_tid = sched_thd_create((void *)tx_task, NULL); + netshmem_create(tx_tid); + } else { + ps_lock_take(&shmem_lock); + vmrt_vm_vcpu_init(g_vm, 0); + vcpu = vmrt_get_vcpu(g_vm, 0); + + lapic_init(vcpu); + iinst_ctxt_init(vcpu); + mmio_init(vcpu); + ps_lock_release(&shmem_lock); + } + + return; +} + +void +parallel_main(coreid_t cid) +{ + struct vmrt_vm_vcpu *vcpu; + + if (cid == 0) { + sched_thd_param_set(rx_tid, sched_param_pack(SCHEDP_PRIO, NF_THD_PRIORITY)); + sched_thd_param_set(tx_tid, sched_param_pack(SCHEDP_PRIO, NF_THD_PRIORITY)); + } else if(cid == 1) { + printc("------STARTING VM------\n"); + sched_thd_block_timeout(0, time_now() + time_usec2cyc(10000000)); + vcpu = vmrt_get_vcpu(g_vm, 0); + vmrt_vm_vcpu_start(vcpu); + } + + while (1) + { + sched_thd_block(0); + /* Should not be here, or there is a bug in the scheduler! */ + assert(0); + } + + +} diff --git a/src/components/implementation/simple_vmm/nf_multicore/vcpuid.c b/src/components/implementation/simple_vmm/nf_multicore/vcpuid.c new file mode 100644 index 0000000000..0335ccb596 --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/vcpuid.c @@ -0,0 +1,766 @@ +#include +#include +#include +#include +#include +#include +#include "cpu.h" +#include "cpuid.h" +#include "vcpuid.h" +#include "cpu_caps.h" +#include "apicreg.h" + +/* + * Copyright (C) 2018-2022 Intel Corporation. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +static struct cpuinfo_x86 boot_cpu_data; +static struct vcpuid_entry vcpuid_entries[MAX_VM_VCPUID_ENTRIES]; +static u32_t g_entry_nr = 0, g_vcpuid_level, g_vcpuid_xlevel; +void memcpy_erms(void *d, const void *s, size_t slen) +{ + asm volatile ("rep; movsb" + : "=&D"(d), "=&S"(s) + : "c"(slen), "0" (d), "1" (s) + : "memory"); +} + +static uint64_t get_address_mask(uint8_t limit) +{ + return ((1UL << limit) - 1UL) & PAGE_MASK; +} + +/* + * @brief Copies at most slen bytes from src address to dest address, up to dmax. + * + * INPUTS + * + * @param[in] d pointer to Destination address + * @param[in] dmax maximum length of dest + * @param[in] s pointer to Source address + * @param[in] slen maximum number of bytes of src to copy + * + * @return 0 for success and -1 for runtime-constraint violation. + */ +int32_t memcpy_s(void *d, size_t dmax, const void *s, size_t slen) +{ + int32_t ret = -1; + + if ((d != NULL) && (s != NULL) && (dmax >= slen) && ((d > (s + slen)) || (s > (d + dmax)))) { + if (slen != 0U) { + memcpy_erms(d, s, slen); + } + ret = 0; + } else { + (void)memset(d, 0U, dmax); + } + + return ret; +} + +uint32_t get_tsc_khz(void) +{ + //3100.000 MHz + return 3100000; +} + +struct cpuinfo_x86 *get_pcpu_info(void) +{ + return &boot_cpu_data; +} + +/** + * initialization of virtual CPUID leaf + */ +static void init_vcpuid_entry(uint32_t leaf, uint32_t subleaf, + uint32_t flags, struct vcpuid_entry *entry) +{ + struct cpuinfo_x86 *cpu_info; + + entry->leaf = leaf; + entry->subleaf = subleaf; + entry->flags = flags; + + switch (leaf) { + + case 0x06U: + cpuid_subleaf(leaf, subleaf, &entry->eax, &entry->ebx, &entry->ecx, &entry->edx); + entry->eax &= ~(CPUID_EAX_DTHERM | CPUID_EAX_HWP | CPUID_EAX_HWP_N | CPUID_EAX_HWP_AW | CPUID_EAX_HWP_EPP | CPUID_EAX_HWP_PLR); + entry->ecx &= ~CPUID_ECX_HCFC; + break; + + case 0x07U: + if (subleaf == 0U) { + cpuid_subleaf(leaf, subleaf, &entry->eax, &entry->ebx, &entry->ecx, &entry->edx); + + entry->ebx &= ~(CPUID_EBX_PQM | CPUID_EBX_PQE); + + /* mask LA57 */ + entry->ecx &= ~CPUID_ECX_LA57; + + /* mask CPUID_EDX_IBRS_IBPB */ + entry->edx &= ~CPUID_EDX_IBRS_IBPB; + + /* mask SGX and SGX_LC */ + entry->ebx &= ~CPUID_EBX_SGX; + entry->ecx &= ~CPUID_ECX_SGX_LC; + + /* mask MPX */ + entry->ebx &= ~CPUID_EBX_MPX; + + /* mask Intel Processor Trace, since 14h is disabled */ + entry->ebx &= ~CPUID_EBX_PROC_TRC; + + /* mask CET shadow stack and indirect branch tracking */ + entry->ecx &= ~CPUID_ECX_CET_SS; + entry->edx &= ~CPUID_EDX_CET_IBT; + + // entry->ebx &= ~CPUID_EBX_FSGSBASE; + + entry->ebx &= ~CPUID_EBX_SMEP; + + entry->ebx &= ~CPUID_EBX_SMAP; + + entry->ecx &= ~CPUID_ECX_UMIP; + + entry->ecx &= ~CPUID_ECX_PKE; + + entry->ecx &= ~CPUID_ECX_LA57; + + entry->ecx &= ~CPUID_ECX_PKS; + } else { + entry->eax = 0U; + entry->ebx = 0U; + entry->ecx = 0U; + entry->edx = 0U; + } + break; + + case 0x16U: + cpu_info = get_pcpu_info(); + if (cpu_info->cpuid_level >= 0x16U) { + /* + * call the cpuid when 0x16 is supported, + * but nested vmx will not return correct values, + * thus use the second way here. If you are using + * the real hardware, can test if this will work. + */ + // cpuid_subleaf(leaf, subleaf, &entry->eax, &entry->ebx, &entry->ecx, &entry->edx); + + /* Use the tsc to derive the emulated 0x16U cpuid. */ + entry->eax = (uint32_t) (get_tsc_khz() / 1000U); + entry->ebx = entry->eax; + /* Bus frequency: hard coded to 100M */ + entry->ecx = 100U; + entry->edx = 0U; + + } else { + /* Use the tsc to derive the emulated 0x16U cpuid. */ + entry->eax = (uint32_t) (get_tsc_khz() / 1000U); + entry->ebx = entry->eax; + /* Bus frequency: hard coded to 100M */ + entry->ecx = 100U; + entry->edx = 0U; + } + break; + + /* + * Leaf 0x40000000 + * This leaf returns the CPUID leaf range supported by the + * hypervisor and the hypervisor vendor signature. + * + * EAX: The maximum input value for CPUID supported by the + * hypervisor. + * EBX, ECX, EDX: Hypervisor vendor ID signature. + */ + case 0x40000000U: + { + static const char sig[12] = "ACRNACRNACRN"; + const uint32_t *sigptr = (const uint32_t *)sig; + + entry->eax = 0x40000010U; + entry->ebx = sigptr[0]; + entry->ecx = sigptr[1]; + entry->edx = sigptr[2]; + break; + } + + /* + * Leaf 0x40000001 - ACRN extended information. + * This leaf returns the extended information of ACRN hypervisor. + * + * EAX: Guest capability flags + * EBX, ECX, EDX: RESERVED (reserved fields are set to zero). + */ + case 0x40000001U: + entry->eax = 0U; + entry->ebx = 0U; + entry->ecx = 0U; + entry->edx = 0U; + break; + + /* + * Leaf 0x40000010 - Timing Information. + * This leaf returns the current TSC frequency and + * current Bus frequency in kHz. + * + * EAX: (Virtual) TSC frequency in kHz. + * TSC frequency is calculated from PIT in ACRN + * EBX, ECX, EDX: RESERVED (reserved fields are set to zero). + */ + case 0x40000010U: + entry->eax = get_tsc_khz(); + entry->ebx = 0U; + entry->ecx = 0U; + entry->edx = 0U; + break; + + default: + cpuid_subleaf(leaf, subleaf, &entry->eax, &entry->ebx, &entry->ecx, &entry->edx); + break; + } +} + +static inline int32_t set_vcpuid_entry(struct vcpuid_entry vcpuid_entries[], + const struct vcpuid_entry *entry) +{ + struct vcpuid_entry *tmp; + size_t entry_size = sizeof(struct vcpuid_entry); + int32_t ret; + + if (g_entry_nr == MAX_VM_VCPUID_ENTRIES) { + printc("%s, vcpuid entry over MAX_VM_VCPUID_ENTRIES(%u)\n", __func__, MAX_VM_VCPUID_ENTRIES); + ret = -ENOMEM; + } else { + tmp = &vcpuid_entries[g_entry_nr]; + g_entry_nr++; + (void)memcpy_s(tmp, entry_size, entry, entry_size); + ret = 0; + } + return ret; +} + +static inline bool is_percpu_related(uint32_t leaf) +{ + return ((leaf == 0x1U) || (leaf == 0xbU) || (leaf == 0xdU) || (leaf == 0x19U) || (leaf == 0x80000001U) || (leaf == 0x2U) || (leaf == 0x1aU)); +} + +static int32_t set_vcpuid_extended_function(void) +{ + uint32_t i, limit; + struct vcpuid_entry entry; + int32_t result; + + init_vcpuid_entry(0x40000000U, 0U, 0U, &entry); + result = set_vcpuid_entry(vcpuid_entries, &entry); + if (result == 0) { + init_vcpuid_entry(0x40000001U, 0U, 0U, &entry); + + result = set_vcpuid_entry(vcpuid_entries, &entry); + } + + if (result == 0) { + init_vcpuid_entry(0x40000010U, 0U, 0U, &entry); + result = set_vcpuid_entry(vcpuid_entries, &entry); + } + + if (result == 0) { + init_vcpuid_entry(0x80000000U, 0U, 0U, &entry); + result = set_vcpuid_entry(vcpuid_entries, &entry); + } + + if (result == 0) { + limit = entry.eax; + g_vcpuid_xlevel = limit; + for (i = 0x80000002U; i <= limit; i++) { + init_vcpuid_entry(i, 0U, 0U, &entry); + result = set_vcpuid_entry(vcpuid_entries, &entry); + if (result != 0) { + break; + } + } + } + + return result; +} + +void init_pcpu_capabilities(void) +{ + uint32_t eax, unused; + uint32_t family_id, model_id, displayfamily, displaymodel; + + cpuid_subleaf(CPUID_VENDORSTRING, 0x0U, + &boot_cpu_data.cpuid_level, + &unused, &unused, &unused); + + cpuid_subleaf(CPUID_FEATURES, 0x0U, &eax, &unused, + &boot_cpu_data.cpuid_leaves[FEAT_1_ECX], + &boot_cpu_data.cpuid_leaves[FEAT_1_EDX]); + + /* SDM Vol.2A 3-211 states the algorithm to calculate DisplayFamily and DisplayModel */ + family_id = (eax >> 8U) & 0xfU; + displayfamily = family_id; + if (family_id == 0xFU) { + displayfamily += ((eax >> 20U) & 0xffU); + } + boot_cpu_data.displayfamily = (uint8_t)displayfamily; + + model_id = (eax >> 4U) & 0xfU; + displaymodel = model_id; + if ((family_id == 0x06U) || (family_id == 0xFU)) { + displaymodel += ((eax >> 16U) & 0xfU) << 4U; + } + boot_cpu_data.displaymodel = (uint8_t)displaymodel; + + + cpuid_subleaf(CPUID_EXTEND_FEATURE, 0x0U, &unused, + &boot_cpu_data.cpuid_leaves[FEAT_7_0_EBX], + &boot_cpu_data.cpuid_leaves[FEAT_7_0_ECX], + &boot_cpu_data.cpuid_leaves[FEAT_7_0_EDX]); + + cpuid_subleaf(CPUID_EXTEND_FEATURE, 0x2U, &unused, &unused, &unused, + &boot_cpu_data.cpuid_leaves[FEAT_7_2_EDX]); + + cpuid_subleaf(CPUID_MAX_EXTENDED_FUNCTION, 0x0U, + &boot_cpu_data.extended_cpuid_level, + &unused, &unused, &unused); + + if (boot_cpu_data.extended_cpuid_level >= CPUID_EXTEND_FUNCTION_1) { + cpuid_subleaf(CPUID_EXTEND_FUNCTION_1, 0x0U, &unused, &unused, + &boot_cpu_data.cpuid_leaves[FEAT_8000_0001_ECX], + &boot_cpu_data.cpuid_leaves[FEAT_8000_0001_EDX]); + } + + if (boot_cpu_data.extended_cpuid_level >= CPUID_EXTEND_INVA_TSC) { + cpuid_subleaf(CPUID_EXTEND_INVA_TSC, 0x0U, &eax, &unused, &unused, + &boot_cpu_data.cpuid_leaves[FEAT_8000_0007_EDX]); + } + + if (boot_cpu_data.extended_cpuid_level >= CPUID_EXTEND_ADDRESS_SIZE) { + cpuid_subleaf(CPUID_EXTEND_ADDRESS_SIZE, 0x0U, &eax, + &boot_cpu_data.cpuid_leaves[FEAT_8000_0008_EBX], + &unused, &unused); + + /* EAX bits 07-00: #Physical Address Bits + * bits 15-08: #Linear Address Bits + */ + boot_cpu_data.virt_bits = (uint8_t)((eax >> 8U) & 0xffU); + boot_cpu_data.phys_bits = (uint8_t)(eax & 0xffU); + boot_cpu_data.physical_address_mask = + get_address_mask(boot_cpu_data.phys_bits); + } + + // detect_pcpu_cap(); +} + +int32_t +set_vcpuid_entries(void) +{ + int32_t result; + struct vcpuid_entry entry; + uint32_t limit; + uint32_t i, j; + struct cpuinfo_x86 *cpu_info = get_pcpu_info(); + + init_vcpuid_entry(0U, 0U, 0U, &entry); + + if (cpu_info->cpuid_level < 0x16U) { + /* The cpuid with zero leaf returns the max level. Emulate that the 0x16U is supported */ + entry.eax = 0x16U; + } + result = set_vcpuid_entry(vcpuid_entries, &entry); + if (result == 0) { + limit = entry.eax; + g_vcpuid_level = limit; + + for (i = 1U; i <= limit; i++) { + if (is_percpu_related(i)) { + continue; + } + + switch (i) { + case 0x04U: + for (j = 0U; ; j++) { + init_vcpuid_entry(i, j, CPUID_CHECK_SUBLEAF, &entry); + if (entry.eax == 0U) { + break; + } + + result = set_vcpuid_entry(vcpuid_entries, &entry); + if (result != 0) { + /* wants to break out of switch */ + break; + } + } + break; + /* MONITOR/MWAIT */ + case 0x05U: + break; + case 0x07U: + init_vcpuid_entry(i, 0U, CPUID_CHECK_SUBLEAF, &entry); + if (entry.eax != 0U) { + printc("vcpuid: only support subleaf 0 for cpu leaf 07h\n"); + entry.eax = 0U; + } + /* mask CPUID_EDX_IBRS_IBPB */ + entry.edx &= ~CPUID_EDX_IBRS_IBPB; + + entry.ecx &= ~CPUID_ECX_WAITPKG; + + result = set_vcpuid_entry(vcpuid_entries, &entry); + break; + case 0x12U: + break; + /* These features are disabled */ + /* PMU is not supported except for core partition VM, like RTVM */ + case 0x0aU: + break; + + /* Intel RDT */ + case 0x0fU: + break; + /* Intel RDT */ + case 0x10U: + break; + + /* Intel Processor Trace */ + case 0x14U: + /* PCONFIG */ + case 0x1bU: + /* V2 Extended Topology Enumeration Leaf */ + case 0x1fU: + break; + default: + init_vcpuid_entry(i, 0U, 0U, &entry); + result = set_vcpuid_entry(vcpuid_entries, &entry); + break; + } + + /* WARNING: do nothing between break out of switch and before this check */ + if (result != 0) { + /* break out of for */ + break; + } + } + + if (result == 0) { + result = set_vcpuid_extended_function(); + } + } + + return result; +} + +static inline const struct vcpuid_entry *local_find_vcpuid_entry(uint32_t leaf, uint32_t subleaf) +{ + uint32_t i = 0U, nr, half; + const struct vcpuid_entry *found_entry = NULL; + + nr = g_entry_nr; + half = nr >> 1U; + if (vcpuid_entries[half].leaf < leaf) { + i = half; + } + + for (; i < nr; i++) { + const struct vcpuid_entry *tmp = (const struct vcpuid_entry *)(&vcpuid_entries[i]); + + if (tmp->leaf < leaf) { + continue; + } else if (tmp->leaf == leaf) { + if (((tmp->flags & CPUID_CHECK_SUBLEAF) != 0U) && (tmp->subleaf != subleaf)) { + continue; + } + found_entry = tmp; + break; + } else { + /* tmp->leaf > leaf */ + break; + } + } + + return found_entry; +} + +static inline const struct vcpuid_entry *find_vcpuid_entry(uint32_t leaf_arg, uint32_t subleaf) +{ + const struct vcpuid_entry *entry; + uint32_t leaf = leaf_arg; + + entry = local_find_vcpuid_entry(leaf, subleaf); + if (entry == NULL) { + uint32_t limit; + + if ((leaf & 0x80000000U) != 0U) { + limit = g_vcpuid_xlevel; + } else { + limit = g_vcpuid_level; + } + + if (leaf > limit) { + /* Intel documentation states that invalid EAX input + * will return the same information as EAX=cpuid_level + * (Intel SDM Vol. 2A - Instruction Set Reference - + * CPUID) + */ + leaf = g_vcpuid_level; + entry = local_find_vcpuid_entry(leaf, subleaf); + } + + } + + return entry; +} + +static void guest_cpuid_01h(struct vmrt_vm_vcpu *vcpu, uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) +{ + uint32_t apicid = 1; + + cpuid_subleaf(0x1U, 0x0U, eax, ebx, ecx, edx); + /* Patching initial APIC ID */ + *ebx &= ~APIC_ID_MASK; + *ebx |= (apicid << APIC_ID_SHIFT); + + *edx &= ~CPUID_EDX_MTRR; + + /* mask Safer Mode Extension */ + *ecx &= ~CPUID_ECX_SMX; + + *ecx &= ~CPUID_ECX_EST; + + /* mask SDBG for silicon debug */ + *ecx &= ~CPUID_ECX_SDBG; + + /* mask VMX to guest OS */ + *ecx &= ~CPUID_ECX_VMX; + + /* set Hypervisor Present Bit */ + *ecx |= CPUID_ECX_HV; + + /* Warning: should we support pcid in VM? Let's begin with not setting it first */ + *ecx &= ~CPUID_ECX_PCID; + + /* + * Hide MONITOR/MWAIT. + */ + // *ecx &= ~CPUID_ECX_MONITOR; + + /* Warning: should we support CPUID_ECX_OSXSAVE in VM? Let's begin with not setting it first */ + *ecx &= ~CPUID_ECX_OSXSAVE; + if ((*ecx & CPUID_ECX_XSAVE) != 0U) { + uint64_t cr4; + /*read guest CR4*/ + cr4 = vcpu->shared_region->cr4; + if ((cr4 & CR4_OSXSAVE) != 0UL) { + *ecx |= CPUID_ECX_OSXSAVE; + } + } + + /* disable thermal ctrl*/ + *edx &= ~CPUID_EDX_TM1; + + *edx &= ~CPUID_EDX_VME; + + *edx &= ~CPUID_EDX_DE; + + *edx &= ~CPUID_EDX_PSE; + + /* Warning: it seems that PAE, PGE, FXSR should be supported */ + // *edx &= ~CPUID_EDX_PAE; + + // *edx &= ~CPUID_EDX_PGE; + + // *edx &= ~CPUID_EDX_FXSR; + + /* Don't support complex apic */ + *ecx &= ~CPUID_ECX_x2APIC; + + /* DS/PEBS is not supported except for core partition VM, like RTVM */ + /* mask Debug Store feature */ + *ecx &= ~(CPUID_ECX_DTES64 | CPUID_ECX_DS_CPL); + + /* mask PDCM: Perfmon and Debug Capability */ + *ecx &= ~CPUID_ECX_PDCM; + + /* mask Debug Store feature */ + *edx &= ~CPUID_EDX_DTES; +} + +static void guest_cpuid_0bh(uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) +{ + /* Forward host cpu topology to the guest, guest will know the native platform information such as host cpu topology here */ + cpuid_subleaf(0x0BU, *ecx, eax, ebx, ecx, edx); + + /* Patching X2APIC */ + *edx = 1; +} + +static void guest_cpuid_0dh(uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) +{ + uint32_t subleaf = *ecx; + + cpuid_subleaf(0x0dU, subleaf, eax, ebx, ecx, edx); + switch (subleaf) { + case 0U: + /* SDM Vol.1 17-2, On processors that do not support Intel MPX, + * CPUID.(EAX=0DH,ECX=0):EAX[3] and + * CPUID.(EAX=0DH,ECX=0):EAX[4] will both be 0 */ + *eax &= ~(CPUID_EAX_XCR0_BNDREGS | CPUID_EAX_XCR0_BNDCSR); + break; + case 1U: + *ecx &= ~(CPUID_ECX_CET_U_STATE | CPUID_ECX_CET_S_STATE); + break; + case 11U: + case 12U: + *eax = 0U; + *ebx = 0U; + *ecx = 0U; + *edx = 0U; + break; + default: + /* No emulation for other leaves */ + break; + } +} + +static void guest_cpuid_19h(uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) +{ + *eax = 0U; + *ebx = 0U; + *ecx = 0U; + *edx = 0U; +} + +static void guest_cpuid_80000001h(const struct vmrt_vm_vcpu *vcpu, + uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) +{ + const struct vcpuid_entry *entry_check = find_vcpuid_entry(0x80000000U, 0); + uint64_t guest_ia32_misc_enable = 0x800001; + uint32_t leaf = 0x80000001U; + + if ((entry_check != NULL) && (entry_check->eax >= leaf)) { + cpuid_subleaf(leaf, 0x0U, eax, ebx, ecx, edx); + /* SDM Vol4 2.1, XD Bit Disable of MSR_IA32_MISC_ENABLE + * When set to 1, the Execute Disable Bit feature (XD Bit) is disabled and the XD Bit + * extended feature flag will be clear (CPUID.80000001H: EDX[20]=0) + */ + if ((guest_ia32_misc_enable & MSR_IA32_MISC_ENABLE_XD_DISABLE) != 0UL) { + *edx = *edx & ~CPUID_EDX_XD_BIT_AVIL; + } + } else { + *eax = 0U; + *ebx = 0U; + *ecx = 0U; + *edx = 0U; + } +} + +static void guest_limit_cpuid(const struct vmrt_vm_vcpu *vcpu, uint32_t leaf, + uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) +{ + uint64_t guest_ia32_misc_enable = 0x800001; + + if ((guest_ia32_misc_enable & MSR_IA32_MISC_ENABLE_LIMIT_CPUID) != 0UL) { + /* limit the leaf number to 2 */ + if (leaf == 0U) { + *eax = 2U; + } else if (leaf > 2U) { + *eax = 0U; + *ebx = 0U; + *ecx = 0U; + *edx = 0U; + } else { + /* In this case, leaf is 1U, return the cpuid value get above */ + } + } +} + +void guest_cpuid(struct vmrt_vm_vcpu *vcpu, uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) +{ + uint32_t leaf = *eax; + uint32_t subleaf = *ecx; + + /* vm related */ + if (!is_percpu_related(leaf)) { + const struct vcpuid_entry *entry = find_vcpuid_entry(leaf, subleaf); + + if (entry != NULL) { + *eax = entry->eax; + *ebx = entry->ebx; + *ecx = entry->ecx; + *edx = entry->edx; + } else { + *eax = 0U; + *ebx = 0U; + *ecx = 0U; + *edx = 0U; + } + } else { + /* percpu related */ + switch (leaf) { + case 0x01U: + guest_cpuid_01h(vcpu, eax, ebx, ecx, edx); + break; + + case 0x0bU: + guest_cpuid_0bh(eax, ebx, ecx, edx); + break; + + case 0x0dU: + guest_cpuid_0dh(eax, ebx, ecx, edx); + break; + + case 0x19U: + guest_cpuid_19h(eax, ebx, ecx, edx); + break; + + case 0x80000001U: + guest_cpuid_80000001h(vcpu, eax, ebx, ecx, edx); + break; + + default: + /* + * In this switch statement, leaf 0x01/0x0b/0x0d/0x19/0x80000001 + * shall be handled specifically. All the other cases + * just return physical value. + */ + cpuid_subleaf(leaf, *ecx, eax, ebx, ecx, edx); + break; + } + } + + guest_limit_cpuid(vcpu, leaf, eax, ebx, ecx, edx); +} + +void +cpuid_handler(struct vmrt_vm_vcpu *vcpu) +{ + uint64_t rax, rbx, rcx, rdx; + volatile struct vm_vcpu_shared_region *regs = vcpu->shared_region; + int test = 0; + + rax = regs->ax; + rbx = regs->bx; + rcx = regs->cx; + rdx = regs->dx; + + guest_cpuid(vcpu, (uint32_t *)&rax, (uint32_t *)&rbx, (uint32_t *)&rcx, (uint32_t *)&rdx); + + regs->ax = rax; + regs->bx = rbx; + regs->cx = rcx; + regs->dx = rdx; + + GOTO_NEXT_INST(regs); + + return; +} + +static void __attribute__((constructor)) +init(void) +{ + init_pcpu_capabilities(); + set_vcpuid_entries(); +} diff --git a/src/components/implementation/simple_vmm/nf_multicore/vcpuid.h b/src/components/implementation/simple_vmm/nf_multicore/vcpuid.h new file mode 100644 index 0000000000..9124eedb0e --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/vcpuid.h @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2018-2022 Intel Corporation. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef VCPUID_H_ +#define VCPUID_H_ +#include + +#define CPUID_CHECK_SUBLEAF (1U << 0U) +#define MAX_VM_VCPUID_ENTRIES 64U + +/* Guest capability flags reported by CPUID */ +#define GUEST_CAPS_PRIVILEGE_VM (1U << 0U) + +struct vcpuid_entry { + uint32_t eax; + uint32_t ebx; + uint32_t ecx; + uint32_t edx; + uint32_t leaf; + uint32_t subleaf; + uint32_t flags; + uint32_t padding; +}; + +#define FEATURE_WORDS 16U + +int32_t set_vcpuid_entries(void); +void guest_cpuid(struct vmrt_vm_vcpu *vcpu, + uint32_t *eax, uint32_t *ebx, + uint32_t *ecx, uint32_t *edx); + +#endif /* VCPUID_H_ */ diff --git a/src/components/implementation/simple_vmm/nf_multicore/vio.c b/src/components/implementation/simple_vmm/nf_multicore/vio.c new file mode 100644 index 0000000000..b63253b7b1 --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/vio.c @@ -0,0 +1,106 @@ +#include +#include "devices/serial/serial.h" +#include "devices/vpci/vpci.h" +#include "devices/vpic/vpic.h" +#include "devices/vrtc/vrtc.h" +#include "devices/vps2/vps2.h" +#include "devices/vpci/virtio_net_io.h" + +void +io_handler(struct vmrt_vm_vcpu *vcpu) +{ + volatile struct vm_vcpu_shared_region *regs = vcpu->shared_region; + u64_t qualification = regs->qualification; + + u16_t port_id = (qualification >> 16) & 0XFFFF; + u8_t access_sz = qualification & 7; + u8_t access_dir = (qualification >> 3) & 1; + + assert(!((qualification >> 4) & 1)); + assert(!((qualification >> 5) & 1)); + + switch (access_sz) + { + case 0: + access_sz = IO_BYTE; + break; + case 1: + access_sz = IO_WORD; + break; + case 3: + access_sz = IO_LONG; + break; + default: + VM_PANIC(vcpu); + + } + if (port_id == 0x3ff || port_id == 0x2f9 || port_id == 0x2fc || port_id == 0x2fb || port_id == 0x2fa || port_id == 0x2ff || port_id == 0x2f8 || port_id == 0x3e9 || port_id == 0x3ec || port_id == 0x3eb || port_id == 0x3ea || port_id == 0x3ef || port_id == 0x3e8 + || port_id == 0x2e9 || port_id == 0x2ec || port_id == 0x2eb || port_id == 0x2ee) { + /* TODO: fix these io ports emulcation */ + goto done; + } + if (port_id <= SERIAL_PORT_MAX && port_id >= SERIAL_PORT_MIN) { + serial_handler(port_id, access_dir, access_sz, vcpu); + goto done; + } + + /* Fast path for virtio-net processing */ + switch (port_id) + { + case VIRTIO_NET_DEV_FEATURES: + case VIRTIO_NET_GUEST_FEATURES: + case VIRTIO_NET_QUEUE_ADDR: + case VIRTIO_NET_QUEUE_SIZE: + case VIRTIO_NET_QUEUE_SELECT: + case VIRTIO_NET_QUEUE_NOTIFY: + case VIRTIO_NET_DEV_STATUS: + case VIRTIO_NET_ISR: + case VIRTIO_NET_MAC: + case VIRTIO_NET_MAC1: + case VIRTIO_NET_MAC2: + case VIRTIO_NET_MAC3: + case VIRTIO_NET_MAC4: + case VIRTIO_NET_MAC5: + case VIRTIO_NET_STATUS: + case VIRTIO_NET_STATUS_H: + virtio_net_handler(port_id, access_dir, access_sz, vcpu); + goto done; + default: + break; + } + + switch (port_id) + { + case CMOS_CMD_PORT: + case CMOS_DATA_PORT: + vrtc_handler(port_id, access_dir, access_sz, vcpu); + goto done; + case PIC_MASTER_CMD_PORT: + case PIC_MASTER_DATA_PORT: + case PIC_SLAVE_CMD_PORT: + case PIC_SLAVE_DATA_PORT: + case PIC_ELCR1: + case PIC_ELCR2: + vpic_handler(port_id, access_dir, access_sz, vcpu); + goto done; + case PS2_CONTROL_PORT_A: + case PS2_CONTROL_PORT_B: + ps2_handler(port_id, access_dir, access_sz, vcpu); + goto done; + case VPCI_CONFIG_ADDRESS: + case VPCI_CONFIG_DATA0: + case VPCI_CONFIG_DATA1: + case VPCI_CONFIG_DATA2: + case VPCI_CONFIG_DATA3: + case VPCI_MECHANISM_CONTROL_REG: + vpci_handler(port_id, access_dir, access_sz, vcpu); + goto done; + } + + printc("port id:%x, sz:%d, dir:%d\n", port_id, access_sz, access_dir); + VM_PANIC(vcpu); +done: + GOTO_NEXT_INST(regs); + + return; +} \ No newline at end of file diff --git a/src/components/implementation/simple_vmm/nf_multicore/vioapic.c b/src/components/implementation/simple_vmm/nf_multicore/vioapic.c new file mode 100644 index 0000000000..1dfcdbdc43 --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/vioapic.c @@ -0,0 +1,564 @@ +/*- + * Copyright (c) 2013 Tycho Nightingale + * Copyright (c) 2013 Neel Natu + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#define pr_prefix "vioapic: " + +#include +#include +#include +#include +#include +#include +#include +#include + + +#define RTBL_RO_BITS ((uint32_t)0x00004000U | (uint32_t)0x00001000U) /*Remote IRR and Delivery Status bits*/ + +#define DBG_LEVEL_VIOAPIC 6U +#define ACRN_IOAPIC_VERSION 0x11U + +#define MASK_ALL_INTERRUPTS 0x0001000000010000UL + +static inline struct acrn_vioapics *vm_ioapics(const struct vmrt_vm_comp *vm) +{ + return (struct acrn_vioapics *)(vm->ioapic); +} + +/** + * @pre pin < vioapic->chipinfo.nr_pins + */ +static void +vioapic_generate_intr(struct acrn_single_vioapic *vioapic, uint32_t pin) +{ + uint32_t vector, dest, delmode; + union ioapic_rte rte; + bool level, phys; + + rte = vioapic->rtbl[pin]; + + if (rte.bits.intr_mask == IOAPIC_RTE_MASK_SET) { + printc("ioapic pin%hhu: masked\n", pin); + } else { + phys = (rte.bits.dest_mode == IOAPIC_RTE_DESTMODE_PHY); + delmode = rte.bits.delivery_mode; + level = (rte.bits.trigger_mode == IOAPIC_RTE_TRGRMODE_LEVEL); + + /* For level trigger irq, avoid send intr if + * previous one hasn't received EOI + */ + if (!level || (vioapic->rtbl[pin].bits.remote_irr == 0UL)) { + if (level) { + vioapic->rtbl[pin].bits.remote_irr = IOAPIC_RTE_REM_IRR; + } + vector = rte.bits.vector; + dest = rte.bits.dest_field; + vlapic_receive_intr(vioapic->vm, level, dest, phys, delmode, vector, false); + } + } +} + +/** + * @pre pin < vioapic->chipinfo.nr_pins + */ +static void +vioapic_set_pinstate(struct acrn_single_vioapic *vioapic, uint32_t pin, uint32_t level) +{ + uint32_t old_lvl; + union ioapic_rte rte; + + if (pin < vioapic->chipinfo.nr_pins) { + rte = vioapic->rtbl[pin]; + old_lvl = (uint32_t)bitmap_test((uint16_t)(pin & 0x3FU), &vioapic->pin_state[pin >> 6U]); + if (level == 0U) { + /* clear pin_state and deliver interrupt according to polarity */ + bitmap_clear_nolock((uint16_t)(pin & 0x3FU), &vioapic->pin_state[pin >> 6U]); + if ((rte.bits.intr_polarity == IOAPIC_RTE_INTPOL_ALO) + && (old_lvl != level)) { + vioapic_generate_intr(vioapic, pin); + } + } else { + /* set pin_state and deliver intrrupt according to polarity */ + bitmap_set_nolock((uint16_t)(pin & 0x3FU), &vioapic->pin_state[pin >> 6U]); + if ((rte.bits.intr_polarity == IOAPIC_RTE_INTPOL_AHI) + && (old_lvl != level)) { + vioapic_generate_intr(vioapic, pin); + } + } + } +} + + +struct acrn_single_vioapic * +vgsi_to_vioapic_and_vpin(const struct vmrt_vm_comp *vm, uint32_t vgsi, uint32_t *vpin) +{ + struct acrn_single_vioapic *vioapic; + uint8_t vioapic_index = 0U; + + if (vpin != NULL) { + *vpin = vgsi; + } + + vioapic = (struct acrn_single_vioapic *)&(vm_ioapics(vm)->vioapic_array[vioapic_index]); + + return vioapic; +} + +/** + * @brief Set vIOAPIC IRQ line status. + * + * Similar with vioapic_set_irqline_lock(),but would not make sure + * operation be done with ioapic lock. + * + * @param[in] vm Pointer to target VM + * @param[in] vgsi Target GSI number + * @param[in] operation Action options: GSI_SET_HIGH/GSI_SET_LOW/ + * GSI_RAISING_PULSE/GSI_FALLING_PULSE + * + * @pre vgsi < get_vm_gsicount(vm) + * @pre vm != NULL + * @return None + */ +void +vioapic_set_irqline_nolock(const struct vmrt_vm_comp *vm, uint32_t vgsi, uint32_t operation) +{ + struct acrn_single_vioapic *vioapic; + uint32_t pin; + + vioapic = vgsi_to_vioapic_and_vpin(vm, vgsi, &pin); + + switch (operation) { + case GSI_SET_HIGH: + vioapic_set_pinstate(vioapic, pin, 1U); + break; + case GSI_SET_LOW: + vioapic_set_pinstate(vioapic, pin, 0U); + break; + case GSI_RAISING_PULSE: + vioapic_set_pinstate(vioapic, pin, 1U); + vioapic_set_pinstate(vioapic, pin, 0U); + break; + case GSI_FALLING_PULSE: + vioapic_set_pinstate(vioapic, pin, 0U); + vioapic_set_pinstate(vioapic, pin, 1U); + break; + default: + /* + * The function caller could guarantee the pre condition. + */ + break; + } +} + +/** + * @brief Set vIOAPIC IRQ line status. + * + * @param[in] vm Pointer to target VM + * @param[in] vgsi Target GSI number + * @param[in] operation Action options: GSI_SET_HIGH/GSI_SET_LOW/ + * GSI_RAISING_PULSE/GSI_FALLING_PULSE + * + * @pre vgsi < get_vm_gsicount(vm) + * @pre vm != NULL + * + * @return None + */ +void +vioapic_set_irqline_lock(const struct vmrt_vm_comp *vm, uint32_t vgsi, uint32_t operation) +{ + uint64_t rflags; + + vioapic_set_irqline_nolock(vm, vgsi, operation); +} + +static uint32_t +vioapic_indirect_read(struct acrn_single_vioapic *vioapic, uint32_t addr) +{ + uint32_t regnum, ret = 0U; + uint32_t pin, pincount = vioapic->chipinfo.nr_pins; + + regnum = addr & 0xffU; + switch (regnum) { + case IOAPIC_ID: + ret = (uint32_t)vioapic->chipinfo.id << IOAPIC_ID_SHIFT; + break; + case IOAPIC_VER: + ret = ((pincount - 1U) << MAX_RTE_SHIFT) | ACRN_IOAPIC_VERSION; + break; + case IOAPIC_ARB: + ret = (uint32_t)vioapic->chipinfo.id << IOAPIC_ID_SHIFT; + break; + default: + /* + * In this switch statement, regnum shall either be IOAPIC_ID or + * IOAPIC_VER or IOAPIC_ARB. + * All the other cases will be handled properly later after this + * switch statement. + */ + break; + } + + /* redirection table entries */ + if ((regnum >= IOAPIC_REDTBL) && + (regnum < (IOAPIC_REDTBL + (pincount * 2U)))) { + uint32_t addr_offset = regnum - IOAPIC_REDTBL; + uint32_t rte_offset = addr_offset >> 1U; + pin = rte_offset; + if ((addr_offset & 0x1U) != 0U) { + ret = vioapic->rtbl[pin].u.hi_32; + } else { + ret = vioapic->rtbl[pin].u.lo_32; + } + } + + return ret; +} + +static inline bool vioapic_need_intr(const struct acrn_single_vioapic *vioapic, uint16_t pin) +{ + uint32_t lvl; + union ioapic_rte rte; + bool ret = false; + + if ((uint32_t)pin < vioapic->chipinfo.nr_pins) { + rte = vioapic->rtbl[pin]; + lvl = (uint32_t)bitmap_test(pin & 0x3FU, &vioapic->pin_state[pin >> 6U]); + ret = !!(((rte.bits.intr_polarity == IOAPIC_RTE_INTPOL_ALO) && (lvl == 0U)) || + ((rte.bits.intr_polarity == IOAPIC_RTE_INTPOL_AHI) && (lvl != 0U))); + } + + return ret; +} + +/* + * Due to the race between vcpus and vioapic->lock could be accessed from softirq, ensure to do + * spinlock_irqsave_obtain(&(vioapic->lock), &rflags) & spinlock_irqrestore_release(&(vioapic->lock), rflags) + * by caller. + */ +static void vioapic_indirect_write(struct acrn_single_vioapic *vioapic, uint32_t addr, uint32_t data) +{ + union ioapic_rte last, new, changed; + uint32_t regnum; + uint32_t pin, pincount = vioapic->chipinfo.nr_pins; + + regnum = addr & 0xffUL; + switch (regnum) { + case IOAPIC_ID: + vioapic->chipinfo.id = (uint8_t)((data & IOAPIC_ID_MASK) >> IOAPIC_ID_SHIFT); + break; + case IOAPIC_VER: + case IOAPIC_ARB: + /* readonly */ + break; + default: + /* + * In this switch statement, regnum shall either be IOAPIC_ID or + * IOAPIC_VER or IOAPIC_ARB. + * All the other cases will be handled properly later after this + * switch statement. + */ + break; + } + + /* redirection table entries */ + if ((regnum >= IOAPIC_REDTBL) && (regnum < (IOAPIC_REDTBL + (pincount * 2U)))) { + bool wire_mode_valid = true; + uint32_t addr_offset = regnum - IOAPIC_REDTBL; + uint32_t rte_offset = addr_offset >> 1U; + pin = rte_offset; + + last = vioapic->rtbl[pin]; + new = last; + if ((addr_offset & 1U) != 0U) { + new.u.hi_32 = data; + } else { + new.u.lo_32 &= RTBL_RO_BITS; + new.u.lo_32 |= (data & ~RTBL_RO_BITS); + } + + /* In some special scenarios, the LAPIC somehow hasn't send + * EOI to IOAPIC which cause the Remote IRR bit can't be clear. + * To clear it, some OSes will use EOI Register to clear it for + * 0x20 version IOAPIC, otherwise use switch Trigger Mode to + * Edge Sensitive to clear it. + */ + if (new.bits.trigger_mode == IOAPIC_RTE_TRGRMODE_EDGE) { + new.bits.remote_irr = 0U; + } + + changed.full = last.full ^ new.full; + /* pin0 from vpic mask/unmask */ + if ((pin == 0U) && (changed.bits.intr_mask != 0UL)) { + /* mask -> umask */ + if (last.bits.intr_mask == IOAPIC_RTE_MASK_SET) { + if ((vioapic->vm->wire_mode == VPIC_WIRE_NULL) || + (vioapic->vm->wire_mode == VPIC_WIRE_INTR)) { + vioapic->vm->wire_mode = VPIC_WIRE_IOAPIC; + printc("vpic wire mode -> IOAPIC\n"); + } else { + printc("WARNING: invalid vpic wire mode change\n"); + wire_mode_valid = false; + } + /* unmask -> mask */ + } else { + if (vioapic->vm->wire_mode == VPIC_WIRE_IOAPIC) { + vioapic->vm->wire_mode = VPIC_WIRE_INTR; + printc("vpic wire mode -> INTR\n"); + } + } + } + + if (wire_mode_valid) { + vioapic->rtbl[pin] = new; + + /* remap for ptdev */ + if ((new.bits.intr_mask == IOAPIC_RTE_MASK_CLR) || (last.bits.intr_mask == IOAPIC_RTE_MASK_CLR)) { + /* TODO: set pin remap*/ + } + + /* + * Generate an interrupt if the following conditions are met: + * - pin is not masked + * - previous interrupt has been EOIed + * - pin level is asserted + */ + if ((vioapic->rtbl[pin].bits.intr_mask == IOAPIC_RTE_MASK_CLR) && + (vioapic->rtbl[pin].bits.remote_irr == 0UL) && + vioapic_need_intr(vioapic, (uint16_t)pin)) { + vioapic_generate_intr(vioapic, pin); + } + } + } +} + +static void +vioapic_mmio_rw(struct acrn_single_vioapic *vioapic, uint64_t gpa, + uint32_t *data, bool do_read) +{ + uint32_t offset; + uint64_t rflags; + + offset = (uint32_t)(gpa - vioapic->chipinfo.addr); + + /* The IOAPIC specification allows 32-bit wide accesses to the + * IOAPIC_REGSEL (offset 0) and IOAPIC_WINDOW (offset 16) registers. + */ + switch (offset) { + case IOAPIC_REGSEL: + if (do_read) { + *data = vioapic->ioregsel; + } else { + vioapic->ioregsel = *data & 0xFFU; + } + break; + case IOAPIC_WINDOW: + if (do_read) { + *data = vioapic_indirect_read(vioapic, + vioapic->ioregsel); + } else { + vioapic_indirect_write(vioapic, + vioapic->ioregsel, *data); + } + break; + default: + assert(0); + if (do_read) { + *data = 0xFFFFFFFFU; + } + break; + } +} + +/* + * @pre vm != NULL + */ +static void +vioapic_process_eoi(struct acrn_single_vioapic *vioapic, uint32_t vector) +{ + uint32_t pin, pincount = vioapic->chipinfo.nr_pins; + union ioapic_rte rte; + uint64_t rflags; + + if ((vector < VECTOR_DYNAMIC_START) || (vector > NR_MAX_VECTOR)) { + printc("vioapic_process_eoi: invalid vector %u", vector); + } + + printc("ioapic processing eoi for vector %u\n", vector); + + /* notify device to ack if assigned pin */ + for (pin = 0U; pin < pincount; pin++) { + rte = vioapic->rtbl[pin]; + if ((rte.bits.vector != vector) || + (rte.bits.remote_irr == 0U)) { + continue; + } + } + + /* + * XXX keep track of the pins associated with this vector instead + * of iterating on every single pin each time. + */ + for (pin = 0U; pin < pincount; pin++) { + rte = vioapic->rtbl[pin]; + if ((rte.bits.vector != vector) || + (rte.bits.remote_irr == 0U)) { + continue; + } + + vioapic->rtbl[pin].bits.remote_irr = 0U; + if (vioapic_need_intr(vioapic, (uint16_t)pin)) { + printc("ioapic pin%hhu: asserted at eoi\n", pin); + vioapic_generate_intr(vioapic, pin); + } + } +} + +void vioapic_broadcast_eoi(const struct vmrt_vm_comp *vm, uint32_t vector) +{ + struct acrn_single_vioapic *vioapic; + uint8_t vioapic_index; + + /* + * For platforms with multiple IO-APICs, EOI message from LAPIC is + * broadcast to all IO-APICs. Emulating the same behavior here. + */ + + for (vioapic_index = 0U; vioapic_index < vm_ioapics(vm)->ioapic_num; vioapic_index++) { + vioapic = &(vm_ioapics(vm)->vioapic_array[vioapic_index]); + vioapic_process_eoi(vioapic, vector); + } +} + +static void reset_one_vioapic(struct acrn_single_vioapic *vioapic) +{ + uint32_t pin, pincount; + + /* Initialize all redirection entries to mask all interrupts */ + pincount = vioapic->chipinfo.nr_pins; + for (pin = 0U; pin < pincount; pin++) { + vioapic->rtbl[pin].full = MASK_ALL_INTERRUPTS; + } + vioapic->chipinfo.id = 0U; + vioapic->ioregsel = 0U; +} + +void reset_vioapics(const struct vmrt_vm_comp *vm) +{ + struct acrn_vioapics *vioapics = vm_ioapics(vm); + uint8_t vioapic_index; + + for (vioapic_index = 0U; vioapic_index < vioapics->ioapic_num; vioapic_index++) { + reset_one_vioapic(&vioapics->vioapic_array[vioapic_index]); + } +} + +void +vioapic_init(struct vmrt_vm_comp *vm) +{ + static struct ioapic_info virt_ioapic_info = { + .nr_pins = VIOAPIC_RTE_NUM, + .addr = VIOAPIC_BASE + }; + + struct ioapic_info *vioapic_info; + uint8_t vioapic_index; + struct acrn_single_vioapic *vioapic = NULL; + struct acrn_vioapics *vioapics = vm_ioapics(vm); + + /* only set one io apic */ + vioapics->ioapic_num = 1U; + vioapic_info = &virt_ioapic_info; + + for (vioapic_index = 0U; vioapic_index < vioapics->ioapic_num; vioapic_index++) { + vioapic = &vioapics->vioapic_array[vioapic_index]; + vioapic->chipinfo = vioapic_info[vioapic_index]; + + vioapic->vm = vm; + reset_one_vioapic(vioapic); + } + + /* + * Maximum number of GSI is computed as GSI base of the IOAPIC i.e. enumerated last in ACPI MADT + * plus the number of interrupt pins of that IOAPIC. + */ + if (vioapic != NULL) { + vioapics->nr_gsi = vioapic->chipinfo.gsi_base + vioapic->chipinfo.nr_pins; + } +} + +uint32_t +get_vm_gsicount(const struct vmrt_vm_comp *vm) +{ + struct acrn_vioapics *vioapics = vm_ioapics(vm); + return vioapics->nr_gsi; +} + +/* + * @pre handler_private_data != NULL + */ +int32_t vioapic_mmio_access_handler(struct vmrt_vm_vcpu *vcpu) +{ + struct acrn_mmio_request *mmio = vcpu->mmio_request; + struct acrn_single_vioapic *vioapic = &vm_ioapics(vcpu->vm)->vioapic_array[0]; + uint64_t gpa = mmio->address; + int32_t ret = 0; + + /* Note all RW to IOAPIC are 32-Bit in size */ + if (mmio->size == 4UL) { + uint32_t data = (uint32_t)mmio->value; + + if (mmio->direction == ACRN_IOREQ_DIR_READ) { + vioapic_mmio_rw(vioapic, gpa, &data, true); + mmio->value = (uint64_t)data; + } else if (mmio->direction == ACRN_IOREQ_DIR_WRITE) { + vioapic_mmio_rw(vioapic, gpa, &data, false); + } else { + ret = -EINVAL; + } + } else { + printc("All RW to IOAPIC must be 32-bits in size\n"); + assert(0); + } + + return ret; +} + +/** + * @pre vm->arch_vm.vioapics != NULL + * @pre vgsi < get_vm_gsicount(vm) + * @pre rte != NULL + */ +void vioapic_get_rte(const struct vmrt_vm_comp *vm, uint32_t vgsi, union ioapic_rte *rte) +{ + struct acrn_single_vioapic *vioapic; + uint32_t pin; + vioapic = vgsi_to_vioapic_and_vpin(vm, vgsi, &pin); + + *rte = vioapic->rtbl[pin]; +} diff --git a/src/components/implementation/simple_vmm/nf_multicore/vioapic.h b/src/components/implementation/simple_vmm/nf_multicore/vioapic.h new file mode 100644 index 0000000000..73794a091e --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/vioapic.h @@ -0,0 +1,128 @@ +/*- + * Copyright (c) 2013 Tycho Nightingale + * Copyright (c) 2013 Neel Natu + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef VIOAPIC_H +#define VIOAPIC_H + +/** + * @file vioapic.h + * + * @brief public APIs for virtual I/O APIC + */ + +#include +#include +#include + +#define VIOAPIC_BASE 0xFEC00000UL +#define VIOAPIC_SIZE 4096UL +#define MAX_IOAPIC_NUM 1 + +#define REDIR_ENTRIES_HW 120U /* Service VM align with native ioapic */ +#define STATE_BITMAP_SIZE INT_DIV_ROUNDUP(REDIR_ENTRIES_HW, 64U) + +#define IOAPIC_RTE_LOW_INTVEC ((uint32_t)IOAPIC_RTE_INTVEC) + +/* + * id field is used to emulate the IOAPIC_ID register of vIOAPIC + */ + +struct acrn_single_vioapic { + // spinlock_t lock; + struct vmrt_vm_comp *vm; + struct ioapic_info chipinfo; + uint32_t ioregsel; + union ioapic_rte rtbl[REDIR_ENTRIES_HW]; + /* pin_state status bitmap: 1 - high, 0 - low */ + uint64_t pin_state[STATE_BITMAP_SIZE]; +}; + +/* + * ioapic_num represents the number of IO-APICs emulated for the VM. + * nr_gsi represents the maximum number of GSI emulated for the VM. + */ +struct acrn_vioapics { + uint8_t ioapic_num; + uint32_t nr_gsi; + struct acrn_single_vioapic vioapic_array[MAX_IOAPIC_NUM]; +}; + +void dump_vioapic(struct vmrt_vm_comp *vm); +void vioapic_init(struct vmrt_vm_comp *vm); +void reset_vioapics(const struct vmrt_vm_comp *vm); + + +/** + * @brief virtual I/O APIC + * + * @addtogroup acrn_vioapic ACRN vIOAPIC + * @{ + */ + +/** + * @brief Set vIOAPIC IRQ line status. + * + * @param[in] vm Pointer to target VM + * @param[in] vgsi GSI for the virtual interrupt + * @param[in] operation Action options: GSI_SET_HIGH/GSI_SET_LOW/ + * GSI_RAISING_PULSE/GSI_FALLING_PULSE + * + * @pre irqline < vioapic_pincount(vm) + * + * @return None + */ +void vioapic_set_irqline_lock(const struct vmrt_vm_comp *vm, uint32_t vgsi, uint32_t operation); + +/** + * @brief Set vIOAPIC IRQ line status. + * + * Similar with vioapic_set_irqline_lock(),but would not make sure + * operation be done with ioapic lock. + * + * @param[in] vm Pointer to target VM + * @param[in] vgsi GSI for the virtual interrupt + * @param[in] operation Action options: GSI_SET_HIGH/GSI_SET_LOW/ + * GSI_RAISING_PULSE/GSI_FALLING_PULSE + * + * @pre irqline < vioapic_pincount(vm) + * @return None + */ +void vioapic_set_irqline_nolock(const struct vmrt_vm_comp *vm, uint32_t vgsi, uint32_t operation); + +uint32_t get_vm_gsicount(const struct vmrt_vm_comp *vm); +void vioapic_broadcast_eoi(const struct vmrt_vm_comp *vm, uint32_t vector); +void vioapic_get_rte(const struct vmrt_vm_comp *vm, uint32_t vgsi, union ioapic_rte *rte); +int32_t vioapic_mmio_access_handler(struct vmrt_vm_vcpu *vcpu); +struct acrn_single_vioapic *vgsi_to_vioapic_and_vpin(const struct vmrt_vm_comp *vm, uint32_t vgsi, uint32_t *vpin); + +/** + * @} + */ +/* End of acrn_vioapic */ +#endif /* VIOAPIC_H */ diff --git a/src/components/implementation/simple_vmm/nf_multicore/vlapic.c b/src/components/implementation/simple_vmm/nf_multicore/vlapic.c new file mode 100644 index 0000000000..155eed10e3 --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/vlapic.c @@ -0,0 +1,1554 @@ +/*- + * Copyright (c) 2011 NetApp, Inc. + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#define pr_prefix "vlapic: " + +#include +#include +#include +#include +#include +#include +#include "vpic.h" +#include "bits.h" +#include "atomic.h" + +#include + +#pragma GCC diagnostic ignored "-Wunused-but-set-variable" +#define VLAPIC_VERBOS 0 + +#define VLAPIC_VERSION (16U) +#define APICBASE_BSP 0x00000100UL +#define APICBASE_X2APIC 0x00000400UL +#define APICBASE_XAPIC 0x00000800UL +#define APICBASE_LAPIC_MODE (APICBASE_XAPIC | APICBASE_X2APIC) +#define APICBASE_ENABLED 0x00000800UL +#define LOGICAL_ID_MASK 0xFU +#define CLUSTER_ID_MASK 0xFFFF0U + +#define DBG_LEVEL_VLAPIC 6U + +int g_vlapi_enabled = 0; + +static inline struct vmrt_vm_vcpu *vlapic2vcpu(const struct acrn_vlapic *vlapic) +{ + return vlapic->vcpu; +} +static inline struct acrn_vlapic *vcpu_vlapic(struct vmrt_vm_vcpu *vcpu) +{ + return vcpu->vlapic; +} +static inline bool is_lapic_pt_configured(void) +{ + return false; +} + +static inline void vlapic_dump_irr(__unused const struct acrn_vlapic *vlapic, __unused const char *msg) {} +static inline void vlapic_dump_isr(__unused const struct acrn_vlapic *vlapic, __unused const char *msg) {} + +const struct acrn_apicv_ops *apicv_ops; + +static bool apicv_set_intr_ready(struct acrn_vlapic *vlapic, uint32_t vector); + +static void apicv_trigger_pi_anv(uint16_t dest_pcpu_id, uint32_t anv); + +static void vlapic_x2apic_self_ipi_handler(struct acrn_vlapic *vlapic); + +/* + * Post an interrupt to the vcpu running on 'hostcpu'. This will use a + * hardware assist if available (e.g. Posted Interrupt) or fall back to + * sending an 'ipinum' to interrupt the 'hostcpu'. + */ +static void vlapic_set_error(struct acrn_vlapic *vlapic, uint32_t mask); + +void vlapic_timer_expired(struct vmrt_vm_vcpu *vcpu); +static struct pi_desc *get_pi_desc(struct vmrt_vm_vcpu *vcpu); + +static inline bool vlapic_enabled(const struct acrn_vlapic *vlapic) +{ + const struct lapic_regs *lapic = vlapic->apic_page; + + return (((vlapic->msr_apicbase & APICBASE_ENABLED) != 0UL) && + ((lapic->svr.v & APIC_SVR_ENABLE) != 0U)); +} + +static inline void vlapic_build_x2apic_id(struct acrn_vlapic *vlapic) +{ + struct lapic_regs *lapic; + uint32_t logical_id, cluster_id; + + lapic = vlapic->apic_page; + lapic->id.v = vlapic->vapic_id; + logical_id = lapic->id.v & LOGICAL_ID_MASK; + cluster_id = (lapic->id.v & CLUSTER_ID_MASK) >> 4U; + lapic->ldr.v = (cluster_id << 16U) | (1U << logical_id); +} + +static inline uint32_t vlapic_find_isrv(const struct acrn_vlapic *vlapic) +{ + const struct lapic_regs *lapic = vlapic->apic_page; + uint32_t i, val, bitpos, isrv = 0U; + const struct lapic_reg *isrptr; + + isrptr = &lapic->isr[0]; + + /* i ranges effectively from 7 to 1 */ + for (i = 7U; i > 0U; i--) { + val = isrptr[i].v; + if (val != 0U) { + bitpos = (uint32_t)fls32(val); + isrv = (i << 5U) | bitpos; + break; + } + } + + return isrv; +} + +static void +vlapic_write_dfr(struct acrn_vlapic *vlapic) +{ + struct lapic_regs *lapic; + + lapic = vlapic->apic_page; + lapic->dfr.v &= APIC_DFR_MODEL_MASK; + lapic->dfr.v |= APIC_DFR_RESERVED; + + if ((lapic->dfr.v & APIC_DFR_MODEL_MASK) == APIC_DFR_MODEL_FLAT) { + printc("vlapic DFR in Flat Model\n"); + } else if ((lapic->dfr.v & APIC_DFR_MODEL_MASK) + == APIC_DFR_MODEL_CLUSTER) { + printc("vlapic DFR in Cluster Model\n"); + } else { + assert(0); + } +} + +static void +vlapic_write_ldr(struct acrn_vlapic *vlapic) +{ + struct lapic_regs *lapic; + + lapic = vlapic->apic_page; + lapic->ldr.v &= ~APIC_LDR_RESERVED; +} + +static inline uint32_t +vlapic_timer_divisor_shift(uint32_t dcr) +{ + uint32_t val; + + val = ((dcr & 0x3U) | ((dcr & 0x8U) >> 1U)); + return ((val + 1U) & 0x7U); +} + +__unused static inline bool +vlapic_lvtt_oneshot(const struct acrn_vlapic *vlapic) +{ + return (((vlapic->apic_page->lvt[APIC_LVT_TIMER].v) & APIC_LVTT_TM) + == APIC_LVTT_TM_ONE_SHOT); +} + +static inline bool +vlapic_lvtt_period(const struct acrn_vlapic *vlapic) +{ + return (((vlapic->apic_page->lvt[APIC_LVT_TIMER].v) & APIC_LVTT_TM) + == APIC_LVTT_TM_PERIODIC); +} + +static inline bool +vlapic_lvtt_tsc_deadline(const struct acrn_vlapic *vlapic) +{ + return (((vlapic->apic_page->lvt[APIC_LVT_TIMER].v) & APIC_LVTT_TM) + == APIC_LVTT_TM_TSCDLT); +} + +static inline bool +vlapic_lvtt_masked(const struct acrn_vlapic *vlapic) +{ + return (((vlapic->apic_page->lvt[APIC_LVT_TIMER].v) & APIC_LVTT_M) != 0U); +} + +static bool +set_expiration(struct acrn_vlapic *vlapic) +{ + struct vlapic_timer *vtimer; + uint32_t tmicr, divisor_shift; + bool ret; + + vtimer = &vlapic->vtimer; + tmicr = vtimer->tmicr; + divisor_shift = vtimer->divisor_shift; + + if ((tmicr == 0U) || (divisor_shift > 8U)) { + ret = false; + } else { + uint64_t delta = (uint64_t)tmicr << divisor_shift; + assert(0); + + ret = true; + } + return ret; +} + +static void vlapic_update_lvtt(struct acrn_vlapic *vlapic, + uint32_t val) +{ + uint32_t timer_mode = val & APIC_LVTT_TM; + struct vlapic_timer *vtimer = &vlapic->vtimer; + + if (vtimer->mode != timer_mode) { + struct hv_timer *timer = &vtimer->timer; + + /* + * A write to the LVT Timer Register that changes + * the timer mode disarms the local APIC timer. + */ + /* TODO: reset timer */ + vtimer->mode = timer_mode; + } +} + +static uint32_t vlapic_get_ccr(const struct acrn_vlapic *vlapic) +{ + uint32_t remain_count = 0U; + const struct vlapic_timer *vtimer = &vlapic->vtimer; + + if ((vtimer->tmicr != 0U) && (!vlapic_lvtt_tsc_deadline(vlapic))) { + uint64_t remains; + assert(0); + } + + return remain_count; +} + +static void vlapic_write_dcr(struct acrn_vlapic *vlapic) +{ + uint32_t divisor_shift; + struct vlapic_timer *vtimer; + struct lapic_regs *lapic = vlapic->apic_page; + + vtimer = &vlapic->vtimer; + divisor_shift = vlapic_timer_divisor_shift(lapic->dcr_timer.v); + + vtimer->divisor_shift = divisor_shift; +} + +static void vlapic_write_icrtmr(struct acrn_vlapic *vlapic) +{ + struct lapic_regs *lapic; + struct vlapic_timer *vtimer; + + if (!vlapic_lvtt_tsc_deadline(vlapic)) { + lapic = vlapic->apic_page; + vtimer = &vlapic->vtimer; + vtimer->tmicr = lapic->icr_timer.v; + } +} + +static void +vlapic_write_esr(struct acrn_vlapic *vlapic) +{ + struct lapic_regs *lapic; + + lapic = vlapic->apic_page; + lapic->esr.v = vlapic->esr_pending; + vlapic->esr_pending = 0U; +} + +static void +vlapic_set_tmr(struct acrn_vlapic *vlapic, uint32_t vector, bool level) +{ + struct lapic_reg *tmrptr = &(vlapic->apic_page->tmr[0]); + if (level) { + if (!bitmap32_test_and_set_lock((uint16_t)(vector & 0x1fU), &tmrptr[(vector & 0xffU) >> 5U].v)) { + assert(0); + } + } else { + if (bitmap32_test_and_clear_lock((uint16_t)(vector & 0x1fU), &tmrptr[(vector & 0xffU) >> 5U].v)) { + assert(0); + } + } +} + +static void apicv_basic_accept_intr(struct acrn_vlapic *vlapic, uint32_t vector, bool level) +{ + struct lapic_regs *lapic; + struct lapic_reg *irrptr; + uint32_t idx; + + lapic = vlapic->apic_page; + idx = vector >> 5U; + irrptr = &lapic->irr[0]; + + /* If the interrupt is set, don't try to do it again */ + if (!bitmap32_test_and_set_lock((uint16_t)(vector & 0x1fU), &irrptr[idx].v)) { + /* update TMR if interrupt trigger mode has changed */ + vlapic_set_tmr(vlapic, vector, level); + assert(0); + } +} + +static void apicv_advanced_accept_intr(struct acrn_vlapic *vlapic, uint32_t vector, bool level) +{ + /* update TMR if interrupt trigger mode has changed */ + vlapic_set_tmr(vlapic, vector, level); + + if (apicv_set_intr_ready(vlapic, vector)) { + /* + * Send interrupt to vCPU via posted interrupt way: + * 1. If target vCPU is in root mode(isn't running), + * record this request as ACRN_REQUEST_EVENT,then + * will pick up the interrupt from PIR and inject + * it to vCPU in next vmentry. + * 2. If target vCPU is in non-root mode(running), + * send PI notification to vCPU and hardware will + * sync PIR to vIRR automatically. + */ + + /* TODO: handle cross-core virtual interrupt notification */ + } +} + +/* + * @pre vector >= 16 + */ +static void vlapic_accept_intr(struct acrn_vlapic *vlapic, uint32_t vector, bool level) +{ + struct lapic_regs *lapic; + assert(vector <= 255); + + lapic = vlapic->apic_page; + if ((lapic->svr.v & APIC_SVR_ENABLE) == 0U) { + printc("vlapic is software disabled, ignoring interrupt %u", vector); + assert(0); + } else { + apicv_advanced_accept_intr(vlapic, vector, level); + } +} + +/** + * @brief Send notification vector to target pCPU. + * + * If APICv Posted-Interrupt is enabled and target pCPU is in non-root mode, + * pCPU will sync pending virtual interrupts from PIR to vIRR automatically, + * without VM exit. + * If pCPU in root-mode, virtual interrupt will be injected in next VM entry. + * + * @param[in] dest_pcpu_id Target CPU ID. + * @param[in] anv Activation Notification Vectors (ANV) + * + * @return None + */ +static void apicv_trigger_pi_anv(uint16_t dest_pcpu_id, uint32_t anv) +{ + /* TODO: support pi in the future */ + assert(0); +} + +/** + * @pre offset value shall be one of the folllowing values: + * APIC_OFFSET_CMCI_LVT + * APIC_OFFSET_TIMER_LVT + * APIC_OFFSET_THERM_LVT + * APIC_OFFSET_PERF_LVT + * APIC_OFFSET_LINT0_LVT + * APIC_OFFSET_LINT1_LVT + * APIC_OFFSET_ERROR_LVT + */ +static inline uint32_t +lvt_off_to_idx(uint32_t offset) +{ + uint32_t index; + + switch (offset) { + case APIC_OFFSET_CMCI_LVT: + index = APIC_LVT_CMCI; + break; + case APIC_OFFSET_TIMER_LVT: + index = APIC_LVT_TIMER; + break; + case APIC_OFFSET_THERM_LVT: + index = APIC_LVT_THERMAL; + break; + case APIC_OFFSET_PERF_LVT: + index = APIC_LVT_PMC; + break; + case APIC_OFFSET_LINT0_LVT: + index = APIC_LVT_LINT0; + break; + case APIC_OFFSET_LINT1_LVT: + index = APIC_LVT_LINT1; + break; + case APIC_OFFSET_ERROR_LVT: + default: + /* + * The function caller could guarantee the pre condition. + * So, all of the possible 'offset' other than + * APIC_OFFSET_ERROR_LVT has been handled in prior cases. + */ + index = APIC_LVT_ERROR; + break; + } + + return index; +} + +/** + * @pre offset value shall be one of the folllowing values: + * APIC_OFFSET_CMCI_LVT + * APIC_OFFSET_TIMER_LVT + * APIC_OFFSET_THERM_LVT + * APIC_OFFSET_PERF_LVT + * APIC_OFFSET_LINT0_LVT + * APIC_OFFSET_LINT1_LVT + * APIC_OFFSET_ERROR_LVT + */ +static inline uint32_t * +vlapic_get_lvtptr(struct acrn_vlapic *vlapic, uint32_t offset) +{ + struct lapic_regs *lapic = vlapic->apic_page; + uint32_t i; + uint32_t *lvt_ptr; + + switch (offset) { + case APIC_OFFSET_CMCI_LVT: + lvt_ptr = &lapic->lvt_cmci.v; + break; + default: + /* + * The function caller could guarantee the pre condition. + * All the possible 'offset' other than APIC_OFFSET_CMCI_LVT + * could be handled here. + */ + i = lvt_off_to_idx(offset); + lvt_ptr = &(lapic->lvt[i].v); + break; + } + return lvt_ptr; +} + +static inline uint32_t +vlapic_get_lvt(const struct acrn_vlapic *vlapic, uint32_t offset) +{ + uint32_t idx; + + idx = lvt_off_to_idx(offset); + return vlapic->lvt_last[idx]; +} + +static void +vlapic_write_lvt(struct acrn_vlapic *vlapic, uint32_t offset) +{ + uint32_t *lvtptr, mask, val, idx; + struct lapic_regs *lapic; + bool error = false; + + lapic = vlapic->apic_page; + lvtptr = vlapic_get_lvtptr(vlapic, offset); + val = *lvtptr; + + if ((lapic->svr.v & APIC_SVR_ENABLE) == 0U) { + val |= APIC_LVT_M; + } + mask = APIC_LVT_M | APIC_LVT_DS | APIC_LVT_VECTOR; + switch (offset) { + case APIC_OFFSET_TIMER_LVT: + mask |= APIC_LVTT_TM; + break; + case APIC_OFFSET_ERROR_LVT: + break; + case APIC_OFFSET_LINT0_LVT: + case APIC_OFFSET_LINT1_LVT: + mask |= APIC_LVT_TM | APIC_LVT_RIRR | APIC_LVT_IIPP; + /* FALLTHROUGH */ + default: + mask |= APIC_LVT_DM; + break; + } + val &= mask; + + /* vlapic mask/unmask LINT0 for ExtINT? */ + if ((offset == APIC_OFFSET_LINT0_LVT) && + ((val & APIC_LVT_DM) == APIC_LVT_DM_EXTINT)) { + uint32_t last = vlapic_get_lvt(vlapic, offset); + struct vmrt_vm_comp *vm = vlapic2vcpu(vlapic)->vm; + + /* mask -> unmask: may from every vlapic in the vm */ + if (((last & APIC_LVT_M) != 0U) && ((val & APIC_LVT_M) == 0U)) { + if ((vm->wire_mode == VPIC_WIRE_INTR) || + (vm->wire_mode == VPIC_WIRE_NULL)) { + vm->wire_mode = VPIC_WIRE_LAPIC; + printc("vpic wire mode -> LAPIC\n"); + } else { + printc("WARNING:invalid vpic wire mode change\n"); + assert(0); + } + /* unmask -> mask: only from the vlapic LINT0-ExtINT enabled */ + } else if (((last & APIC_LVT_M) == 0U) && ((val & APIC_LVT_M) != 0U)) { + if (vm->wire_mode == VPIC_WIRE_LAPIC) { + vm->wire_mode = VPIC_WIRE_NULL; + printc("vpic wire mode -> NULL\n"); + } + } else { + /* APIC_LVT_M unchanged. No action required. */ + } + } else if (offset == APIC_OFFSET_TIMER_LVT) { + vlapic_update_lvtt(vlapic, val); + } else { + /* No action required. */ + } + + if (!error) { + *lvtptr = val; + idx = lvt_off_to_idx(offset); + vlapic->lvt_last[idx] = val; + } +} + +static void +vlapic_mask_lvts(struct acrn_vlapic *vlapic) +{ + struct lapic_regs *lapic = vlapic->apic_page; + + lapic->lvt_cmci.v |= APIC_LVT_M; + vlapic_write_lvt(vlapic, APIC_OFFSET_CMCI_LVT); + + lapic->lvt[APIC_LVT_TIMER].v |= APIC_LVT_M; + vlapic_write_lvt(vlapic, APIC_OFFSET_TIMER_LVT); + + lapic->lvt[APIC_LVT_THERMAL].v |= APIC_LVT_M; + vlapic_write_lvt(vlapic, APIC_OFFSET_THERM_LVT); + + lapic->lvt[APIC_LVT_PMC].v |= APIC_LVT_M; + vlapic_write_lvt(vlapic, APIC_OFFSET_PERF_LVT); + + lapic->lvt[APIC_LVT_LINT0].v |= APIC_LVT_M; + vlapic_write_lvt(vlapic, APIC_OFFSET_LINT0_LVT); + + lapic->lvt[APIC_LVT_LINT1].v |= APIC_LVT_M; + vlapic_write_lvt(vlapic, APIC_OFFSET_LINT1_LVT); + + lapic->lvt[APIC_LVT_ERROR].v |= APIC_LVT_M; + vlapic_write_lvt(vlapic, APIC_OFFSET_ERROR_LVT); +} + +/* + * Algorithm adopted from section "Interrupt, Task and Processor Priority" + * in Intel Architecture Manual Vol 3a. + */ +static void +vlapic_update_ppr(struct acrn_vlapic *vlapic) +{ + uint32_t isrv, tpr, ppr; + + isrv = vlapic->isrv; + tpr = vlapic->apic_page->tpr.v; + + if (prio(tpr) >= prio(isrv)) { + ppr = tpr; + } else { + ppr = isrv & 0xf0U; + } + + vlapic->apic_page->ppr.v = ppr; +} + +static void +vlapic_process_eoi(struct acrn_vlapic *vlapic) +{ + struct lapic_regs *lapic = vlapic->apic_page; + struct lapic_reg *isrptr, *tmrptr; + uint32_t i, vector, bitpos; + + isrptr = &lapic->isr[0]; + tmrptr = &lapic->tmr[0]; + + if (vlapic->isrv != 0U) { + vector = vlapic->isrv; + i = (vector >> 5U); + bitpos = (vector & 0x1fU); + bitmap32_clear_nolock((uint16_t)bitpos, &isrptr[i].v); + + vlapic_dump_isr(vlapic, "vlapic_process_eoi"); + + vlapic->isrv = vlapic_find_isrv(vlapic); + vlapic_update_ppr(vlapic); + } +} + +static void +vlapic_set_error(struct acrn_vlapic *vlapic, uint32_t mask) +{ + uint32_t lvt, vec; + + vlapic->esr_pending |= mask; + if (vlapic->esr_firing == 0) { + vlapic->esr_firing = 1; + + /* The error LVT always uses the fixed delivery mode. */ + lvt = vlapic_get_lvt(vlapic, APIC_OFFSET_ERROR_LVT); + if ((lvt & APIC_LVT_M) == 0U) { + vec = lvt & APIC_LVT_VECTOR; + if (vec >= 16U) { + vlapic_accept_intr(vlapic, vec, LAPIC_TRIG_EDGE); + } + } + vlapic->esr_firing = 0; + } +} + +static void vlapic_write_icrlo(struct acrn_vlapic *vlapic) +{ + uint16_t vcpu_id; + bool phys = false, is_broadcast = false; + uint64_t dmask; + uint32_t icr_low, icr_high, dest; + uint32_t vec, mode, shorthand; + struct lapic_regs *lapic; + struct vmrt_vm_vcpu *target_vcpu; + + lapic = vlapic->apic_page; + lapic->icr_lo.v &= ~APIC_DELSTAT_PEND; + + icr_low = lapic->icr_lo.v; + icr_high = lapic->icr_hi.v; + if (is_x2apic_enabled(vlapic)) { + dest = icr_high; + is_broadcast = (dest == 0xffffffffU); + } else { + dest = icr_high >> APIC_ID_SHIFT; + is_broadcast = (dest == 0xffU); + } + vec = icr_low & APIC_VECTOR_MASK; + mode = icr_low & APIC_DELMODE_MASK; + phys = ((icr_low & APIC_DESTMODE_LOG) == 0UL); + shorthand = icr_low & APIC_DEST_MASK; + + if ((mode == APIC_DELMODE_FIXED) && (vec < 16U)) { + vlapic_set_error(vlapic, APIC_ESR_SEND_ILLEGAL_VECTOR); + printc("Ignoring invalid IPI %u", vec); + assert(0); + } else if (((shorthand == APIC_DEST_SELF) || (shorthand == APIC_DEST_ALLISELF)) + && ((mode == APIC_DELMODE_NMI) || (mode == APIC_DELMODE_INIT) + || (mode == APIC_DELMODE_STARTUP))) { + printc("unsupported ICR command, ignore it\n"); + } else { + struct vmrt_vm_vcpu *vcpu = vlapic2vcpu(vlapic); + + printc( + "icrlo 0x%08x icrhi 0x%08x triggered ipi %u", + icr_low, icr_high, vec); + + assert(0); + } +} + +static inline uint32_t vlapic_find_highest_irr(const struct acrn_vlapic *vlapic) +{ + const struct lapic_regs *lapic = vlapic->apic_page; + uint32_t i, val, bitpos, vec = 0U; + const struct lapic_reg *irrptr; + + irrptr = &lapic->irr[0]; + + /* i ranges effectively from 7 to 1 */ + for (i = 7U; i > 0U; i--) { + val = irrptr[i].v; + if (val != 0U) { + bitpos = (uint32_t)fls32(val); + vec = (i * 32U) + bitpos; + break; + } + } + + return vec; +} + +/** + * @brief Find a deliverable virtual interrupts for vLAPIC in irr. + * + * @param[in] vlapic Pointer to target vLAPIC data structure + * @param[inout] vecptr Pointer to vector buffer and will be filled + * with eligible vector if any. + * + * @retval false There is no deliverable pending vector. + * @retval true There is deliverable vector. + * + * @remark The vector does not automatically transition to the ISR as a + * result of calling this function. + * This function is only for case that APICv/VID is NOT supported. + */ +static bool vlapic_find_deliverable_intr(const struct acrn_vlapic *vlapic, uint32_t *vecptr) +{ + const struct lapic_regs *lapic = vlapic->apic_page; + uint32_t vec; + bool ret = false; + + vec = vlapic_find_highest_irr(vlapic); + if (prio(vec) > prio(lapic->ppr.v)) { + ret = true; + if (vecptr != NULL) { + *vecptr = vec; + } + } + + return ret; +} + +/** + * @brief Get a deliverable virtual interrupt from irr to isr. + * + * Transition 'vector' from IRR to ISR. This function is called with the + * vector returned by 'vlapic_find_deliverable_intr()' when the guest is able to + * accept this interrupt (i.e. RFLAGS.IF = 1 and no conditions exist that + * block interrupt delivery). + * + * @param[in] vlapic Pointer to target vLAPIC data structure + * @param[in] vector Target virtual interrupt vector + * + * @return None + * + * @pre vlapic != NULL + */ +static void vlapic_get_deliverable_intr(struct acrn_vlapic *vlapic, uint32_t vector) +{ + struct lapic_regs *lapic = vlapic->apic_page; + struct lapic_reg *irrptr, *isrptr; + uint32_t idx; + + /* + * clear the ready bit for vector being accepted in irr + * and set the vector as in service in isr. + */ + idx = vector >> 5U; + + irrptr = &lapic->irr[0]; + bitmap32_clear_lock((uint16_t)(vector & 0x1fU), &irrptr[idx].v); + + vlapic_dump_irr(vlapic, "vlapic_get_deliverable_intr"); + + isrptr = &lapic->isr[0]; + bitmap32_set_nolock((uint16_t)(vector & 0x1fU), &isrptr[idx].v); + vlapic_dump_isr(vlapic, "vlapic_get_deliverable_intr"); + + vlapic->isrv = vector; + + /* + * Update the PPR + */ + vlapic_update_ppr(vlapic); +} + +static void +vlapic_write_svr(struct acrn_vlapic *vlapic) +{ + struct lapic_regs *lapic; + uint32_t old, new, changed; + + lapic = vlapic->apic_page; + + new = lapic->svr.v; + old = vlapic->svr_last; + vlapic->svr_last = new; + + changed = old ^ new; + + if ((changed & APIC_SVR_ENABLE) != 0U) { + if ((new & APIC_SVR_ENABLE) == 0U) { + struct vmrt_vm_comp *vm = vlapic2vcpu(vlapic)->vm; + /* + * The apic is now disabled so stop the apic timer + * and mask all the LVT entries. + */ + printc("vlapic is software-disabled\n"); + + vlapic_mask_lvts(vlapic); + /* the only one enabled LINT0-ExtINT vlapic disabled */ + if (vm->wire_mode == VPIC_WIRE_NULL) { + vm->wire_mode = VPIC_WIRE_INTR; + printc("vpic wire mode -> INTR\n"); + } + } else { + /* + * The apic is now enabled so restart the apic timer + * if it is configured in periodic mode. + */ + printc("vlapic is software-enabled\n"); + g_vlapi_enabled = 1; + if (vlapic_lvtt_period(vlapic)) { + /* TODO: set timer logic */ + assert(0); + } + } + } +} + +static int32_t vlapic_read(struct acrn_vlapic *vlapic, uint32_t offset_arg, uint64_t *data) +{ + int32_t ret = 0; + struct lapic_regs *lapic = vlapic->apic_page; + uint32_t i; + uint32_t offset = offset_arg; + *data = 0UL; + + if (offset > sizeof(*lapic)) { + ret = -EACCES; + } else { + + offset &= ~0x3UL; + switch (offset) { + case APIC_OFFSET_ID: + *data = lapic->id.v; + break; + case APIC_OFFSET_VER: + *data = lapic->version.v; + break; + case APIC_OFFSET_PPR: + *data = lapic->ppr.v; + break; + case APIC_OFFSET_EOI: + *data = lapic->eoi.v; + break; + case APIC_OFFSET_LDR: + *data = lapic->ldr.v; + break; + case APIC_OFFSET_DFR: + *data = lapic->dfr.v; + break; + case APIC_OFFSET_SVR: + *data = lapic->svr.v; + break; + case APIC_OFFSET_ISR0: + case APIC_OFFSET_ISR1: + case APIC_OFFSET_ISR2: + case APIC_OFFSET_ISR3: + case APIC_OFFSET_ISR4: + case APIC_OFFSET_ISR5: + case APIC_OFFSET_ISR6: + case APIC_OFFSET_ISR7: + i = (offset - APIC_OFFSET_ISR0) >> 4U; + *data = lapic->isr[i].v; + break; + case APIC_OFFSET_TMR0: + case APIC_OFFSET_TMR1: + case APIC_OFFSET_TMR2: + case APIC_OFFSET_TMR3: + case APIC_OFFSET_TMR4: + case APIC_OFFSET_TMR5: + case APIC_OFFSET_TMR6: + case APIC_OFFSET_TMR7: + i = (offset - APIC_OFFSET_TMR0) >> 4U; + *data = lapic->tmr[i].v; + break; + case APIC_OFFSET_IRR0: + case APIC_OFFSET_IRR1: + case APIC_OFFSET_IRR2: + case APIC_OFFSET_IRR3: + case APIC_OFFSET_IRR4: + case APIC_OFFSET_IRR5: + case APIC_OFFSET_IRR6: + case APIC_OFFSET_IRR7: + i = (offset - APIC_OFFSET_IRR0) >> 4U; + *data = lapic->irr[i].v; + break; + case APIC_OFFSET_ESR: + *data = lapic->esr.v; + break; + case APIC_OFFSET_ICR_LOW: + *data = lapic->icr_lo.v; + if (is_x2apic_enabled(vlapic)) { + *data |= ((uint64_t)lapic->icr_hi.v) << 32U; + } + break; + case APIC_OFFSET_ICR_HI: + *data = lapic->icr_hi.v; + break; + case APIC_OFFSET_CMCI_LVT: + case APIC_OFFSET_TIMER_LVT: + case APIC_OFFSET_THERM_LVT: + case APIC_OFFSET_PERF_LVT: + case APIC_OFFSET_LINT0_LVT: + case APIC_OFFSET_LINT1_LVT: + case APIC_OFFSET_ERROR_LVT: + *data = vlapic_get_lvt(vlapic, offset); +#ifdef INVARIANTS + reg = vlapic_get_lvtptr(vlapic, offset); + assert(*data == *reg, "inconsistent lvt value at offset %#x: %#lx/%#x", offset, *data, *reg); +#endif + break; + case APIC_OFFSET_TIMER_ICR: + /* if TSCDEADLINE mode always return 0*/ + if (vlapic_lvtt_tsc_deadline(vlapic)) { + *data = 0UL; + } else { + *data = lapic->icr_timer.v; + } + break; + case APIC_OFFSET_TIMER_CCR: + *data = vlapic_get_ccr(vlapic); + break; + case APIC_OFFSET_TIMER_DCR: + *data = lapic->dcr_timer.v; + break; + default: + ret = -EACCES; + break; + } + } + + return ret; +} + + + +/* + * @pre vcpu != NULL + * @pre vector <= 255U + */ +void +vlapic_set_intr(struct vmrt_vm_vcpu *vcpu, uint32_t vector, bool level) +{ + struct acrn_vlapic *vlapic; + + vlapic = vcpu_vlapic(vcpu); + if (vector < 16U) { + vlapic_set_error(vlapic, APIC_ESR_RECEIVE_ILLEGAL_VECTOR); + assert(0); + } else { + vlapic_accept_intr(vlapic, vector, level); + } +} + +void vlapic_timer_expired(struct vmrt_vm_vcpu *vcpu) +{ + struct acrn_vlapic *vlapic; + struct lapic_regs *lapic; + + vlapic = vcpu_vlapic(vcpu); + lapic = vlapic->apic_page; + + /* inject vcpu timer interrupt if not masked */ + if (!vlapic_lvtt_masked(vlapic)) { + vlapic_set_intr(vcpu, lapic->lvt[APIC_LVT_TIMER].v & APIC_LVTT_VECTOR, LAPIC_TRIG_EDGE); + } +} + +/* + * @pre vm != NULL + */ +bool is_x2apic_enabled(const struct acrn_vlapic *vlapic) +{ + bool ret = false; + + return ret; +} + +bool is_xapic_enabled(const struct acrn_vlapic *vlapic) +{ + bool ret = true; + + return ret; +} + + +static bool apicv_basic_x2apic_read_msr_may_valid(uint32_t offset) +{ + return (offset != APIC_OFFSET_DFR) && (offset != APIC_OFFSET_ICR_HI); +} + +static bool apicv_advanced_x2apic_read_msr_may_valid(uint32_t offset) +{ + return (offset == APIC_OFFSET_TIMER_CCR); +} + +static bool apicv_basic_x2apic_write_msr_may_valid(uint32_t offset) +{ + return (offset != APIC_OFFSET_DFR) && (offset != APIC_OFFSET_ICR_HI); +} + +static bool apicv_advanced_x2apic_write_msr_may_valid(uint32_t offset) +{ + return (offset != APIC_OFFSET_DFR) && (offset != APIC_OFFSET_ICR_HI) && + (offset != APIC_OFFSET_EOI) && (offset != APIC_OFFSET_SELF_IPI); +} + + +/** + * APIC-v functions + * @pre get_pi_desc(vlapic2vcpu(vlapic)) != NULL + */ +static bool +apicv_set_intr_ready(struct acrn_vlapic *vlapic, uint32_t vector) +{ + struct pi_desc *pid; + uint32_t idx; + bool notify = false; + + pid = get_pi_desc(vlapic2vcpu(vlapic)); + idx = vector >> 6U; + if (!bitmap_test_and_set_lock((uint16_t)(vector & 0x3fU), &pid->pir[idx])) { + notify = !bitmap_test_and_set_lock(POSTED_INTR_ON, &pid->control.value); + } + return notify; +} + + +static void apicv_basic_inject_intr(struct acrn_vlapic *vlapic, + bool guest_irq_enabled, bool injected) +{ + uint32_t vector = 0U; + + if (guest_irq_enabled && (!injected)) { + vlapic_update_ppr(vlapic); + if (vlapic_find_deliverable_intr(vlapic, &vector)) { + assert(0); + vlapic_get_deliverable_intr(vlapic, vector); + } + } + + vlapic_update_tpr_threshold(vlapic); +} + +/* + * @brief Send a Posted Interrupt to itself. + * + * Interrupts are disabled on pCPU at this point of time. + * Upon the next VMEnter the self-IPI is serviced by the logical processor. + * Since the IPI vector is Posted Interrupt vector, logical processor syncs + * PIR to vIRR and updates RVI. + * + * @pre get_pi_desc(vlapic->vcpu) != NULL + */ +static inline struct pi_desc *get_pi_desc(struct vmrt_vm_vcpu *vcpu) +{ + return (struct pi_desc *)&(vcpu->shared_region->pi_desc); +} + +static void apicv_advanced_inject_intr(struct acrn_vlapic *vlapic, + __unused bool guest_irq_enabled, __unused bool injected) +{ + struct vmrt_vm_vcpu *vcpu = vlapic2vcpu(vlapic); + struct pi_desc *pid = get_pi_desc(vcpu); + + if (bitmap_test(POSTED_INTR_ON, &(pid->control.value))) { + vcpu->shared_region->inject_evt = 1; + } +} + +void vlapic_inject_intr(struct vmrt_vm_vcpu *vcpu) +{ + struct acrn_vlapic *vlapic = vcpu_vlapic(vcpu); + apicv_advanced_inject_intr(vlapic, 0, 0); +} + +static bool apicv_basic_has_pending_delivery_intr(struct vmrt_vm_vcpu *vcpu) +{ + uint32_t vector; + struct acrn_vlapic *vlapic = vcpu_vlapic(vcpu); + + vlapic_update_ppr(vlapic); + + /* check and raise request if we have a deliverable irq in LAPIC IRR */ + if (vlapic_find_deliverable_intr(vlapic, &vector)) { + /* we have pending IRR */ + assert(0); + } + + return vcpu->pending_req != 0UL; +} + +static bool apicv_advanced_has_pending_delivery_intr(__unused struct vmrt_vm_vcpu *vcpu) +{ + return false; +} + +bool vlapic_has_pending_delivery_intr(struct vmrt_vm_vcpu *vcpu) +{ + struct acrn_vlapic *vlapic = vcpu_vlapic(vcpu); + return vlapic->ops->has_pending_delivery_intr(vcpu); +} + +uint32_t vlapic_get_next_pending_intr(struct vmrt_vm_vcpu *vcpu) +{ + struct acrn_vlapic *vlapic = vcpu_vlapic(vcpu); + uint32_t vector; + + vector = vlapic_find_highest_irr(vlapic); + + return vector; +} + +static bool apicv_basic_has_pending_intr(struct vmrt_vm_vcpu *vcpu) +{ + return vlapic_get_next_pending_intr(vcpu) != 0UL; +} + +static bool apicv_advanced_has_pending_intr(struct vmrt_vm_vcpu *vcpu) +{ + return apicv_basic_has_pending_intr(vcpu); +} + +bool vlapic_clear_pending_intr(struct vmrt_vm_vcpu *vcpu, uint32_t vector) +{ + struct acrn_vlapic *vlapic = vcpu_vlapic(vcpu); + struct lapic_reg *irrptr = &(vlapic->apic_page->irr[0]); + uint32_t idx = vector >> 5U; + return bitmap32_test_and_clear_lock((uint16_t)(vector & 0x1fU), &irrptr[idx].v); +} + +bool vlapic_has_pending_intr(struct vmrt_vm_vcpu *vcpu) +{ + struct acrn_vlapic *vlapic = vcpu_vlapic(vcpu); + return vlapic->ops->has_pending_intr(vcpu); +} + +static bool apicv_basic_apic_read_access_may_valid(__unused uint32_t offset) +{ + return true; +} + +static bool apicv_advanced_apic_read_access_may_valid(uint32_t offset) +{ + return ((offset == APIC_OFFSET_CMCI_LVT) || (offset == APIC_OFFSET_TIMER_CCR)); +} + +static bool apicv_basic_apic_write_access_may_valid(uint32_t offset) +{ + return (offset != APIC_OFFSET_SELF_IPI); +} + +static bool apicv_advanced_apic_write_access_may_valid(uint32_t offset) +{ + return (offset == APIC_OFFSET_CMCI_LVT); +} + +int32_t veoi_vmexit_handler(struct vmrt_vm_vcpu *vcpu) +{ + struct acrn_vlapic *vlapic = NULL; + + uint32_t vector; + struct lapic_regs *lapic; + struct lapic_reg *tmrptr; + uint32_t idx; + + /* TODO: fix veoi if necessary */ + assert(0); + + return 0; +} + +static void vlapic_x2apic_self_ipi_handler(struct acrn_vlapic *vlapic) +{ + /* TODO: fix x2apic virtualization if necessary */ + struct lapic_regs *lapic; + uint32_t vector; + + lapic = vlapic->apic_page; + vector = lapic->self_ipi.v & APIC_VECTOR_MASK; + assert(0); +} + + +/* + * TPR threshold (32 bits). Bits 3:0 of this field determine the threshold + * below which bits 7:4 of VTPR (see Section 29.1.1) cannot fall. + */ +void vlapic_update_tpr_threshold(const struct acrn_vlapic *vlapic) +{ + /* TODO: fix trp virtualization if necessary */ + uint32_t irr, tpr, threshold; + assert(0); +} + +int32_t tpr_below_threshold_vmexit_handler(struct vmrt_vm_vcpu *vcpu) +{ + /* TODO: fix trp virtualization if necessary */ + assert(0); + + return 0; +} + +static const struct acrn_apicv_ops apicv_basic_ops = { + .accept_intr = apicv_basic_accept_intr, + .inject_intr = apicv_basic_inject_intr, + .has_pending_delivery_intr = apicv_basic_has_pending_delivery_intr, + .has_pending_intr = apicv_basic_has_pending_intr, + .apic_read_access_may_valid = apicv_basic_apic_read_access_may_valid, + .apic_write_access_may_valid = apicv_basic_apic_write_access_may_valid, + .x2apic_read_msr_may_valid = apicv_basic_x2apic_read_msr_may_valid, + .x2apic_write_msr_may_valid = apicv_basic_x2apic_write_msr_may_valid, +}; + +static const struct acrn_apicv_ops apicv_advanced_ops = { + .accept_intr = apicv_advanced_accept_intr, + .inject_intr = apicv_advanced_inject_intr, + .has_pending_delivery_intr = apicv_advanced_has_pending_delivery_intr, + .has_pending_intr = apicv_advanced_has_pending_intr, + .apic_read_access_may_valid = apicv_advanced_apic_read_access_may_valid, + .apic_write_access_may_valid = apicv_advanced_apic_write_access_may_valid, + .x2apic_read_msr_may_valid = apicv_advanced_x2apic_read_msr_may_valid, + .x2apic_write_msr_may_valid = apicv_advanced_x2apic_write_msr_may_valid, +}; + +/* + * set apicv ops for apicv basic mode or apicv advenced mode. + */ +void vlapic_set_apicv_ops(void) +{ + if (is_apicv_advanced_feature_supported()) { + apicv_ops = &apicv_advanced_ops; + } else { + apicv_ops = &apicv_basic_ops; + } +} + +static uint16_t vm_apicid2vcpu_id(struct vmrt_vm_comp *vm, uint32_t lapicid) +{ + uint16_t i; + struct vmrt_vm_vcpu *vcpu = NULL; + uint16_t cpu_id = INVALID_CPU_ID; + + for (int i = 0; i < vm->num_vcpu; i++) { + vcpu = &vm->vcpus[i]; + if (vcpu_vlapic(vcpu)->vapic_id == lapicid) { + cpu_id = vcpu->cpuid; + break; + } + } + + if (cpu_id == INVALID_CPU_ID) { + printc("%s: bad lapicid %u", __func__, lapicid); + assert(0); + } + + return cpu_id; + +} + +static inline void set_dest_mask_phys(struct vmrt_vm_comp *vm, uint64_t *dmask, uint32_t dest) +{ + uint16_t vcpu_id; + + vcpu_id = vm_apicid2vcpu_id(vm, dest); + if (vcpu_id < vm->num_vcpu) { + bitmap_set_nolock(vcpu_id, dmask); + } +} + +/* + * This function tells if a vlapic belongs to the destination. + * If yes, return true, else reture false. + * + * @pre vlapic != NULL + */ +static inline bool is_dest_field_matched(const struct acrn_vlapic *vlapic, uint32_t dest) +{ + uint32_t logical_id, cluster_id, dest_logical_id, dest_cluster_id; + uint32_t ldr = vlapic->apic_page->ldr.v; + bool ret = false; + + if (is_x2apic_enabled(vlapic)) { + logical_id = ldr & 0xFFFFU; + cluster_id = (ldr >> 16U) & 0xFFFFU; + dest_logical_id = dest & 0xFFFFU; + dest_cluster_id = (dest >> 16U) & 0xFFFFU; + if ((cluster_id == dest_cluster_id) && ((logical_id & dest_logical_id) != 0U)) { + ret = true; + } + } else { + uint32_t dfr = vlapic->apic_page->dfr.v; + if ((dfr & APIC_DFR_MODEL_MASK) == APIC_DFR_MODEL_FLAT) { + /* + * In the "Flat Model" the MDA is interpreted as an 8-bit wide + * bitmask. This model is available in the xAPIC mode only. + */ + logical_id = ldr >> 24U; + dest_logical_id = dest & 0xffU; + if ((logical_id & dest_logical_id) != 0U) { + ret = true; + } + } else if ((dfr & APIC_DFR_MODEL_MASK) == APIC_DFR_MODEL_CLUSTER) { + /* + * In the "Cluster Model" the MDA is used to identify a + * specific cluster and a set of APICs in that cluster. + */ + logical_id = (ldr >> 24U) & 0xfU; + cluster_id = ldr >> 28U; + dest_logical_id = dest & 0xfU; + dest_cluster_id = (dest >> 4U) & 0xfU; + if ((cluster_id == dest_cluster_id) && ((logical_id & dest_logical_id) != 0U)) { + ret = true; + } + } else { + /* Guest has configured a bad logical model for this vcpu. */ + printc("vlapic has bad logical model %x", dfr); + assert(0); + } + } + + return ret; +} + +/* + * This function populates 'dmask' with the set of vcpus that match the + * addressing specified by the (dest, phys, lowprio) tuple. + */ +uint64_t +vlapic_calc_dest_noshort(struct vmrt_vm_comp *vm, bool is_broadcast, + uint32_t dest, bool phys, bool lowprio) +{ + uint64_t dmask = 0UL; + struct acrn_vlapic *vlapic, *lowprio_dest = NULL; + struct vmrt_vm_vcpu *vcpu; + uint16_t vcpu_id; + + if (is_broadcast) { + /* Broadcast in both logical and physical modes. */ + printc("Broadcast is not supported now\n"); + assert(0); + } else if (phys) { + /* Physical mode: "dest" is local APIC ID. */ + printc("vlapic phy dst mode to find cpu\n"); + set_dest_mask_phys(vm, &dmask, dest); + } else { + /* + * Logical mode: "dest" is message destination addr + * to be compared with the logical APIC ID in LDR. + */ + for (int i = 0; i < vm->num_vcpu; i++) { + vcpu = &vm->vcpus[i]; + vcpu_id = i; + vlapic = vcpu_vlapic(vcpu); + if (!is_dest_field_matched(vlapic, dest)) { + continue; + } + + if (lowprio) { + /* + * for lowprio delivery mode, the lowest-priority one + * among all "dest" matched processors accepts the intr. + */ + if (lowprio_dest == NULL) { + lowprio_dest = vlapic; + } else if (lowprio_dest->apic_page->ppr.v > vlapic->apic_page->ppr.v) { + lowprio_dest = vlapic; + } else { + /* No other state currently, do nothing */ + } + } else { + bitmap_set_nolock(vcpu_id, &dmask); + } + } + + if (lowprio && (lowprio_dest != NULL)) { + bitmap_set_nolock(vlapic2vcpu(lowprio_dest)->cpuid, &dmask); + } + } + + return dmask; +} + +void +vlapic_receive_intr(struct vmrt_vm_comp *vm, bool level, uint32_t dest, bool phys, + uint32_t delmode, uint32_t vec, bool rh) +{ + bool lowprio; + uint16_t vcpu_id; + uint64_t dmask; + struct vmrt_vm_vcpu *target_vcpu; + + if ((delmode != IOAPIC_RTE_DELMODE_FIXED) && + (delmode != IOAPIC_RTE_DELMODE_LOPRI) && + (delmode != IOAPIC_RTE_DELMODE_EXINT)) { + printc("vlapic intr invalid delmode %#x", delmode); + assert(0); + } else { + lowprio = (delmode == IOAPIC_RTE_DELMODE_LOPRI) || rh; + + /* + * We don't provide any virtual interrupt redirection hardware so + * all interrupts originating from the ioapic or MSI specify the + * 'dest' in the legacy xAPIC format. + */ + dmask = vlapic_calc_dest_noshort(vm, false, dest, phys, lowprio); + + for (vcpu_id = 0U; vcpu_id < vm->num_vcpu; vcpu_id++) { + struct acrn_vlapic *vlapic; + if ((dmask & (1UL << vcpu_id)) != 0UL) { + target_vcpu = vmrt_get_vcpu(vm, vcpu_id); + + /* only make request when vlapic enabled */ + vlapic = vcpu_vlapic(target_vcpu); + if (vlapic_enabled(vlapic)) { + if (delmode == IOAPIC_RTE_DELMODE_EXINT) { + assert(0); + } else { + vlapic_set_intr(target_vcpu, vec, level); + } + } else {assert(0);} + } + } + } +} + +void +vlapic_reset(struct acrn_vlapic *vlapic) +{ + struct lapic_regs *lapic; + + vlapic->msr_apicbase = DEFAULT_APIC_BASE; + + if (vlapic2vcpu(vlapic)->cpuid == BSP_CPU_ID) { + vlapic->msr_apicbase |= APICBASE_BSP; + } + vlapic->vapic_id = vlapic2vcpu(vlapic)->cpuid; + + /* Upon reset, vlapic is set to xAPIC mode. */ + vlapic->msr_apicbase |= APICBASE_XAPIC; + + lapic = vlapic->apic_page; + (void)memset((void *)lapic, 0U, sizeof(struct lapic_regs)); + + lapic->id.v = vlapic->vapic_id; + if (!is_x2apic_enabled(vlapic)) { + lapic->id.v <<= APIC_ID_SHIFT; + } + + lapic->version.v = VLAPIC_VERSION; + lapic->version.v |= (VLAPIC_MAXLVT_INDEX << MAXLVTSHIFT); + lapic->dfr.v = 0xffffffffU; + lapic->svr.v = APIC_SVR_VECTOR; + vlapic_mask_lvts(vlapic); + + lapic->icr_timer.v = 0U; + lapic->dcr_timer.v = 0U; + vlapic_write_dcr(vlapic); + + vlapic->svr_last = lapic->svr.v; + + vlapic->isrv = 0U; +} + + +int32_t apic_write_vmexit_handler(struct vmrt_vm_vcpu *vcpu) +{ + uint64_t qual; + int32_t err = 0; + uint32_t offset; + struct acrn_vlapic *vlapic = NULL; + + qual = vcpu->shared_region->qualification; + offset = (uint32_t)(qual & 0xFFFUL); + + vlapic = vcpu->vlapic; + + switch (offset) { + case APIC_OFFSET_ID: + /* Force APIC ID as read only */ + break; + case APIC_OFFSET_LDR: + vlapic_write_ldr(vlapic); + break; + case APIC_OFFSET_DFR: + vlapic_write_dfr(vlapic); + break; + case APIC_OFFSET_SVR: + vlapic_write_svr(vlapic); + break; + case APIC_OFFSET_ESR: + vlapic_write_esr(vlapic); + break; + case APIC_OFFSET_ICR_LOW: + vlapic_write_icrlo(vlapic); + break; + case APIC_OFFSET_CMCI_LVT: + case APIC_OFFSET_TIMER_LVT: + case APIC_OFFSET_THERM_LVT: + case APIC_OFFSET_PERF_LVT: + case APIC_OFFSET_LINT0_LVT: + case APIC_OFFSET_LINT1_LVT: + case APIC_OFFSET_ERROR_LVT: + vlapic_write_lvt(vlapic, offset); + break; + case APIC_OFFSET_TIMER_ICR: + vlapic_write_icrtmr(vlapic); + break; + case APIC_OFFSET_TIMER_DCR: + vlapic_write_dcr(vlapic); + break; + case APIC_OFFSET_SELF_IPI: + if (is_x2apic_enabled(vlapic)) { + /* Don't support x2apic */ + assert(0); + break; + } + /* falls through */ + default: + err = -EACCES; + printc("Unhandled APIC-Write, offset:0x%x", offset); + VM_PANIC(vcpu); + break; + } + + return err; +} + +void +lapic_write_handler(struct vmrt_vm_vcpu *vcpu) +{ + apic_write_vmexit_handler(vcpu); +} + +void +lapic_intr_inject(struct vmrt_vm_vcpu *vcpu, u8_t vector, int autoeoi) +{ + struct vm_vcpu_shared_region *shared_region = vcpu->shared_region; + struct acrn_vlapic *vlapic = vcpu_vlapic(vcpu); + struct lapic_regs *lapic = vlapic->apic_page; + u8_t offset = vector / 32; + u8_t bit = vector % 32; + + u8_t svi = (u8_t)(shared_region->interrupt_status >> 8); + u8_t rvi = (u8_t)shared_region->interrupt_status; + + if (svi == vector && autoeoi) { + /* TODO: svi should be the second highest priority bit in isr */ + svi = 0; + lapic->isr[offset].v &= ~(1U << bit); + } + if (rvi < vector) { + rvi = vector; + } + + /* Accept the interrupt */ + lapic->irr[offset].v |= (1U << bit); + + shared_region->interrupt_status = svi << 8 | rvi; +} diff --git a/src/components/implementation/simple_vmm/nf_multicore/vlapic.h b/src/components/implementation/simple_vmm/nf_multicore/vlapic.h new file mode 100644 index 0000000000..d4e8645661 --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/vlapic.h @@ -0,0 +1,260 @@ +/*- + * Copyright (c) 2011 NetApp, Inc. + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef VLAPIC_H +#define VLAPIC_H + +#include +#include + +/** + * @file vlapic.h + * + * @brief public APIs for virtual LAPIC + */ + + +#define VLAPIC_MAXLVT_INDEX APIC_LVT_CMCI + +struct hv_timer { + // struct list_head node; /**< link all timers */ + int mode; /**< timer mode: one-shot or periodic */ + uint64_t timeout; /**< tsc deadline to interrupt */ + uint64_t period_in_cycle; /**< period of the periodic timer in CPU ticks */ + // timer_handle_t func; /**< callback if time reached */ + void *priv_data; /**< func private data */ +}; + +struct vlapic_timer { + struct hv_timer timer; + uint32_t mode; + uint32_t tmicr; + uint32_t divisor_shift; +}; + +struct acrn_vlapic { + /* + * Please keep 'apic_page' as the first field in + * current structure, as below alignment restrictions are mandatory + * to support APICv features: + * - 'apic_page' MUST be 4KB aligned. + * IRR, TMR and PIR could be accessed by other vCPUs when deliver + * an interrupt to vLAPIC. + */ + struct lapic_regs *apic_page; + + struct vmrt_vm_vcpu *vcpu; + + uint32_t vapic_id; + uint32_t esr_pending; + int32_t esr_firing; + + struct vlapic_timer vtimer; + + /* + * isrv: vector number for the highest priority bit that is set in the ISR + */ + uint32_t isrv; + + uint64_t msr_apicbase; + + const struct acrn_apicv_ops *ops; + + /* + * Copies of some registers in the virtual APIC page. We do this for + * a couple of different reasons: + * - to be able to detect what changed (e.g. svr_last) + * - to maintain a coherent snapshot of the register (e.g. lvt_last) + */ + uint32_t svr_last; + uint32_t lvt_last[VLAPIC_MAXLVT_INDEX + 1]; +} __attribute__((aligned(PAGE_SIZE_4K))); + + +struct vmrt_vm_vcpu; +struct acrn_apicv_ops { + void (*accept_intr)(struct acrn_vlapic *vlapic, uint32_t vector, bool level); + void (*inject_intr)(struct acrn_vlapic *vlapic, bool guest_irq_enabled, bool injected); + bool (*has_pending_delivery_intr)(struct vmrt_vm_vcpu *vcpu); + bool (*has_pending_intr)(struct vmrt_vm_vcpu *vcpu); + bool (*apic_read_access_may_valid)(uint32_t offset); + bool (*apic_write_access_may_valid)(uint32_t offset); + bool (*x2apic_read_msr_may_valid)(uint32_t offset); + bool (*x2apic_write_msr_may_valid)(uint32_t offset); +}; + +enum reset_mode; +extern const struct acrn_apicv_ops *apicv_ops; +void vlapic_set_apicv_ops(void); + +/** + * @brief virtual LAPIC + * + * @addtogroup acrn_vlapic ACRN vLAPIC + * @{ + */ + +void vlapic_inject_intr(struct vmrt_vm_vcpu *vcpu); +bool vlapic_has_pending_delivery_intr(struct vmrt_vm_vcpu *vcpu); +bool vlapic_has_pending_intr(struct vmrt_vm_vcpu *vcpu); + +/** + * Returns the highest priority pending vector on vLAPIC, or + * 0 if there is no pending vector. + */ +uint32_t vlapic_get_next_pending_intr(struct vmrt_vm_vcpu *vcpu); + +/** + * Clears a pending vector from vIRR. Returns true if + * the bit was previously present, false otherwise. + */ +bool vlapic_clear_pending_intr(struct vmrt_vm_vcpu *vcpu, uint32_t vector); + +uint64_t vlapic_get_tsc_deadline_msr(const struct acrn_vlapic *vlapic); +void vlapic_set_tsc_deadline_msr(struct acrn_vlapic *vlapic, uint64_t val_arg); +uint64_t vlapic_get_apicbase(const struct acrn_vlapic *vlapic); +int32_t vlapic_set_apicbase(struct acrn_vlapic *vlapic, uint64_t new); +int32_t vlapic_x2apic_read(struct vmrt_vm_vcpu *vcpu, uint32_t msr, uint64_t *val); +int32_t vlapic_x2apic_write(struct vmrt_vm_vcpu *vcpu, uint32_t msr, uint64_t val); + +/* + * Signals to the LAPIC that an interrupt at 'vector' needs to be generated + * to the 'cpu', the state is recorded in IRR. + * @pre vcpu != NULL + * @pre vector <= 255U + */ +void vlapic_set_intr(struct vmrt_vm_vcpu *vcpu, uint32_t vector, bool level); + +#define LAPIC_TRIG_LEVEL true +#define LAPIC_TRIG_EDGE false + +static inline uint32_t prio(uint32_t x) +{ + return (x >> 4U); +} + +/** + * @brief Triggers LAPIC local interrupt(LVT). + * + * @param[in] vm Pointer to VM data structure + * @param[in] vcpu_id_arg ID of vCPU, BROADCAST_CPU_ID means triggering + * interrupt to all vCPUs. + * @param[in] lvt_index The index which LVT would to be fired. + * + * @retval 0 on success. + * @retval -EINVAL on error that vcpu_id_arg or vector of the LVT is invalid. + * + * @pre vm != NULL + */ +int32_t vlapic_set_local_intr(struct vmrt_vm_comp *vm, uint16_t vcpu_id_arg, uint32_t lvt_index); + +/** + * @brief Inject MSI to target VM. + * + * @param[in] vm Pointer to VM data structure + * @param[in] addr MSI address. + * @param[in] data MSI data. + * + * @retval 0 on success. + * @retval -1 on error that addr is invalid. + * + * @pre vm != NULL + */ +int32_t vlapic_inject_msi(struct vmrt_vm_comp *vm, uint64_t addr, uint64_t data); + + +void vlapic_receive_intr(struct vmrt_vm_comp *vm, bool level, uint32_t dest, + bool phys, uint32_t delmode, uint32_t vec, bool rh); + +/** + * @pre vlapic != NULL + */ +static inline uint32_t vlapic_get_apicid(const struct acrn_vlapic *vlapic) +{ + return vlapic->vapic_id; +} + +void vlapic_create(struct vmrt_vm_vcpu *vcpu, uint16_t pcpu_id); +/* + * @pre vcpu != NULL + */ +void vlapic_free(struct vmrt_vm_vcpu *vcpu); + +void vlapic_reset(struct acrn_vlapic *vlapic); +void vlapic_restore(struct acrn_vlapic *vlapic, const struct lapic_regs *regs); +uint64_t vlapic_apicv_get_apic_access_addr(void); +uint64_t vlapic_apicv_get_apic_page_addr(struct acrn_vlapic *vlapic); +int32_t apic_access_vmexit_handler(struct vmrt_vm_vcpu *vcpu); +int32_t apic_write_vmexit_handler(struct vmrt_vm_vcpu *vcpu); +int32_t veoi_vmexit_handler(struct vmrt_vm_vcpu *vcpu); +void vlapic_update_tpr_threshold(const struct acrn_vlapic *vlapic); +int32_t tpr_below_threshold_vmexit_handler(struct vmrt_vm_vcpu *vcpu); +uint64_t vlapic_calc_dest_noshort(struct vmrt_vm_comp *vm, bool is_broadcast, + uint32_t dest, bool phys, bool lowprio); +bool is_x2apic_enabled(const struct acrn_vlapic *vlapic); +bool is_xapic_enabled(const struct acrn_vlapic *vlapic); + +static inline bool is_apicv_advanced_feature_supported(void) +{ + return false; +} +#define POSTED_INTR_ON 0U +/* Posted Interrupt Descriptor (PID) in VT-d spec */ +struct pi_desc { + /* Posted Interrupt Requests, one bit per requested vector */ + uint64_t pir[4]; + + union { + struct { + /* Outstanding Notification */ + uint16_t on:1; + + /* Suppress Notification, of non-urgent interrupts */ + uint16_t sn:1; + + uint16_t rsvd_1:14; + + /* Notification Vector */ + uint8_t nv; + + uint8_t rsvd_2; + + /* Notification destination, a physical LAPIC ID */ + uint32_t ndst; + } bits; + + uint64_t value; + } control; + + uint32_t rsvd[6]; +} __attribute__((aligned(64)));; +/** + * @} + */ +/* End of acrn_vlapic */ +#endif /* VLAPIC_H */ diff --git a/src/components/implementation/simple_vmm/nf_multicore/vlapic_priv.h b/src/components/implementation/simple_vmm/nf_multicore/vlapic_priv.h new file mode 100644 index 0000000000..6c66f6c84e --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/vlapic_priv.h @@ -0,0 +1,84 @@ +/*- + * Copyright (c) 2013 Neel Natu + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef VLAPIC_PRIV_H +#define VLAPIC_PRIV_H + +/* + * APIC Register: Offset Description + */ +#define APIC_OFFSET_ID 0x20U /* Local APIC ID */ +#define APIC_OFFSET_VER 0x30U /* Local APIC Version */ +#define APIC_OFFSET_TPR 0x80U /* Task Priority Register */ +#define APIC_OFFSET_APR 0x90U /* Arbitration Priority */ +#define APIC_OFFSET_PPR 0xA0U /* Processor Priority Register */ +#define APIC_OFFSET_EOI 0xB0U /* EOI Register */ +#define APIC_OFFSET_RRR 0xC0U /* Remote read */ +#define APIC_OFFSET_LDR 0xD0U /* Logical Destination */ +#define APIC_OFFSET_DFR 0xE0U /* Destination Format Register */ +#define APIC_OFFSET_SVR 0xF0U /* Spurious Vector Register */ +#define APIC_OFFSET_ISR0 0x100U /* In Service Register */ +#define APIC_OFFSET_ISR1 0x110U +#define APIC_OFFSET_ISR2 0x120U +#define APIC_OFFSET_ISR3 0x130U +#define APIC_OFFSET_ISR4 0x140U +#define APIC_OFFSET_ISR5 0x150U +#define APIC_OFFSET_ISR6 0x160U +#define APIC_OFFSET_ISR7 0x170U +#define APIC_OFFSET_TMR0 0x180U /* Trigger Mode Register */ +#define APIC_OFFSET_TMR1 0x190U +#define APIC_OFFSET_TMR2 0x1A0U +#define APIC_OFFSET_TMR3 0x1B0U +#define APIC_OFFSET_TMR4 0x1C0U +#define APIC_OFFSET_TMR5 0x1D0U +#define APIC_OFFSET_TMR6 0x1E0U +#define APIC_OFFSET_TMR7 0x1F0U +#define APIC_OFFSET_IRR0 0x200U /* Interrupt Request Register */ +#define APIC_OFFSET_IRR1 0x210U +#define APIC_OFFSET_IRR2 0x220U +#define APIC_OFFSET_IRR3 0x230U +#define APIC_OFFSET_IRR4 0x240U +#define APIC_OFFSET_IRR5 0x250U +#define APIC_OFFSET_IRR6 0x260U +#define APIC_OFFSET_IRR7 0x270U +#define APIC_OFFSET_ESR 0x280U /* Error Status Register */ +#define APIC_OFFSET_CMCI_LVT 0x2F0U /* Local Vector Table (CMCI) */ +#define APIC_OFFSET_ICR_LOW 0x300U /* Interrupt Command Register */ +#define APIC_OFFSET_ICR_HI 0x310U +#define APIC_OFFSET_TIMER_LVT 0x320U /* Local Vector Table (Timer) */ +#define APIC_OFFSET_THERM_LVT 0x330U /* Local Vector Table (Thermal) */ +#define APIC_OFFSET_PERF_LVT 0x340U /* Local Vector Table (PMC) */ +#define APIC_OFFSET_LINT0_LVT 0x350U /* Local Vector Table (LINT0) */ +#define APIC_OFFSET_LINT1_LVT 0x360U /* Local Vector Table (LINT1) */ +#define APIC_OFFSET_ERROR_LVT 0x370U /* Local Vector Table (ERROR) */ +#define APIC_OFFSET_TIMER_ICR 0x380U /* Timer's Initial Count */ +#define APIC_OFFSET_TIMER_CCR 0x390U /* Timer's Current Count */ +#define APIC_OFFSET_TIMER_DCR 0x3E0U /* Timer's Divide Configuration */ +#define APIC_OFFSET_SELF_IPI 0x3F0U /* Self IPI Register */ + +#endif /* VLAPIC_PRIV_H */ diff --git a/src/components/implementation/simple_vmm/nf_multicore/vmmio.c b/src/components/implementation/simple_vmm/nf_multicore/vmmio.c new file mode 100644 index 0000000000..1efb26ee1b --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/vmmio.c @@ -0,0 +1,53 @@ +#include +#include +#include +#include + +void +ept_violation_handler(struct vmrt_vm_vcpu *vcpu) +{ + volatile struct vm_vcpu_shared_region *regs = vcpu->shared_region; + u64_t qualification = regs->qualification; + u64_t gpa; + struct acrn_mmio_request *mmio_req = vcpu->mmio_request; + + gpa = regs->gpa; + + /* Specify if read or write operation */ + if ((qualification & 0x2UL) != 0UL) { + /* Write operation */ + mmio_req->direction = ACRN_IOREQ_DIR_WRITE; + mmio_req->value = 0UL; + } else { + /* Read operation */ + mmio_req->direction = ACRN_IOREQ_DIR_READ; + } + + mmio_req->address = gpa; + + if (gpa >= IOAPIC_BASE_ADDR && gpa < IOAPIC_BASE_ADDR + PAGE_SIZE_4K) { + int ret = decode_instruction(vcpu); + + if (ret > 0) { + mmio_req->size = (uint64_t)ret; + } else { + VM_PANIC(vcpu); + } + + if (mmio_req->direction == ACRN_IOREQ_DIR_WRITE) { + if (emulate_instruction(vcpu) != 0) { + VM_PANIC(vcpu); + } + } + + vioapic_mmio_access_handler(vcpu); + + if (mmio_req->direction == ACRN_IOREQ_DIR_READ) { + /* Emulate instruction and update vcpu register set */ + (void)emulate_instruction(vcpu); + } + GOTO_NEXT_INST(regs); + } else { + VM_PANIC(vcpu); + } +} diff --git a/src/components/implementation/simple_vmm/nf_multicore/vmsr.c b/src/components/implementation/simple_vmm/nf_multicore/vmsr.c new file mode 100644 index 0000000000..1f45f13692 --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/vmsr.c @@ -0,0 +1,249 @@ +#include +#include + +void +rdmsr_handler(struct vmrt_vm_vcpu *vcpu) +{ + volatile struct vm_vcpu_shared_region *regs = vcpu->shared_region; + + switch (regs->cx) { + case MSR_IA32_EFER: + { + u64_t guest_efer = regs->efer; + regs->ax = (u32_t)guest_efer; + regs->dx = (u32_t)(guest_efer >> 32); + goto done; + } + case MSR_IA32_MISC_ENABLE: + { + /* Note: read only MSR, and its value can be fixed for all cores */ + u64_t misc = 0x800001; + regs->ax = (u32_t)misc; + regs->dx = (u32_t)(misc >> 32); + goto done; + } + case MSR_IA32_BIOS_SIGN_ID: + { + /* Note: microcode is pre-set in the kernel */ + u64_t v = regs->microcode_version; + regs->ax = (u32_t)v; + regs->dx = (u32_t)(v >> 32); + goto done; + } + case MSR_IA32_TSC_ADJUST: + { + /* TODO: need to handle tsc adjustment in VM */ + u32_t ax, dx; + regs->ax = 0; + regs->dx = 0; + goto done; + } + + /* MTRRs can be ingored in Linux and Linux knows it is a virtual environment */ + case MSR_IA32_MTRR_CAP: + case MSR_IA32_MTRR_DEF_TYPE: + case MSR_IA32_MTRR_PHYSBASE_0: + case MSR_IA32_MTRR_PHYSMASK_0: + case MSR_IA32_MTRR_PHYSBASE_1: + case MSR_IA32_MTRR_PHYSMASK_1: + case MSR_IA32_MTRR_PHYSBASE_2: + case MSR_IA32_MTRR_PHYSMASK_2: + case MSR_IA32_MTRR_PHYSBASE_3: + case MSR_IA32_MTRR_PHYSMASK_3: + case MSR_IA32_MTRR_PHYSBASE_4: + case MSR_IA32_MTRR_PHYSMASK_4: + case MSR_IA32_MTRR_PHYSBASE_5: + case MSR_IA32_MTRR_PHYSMASK_5: + case MSR_IA32_MTRR_PHYSBASE_6: + case MSR_IA32_MTRR_PHYSMASK_6: + case MSR_IA32_MTRR_PHYSBASE_7: + case MSR_IA32_MTRR_PHYSMASK_7: + case MSR_IA32_MTRR_PHYSBASE_8: + case MSR_IA32_MTRR_PHYSMASK_8: + case MSR_IA32_MTRR_PHYSBASE_9: + case MSR_IA32_MTRR_PHYSMASK_9: + case MSR_IA32_MTRR_FIX64K_00000: + case MSR_IA32_MTRR_FIX16K_80000: + case MSR_IA32_MTRR_FIX16K_A0000: + case MSR_IA32_MTRR_FIX4K_C0000: + case MSR_IA32_MTRR_FIX4K_C8000: + case MSR_IA32_MTRR_FIX4K_D0000: + case MSR_IA32_MTRR_FIX4K_D8000: + case MSR_IA32_MTRR_FIX4K_E0000: + case MSR_IA32_MTRR_FIX4K_E8000: + case MSR_IA32_MTRR_FIX4K_F0000: + case MSR_IA32_MTRR_FIX4K_F8000: + case MSR_IA32_PAT: + { + regs->ax = 0; + regs->dx = 0; + goto done; + } + case MSR_PPERF: + { + /* FIXME: should inject #GP to guest, thus guest knows this MSR is not present */ + regs->ax = 0; + regs->dx = 0; + goto done; + } + case MSR_SMI_COUNT: + { + /* FIXME: should inject #GP to guest, thus guest knows this MSR is not present */ + regs->ax = 0; + regs->dx = 0; + goto done; + } + case MSR_IA32_APIC_BASE: + { + /* TODO: for non-BSP, the BSP flag should be cleared */ + /* 0x900 : enable xapic and this is BSP */ + regs->ax = 0XFEE00000 | 0x900; + regs->dx = 0; + goto done; + } + case MSR_IA32_FEATURE_CONTROL: + { + /* Lock the feature control in VM */ + regs->ax = 1; + regs->dx = 0; + goto done; + } + case MSR_MISC_FEATURE_ENABLES: + { + /* This MSR can be reserved to 0 */ + regs->ax = 0; + regs->dx = 0; + goto done; + } + case MSR_PLATFORM_INFO: + { + /* Contains power management stuff and can be ignored */ + regs->ax = 0; + regs->dx = 0; + goto done; + } + case MSR_IA32_SPEC_CTRL: + { + /* This MSR has a value of 0 after reset, thus just keep it ad default, don't modify */ + regs->ax = 0; + regs->dx = 0; + goto done; + } + default: + VM_PANIC(vcpu); + } +done: + GOTO_NEXT_INST(regs); + return; +} + +void +wrmsr_handler(struct vmrt_vm_vcpu *vcpu) +{ + volatile struct vm_vcpu_shared_region *regs = vcpu->shared_region; + + switch (regs->cx) { + case MSR_IA32_EFER: + { + u64_t guest_efer; + guest_efer = regs->ax & 0XFFFFFFFF; + guest_efer |= ((regs->dx & 0XFFFFFFFF) << 32); + regs->efer = guest_efer; + + goto done; + } + case MSR_IA32_BIOS_SIGN_ID: + { + /* Microcode has been retrived in the kernel, thus don't need to process here */ + goto done; + } + case MSR_IA32_XSS: + { + u64_t guest_xss; + guest_xss = regs->ax & 0XFFFFFFFF; + guest_xss |= ((regs->dx & 0XFFFFFFFF) << 32); + if ((guest_xss & ~(MSR_IA32_XSS_PT | MSR_IA32_XSS_HDC)) != 0UL) { + /* Assuming other features are not supported */ + VM_PANIC(vcpu); + } else { + /* TODO: only enable the xss pt and hdx, but currently just ignore them */ + } + goto done; + } + case MSR_IA32_MTRR_CAP: + case MSR_IA32_MTRR_DEF_TYPE: + case MSR_IA32_MTRR_PHYSBASE_0: + case MSR_IA32_MTRR_PHYSMASK_0: + case MSR_IA32_MTRR_PHYSBASE_1: + case MSR_IA32_MTRR_PHYSMASK_1: + case MSR_IA32_MTRR_PHYSBASE_2: + case MSR_IA32_MTRR_PHYSMASK_2: + case MSR_IA32_MTRR_PHYSBASE_3: + case MSR_IA32_MTRR_PHYSMASK_3: + case MSR_IA32_MTRR_PHYSBASE_4: + case MSR_IA32_MTRR_PHYSMASK_4: + case MSR_IA32_MTRR_PHYSBASE_5: + case MSR_IA32_MTRR_PHYSMASK_5: + case MSR_IA32_MTRR_PHYSBASE_6: + case MSR_IA32_MTRR_PHYSMASK_6: + case MSR_IA32_MTRR_PHYSBASE_7: + case MSR_IA32_MTRR_PHYSMASK_7: + case MSR_IA32_MTRR_PHYSBASE_8: + case MSR_IA32_MTRR_PHYSMASK_8: + case MSR_IA32_MTRR_PHYSBASE_9: + case MSR_IA32_MTRR_PHYSMASK_9: + case MSR_IA32_MTRR_FIX64K_00000: + case MSR_IA32_MTRR_FIX16K_80000: + case MSR_IA32_MTRR_FIX16K_A0000: + case MSR_IA32_MTRR_FIX4K_C0000: + case MSR_IA32_MTRR_FIX4K_C8000: + case MSR_IA32_MTRR_FIX4K_D0000: + case MSR_IA32_MTRR_FIX4K_D8000: + case MSR_IA32_MTRR_FIX4K_E0000: + case MSR_IA32_MTRR_FIX4K_E8000: + case MSR_IA32_MTRR_FIX4K_F0000: + case MSR_IA32_MTRR_FIX4K_F8000: + case MSR_IA32_PAT: + { + /* MTRRs can be ingored in Linux and Linux knows it is a virtual environment */ + goto done; + } + case MSR_IA32_TSC_DEADLINE: { + u64_t tsc_future, curr_tsc; + rdtscll(curr_tsc); + tsc_future = regs->ax & 0xffffffff; + tsc_future |= ((regs->dx & 0xffffffff) << 32); + vcpu->next_timer = tsc_future; + + goto done; + } + case MSR_MISC_FEATURE_ENABLES: + { + /* Write to this MSR will be all 0 since we ignored this, doesn't matter */ + goto done; + } + case MSR_IA32_SYSENTER_CS: + case MSR_IA32_SYSENTER_ESP: + case MSR_IA32_SYSENTER_EIP: + { + /* 64-bit system doesn't require these MSRs, its fine to ignore them */ + goto done; + } + case MSR_IA32_SPEC_CTRL: + { + /* This MSR has a value of 0 after reset, thus just keep it ad default, don't modify */ + goto done; + } + case MSR_IA32_APIC_BASE: + { + VM_PANIC(vcpu); + goto done; + } + default: + VM_PANIC(vcpu);; + } + +done: + GOTO_NEXT_INST(regs); + return; +} diff --git a/src/components/implementation/simple_vmm/nf_multicore/vpic.h b/src/components/implementation/simple_vmm/nf_multicore/vpic.h new file mode 100644 index 0000000000..b9cab609cb --- /dev/null +++ b/src/components/implementation/simple_vmm/nf_multicore/vpic.h @@ -0,0 +1,191 @@ +/*- + * Copyright (c) 2014 Tycho Nightingale + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef VPIC_H +#define VPIC_H + +#include +/** + * @file vpic.h + * + * @brief public APIs for virtual PIC + */ + + +#define ICU_IMR_OFFSET 1U + +/* Initialization control word 1. Written to even address. */ +#define ICW1_IC4 0x01U /* ICW4 present */ +#define ICW1_SNGL 0x02U /* 1 = single, 0 = cascaded */ +#define ICW1_ADI 0x04U /* 1 = 4, 0 = 8 byte vectors */ +#define ICW1_LTIM 0x08U /* 1 = level trigger, 0 = edge */ +#define ICW1_RESET 0x10U /* must be 1 */ +/* 0x20 - 0x80 - in 8080/8085 mode only */ + +/* Initialization control word 2. Written to the odd address. */ +/* No definitions, it is the base vector of the IDT for 8086 mode */ + +/* Initialization control word 3. Written to the odd address. */ +/* For a primary PIC, bitfield indicating a secondary PIC on given input */ +/* For a secondary PIC, lower 3 bits are the PIC's ID binary id on primary PIC */ + +/* Initialization control word 4. Written to the odd address. */ +#define ICW4_8086 0x01U /* 1 = 8086, 0 = 8080 */ +#define ICW4_AEOI 0x02U /* 1 = Auto EOI */ +#define ICW4_MS 0x04U /* 1 = buffered primary PIC, 0 = secondary PIC*/ +#define ICW4_BUF 0x08U /* 1 = enable buffer mode */ +#define ICW4_SFNM 0x10U /* 1 = special fully nested mode */ + +/* Operation control words. Written after initialization. */ + +/* Operation control word type 1 */ +/* + * No definitions. Written to the odd address. Bitmask for interrupts. + * 1 = disabled. + */ + +/* Operation control word type 2. Bit 3 (0x08) must be zero. Even address. */ +#define OCW2_L0 0x01U /* Level */ +#define OCW2_L1 0x02U +#define OCW2_L2 0x04U +/* 0x08 must be 0 to select OCW2 vs OCW3 */ +/* 0x10 must be 0 to select OCW2 vs ICW1 */ +#define OCW2_EOI 0x20U /* 1 = EOI */ +#define OCW2_SL 0x40U /* EOI mode */ +#define OCW2_R 0x80U /* EOI mode */ + +/* Operation control word type 3. Bit 3 (0x08) must be set. Even address. */ +#define OCW3_RIS 0x01U /* 1 = read IS, 0 = read IR */ +#define OCW3_RR 0x02U /* register read */ +#define OCW3_P 0x04U /* poll mode command */ +/* 0x08 must be 1 to select OCW3 vs OCW2 */ +#define OCW3_SEL 0x08U /* must be 1 */ +/* 0x10 must be 0 to select OCW3 vs ICW1 */ +#define OCW3_SMM 0x20U /* special mode mask */ +#define OCW3_ESMM 0x40U /* enable SMM */ + +#define IO_ELCR1 0x4d0U +#define IO_ELCR2 0x4d1U + +#define NR_VPIC_PINS_PER_CHIP 8U +#define NR_VPIC_PINS_TOTAL 16U + +enum vpic_wire_mode { + VPIC_WIRE_INTR = 0, + VPIC_WIRE_LAPIC, + VPIC_WIRE_IOAPIC, + VPIC_WIRE_NULL +}; + +enum vpic_trigger { + EDGE_TRIGGER, + LEVEL_TRIGGER +}; + +struct i8259_reg_state { + bool ready; + uint8_t icw_num; + uint8_t rd_cmd_reg; + + bool aeoi; + bool poll; + bool rotate; + bool sfn; /* special fully-nested mode */ + + uint32_t irq_base; + uint8_t request; /* Interrupt Request Register (IIR) */ + uint8_t service; /* Interrupt Service (ISR) */ + uint8_t mask; /* Interrupt Mask Register (IMR) */ + uint8_t smm; /* special mask mode */ + + uint8_t pin_state[8]; /* pin state for level */ + uint32_t lowprio; /* lowest priority irq */ + + bool intr_raised; + uint8_t elc; +}; + +struct acrn_vpic { + // spinlock_t lock; + struct i8259_reg_state i8259[2]; +}; + +struct acrn_vm; +void vpic_init(struct acrn_vm *vm); + +/** + * @brief virtual PIC + * + * @addtogroup acrn_vpic ACRN vPIC + * @{ + */ + +/** + * @brief Set vPIC IRQ line status. + * + * @param[in] vpic Pointer to target VM's vpic table + * @param[in] vgsi GSI for the virtual interrupt + * @param[in] operation action options:GSI_SET_HIGH/GSI_SET_LOW/ + * GSI_RAISING_PULSE/GSI_FALLING_PULSE + * + * @return None + */ +void vpic_set_irqline(struct acrn_vpic *vpic, uint32_t vgsi, uint32_t operation); + +/** + * @brief Get pending virtual interrupts for vPIC. + * + * @param[in] vpic Pointer to target VM's vpic table + * @param[inout] vecptr Pointer to vector buffer and will be filled + * with eligible vector if any. + * + * @return None + */ +void vpic_pending_intr(struct acrn_vpic *vpic, uint32_t *vecptr); + +/** + * @brief Accept virtual interrupt for vPIC. + * + * @param[in] vpic Pointer to target VM's vpic table + * @param[in] vector Target virtual interrupt vector + * + * @return None + * + * @pre vm != NULL + */ +void vpic_intr_accepted(struct acrn_vpic *vpic, uint32_t vector); +void vpic_get_irqline_trigger_mode(const struct acrn_vpic *vpic, uint32_t vgsi, enum vpic_trigger *trigger); +uint32_t vpic_pincount(void); +struct acrn_vpic *vm_pic(const struct acrn_vm *vm); + +/** + * @} + */ +/* End of acrn_vpic */ + +#endif /* VPIC_H */ diff --git a/src/components/implementation/simple_vmm/noop_nf/Makefile b/src/components/implementation/simple_vmm/noop_nf/Makefile new file mode 100644 index 0000000000..96d9511070 --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/Makefile @@ -0,0 +1,29 @@ +# Required variables used to drive the compilation process. It is OK +# for many of these to be empty. +# +# The set of interfaces that this component exports for use by other +# components. This is a list of the interface names. +INTERFACE_EXPORTS = netio +# The interfaces this component is dependent on for compilation (this +# is a list of directory names in interface/) +INTERFACE_DEPENDENCIES = contigmem netshmem nic sched nic +# The library dependencies this component is reliant on for +# compilation/linking (this is a list of directory names in lib/) +LIBRARY_DEPENDENCIES = ubench component kernel initargs vmrt shm_bm sync time ck +# Note: Both the interface and library dependencies should be +# *minimal*. That is to say that removing a dependency should cause +# the build to fail. The build system does not validate this +# minimality; that's on you! + +CFILES+=devices/serial/serial.c +CFILES+=devices/vpci/vpci.c +CFILES+=devices/vpci/vpci_io.c +CFILES+=devices/vpci/virtio_net_vpci.c +CFILES+=devices/vpci/virtio_net_io.c +CFILES+=devices/vpic/vpic.c +CFILES+=devices/vrtc/vrtc.c +CFILES+=devices/vps2/vps2.c + +C_OBJS+=$(CFILES:%.c=%.o) +COMP_FLAGS= -mavx -mavx2 -mfma -I$(LIBDIR)/dpdk/dpdk/build/install/include +include Makefile.subsubdir diff --git a/src/components/implementation/simple_vmm/noop_nf/acrn_common.h b/src/components/implementation/simple_vmm/noop_nf/acrn_common.h new file mode 100644 index 0000000000..b97561f61b --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/acrn_common.h @@ -0,0 +1,797 @@ +/* + * common definition + * + * Copyright (C) 2017-2022 Intel Corporation. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/** + * @file acrn_common.h + * + * @brief acrn common data structure for hypercall or ioctl + */ + +#ifndef ACRN_COMMON_H +#define ACRN_COMMON_H + +#include + +/* + * Common structures for ACRN/HSM/DM + */ + +/* + * IO request + */ + +#define ACRN_IO_REQUEST_MAX 16U +#define ACRN_ASYNCIO_MAX 64U + +#define ACRN_IOREQ_STATE_PENDING 0U +#define ACRN_IOREQ_STATE_COMPLETE 1U +#define ACRN_IOREQ_STATE_PROCESSING 2U +#define ACRN_IOREQ_STATE_FREE 3U + +#define ACRN_IOREQ_TYPE_PORTIO 0U +#define ACRN_IOREQ_TYPE_MMIO 1U +#define ACRN_IOREQ_TYPE_PCICFG 2U +#define ACRN_IOREQ_TYPE_WP 3U + +#define ACRN_IOREQ_DIR_READ 0U +#define ACRN_IOREQ_DIR_WRITE 1U + + + +/* IOAPIC device model info */ +#define VIOAPIC_RTE_NUM 48U /* vioapic pins */ + +#if VIOAPIC_RTE_NUM < 24U +#error "VIOAPIC_RTE_NUM must be larger than 23" +#endif + +/* Generic VM flags from guest OS */ +#define GUEST_FLAG_SECURE_WORLD_ENABLED (1UL << 0U) /* Whether secure world is enabled */ +#define GUEST_FLAG_LAPIC_PASSTHROUGH (1UL << 1U) /* Whether LAPIC is passed through */ +#define GUEST_FLAG_IO_COMPLETION_POLLING (1UL << 2U) /* Whether need hypervisor poll IO completion */ +#define GUEST_FLAG_HIDE_MTRR (1UL << 3U) /* Whether hide MTRR from VM */ +#define GUEST_FLAG_RT (1UL << 4U) /* Whether the vm is RT-VM */ +#define GUEST_FLAG_NVMX_ENABLED (1UL << 5U) /* Whether this VM supports nested virtualization */ +#define GUEST_FLAG_SECURITY_VM (1UL << 6U) /* Whether this VM needs to do security-vm related fixup (TPM2 and SMBIOS pt) */ +#define GUEST_FLAG_VCAT_ENABLED (1UL << 7U) /* Whether this VM supports vCAT */ +#define GUEST_FLAG_STATIC_VM (1UL << 8U) /* Whether this VM uses static VM configuration */ +#define GUEST_FLAG_TEE (1UL << 9U) /* Whether the VM is TEE VM */ +#define GUEST_FLAG_REE (1UL << 10U) /* Whether the VM is REE VM */ +#define GUEST_FLAG_PMU_PASSTHROUGH (1UL << 11U) /* Whether PMU is passed through */ + + +/* TODO: We may need to get this addr from guest ACPI instead of hardcode here */ +#define VIRTUAL_SLEEP_CTL_ADDR 0x400U /* Pre-launched VM uses ACPI reduced HW mode and sleep control register */ +#define VIRTUAL_PM1A_CNT_ADDR 0x404U +#define VIRTUAL_PM1A_SCI_EN 0x0001 +#define VIRTUAL_PM1A_SLP_TYP 0x1c00U +#define VIRTUAL_PM1A_SLP_EN 0x2000U +#define VIRTUAL_PM1A_ALWAYS_ZERO 0xc003 + +#define MAX_VM_NAME_LEN (16U) + +/** + * @brief Hypercall + * + * @addtogroup acrn_hypercall ACRN Hypercall + * @{ + */ + +/** + * @brief Representation of a MMIO request + */ +struct acrn_mmio_request { + /** + * @brief Direction of the access + * + * Either \p ACRN_IOREQ_DIR_READ or \p ACRN_IOREQ_DIR_WRITE. + */ + uint32_t direction; + + /** + * @brief reserved + */ + uint32_t reserved; + + /** + * @brief Address of the I/O access + */ + uint64_t address; + + /** + * @brief Width of the I/O access in byte + */ + uint64_t size; + + /** + * @brief The value read for I/O reads or to be written for I/O writes + */ + uint64_t value; +}; + +/** + * @brief Representation of a port I/O request + */ +struct acrn_pio_request { + /** + * @brief Direction of the access + * + * Either \p ACRN_IOREQ_DIR_READ or \p ACRN_IOREQ_DIR_WRITE. + */ + uint32_t direction; + + /** + * @brief reserved + */ + uint32_t reserved; + + /** + * @brief Port address of the I/O access + */ + uint64_t address; + + /** + * @brief Width of the I/O access in byte + */ + uint64_t size; + + /** + * @brief The value read for I/O reads or to be written for I/O writes + */ + uint32_t value; +}; + +/** + * @brief Representation of a PCI configuration space access + */ +struct acrn_pci_request { + /** + * @brief Direction of the access + * + * Either \p ACRN_IOREQ_DIR_READ or \p ACRN_IOREQ_DIR_WRITE. + */ + uint32_t direction; + + /** + * @brief Reserved + */ + uint32_t reserved[3];/* need keep same header fields with pio_request */ + + /** + * @brief Width of the I/O access in byte + */ + int64_t size; + + /** + * @brief The value read for I/O reads or to be written for I/O writes + */ + int32_t value; + + /** + * @brief The \p bus part of the BDF of the device + */ + int32_t bus; + + /** + * @brief The \p device part of the BDF of the device + */ + int32_t dev; + + /** + * @brief The \p function part of the BDF of the device + */ + int32_t func; + + /** + * @brief The register to be accessed in the configuration space + */ + int32_t reg; +}; + +/** + * @brief 256-byte I/O requests + * + * The state transitions of a I/O request are: + * + * FREE -> PENDING -> PROCESSING -> COMPLETE -> FREE -> ... + * + * When a request is in COMPLETE or FREE state, the request is owned by the + * hypervisor. Service VM (HSM or DM) shall not read or write the internals of the + * request except the state. + * + * When a request is in PENDING or PROCESSING state, the request is owned by + * Service VM. The hypervisor shall not read or write the request other than the state. + * + * Based on the rules above, a typical I/O request lifecycle should looks like + * the following. + * + * @verbatim embed:rst:leading-asterisk + * + * +-----------------------+-------------------------+----------------------+ + * | Service VM vCPU 0 | Service VM vCPU x | User VM vCPU y | + * +=======================+=========================+======================+ + * | | | Hypervisor: | + * | | | | + * | | | - Fill in type, | + * | | | addr, etc. | + * | | | - Pause User VM vCPU | + * | | | - Set state to | + * | | | PENDING (a) | + * | | | - Fire upcall to | + * | | | Service VM vCPU 0 | + * | | | | + * +-----------------------+-------------------------+----------------------+ + * | HSM: | | | + * | | | | + * | - Scan for pending | | | + * | requests | | | + * | - Set state to | | | + * | PROCESSING (b) | | | + * | - Assign requests to | | | + * | clients (c) | | | + * | | | | + * +-----------------------+-------------------------+----------------------+ + * | | Client: | | + * | | | | + * | | - Scan for assigned | | + * | | requests | | + * | | - Handle the | | + * | | requests (d) | | + * | | - Set state to COMPLETE | | + * | | - Notify the hypervisor | | + * | | | | + * +-----------------------+-------------------------+----------------------+ + * | | Hypervisor: | | + * | | | | + * | | - resume User VM vCPU y | | + * | | (e) | | + * | | | | + * +-----------------------+-------------------------+----------------------+ + * | | | Hypervisor: | + * | | | | + * | | | - Post-work (f) | + * | | | - set state to FREE | + * | | | | + * +-----------------------+-------------------------+----------------------+ + * + * @endverbatim + * + * Note that the following shall hold. + * + * 1. (a) happens before (b) + * 2. (c) happens before (d) + * 3. (e) happens before (f) + * 4. One vCPU cannot trigger another I/O request before the previous one has + * completed (i.e. the state switched to FREE) + * + * Accesses to the state of a acrn_io_request shall be atomic and proper barriers + * are needed to ensure that: + * + * 1. Setting state to PENDING is the last operation when issuing a request in + * the hypervisor, as the hypervisor shall not access the request any more. + * + * 2. Due to similar reasons, setting state to COMPLETE is the last operation + * of request handling in HSM or clients in Service VM. + */ +struct acrn_io_request { + /** + * @brief Type of this request. + * + * Byte offset: 0. + */ + uint32_t type; + + /** + * @brief Hypervisor will poll completion if set. + * + * Byte offset: 4. + */ + uint32_t completion_polling; + + /** + * @brief Reserved. + * + * Byte offset: 8. + */ + uint32_t reserved0[14]; + + /** + * @brief Details about this request. + * + * Byte offset: 64. + */ + union { + struct acrn_pio_request pio_request; + struct acrn_pci_request pci_request; + struct acrn_mmio_request mmio_request; + uint64_t data[8]; + } reqs; + + /** + * @brief Reserved. + * + * Byte offset: 128. + */ + uint32_t reserved1; + + /** + * @brief If this request has been handled by HSM driver. + * + * Byte offset: 132. + */ + int32_t kernel_handled; + + /** + * @brief The status of this request. + * + * Taking ACRN_IOREQ_STATE_xxx as values. + * + * Byte offset: 136. + */ + uint32_t processed; +}__attribute__((aligned(256))); + +struct acrn_io_request_buffer { + union { + struct acrn_io_request req_slot[ACRN_IO_REQUEST_MAX]; + int8_t reserved[4096]; + }; +}; + +struct acrn_asyncio_info { + uint32_t type; + uint64_t addr; + uint64_t fd; +}; + +/** + * @brief Info to create a VM, the parameter for HC_CREATE_VM hypercall + */ +struct acrn_vm_creation { + /** created vmid return to HSM. Keep it first field */ + uint16_t vmid; + + /** Reserved */ + uint16_t reserved0; + + /** VCPU numbers this VM want to create */ + uint16_t vcpu_num; + + /** Reserved */ + uint16_t reserved1; + + /** the name of this VM */ + uint8_t name[MAX_VM_NAME_LEN]; + + /* VM flag bits from Guest OS, now used + * GUEST_FLAG_SECURE_WORLD_ENABLED (1UL<<0) + */ + uint64_t vm_flag; + + uint64_t ioreq_buf; + + /** + * The least significant set bit is the PCPU # the VCPU 0 maps to; + * second set least significant bit is the PCPU # the VCPU 1 maps to; + * and so on... + */ + uint64_t cpu_affinity; +}; + +/* General-purpose register layout aligned with the general-purpose register idx + * when vmexit, such as vmexit due to CR access, refer to SMD Vol.3C 27-6. + */ +struct acrn_gp_regs { + uint64_t rax; + uint64_t rcx; + uint64_t rdx; + uint64_t rbx; + uint64_t rsp; + uint64_t rbp; + uint64_t rsi; + uint64_t rdi; + uint64_t r8; + uint64_t r9; + uint64_t r10; + uint64_t r11; + uint64_t r12; + uint64_t r13; + uint64_t r14; + uint64_t r15; +}; + +/* struct to define how the descriptor stored in memory. + * Refer SDM Vol3 3.5.1 "Segment Descriptor Tables" + * Figure 3-11 + */ +struct acrn_descriptor_ptr { + uint16_t limit; + uint64_t base; + uint16_t reserved[3]; /* align struct size to 64bit */ +} __packed; + +/** + * @brief registers info for vcpu. + */ +struct acrn_regs { + struct acrn_gp_regs gprs; + struct acrn_descriptor_ptr gdt; + struct acrn_descriptor_ptr idt; + + uint64_t rip; + uint64_t cs_base; + uint64_t cr0; + uint64_t cr4; + uint64_t cr3; + uint64_t ia32_efer; + uint64_t rflags; + uint64_t reserved_64[4]; + + uint32_t cs_ar; + uint32_t cs_limit; + uint32_t reserved_32[3]; + + /* don't change the order of following sel */ + uint16_t cs_sel; + uint16_t ss_sel; + uint16_t ds_sel; + uint16_t es_sel; + uint16_t fs_sel; + uint16_t gs_sel; + uint16_t ldt_sel; + uint16_t tr_sel; +}; + +/** + * @brief Info to set vcpu state + * + * the parameter for HC_SET_VCPU_STATE + */ +struct acrn_vcpu_regs { + /** the virtual CPU ID for the VCPU to set state */ + uint16_t vcpu_id; + + /** reserved space to make cpu_state aligned to 8 bytes */ + uint16_t reserved[3]; + + /** the structure to hold vcpu state */ + struct acrn_regs vcpu_regs; +}; + +/** Operation types for setting IRQ line */ +#define GSI_SET_HIGH 0U +#define GSI_SET_LOW 1U +#define GSI_RAISING_PULSE 2U +#define GSI_FALLING_PULSE 3U + +/** + * @brief Info to Set/Clear/Pulse a virtual IRQ line for a VM + * + * the parameter for HC_SET_IRQLINE hypercall + */ +struct acrn_irqline_ops { + uint32_t gsi; + uint32_t op; +}; + + +/** + * @brief Info to inject a MSI interrupt to VM + * + * the parameter for HC_INJECT_MSI hypercall + */ +struct acrn_msi_entry { + /** MSI addr[19:12] with dest VCPU ID */ + uint64_t msi_addr; + + /** MSI data[7:0] with vector */ + uint64_t msi_data; +}; + +/** + * @brief Info The power state data of a VCPU. + * + */ + +#define SPACE_SYSTEM_MEMORY 0U +#define SPACE_SYSTEM_IO 1U +#define SPACE_PCI_CONFIG 2U +#define SPACE_Embedded_Control 3U +#define SPACE_SMBUS 4U +#define SPACE_PLATFORM_COMM 10U +#define SPACE_FFixedHW 0x7FU + +struct acrn_acpi_generic_address { + uint8_t space_id; + uint8_t bit_width; + uint8_t bit_offset; + uint8_t access_size; + uint64_t address; +} __attribute__ ((__packed__)); + +struct acrn_cstate_data { + struct acrn_acpi_generic_address cx_reg; + uint8_t type; + uint32_t latency; + uint64_t power; +}; + +struct acrn_pstate_data { + uint64_t core_frequency; /* megahertz */ + uint64_t power; /* milliWatts */ + uint64_t transition_latency; /* microseconds */ + uint64_t bus_master_latency; /* microseconds */ + uint64_t control; /* control value */ + uint64_t status; /* success indicator */ +}; + +enum acrn_cpufreq_policy_type { + CPUFREQ_POLICY_PERFORMANCE, + CPUFREQ_POLICY_NOMINAL, +}; + +struct acrn_cpufreq_limits { + /* Performance levels for HWP */ + uint8_t guaranteed_hwp_lvl; + uint8_t highest_hwp_lvl; + uint8_t lowest_hwp_lvl; + /* Index for the p-state table _PSS */ + uint8_t nominal_pstate; + uint8_t performance_pstate; +}; + +struct acpi_sx_pkg { + uint8_t val_pm1a; + uint8_t val_pm1b; + uint16_t reserved; +} __attribute__((aligned(8))); + +struct pm_s_state_data { + struct acrn_acpi_generic_address pm1a_evt; + struct acrn_acpi_generic_address pm1b_evt; + struct acrn_acpi_generic_address pm1a_cnt; + struct acrn_acpi_generic_address pm1b_cnt; + struct acpi_sx_pkg s3_pkg; + struct acpi_sx_pkg s5_pkg; + uint32_t *wake_vector_32; + uint64_t *wake_vector_64; +} __attribute__((aligned(8))); + +/** + * @brief Info PM command from DM/HSM. + * + * The command would specify request type(e.g. get px count or data) for + * specific VM and specific VCPU with specific state number. + * For Px, PMCMD_STATE_NUM means Px number from 0 to (MAX_PSTATE - 1), + * For Cx, PMCMD_STATE_NUM means Cx entry index from 1 to MAX_CX_ENTRY. + */ +#define PMCMD_VMID_MASK 0xff000000U +#define PMCMD_VCPUID_MASK 0x00ff0000U +#define PMCMD_STATE_NUM_MASK 0x0000ff00U +#define PMCMD_TYPE_MASK 0x000000ffU + +#define PMCMD_VMID_SHIFT 24U +#define PMCMD_VCPUID_SHIFT 16U +#define PMCMD_STATE_NUM_SHIFT 8U + +enum acrn_pm_cmd_type { + ACRN_PMCMD_GET_PX_CNT, + ACRN_PMCMD_GET_PX_DATA, + ACRN_PMCMD_GET_CX_CNT, + ACRN_PMCMD_GET_CX_DATA, +}; + +/** + * @brief Info to get a VM interrupt count data + * + * the parameter for HC_VM_INTR_MONITOR hypercall + */ +#define MAX_PTDEV_NUM 24U +struct acrn_intr_monitor { + /** sub command for intr monitor */ + uint32_t cmd; + /** the count of this buffer to save */ + uint32_t buf_cnt; + + /** the buffer which save each interrupt count */ + uint64_t buffer[MAX_PTDEV_NUM * 2]; +} __attribute__((aligned(8))); + +/** cmd for intr monitor **/ +#define INTR_CMD_GET_DATA 0U +#define INTR_CMD_DELAY_INT 1U + +/* + * PRE_LAUNCHED_VM is launched by ACRN hypervisor, with LAPIC_PT; + * Service VM is launched by ACRN hypervisor, without LAPIC_PT; + * POST_LAUNCHED_VM is launched by ACRN devicemodel, with/without LAPIC_PT depends on usecases. + * + * Assumption: vm_configs array is completely initialized w.r.t. load_order member of + * acrn_vm_config for all the VMs. + */ +enum acrn_vm_load_order { + PRE_LAUNCHED_VM = 0, + SERVICE_VM, + POST_LAUNCHED_VM, /* Launched by Devicemodel in Service VM */ + MAX_LOAD_ORDER +}; + +struct acrn_vm_config_header { + enum acrn_vm_load_order load_order; + char name[MAX_VM_NAME_LEN]; + uint8_t reserved[2]; + uint8_t severity; + uint64_t cpu_affinity; + uint64_t guest_flags; + /* + * The following are hv-specific members and are thus opaque. + * vm_config_entry_size determines the real size of this structure. + */ +} __attribute__((aligned(8))); + +/** + * @brief Info to configure virtual root port + * + * Configuration passed to hv when adding a virtual root port which + * is used as PTM root + */ +struct vrp_config +{ + uint16_t phy_bdf; + uint8_t max_payload; /* dev cap's max payload */ + uint8_t primary_bus; + uint8_t secondary_bus; + uint8_t subordinate_bus; + uint8_t ptm_capable; + uint32_t ptm_cap_offset; +}; + +/* Type of PCI device assignment */ +#define ACRN_PTDEV_QUIRK_ASSIGN (1U << 0) + +#define ACRN_PCI_NUM_BARS 6U +/** + * @brief Info to assign or deassign PCI for a VM + * + */ +struct acrn_pcidev { + /** the type of the the pass-through PCI device */ + uint32_t type; + + /** virtual BDF# of the pass-through PCI device */ + uint16_t virt_bdf; + + /** physical BDF# of the pass-through PCI device */ + uint16_t phys_bdf; + + /** the PCI Interrupt Line, initialized by ACRN-DM, which is RO and + * ideally not used for pass-through MSI/MSI-x devices. + */ + uint8_t intr_line; + + /** the PCI Interrupt Pin, initialized by ACRN-DM, which is RO and + * ideally not used for pass-through MSI/MSI-x devices. + */ + uint8_t intr_pin; + + /** the base address of the PCI BAR, initialized by ACRN-DM. */ + uint32_t bar[ACRN_PCI_NUM_BARS]; +}; + +#define MMIODEV_RES_NUM 3 + +/** + * @brief Info to assign or deassign a MMIO device for a VM + */ +struct acrn_mmiodev { + char name[8]; + struct acrn_mmiores { + /** the gpa of the MMIO region for the MMIO device */ + uint64_t user_vm_pa; + /** the hpa of the MMIO region for the MMIO device: for post-launched VM + * it's pa in service vm; for pre-launched VM it's pa in HV. + */ + uint64_t host_pa; + /** the size of the MMIO region for the MMIO resource */ + uint64_t size; + /** the memory type of the MMIO region for the MMIO resource */ + uint64_t mem_type; + } res[MMIODEV_RES_NUM]; +}; + +/** + * @brief Info to create or destroy a virtual PCI or legacy device for a VM + * + * the parameter for HC_CREATE_VDEV or HC_DESTROY_VDEV hypercall + */ +struct acrn_vdev { + /* + * the identifier of the device, the low 32 bits represent the vendor + * id and device id of PCI device and the high 32 bits represent the + * device number of the legacy device + */ + union { + uint64_t value; + struct { + uint16_t vendor; + uint16_t device; + uint32_t legacy_id; + } fields; + } id; + + /* + * the slot of the device, if the device is a PCI device, the slot + * represents BDF, otherwise it represents legacy device slot number + */ + uint64_t slot; + + /** the IO resource address of the device, initialized by ACRN-DM. */ + uint32_t io_addr[ACRN_PCI_NUM_BARS]; + + /** the IO resource size of the device, initialized by ACRN-DM. */ + uint32_t io_size[ACRN_PCI_NUM_BARS]; + + /** the options for the virtual device, initialized by ACRN-DM. */ + uint8_t args[128]; +}; + +#define ACRN_ASYNCIO_PIO (0x01U) +#define ACRN_ASYNCIO_MMIO (0x02U) + +#define SBUF_MAGIC 0x5aa57aa71aa13aa3UL +#define SBUF_MAX_SIZE (1UL << 22U) +#define SBUF_HEAD_SIZE 64U + +/* sbuf flags */ +#define OVERRUN_CNT_EN (1U << 0U) /* whether overrun counting is enabled */ +#define OVERWRITE_EN (1U << 1U) /* whether overwrite is enabled */ + +/** + * (sbuf) head + buf (store (ele_num - 1) elements at most) + * buffer empty: tail == head + * buffer full: (tail + ele_size) % size == head + * + * Base of memory for elements + * | + * | + * ---------------------------------------------------------------------- + * | struct shared_buf | raw data (ele_size)| ... | raw data (ele_size) | + * ---------------------------------------------------------------------- + * | + * | + * struct shared_buf *buf + */ + +enum { + ACRN_TRACE = 0U, + ACRN_HVLOG, + ACRN_SEP, + ACRN_SOCWATCH, + /* The sbuf with above ids are created each pcpu */ + ACRN_SBUF_PER_PCPU_ID_MAX, + ACRN_ASYNCIO = 64, +}; + +/* Make sure sizeof(struct shared_buf) == SBUF_HEAD_SIZE */ +struct shared_buf { + uint64_t magic; + uint32_t ele_num; /* number of elements */ + uint32_t ele_size; /* sizeof of elements */ + uint32_t head; /* offset from base, to read */ + uint32_t tail; /* offset from base, to write */ + uint32_t flags; + uint32_t reserved; + uint32_t overrun_cnt; /* count of overrun */ + uint32_t size; /* ele_num * ele_size */ + uint32_t padding[6]; +}; + +/** + * @} + */ +#endif /* ACRN_COMMON_H */ diff --git a/src/components/implementation/simple_vmm/noop_nf/acrn_types.h b/src/components/implementation/simple_vmm/noop_nf/acrn_types.h new file mode 100644 index 0000000000..0d6b92fcd9 --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/acrn_types.h @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2018-2022 Intel Corporation. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef ACRN_TYPES_H +#define ACRN_TYPES_H + +#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) +#define __aligned(x) __attribute__((aligned(x))) +#define __packed __attribute__((packed)) +#define __unused __attribute__((unused)) + +#include + +/** Roundup (x/y) to ( x/y + (x%y) ? 1 : 0) **/ +#define INT_DIV_ROUNDUP(x, y) ((((x)+(y))-1)/(y)) + +/* Define standard data types. These definitions allow software components + * to perform in the same manner on different target platforms. + */ +typedef signed char int8_t; +typedef unsigned char uint8_t; +typedef signed short int16_t; +typedef unsigned short uint16_t; +typedef signed int int32_t; +typedef unsigned int uint32_t; +typedef unsigned long uint64_t; +typedef signed long int64_t; +typedef __builtin_va_list va_list; + +#ifndef NULL +#define NULL ((void *) 0) +#endif + +#ifndef true +#define true ((_Bool) 1) +#define false ((_Bool) 0) +#endif + +#ifndef UINT64_MAX +#define UINT64_MAX (0xffffffffffffffffUL) +#endif + +#ifndef UINT32_MAX +#define UINT32_MAX (0xffffffffU) +#endif + + +#endif /* INCLUDE_TYPES_H defined */ diff --git a/src/components/implementation/simple_vmm/noop_nf/apicreg.h b/src/components/implementation/simple_vmm/noop_nf/apicreg.h new file mode 100644 index 0000000000..0b8579ffb2 --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/apicreg.h @@ -0,0 +1,444 @@ +/*- + * Copyright (c) 1996, by Peter Wemm and Steve Passe + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. The name of the developer may NOT be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef APICREG_H +#define APICREG_H + +#include +/* + * Local && I/O APIC definitions. + */ + +/****************************************************************************** + * global defines, etc. + */ + + +/****************************************************************************** + * LOCAL APIC structure + */ +struct lapic_reg { + uint32_t v; + uint32_t pad[3]; +}; + +struct lapic_regs { /*OFFSET(Hex)*/ + struct lapic_reg rsv0[2]; + struct lapic_reg id; /*020*/ + struct lapic_reg version; /*030*/ + struct lapic_reg rsv1[4]; + struct lapic_reg tpr; /*080*/ + struct lapic_reg apr; /*090*/ + struct lapic_reg ppr; /*0A0*/ + struct lapic_reg eoi; /*0B0*/ + struct lapic_reg rrd; /*0C0*/ + struct lapic_reg ldr; /*0D0*/ + struct lapic_reg dfr; /*0EO*/ + struct lapic_reg svr; /*0F0*/ + struct lapic_reg isr[8]; /*100 -- 170*/ + struct lapic_reg tmr[8]; /*180 -- 1F0*/ + struct lapic_reg irr[8]; /*200 -- 270*/ + struct lapic_reg esr; /*280*/ + struct lapic_reg rsv2[6]; + struct lapic_reg lvt_cmci; /*2F0*/ + struct lapic_reg icr_lo; /*300*/ + struct lapic_reg icr_hi; /*310*/ + struct lapic_reg lvt[6]; /*320 -- 370*/ + struct lapic_reg icr_timer;/*380*/ + struct lapic_reg ccr_timer;/*390*/ + struct lapic_reg rsv3[4]; + struct lapic_reg dcr_timer;/*3E0*/ + struct lapic_reg self_ipi; /*3F0*/ + + /*roundup sizeof current struct to 4KB*/ + struct lapic_reg rsv5[192]; /*400 -- FF0*/ +} __attribute__((aligned(4096))); + +enum LAPIC_REGISTERS { + LAPIC_ID = 0x2, + LAPIC_VERSION = 0x3, + LAPIC_TPR = 0x8, + LAPIC_APR = 0x9, + LAPIC_PPR = 0xa, + LAPIC_EOI = 0xb, + LAPIC_LDR = 0xd, + LAPIC_DFR = 0xe, /* Not in x2APIC */ + LAPIC_SVR = 0xf, + LAPIC_ISR0 = 0x10, + LAPIC_ISR1 = 0x11, + LAPIC_ISR2 = 0x12, + LAPIC_ISR3 = 0x13, + LAPIC_ISR4 = 0x14, + LAPIC_ISR5 = 0x15, + LAPIC_ISR6 = 0x16, + LAPIC_ISR7 = 0x17, + LAPIC_TMR0 = 0x18, + LAPIC_TMR1 = 0x19, + LAPIC_TMR2 = 0x1a, + LAPIC_TMR3 = 0x1b, + LAPIC_TMR4 = 0x1c, + LAPIC_TMR5 = 0x1d, + LAPIC_TMR6 = 0x1e, + LAPIC_TMR7 = 0x1f, + LAPIC_IRR0 = 0x20, + LAPIC_IRR1 = 0x21, + LAPIC_IRR2 = 0x22, + LAPIC_IRR3 = 0x23, + LAPIC_IRR4 = 0x24, + LAPIC_IRR5 = 0x25, + LAPIC_IRR6 = 0x26, + LAPIC_IRR7 = 0x27, + LAPIC_ESR = 0x28, + LAPIC_LVT_CMCI = 0x2f, + LAPIC_ICR_LO = 0x30, + LAPIC_ICR_HI = 0x31, /* Not in x2APIC */ + LAPIC_LVT_TIMER = 0x32, + LAPIC_LVT_THERMAL = 0x33, + LAPIC_LVT_PCINT = 0x34, + LAPIC_LVT_LINT0 = 0x35, + LAPIC_LVT_LINT1 = 0x36, + LAPIC_LVT_ERROR = 0x37, + LAPIC_ICR_TIMER = 0x38, + LAPIC_CCR_TIMER = 0x39, + LAPIC_DCR_TIMER = 0x3e, + LAPIC_SELF_IPI = 0x3f, /* Only in x2APIC */ + LAPIC_EXT_FEATURES = 0x40, /* AMD */ + LAPIC_EXT_CTRL = 0x41, /* AMD */ + LAPIC_EXT_SEOI = 0x42, /* AMD */ + LAPIC_EXT_IER0 = 0x48, /* AMD */ + LAPIC_EXT_IER1 = 0x49, /* AMD */ + LAPIC_EXT_IER2 = 0x4a, /* AMD */ + LAPIC_EXT_IER3 = 0x4b, /* AMD */ + LAPIC_EXT_IER4 = 0x4c, /* AMD */ + LAPIC_EXT_IER5 = 0x4d, /* AMD */ + LAPIC_EXT_IER6 = 0x4e, /* AMD */ + LAPIC_EXT_IER7 = 0x4f, /* AMD */ + LAPIC_EXT_LVT0 = 0x50, /* AMD */ + LAPIC_EXT_LVT1 = 0x51, /* AMD */ + LAPIC_EXT_LVT2 = 0x52, /* AMD */ + LAPIC_EXT_LVT3 = 0x53, /* AMD */ +}; + +#define LAPIC_MEM_MUL 0x10 + +/* + * Although some registers are available on AMD processors only, + * it's not a big waste to reserve them on all platforms. + * However, we need to watch out for this space being assigned for + * non-APIC purposes in the future processor models. + */ +#define LAPIC_MEM_REGION ((LAPIC_EXT_LVT3 + 1) * LAPIC_MEM_MUL) + +/****************************************************************************** + * I/O APIC structure + */ + +struct ioapic { + uint32_t ioregsel; + uint32_t rsv0[3]; + uint32_t iowin; + uint32_t rsv1[3]; +}; + +/* + * Macros for bits in union ioapic_rte + */ +#define IOAPIC_RTE_MASK_CLR 0x0U /* Interrupt Mask: Clear */ +#define IOAPIC_RTE_MASK_SET 0x1U /* Interrupt Mask: Set */ + +#define IOAPIC_RTE_TRGRMODE_EDGE 0x0U /* Trigger Mode: Edge */ +#define IOAPIC_RTE_TRGRMODE_LEVEL 0x1U /* Trigger Mode: Level */ + +#define IOAPIC_RTE_REM_IRR 0x1U /* Remote IRR: Read-Only */ + +#define IOAPIC_RTE_INTPOL_AHI 0x0U /* Interrupt Polarity: active high */ +#define IOAPIC_RTE_INTPOL_ALO 0x1U /* Interrupt Polarity: active low */ + +#define IOAPIC_RTE_DELIVS 0x1U /* Delivery Status: Read-Only */ + +#define IOAPIC_RTE_DESTMODE_PHY 0x0U /* Destination Mode: Physical */ +#define IOAPIC_RTE_DESTMODE_LOGICAL 0x1U /* Destination Mode: Logical */ + +#define IOAPIC_RTE_DELMODE_FIXED 0x0U /* Delivery Mode: Fixed */ +#define IOAPIC_RTE_DELMODE_LOPRI 0x1U /* Delivery Mode: Lowest priority */ +#define IOAPIC_RTE_DELMODE_INIT 0x5U /* Delivery Mode: INIT signal */ +#define IOAPIC_RTE_DELMODE_EXINT 0x7U /* Delivery Mode: External INTerrupt */ + +/* IOAPIC Redirection Table (RTE) Entry structure */ +union ioapic_rte { + uint64_t full; + struct { + uint32_t lo_32; + uint32_t hi_32; + } u; + struct { + uint8_t vector:8; + uint64_t delivery_mode:3; + uint64_t dest_mode:1; + uint64_t delivery_status:1; + uint64_t intr_polarity:1; + uint64_t remote_irr:1; + uint64_t trigger_mode:1; + uint64_t intr_mask:1; + uint64_t rsvd_1:39; + uint8_t dest_field:8; + } bits __attribute__((packed)); + struct { + uint32_t vector:8; + uint32_t constant:3; + uint32_t intr_index_high:1; + uint32_t delivery_status:1; + uint32_t intr_polarity:1; + uint32_t remote_irr:1; + uint32_t trigger_mode:1; + uint32_t intr_mask:1; + uint32_t rsvd_1:15; + uint32_t rsvd_2:16; + uint32_t intr_format:1; + uint32_t intr_index_low:15; + } ir_bits __attribute__((packed)); +}; + +/****************************************************************************** + * various code 'logical' values + */ + +/****************************************************************************** + * LOCAL APIC defines + */ + +/* default physical locations of LOCAL (CPU) APICs */ +#define DEFAULT_APIC_BASE 0xfee00000UL + +/* constants relating to APIC ID registers */ +#define APIC_ID_MASK 0xff000000U +#define APIC_ID_SHIFT 24U +#define APIC_ID_CLUSTER 0xf0U +#define APIC_ID_CLUSTER_ID 0x0fU +#define APIC_MAX_CLUSTER 0xeU +#define APIC_MAX_INTRACLUSTER_ID 3 +#define APIC_ID_CLUSTER_SHIFT 4 + +/* fields in VER */ +#define APIC_VER_VERSION 0x000000ffU +#define APIC_VER_MAXLVT 0x00ff0000U +#define MAXLVTSHIFT 16U +#define APIC_VER_EOI_SUPPRESSION 0x01000000U +#define APIC_VER_AMD_EXT_SPACE 0x80000000U + +/* fields in LDR */ +#define APIC_LDR_RESERVED 0x00ffffffU + +/* fields in DFR */ +#define APIC_DFR_RESERVED 0x0fffffffU +#define APIC_DFR_MODEL_MASK 0xf0000000U +#define APIC_DFR_MODEL_FLAT 0xf0000000U +#define APIC_DFR_MODEL_CLUSTER 0x00000000U + +/* fields in SVR */ +#define APIC_SVR_VECTOR 0x000000ffU +#define APIC_SVR_VEC_PROG 0x000000f0U +#define APIC_SVR_VEC_FIX 0x0000000fU +#define APIC_SVR_ENABLE 0x00000100U +#define APIC_SVR_SWDIS 0x00000000U +#define APIC_SVR_SWEN 0x00000100U +#define APIC_SVR_FOCUS 0x00000200U +#define APIC_SVR_FEN 0x00000000U +#define APIC_SVR_FDIS 0x00000200U +#define APIC_SVR_EOI_SUPPRESSION 0x00001000U + +/* fields in TPR */ +#define APIC_TPR_PRIO 0x000000ffU +#define APIC_TPR_INT 0x000000f0U +#define APIC_TPR_SUB 0x0000000fU + +/* fields in ESR */ +#define APIC_ESR_SEND_CS_ERROR 0x00000001U +#define APIC_ESR_RECEIVE_CS_ERROR 0x00000002U +#define APIC_ESR_SEND_ACCEPT 0x00000004U +#define APIC_ESR_RECEIVE_ACCEPT 0x00000008U +#define APIC_ESR_SEND_ILLEGAL_VECTOR 0x00000020U +#define APIC_ESR_RECEIVE_ILLEGAL_VECTOR 0x00000040U +#define APIC_ESR_ILLEGAL_REGISTER 0x00000080U + +/* fields in ICR_LOW */ +#define APIC_VECTOR_MASK 0x000000ffU + +#define APIC_DELMODE_MASK 0x00000700U +#define APIC_DELMODE_FIXED 0x00000000U +#define APIC_DELMODE_LOWPRIO 0x00000100U +#define APIC_DELMODE_SMI 0x00000200U +#define APIC_DELMODE_RR 0x00000300U +#define APIC_DELMODE_NMI 0x00000400U +#define APIC_DELMODE_INIT 0x00000500U +#define APIC_DELMODE_STARTUP 0x00000600U +#define APIC_DELMODE_RESV 0x00000700U + +#define APIC_DESTMODE_MASK 0x00000800U +#define APIC_DESTMODE_PHY 0x00000000U +#define APIC_DESTMODE_LOG 0x00000800U + +#define APIC_DELSTAT_MASK 0x00001000U +#define APIC_DELSTAT_IDLE 0x00000000U +#define APIC_DELSTAT_PEND 0x00001000U + +#define APIC_RESV1_MASK 0x00002000U + +#define APIC_LEVEL_MASK 0x00004000U +#define APIC_LEVEL_DEASSERT 0x00000000U +#define APIC_LEVEL_ASSERT 0x00004000U + +#define APIC_TRIGMOD_MASK 0x00008000U +#define APIC_TRIGMOD_EDGE 0x00000000U +#define APIC_TRIGMOD_LEVEL 0x00008000U + +#define APIC_RRSTAT_MASK 0x00030000U +#define APIC_RRSTAT_INVALID 0x00000000U +#define APIC_RRSTAT_INPROG 0x00010000U +#define APIC_RRSTAT_VALID 0x00020000U +#define APIC_RRSTAT_RESV 0x00030000U + +#define APIC_DEST_MASK 0x000c0000U +#define APIC_DEST_NOSHORT 0x00000000U +#define APIC_DEST_SELF 0x00040000U +#define APIC_DEST_ALLISELF 0x00080000U +#define APIC_DEST_ALLESELF 0x000c0000U + +#define APIC_RESV2_MASK 0xfff00000U + +#define APIC_ICRLO_RESV_MASK (APIC_RESV1_MASK | APIC_RESV2_MASK) + +/* fields in LVT1/2 */ +#define APIC_LVT_VECTOR 0x000000ffU +#define APIC_LVT_DM 0x00000700U +#define APIC_LVT_DM_FIXED 0x00000000U +#define APIC_LVT_DM_SMI 0x00000200U +#define APIC_LVT_DM_NMI 0x00000400U +#define APIC_LVT_DM_INIT 0x00000500U +#define APIC_LVT_DM_EXTINT 0x00000700U +#define APIC_LVT_DS 0x00001000U +#define APIC_LVT_IIPP 0x00002000U +#define APIC_LVT_IIPP_INTALO 0x00002000U +#define APIC_LVT_IIPP_INTAHI 0x00000000U +#define APIC_LVT_RIRR 0x00004000U +#define APIC_LVT_TM 0x00008000U +#define APIC_LVT_M 0x00010000U + + +/* fields in LVT Timer */ +#define APIC_LVTT_VECTOR 0x000000ffU +#define APIC_LVTT_DS 0x00001000U +#define APIC_LVTT_M 0x00010000U +#define APIC_LVTT_TM 0x00060000U +#define APIC_LVTT_TM_ONE_SHOT 0x00000000U +#define APIC_LVTT_TM_PERIODIC 0x00020000U +#define APIC_LVTT_TM_TSCDLT 0x00040000U +#define APIC_LVTT_TM_RSRV 0x00060000U + +/* APIC timer current count */ +#define APIC_TIMER_MAX_COUNT 0xffffffffU + +/* fields in TDCR */ +#define APIC_TDCR_2 0x00U +#define APIC_TDCR_4 0x01U +#define APIC_TDCR_8 0x02U +#define APIC_TDCR_16 0x03U +#define APIC_TDCR_32 0x08U +#define APIC_TDCR_64 0x09U +#define APIC_TDCR_128 0x0aU +#define APIC_TDCR_1 0x0bU + +/* Constants related to AMD Extended APIC Features Register */ +#define APIC_EXTF_ELVT_MASK 0x00ff0000U +#define APIC_EXTF_ELVT_SHIFT 16 +#define APIC_EXTF_EXTID_CAP 0x00000004U +#define APIC_EXTF_SEIO_CAP 0x00000002U +#define APIC_EXTF_IER_CAP 0x00000001U + +/* LVT table indices */ +#define APIC_LVT_TIMER 0U +#define APIC_LVT_THERMAL 1U +#define APIC_LVT_PMC 2U +#define APIC_LVT_LINT0 3U +#define APIC_LVT_LINT1 4U +#define APIC_LVT_ERROR 5U +#define APIC_LVT_CMCI 6U +#define APIC_LVT_MAX APIC_LVT_CMCI + +/* AMD extended LVT constants, seem to be assigned by fiat */ +#define APIC_ELVT_IBS 0 /* Instruction based sampling */ +#define APIC_ELVT_MCA 1 /* MCE thresholding */ +#define APIC_ELVT_DEI 2 /* Deferred error interrupt */ +#define APIC_ELVT_SBI 3 /* Sideband interface */ +#define APIC_ELVT_MAX APIC_ELVT_SBI + +/****************************************************************************** + * I/O APIC defines + */ + +/* window register offset */ +#define IOAPIC_REGSEL 0x00U +#define IOAPIC_WINDOW 0x10U + +/* indexes into IO APIC */ +#define IOAPIC_ID 0x00U +#define IOAPIC_VER 0x01U +#define IOAPIC_ARB 0x02U +#define IOAPIC_REDTBL 0x10U +#define IOAPIC_REDTBL0 IOAPIC_REDTBL +#define IOAPIC_REDTBL1 (IOAPIC_REDTBL+0x02U) +#define IOAPIC_REDTBL2 (IOAPIC_REDTBL+0x04U) +#define IOAPIC_REDTBL3 (IOAPIC_REDTBL+0x06U) +#define IOAPIC_REDTBL4 (IOAPIC_REDTBL+0x08U) +#define IOAPIC_REDTBL5 (IOAPIC_REDTBL+0x0aU) +#define IOAPIC_REDTBL6 (IOAPIC_REDTBL+0x0cU) +#define IOAPIC_REDTBL7 (IOAPIC_REDTBL+0x0eU) +#define IOAPIC_REDTBL8 (IOAPIC_REDTBL+0x10U) +#define IOAPIC_REDTBL9 (IOAPIC_REDTBL+0x12U) +#define IOAPIC_REDTBL10 (IOAPIC_REDTBL+0x14U) +#define IOAPIC_REDTBL11 (IOAPIC_REDTBL+0x16U) +#define IOAPIC_REDTBL12 (IOAPIC_REDTBL+0x18U) +#define IOAPIC_REDTBL13 (IOAPIC_REDTBL+0x1aU) +#define IOAPIC_REDTBL14 (IOAPIC_REDTBL+0x1cU) +#define IOAPIC_REDTBL15 (IOAPIC_REDTBL+0x1eU) +#define IOAPIC_REDTBL16 (IOAPIC_REDTBL+0x20U) +#define IOAPIC_REDTBL17 (IOAPIC_REDTBL+0x22U) +#define IOAPIC_REDTBL18 (IOAPIC_REDTBL+0x24U) +#define IOAPIC_REDTBL19 (IOAPIC_REDTBL+0x26U) +#define IOAPIC_REDTBL20 (IOAPIC_REDTBL+0x28U) +#define IOAPIC_REDTBL21 (IOAPIC_REDTBL+0x2aU) +#define IOAPIC_REDTBL22 (IOAPIC_REDTBL+0x2cU) +#define IOAPIC_REDTBL23 (IOAPIC_REDTBL+0x2eU) + +#define IOAPIC_ID_MASK 0x0f000000U +#define IOAPIC_ID_SHIFT 24U + +/* fields in VER, for redirection entry */ +#define IOAPIC_MAX_RTE_MASK 0x00ff0000U +#define MAX_RTE_SHIFT 16U + +#endif /* APICREG_H */ diff --git a/src/components/implementation/simple_vmm/noop_nf/atomic.h b/src/components/implementation/simple_vmm/noop_nf/atomic.h new file mode 100644 index 0000000000..08de71b656 --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/atomic.h @@ -0,0 +1,152 @@ +/*- + * Copyright (c) 1998 Doug Rabson + * Copyright (c) 2018-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef ATOMIC_H +#define ATOMIC_H +#include +#define BUS_LOCK "lock ; " + +#define build_atomic_inc(name, size, type) \ +static inline void name(type *ptr) \ +{ \ + asm volatile(BUS_LOCK "inc" size " %0" \ + : "=m" (*ptr) \ + : "m" (*ptr)); \ +} +build_atomic_inc(atomic_inc16, "w", uint16_t) +build_atomic_inc(atomic_inc32, "l", uint32_t) +build_atomic_inc(atomic_inc64, "q", uint64_t) + +#define build_atomic_dec(name, size, type) \ +static inline void name(type *ptr) \ +{ \ + asm volatile(BUS_LOCK "dec" size " %0" \ + : "=m" (*ptr) \ + : "m" (*ptr)); \ +} +build_atomic_dec(atomic_dec16, "w", uint16_t) +build_atomic_dec(atomic_dec32, "l", uint32_t) +build_atomic_dec(atomic_dec64, "q", uint64_t) + +#define build_atomic_swap(name, size, type) \ +static inline type name(type *ptr, type v) \ +{ \ + asm volatile(BUS_LOCK "xchg" size " %1,%0" \ + : "+m" (*ptr), "+r" (v) \ + : \ + : "cc", "memory"); \ + return v; \ +} +build_atomic_swap(atomic_swap32, "l", uint32_t) +build_atomic_swap(atomic_swap64, "q", uint64_t) + + /* + * #define atomic_readandclear32(P) \ + * (return (*(uint32_t *)(P)); *(uint32_t *)(P) = 0U;) + */ +static inline uint32_t atomic_readandclear32(uint32_t *p) +{ + return atomic_swap32(p, 0U); +} + + /* + * #define atomic_readandclear64(P) \ + * (return (*(uint64_t *)(P)); *(uint64_t *)(P) = 0UL;) + */ +static inline uint64_t atomic_readandclear64(uint64_t *p) +{ + return atomic_swap64(p, 0UL); +} + +#define build_atomic_cmpxchg(name, size, type) \ +static inline type name(volatile type *ptr, type old, type new) \ +{ \ + type ret; \ + asm volatile(BUS_LOCK "cmpxchg" size " %2,%1" \ + : "=a" (ret), "+m" (*ptr) \ + : "r" (new), "0" (old) \ + : "memory"); \ + return ret; \ +} +build_atomic_cmpxchg(atomic_cmpxchg32, "l", uint32_t) +build_atomic_cmpxchg(atomic_cmpxchg64, "q", uint64_t) + +#define build_atomic_xadd(name, size, type) \ +static inline type name(type *ptr, type v) \ +{ \ + asm volatile(BUS_LOCK "xadd" size " %0,%1" \ + : "+r" (v), "+m" (*ptr) \ + : \ + : "cc", "memory"); \ + return v; \ + } +build_atomic_xadd(atomic_xadd16, "w", uint16_t) +build_atomic_xadd(atomic_xadd32, "l", int32_t) +build_atomic_xadd(atomic_xadd64, "q", int64_t) + +static inline int32_t atomic_add_return(int32_t *p, int32_t v) +{ + return (atomic_xadd32(p, v) + v); +} + +static inline int32_t atomic_sub_return(int32_t *p, int32_t v) +{ + return (atomic_xadd32(p, -v) - v); +} + +static inline int32_t atomic_inc_return(int32_t *v) +{ + return atomic_add_return(v, 1); +} + +static inline int32_t atomic_dec_return(int32_t *v) +{ + return atomic_sub_return(v, 1); +} + +static inline int64_t atomic_add64_return(int64_t *p, int64_t v) +{ + return (atomic_xadd64(p, v) + v); +} + +static inline int64_t atomic_sub64_return(int64_t *p, int64_t v) +{ + return (atomic_xadd64(p, -v) - v); +} + +static inline int64_t atomic_inc64_return(int64_t *v) +{ + return atomic_add64_return(v, 1); +} + +static inline int64_t atomic_dec64_return(int64_t *v) +{ + return atomic_sub64_return(v, 1); +} + +#endif /* ATOMIC_H*/ diff --git a/src/components/implementation/simple_vmm/noop_nf/bits.h b/src/components/implementation/simple_vmm/noop_nf/bits.h new file mode 100644 index 0000000000..f7f8b732e7 --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/bits.h @@ -0,0 +1,298 @@ +/*- + * Copyright (c) 1998 Doug Rabson + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef BITS_H +#define BITS_H +#include "atomic.h" + +/** + * + * INVALID_BIT_INDEX means when input paramter is zero, + * bit operations function can't find bit set and return + * the invalid bit index directly. + * + **/ +#define INVALID_BIT_INDEX 0xffffU + +/* + * + * fls32 - Find the Last (most significant) bit Set in value and + * return the bit index of that bit. + * + * Bits are numbered starting at 0,the least significant bit. + * A return value of INVALID_BIT_INDEX means return value is + * invalid bit index when the input argument was zero. + * + * Examples: + * fls32 (0x0) = INVALID_BIT_INDEX + * fls32 (0x01) = 0 + * fls32 (0x80) = 7 + * ... + * fls32 (0x80000001) = 31 + * + * @param value: 'uint32_t' type value + * + * @return value: zero-based bit index, INVALID_BIT_INDEX means + * when 'value' was zero, bit operations function can't find bit + * set and return the invalid bit index directly. + * + */ +static inline uint16_t fls32(uint32_t value) +{ + uint32_t ret; + asm volatile("bsrl %1,%0\n\t" + "jnz 1f\n\t" + "mov %2,%0\n" + "1:" : "=r" (ret) + : "rm" (value), "i" (INVALID_BIT_INDEX)); + return (uint16_t)ret; +} + +static inline uint16_t fls64(uint64_t value) +{ + uint64_t ret = 0UL; + asm volatile("bsrq %1,%0\n\t" + "jnz 1f\n\t" + "mov %2,%0\n" + "1:" : "=r" (ret) + : "rm" (value), "i" (INVALID_BIT_INDEX)); + return (uint16_t)ret; +} + +/* + * + * ffs64 - Find the First (least significant) bit Set in value(Long type) + * and return the index of that bit. + * + * Bits are numbered starting at 0,the least significant bit. + * A return value of INVALID_BIT_INDEX means that the return value is the inalid + * bit index when the input argument was zero. + * + * Examples: + * ffs64 (0x0) = INVALID_BIT_INDEX + * ffs64 (0x01) = 0 + * ffs64 (0xf0) = 4 + * ffs64 (0xf00) = 8 + * ... + * ffs64 (0x8000000000000001) = 0 + * ffs64 (0xf000000000000000) = 60 + * + * @param value: 'uint64_t' type value + * + * @return value: zero-based bit index, INVALID_BIT_INDEX means + * when 'value' was zero, bit operations function can't find bit + * set and return the invalid bit index directly. + * + */ +static inline uint16_t ffs64(uint64_t value) +{ + uint64_t ret; + asm volatile("bsfq %1,%0\n\t" + "jnz 1f\n\t" + "mov %2,%0\n" + "1:" : "=r" (ret) + : "rm" (value), "i" (INVALID_BIT_INDEX)); + return (uint16_t)ret; +} + +/*bit scan forward for the least significant bit '0'*/ +static inline uint16_t ffz64(uint64_t value) +{ + return ffs64(~value); +} + + +/* + * find the first zero bit in a uint64_t array. + * @pre: the size must be multiple of 64. + */ +static inline uint64_t ffz64_ex(const uint64_t *addr, uint64_t size) +{ + uint64_t ret = size; + uint64_t idx; + + for (idx = 0UL; (idx << 6U) < size; idx++) { + if (addr[idx] != ~0UL) { + ret = (idx << 6U) + ffz64(addr[idx]); + break; + } + } + + return ret; +} +/* + * Counts leading zeros. + * + * The number of leading zeros is defined as the number of + * most significant bits which are not '1'. E.g.: + * clz(0x80000000)==0 + * clz(0x40000000)==1 + * ... + * clz(0x00000001)==31 + * clz(0x00000000)==32 + * + * @param value:The 32 bit value to count the number of leading zeros. + * + * @return The number of leading zeros in 'value'. + */ +static inline uint16_t clz(uint32_t value) +{ + return ((value != 0U) ? (31U - fls32(value)) : 32U); +} + +/* + * Counts leading zeros (64 bit version). + * + * @param value:The 64 bit value to count the number of leading zeros. + * + * @return The number of leading zeros in 'value'. + */ +static inline uint16_t clz64(uint64_t value) +{ + return ((value != 0UL) ? (63U - fls64(value)) : 64U); +} + +/* + * (*addr) |= (1UL<=64, it will be truncated. + */ +#define build_bitmap_set(name, op_len, op_type, lock) \ +static inline void name(uint16_t nr_arg, volatile op_type *addr) \ +{ \ + uint16_t nr; \ + nr = nr_arg & ((8U * sizeof(op_type)) - 1U); \ + asm volatile(lock "or" op_len " %1,%0" \ + : "+m" (*addr) \ + : "r" ((op_type)(1UL<=64, it will be truncated. + */ +#define build_bitmap_clear(name, op_len, op_type, lock) \ +static inline void name(uint16_t nr_arg, volatile op_type *addr) \ +{ \ + uint16_t nr; \ + nr = nr_arg & ((8U * sizeof(op_type)) - 1U); \ + asm volatile(lock "and" op_len " %1,%0" \ + : "+m" (*addr) \ + : "r" ((op_type)(~(1UL<<(nr)))) \ + : "cc", "memory"); \ +} +build_bitmap_clear(bitmap_clear_nolock, "q", uint64_t, "") +build_bitmap_clear(bitmap_clear_lock, "q", uint64_t, BUS_LOCK) +build_bitmap_clear(bitmap32_clear_nolock, "l", uint32_t, "") +build_bitmap_clear(bitmap32_clear_lock, "l", uint32_t, BUS_LOCK) + +/* + * return !!((*addr) & (1UL<=64, it will + * be truncated. + */ +static inline bool bitmap_test(uint16_t nr, const volatile uint64_t *addr) +{ + int32_t ret = 0; + asm volatile("btq %q2,%1\n\tsbbl %0, %0" + : "=r" (ret) + : "m" (*addr), "r" ((uint64_t)(nr & 0x3fU)) + : "cc", "memory"); + return (ret != 0); +} + +static inline bool bitmap32_test(uint16_t nr, const volatile uint32_t *addr) +{ + int32_t ret = 0; + asm volatile("btl %2,%1\n\tsbbl %0, %0" + : "=r" (ret) + : "m" (*addr), "r" ((uint32_t)(nr & 0x1fU)) + : "cc", "memory"); + return (ret != 0); +} + +/* + * bool ret = (*addr) & (1UL<=64, it + * will be truncated. + */ +#define build_bitmap_testandset(name, op_len, op_type, lock) \ +static inline bool name(uint16_t nr_arg, volatile op_type *addr) \ +{ \ + uint16_t nr; \ + int32_t ret=0; \ + nr = nr_arg & ((8U * sizeof(op_type)) - 1U); \ + asm volatile(lock "bts" op_len " %2,%1\n\tsbbl %0,%0" \ + : "=r" (ret), "=m" (*addr) \ + : "r" ((op_type)nr) \ + : "cc", "memory"); \ + return (ret != 0); \ +} +build_bitmap_testandset(bitmap_test_and_set_nolock, "q", uint64_t, "") +build_bitmap_testandset(bitmap_test_and_set_lock, "q", uint64_t, BUS_LOCK) +build_bitmap_testandset(bitmap32_test_and_set_nolock, "l", uint32_t, "") +build_bitmap_testandset(bitmap32_test_and_set_lock, "l", uint32_t, BUS_LOCK) + +/* + * bool ret = (*addr) & (1UL<=64, + * it will be truncated. + */ +#define build_bitmap_testandclear(name, op_len, op_type, lock) \ +static inline bool name(uint16_t nr_arg, volatile op_type *addr) \ +{ \ + uint16_t nr; \ + int32_t ret=0; \ + nr = nr_arg & ((8U * sizeof(op_type)) - 1U); \ + asm volatile(lock "btr" op_len " %2,%1\n\tsbbl %0,%0" \ + : "=r" (ret), "=m" (*addr) \ + : "r" ((op_type)nr) \ + : "cc", "memory"); \ + return (ret != 0); \ +} +build_bitmap_testandclear(bitmap_test_and_clear_nolock, "q", uint64_t, "") +build_bitmap_testandclear(bitmap_test_and_clear_lock, "q", uint64_t, BUS_LOCK) +build_bitmap_testandclear(bitmap32_test_and_clear_nolock, "l", uint32_t, "") +build_bitmap_testandclear(bitmap32_test_and_clear_lock, "l", uint32_t, BUS_LOCK) + +static inline uint16_t bitmap_weight(uint64_t bits) +{ + return (uint16_t)__builtin_popcountl(bits); +} + +#endif /* BITS_H*/ diff --git a/src/components/implementation/simple_vmm/noop_nf/cpu.h b/src/components/implementation/simple_vmm/noop_nf/cpu.h new file mode 100755 index 0000000000..96f6a6ce4d --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/cpu.h @@ -0,0 +1,337 @@ +/*- + * Copyright (c) 1989, 1990 William F. Jolitz + * Copyright (c) 1990 The Regents of the University of California. + * Copyright (c) 2017-2022 Intel Corporation. + * + * This code is derived from software contributed to Berkeley by + * William Jolitz. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * from: @(#)segments.h 7.1 (Berkeley) 5/9/91 + * $FreeBSD$ + */ + +#ifndef CPU_H +#define CPU_H +#include +#include +#include +#include + +/* Define CPU stack alignment */ +#define CPU_STACK_ALIGN 16UL + +/* CR0 register definitions */ +#define CR0_PG (1UL<<31U) /* paging enable */ +#define CR0_CD (1UL<<30U) /* cache disable */ +#define CR0_NW (1UL<<29U) /* not write through */ +#define CR0_AM (1UL<<18U) /* alignment mask */ +#define CR0_WP (1UL<<16U) /* write protect */ +#define CR0_NE (1UL<<5U) /* numeric error */ +#define CR0_ET (1UL<<4U) /* extension type */ +#define CR0_TS (1UL<<3U) /* task switched */ +#define CR0_EM (1UL<<2U) /* emulation */ +#define CR0_MP (1UL<<1U) /* monitor coprocessor */ +#define CR0_PE (1UL<<0U) /* protected mode enabled */ + +/* CR3 register definitions */ +#define CR3_PWT (1UL<<3U) /* page-level write through */ +#define CR3_PCD (1UL<<4U) /* page-level cache disable */ + +/* CR4 register definitions */ +#define CR4_VME (1UL<<0U) /* virtual 8086 mode extensions */ +#define CR4_PVI (1UL<<1U) /* protected mode virtual interrupts */ +#define CR4_TSD (1UL<<2U) /* time stamp disable */ +#define CR4_DE (1UL<<3U) /* debugging extensions */ +#define CR4_PSE (1UL<<4U) /* page size extensions */ +#define CR4_PAE (1UL<<5U) /* physical address extensions */ +#define CR4_MCE (1UL<<6U) /* machine check enable */ +#define CR4_PGE (1UL<<7U) /* page global enable */ +#define CR4_PCE (1UL<<8U) +/* performance monitoring counter enable */ +#define CR4_OSFXSR (1UL<<9U) /* OS support for FXSAVE/FXRSTOR */ +#define CR4_OSXMMEXCPT (1UL<<10U) +/* OS support for unmasked SIMD floating point exceptions */ +#define CR4_UMIP (1UL<<11U) /* User-Mode Inst prevention */ +#define CR4_LA57 (1UL<<12U) /* 57-bit linear address */ +#define CR4_VMXE (1UL<<13U) /* VMX enable */ +#define CR4_SMXE (1UL<<14U) /* SMX enable */ +#define CR4_FSGSBASE (1UL<<16U) /* RD(FS|GS|FS)BASE inst */ +#define CR4_PCIDE (1UL<<17U) /* PCID enable */ +/* XSAVE and Processor Extended States enable bit */ +#define CR4_OSXSAVE (1UL<<18U) +#define CR4_KL (1UL<<19U) /* KeyLocker enable */ +#define CR4_SMEP (1UL<<20U) +#define CR4_SMAP (1UL<<21U) +#define CR4_PKE (1UL<<22U) /* Protect-key-enable */ +#define CR4_CET (1UL<<23U) /* Control-flow Enforcement Technology enable */ +#define CR4_PKS (1UL<<24U) /* Enable protection keys for supervisor-mode pages */ + +/* XCR0_SSE */ +#define XCR0_SSE (1UL<<1U) +/* XCR0_AVX */ +#define XCR0_AVX (1UL<<2U) +/* XCR0_BNDREGS */ +#define XCR0_BNDREGS (1UL<<3U) +/* XCR0_BNDCSR */ +#define XCR0_BNDCSR (1UL<<4U) +/* According to SDM Vol1 13.3: + * XCR0[63:10] and XCR0[8] are reserved. Executing the XSETBV instruction causes + * a general-protection fault if ECX = 0 and any corresponding bit in EDX:EAX + * is not 0. + */ +#define XCR0_RESERVED_BITS ((~((1UL << 10U) - 1UL)) | (1UL << 8U)) + + +/* + * Entries in the Interrupt Descriptor Table (IDT) + */ +#define IDT_DE 0U /* #DE: Divide Error */ +#define IDT_DB 1U /* #DB: Debug */ +#define IDT_NMI 2U /* Nonmaskable External Interrupt */ +#define IDT_BP 3U /* #BP: Breakpoint */ +#define IDT_OF 4U /* #OF: Overflow */ +#define IDT_BR 5U /* #BR: Bound Range Exceeded */ +#define IDT_UD 6U /* #UD: Undefined/Invalid Opcode */ +#define IDT_NM 7U /* #NM: No Math Coprocessor */ +#define IDT_DF 8U /* #DF: Double Fault */ +#define IDT_FPUGP 9U /* Coprocessor Segment Overrun */ +#define IDT_TS 10U /* #TS: Invalid TSS */ +#define IDT_NP 11U /* #NP: Segment Not Present */ +#define IDT_SS 12U /* #SS: Stack Segment Fault */ +#define IDT_GP 13U /* #GP: General Protection Fault */ +#define IDT_PF 14U /* #PF: Page Fault */ +#define IDT_MF 16U /* #MF: FPU Floating-Point Error */ +#define IDT_AC 17U /* #AC: Alignment Check */ +#define IDT_MC 18U /* #MC: Machine Check */ +#define IDT_XF 19U /* #XF: SIMD Floating-Point Exception */ +#define IDT_VE 20U /* #VE: Virtualization Exception */ + +/*Bits in EFER special registers */ +#define EFER_LMA 0x00000400U /* Long mode active (R) */ + +#define RFLAGS_C (1U<<0U) +#define RFLAGS_P (1U<<2U) +#define RFLAGS_A (1U<<4U) +#define RFLAGS_Z (1U<<6U) +#define RFLAGS_S (1U<<7U) +#define RFLAGS_O (1U<<11U) +#define RFLAGS_VM (1U<<17U) +#define RFLAGS_AC (1U<<18U) + +/* CPU clock frequencies (FSB) */ +#define CPU_FSB_83KHZ 83200 +#define CPU_FSB_100KHZ 99840 +#define CPU_FSB_133KHZ 133200 +#define CPU_FSB_166KHZ 166400 + +/* Time conversions */ +#define CPU_GHZ_TO_HZ 1000000000 +#define CPU_GHZ_TO_KHZ 1000000 +#define CPU_GHZ_TO_MHZ 1000 +#define CPU_MHZ_TO_HZ 1000000 +#define CPU_MHZ_TO_KHZ 1000 + + +/* Number of GPRs saved / restored for guest in VCPU structure */ +#define NUM_GPRS 16U + +#define XSAVE_STATE_AREA_SIZE 4096U +#define XSAVE_LEGACY_AREA_SIZE 512U +#define XSAVE_HEADER_AREA_SIZE 64U +#define XSAVE_EXTEND_AREA_SIZE (XSAVE_STATE_AREA_SIZE - \ + XSAVE_HEADER_AREA_SIZE - \ + XSAVE_LEGACY_AREA_SIZE) +#define XSAVE_COMPACTED_FORMAT (1UL << 63U) + +#define XSAVE_FPU (1UL << 0U) +#define XSAVE_SSE (1UL << 1U) + +#define CPU_CONTEXT_OFFSET_RAX 0U +#define CPU_CONTEXT_OFFSET_RCX 8U +#define CPU_CONTEXT_OFFSET_RDX 16U +#define CPU_CONTEXT_OFFSET_RBX 24U +#define CPU_CONTEXT_OFFSET_RSP 32U +#define CPU_CONTEXT_OFFSET_RBP 40U +#define CPU_CONTEXT_OFFSET_RSI 48U +#define CPU_CONTEXT_OFFSET_RDI 56U +#define CPU_CONTEXT_OFFSET_R8 64U +#define CPU_CONTEXT_OFFSET_R9 72U +#define CPU_CONTEXT_OFFSET_R10 80U +#define CPU_CONTEXT_OFFSET_R11 88U +#define CPU_CONTEXT_OFFSET_R12 96U +#define CPU_CONTEXT_OFFSET_R13 104U +#define CPU_CONTEXT_OFFSET_R14 112U +#define CPU_CONTEXT_OFFSET_R15 120U +#define CPU_CONTEXT_OFFSET_CR0 128U +#define CPU_CONTEXT_OFFSET_CR2 136U +#define CPU_CONTEXT_OFFSET_CR4 144U +#define CPU_CONTEXT_OFFSET_RIP 152U +#define CPU_CONTEXT_OFFSET_RFLAGS 160U +#define CPU_CONTEXT_OFFSET_IA32_SPEC_CTRL 168U +#define CPU_CONTEXT_OFFSET_IA32_EFER 176U +#define CPU_CONTEXT_OFFSET_EXTCTX_START 184U +#define CPU_CONTEXT_OFFSET_CR3 184U +#define CPU_CONTEXT_OFFSET_IDTR 192U +#define CPU_CONTEXT_OFFSET_LDTR 216U + +#ifndef ASSEMBLER + +#define ALL_CPUS_MASK ((1UL << get_pcpu_nums()) - 1UL) +#define AP_MASK (ALL_CPUS_MASK & ~(1UL << BSP_CPU_ID)) + +/** + * + * Identifiers for architecturally defined registers. + * + * These register names is used in condition statement. + * Within the following groups,register name need to be + * kept in order: + * General register names group (CPU_REG_RAX~CPU_REG_R15); + * Non general register names group (CPU_REG_CR0~CPU_REG_GDTR); + * Segement register names group (CPU_REG_ES~CPU_REG_GS). + */ +enum cpu_reg_name { + /* General purpose register layout should align with + * struct acrn_gp_regs + */ + CPU_REG_RAX, + CPU_REG_RCX, + CPU_REG_RDX, + CPU_REG_RBX, + CPU_REG_RSP, + CPU_REG_RBP, + CPU_REG_RSI, + CPU_REG_RDI, + CPU_REG_R8, + CPU_REG_R9, + CPU_REG_R10, + CPU_REG_R11, + CPU_REG_R12, + CPU_REG_R13, + CPU_REG_R14, + CPU_REG_R15, + + CPU_REG_CR0, + CPU_REG_CR2, + CPU_REG_CR3, + CPU_REG_CR4, + CPU_REG_DR7, + CPU_REG_RIP, + CPU_REG_RFLAGS, + /*CPU_REG_NATURAL_LAST*/ + CPU_REG_EFER, + CPU_REG_PDPTE0, + CPU_REG_PDPTE1, + CPU_REG_PDPTE2, + CPU_REG_PDPTE3, + /*CPU_REG_64BIT_LAST,*/ + CPU_REG_ES, + CPU_REG_CS, + CPU_REG_SS, + CPU_REG_DS, + CPU_REG_FS, + CPU_REG_GS, + CPU_REG_LDTR, + CPU_REG_TR, + CPU_REG_IDTR, + CPU_REG_GDTR + /*CPU_REG_LAST*/ +}; + +/**********************************/ +/* EXTERNAL VARIABLES */ +/**********************************/ + +/* In trampoline range, hold the jump target which trampline will jump to */ +extern uint64_t main_entry[1]; +extern uint64_t secondary_cpu_stack[1]; + +/* + * To support per_cpu access, we use a special struct "per_cpu_region" to hold + * the pattern of per CPU data. And we allocate memory for per CPU data + * according to multiple this struct size and pcpu number. + * + * +-------------------+------------------+---+------------------+ + * | percpu for pcpu0 | percpu for pcpu1 |...| percpu for pcpuX | + * +-------------------+------------------+---+------------------+ + * ^ ^ + * | | + * + * + * To access per cpu data, we use: + * per_cpu_base_ptr + sizeof(struct per_cpu_region) * curr_pcpu_id + * + offset_of_member_per_cpu_region + * to locate the per cpu data. + */ + +/* Boot CPU ID */ +#define BSP_CPU_ID 0U + +/** + *The invalid cpu_id (INVALID_CPU_ID) is error + *code for error handling, this means that + *caller can't find a valid physical cpu + *or virtual cpu. + */ +#define INVALID_CPU_ID 0xffffU +/** + *The broadcast id (BROADCAST_CPU_ID) + *used to notify all valid phyiscal cpu + *or virtual cpu. + */ +#define BROADCAST_CPU_ID 0xfffeU + +struct descriptor_table { + uint16_t limit; + uint64_t base; +} __packed; + +/* CPU states defined */ +enum pcpu_boot_state { + PCPU_STATE_RESET = 0U, + PCPU_STATE_INITIALIZING, + PCPU_STATE_RUNNING, + PCPU_STATE_HALTED, + PCPU_STATE_DEAD, +}; + +#define NEED_OFFLINE (1U) +#define NEED_SHUTDOWN_VM (2U) +void make_pcpu_offline(uint16_t pcpu_id); +bool need_offline(uint16_t pcpu_id); + +struct segment_sel { + uint16_t selector; + uint64_t base; + uint32_t limit; + uint32_t attr; +}; +#else /* ASSEMBLER defined */ + +#endif /* ASSEMBLER defined */ + +#endif /* CPU_H */ diff --git a/src/components/implementation/simple_vmm/noop_nf/cpu_caps.h b/src/components/implementation/simple_vmm/noop_nf/cpu_caps.h new file mode 100644 index 0000000000..466a024840 --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/cpu_caps.h @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2018-2022 Intel Corporation. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef CPUINFO_H +#define CPUINFO_H + +#define MAX_PSTATE 20U /* max num of supported Px count */ +#define MAX_CSTATE 8U /* max num of supported Cx count */ +/* We support MAX_CSTATE num of Cx, means have (MAX_CSTATE - 1) Cx entries, + * i.e. supported Cx entry index range from 1 to MAX_CX_ENTRY. + */ +#define MAX_CX_ENTRY (MAX_CSTATE - 1U) + +/* CPUID feature words */ +#define FEAT_1_ECX 0U /* CPUID[1].ECX */ +#define FEAT_1_EDX 1U /* CPUID[1].EDX */ +#define FEAT_7_0_EBX 2U /* CPUID[EAX=7,ECX=0].EBX */ +#define FEAT_7_0_ECX 3U /* CPUID[EAX=7,ECX=0].ECX */ +#define FEAT_7_0_EDX 4U /* CPUID[EAX=7,ECX=0].EDX */ +#define FEAT_8000_0001_ECX 5U /* CPUID[8000_0001].ECX */ +#define FEAT_8000_0001_EDX 6U /* CPUID[8000_0001].EDX */ +#define FEAT_8000_0007_EDX 7U /* CPUID[8000_0007].EDX */ +#define FEAT_8000_0008_EBX 8U /* CPUID[8000_0008].EBX */ +#define FEAT_D_0_EAX 9U /* CPUID[D][0].EAX */ +#define FEAT_D_0_EDX 10U /* CPUID[D][0].EDX */ +#define FEAT_D_1_EAX 11U /* CPUID[D][1].EAX */ +#define FEAT_D_1_ECX 13U /* CPUID[D][1].ECX */ +#define FEAT_D_1_EDX 14U /* CPUID[D][1].EDX */ +#define FEAT_7_2_EDX 15U /* CPUID[EAX=7,ECX=2].EDX */ +#define FEATURE_WORDS 16U + +struct cpuinfo_x86 { + /* SDM 2-2 Vol.4 Table 2-1 uses DisplayFamily_DisplayModel to + * distinguish Processor Families/Processor Number Series. + */ + uint8_t displayfamily, displaymodel; + uint8_t virt_bits; + uint8_t phys_bits; + uint32_t cpuid_level; + uint32_t extended_cpuid_level; + uint64_t physical_address_mask; + uint32_t cpuid_leaves[FEATURE_WORDS]; + char model_name[64]; +}; + +bool has_monitor_cap(void); +bool disable_host_monitor_wait(void); +bool is_apl_platform(void); +bool pcpu_has_cap(uint32_t bit); +bool pcpu_has_vmx_ept_vpid_cap(uint64_t bit_mask); +bool is_apl_platform(void); +bool has_core_cap(uint32_t bit_mask); +bool is_ac_enabled(void); +bool is_gp_enabled(void); +void init_pcpu_capabilities(void); +void init_pcpu_model_name(void); +int32_t detect_hardware_support(void); +struct cpuinfo_x86 *get_pcpu_info(void); + +/* The bits of MSR IA32_CORE_CAPABILITIES */ +#define CORE_CAP_SPLIT_LOCK (1U << 5U) /* support #AC for Split-locked Access */ +#define CORE_CAP_UC_LOCK (1U << 4U) /* support #GP for non-guaranteed-atomic-locked access at Non-WB memory */ + + +#endif /* CPUINFO_H */ diff --git a/src/components/implementation/simple_vmm/noop_nf/cpuid.h b/src/components/implementation/simple_vmm/noop_nf/cpuid.h new file mode 100644 index 0000000000..cd6bfa93ad --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/cpuid.h @@ -0,0 +1,186 @@ +/* + * Copyright (C) 2018-2022 Intel Corporation. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* +* cpuid.h +* +* Created on: Jan 4, 2018 +* Author: don +*/ + +#ifndef CPUID_H_ +#define CPUID_H_ + +/* CPUID bit definitions */ +#define CPUID_ECX_SSE3 (1U<<0U) +#define CPUID_ECX_PCLMUL (1U<<1U) +#define CPUID_ECX_DTES64 (1U<<2U) +#define CPUID_ECX_MONITOR (1U<<3U) +#define CPUID_ECX_DS_CPL (1U<<4U) +#define CPUID_ECX_VMX (1U<<5U) +#define CPUID_ECX_SMX (1U<<6U) +#define CPUID_ECX_EST (1U<<7U) +#define CPUID_ECX_TM2 (1U<<8U) +#define CPUID_ECX_SSSE3 (1U<<9U) +#define CPUID_ECX_CID (1U<<10U) +#define CPUID_ECX_SDBG (1U<<11U) +#define CPUID_ECX_FMA (1U<<12U) +#define CPUID_ECX_CX16 (1U<<13U) +#define CPUID_ECX_ETPRD (1U<<14U) +#define CPUID_ECX_PDCM (1U<<15U) +#define CPUID_ECX_DCA (1U<<18U) +#define CPUID_ECX_SSE4_1 (1U<<19U) +#define CPUID_ECX_SSE4_2 (1U<<20U) +#define CPUID_ECX_x2APIC (1U<<21U) +#define CPUID_ECX_MOVBE (1U<<22U) +#define CPUID_ECX_POPCNT (1U<<23U) +#define CPUID_ECX_AES (1U<<25U) +#define CPUID_ECX_XSAVE (1U<<26U) +#define CPUID_ECX_OSXSAVE (1U<<27U) +#define CPUID_ECX_AVX (1U<<28U) +#define CPUID_ECX_HV (1U<<31U) +#define CPUID_ECX_MWAIT (1U<<0U) +#define CPUID_ECX_MWAIT_INT (1U<<1U) +#define CPUID_EDX_FPU (1U<<0U) +#define CPUID_EDX_VME (1U<<1U) +#define CPUID_EDX_DE (1U<<2U) +#define CPUID_EDX_PSE (1U<<3U) +#define CPUID_EDX_TSC (1U<<4U) +#define CPUID_EDX_MSR (1U<<5U) +#define CPUID_EDX_PAE (1U<<6U) +#define CPUID_EDX_MCE (1U<<7U) +#define CPUID_EDX_CX8 (1U<<8U) +#define CPUID_EDX_APIC (1U<<9U) +#define CPUID_EDX_SEP (1U<<11U) +#define CPUID_EDX_MTRR (1U<<12U) +#define CPUID_EDX_PGE (1U<<13U) +#define CPUID_EDX_MCA (1U<<14U) +#define CPUID_EDX_CMOV (1U<<15U) +#define CPUID_EDX_PAT (1U<<16U) +#define CPUID_EDX_PSE36 (1U<<17U) +#define CPUID_EDX_PSN (1U<<18U) +#define CPUID_EDX_CLF (1U<<19U) +#define CPUID_EDX_DTES (1U<<21U) +#define CPUID_EDX_ACPI (1U<<22U) +#define CPUID_EDX_MMX (1U<<23U) +#define CPUID_EDX_FXSR (1U<<24U) +#define CPUID_EDX_SSE (1U<<25U) +#define CPUID_EDX_SSE2 (1U<<26U) +#define CPUID_EDX_SS (1U<<27U) +#define CPUID_EDX_HTT (1U<<28U) +#define CPUID_EDX_TM1 (1U<<29U) +#define CPUID_EDX_IA64 (1U<<30U) +#define CPUID_EDX_PBE (1U<<31U) + +/* CPUID.06H:EAX.DTHERM */ +#define CPUID_EAX_DTHERM (1U<<0U) +/* CPUID.06H:EAX.HWP */ +#define CPUID_EAX_HWP (1U<<7U) +/* CPUID.06H:EAX.HWP_Notification */ +#define CPUID_EAX_HWP_N (1U<<8U) +/* CPUID.06H:EAX.HWP_Activity_Window */ +#define CPUID_EAX_HWP_AW (1U<<9U) +/* CPUID.06H:EAX.HWP_Energy_Performance_Preference */ +#define CPUID_EAX_HWP_EPP (1U<<10U) +/* CPUID.06H:EAX.HWP_Package_Level_Request */ +#define CPUID_EAX_HWP_PLR (1U<<11U) +/* CPUID.06H:ECX.Hardware_Coordination_Feedback_Capability */ +#define CPUID_ECX_HCFC (1U<<0U) +/* CPUID.07H:EBX.FSGSBASE*/ +#define CPUID_EBX_FSGSBASE (1U<<0U) +/* CPUID.07H:EBX.TSC_ADJUST*/ +#define CPUID_EBX_TSC_ADJ (1U<<1U) +/* CPUID.07H:EBX.SGX */ +#define CPUID_EBX_SGX (1U<<2U) +/* CPUID.07H:EBX.SMEP*/ +#define CPUID_EBX_SMEP (1U<<7U) +/* CPUID.07H:EBX.MPX */ +#define CPUID_EBX_MPX (1U<<14U) +/* CPUID.07H:EBX.SMAP*/ +#define CPUID_EBX_SMAP (1U<<20U) +/* CPUID.07H:ECX.UMIP */ +#define CPUID_ECX_UMIP (1U<<2U) +/* CPUID.07H:ECX.PKE */ +#define CPUID_ECX_PKE (1U<<3U) +/* CPUID.07H:ECX.WAITPKG */ +#define CPUID_ECX_WAITPKG (1U<<5U) +/* CPUID.07H:ECX.CET_SS */ +#define CPUID_ECX_CET_SS (1U<<7U) +/* CPUID.07H:ECX.LA57 */ +#define CPUID_ECX_LA57 (1U<<16U) +/* CPUID.07H:ECX.SGX_LC*/ +#define CPUID_ECX_SGX_LC (1U<<30U) +/* CPUID.07H:ECX.PKS*/ +#define CPUID_ECX_PKS (1U<<31U) +/* CPUID.07H:EDX.CET_IBT */ +#define CPUID_EDX_CET_IBT (1U<<20U) +/* CPUID.07H:EDX.IBRS_IBPB*/ +#define CPUID_EDX_IBRS_IBPB (1U<<26U) +/* CPUID.07H:EDX.STIBP*/ +#define CPUID_EDX_STIBP (1U<<27U) +/* CPUID.80000001H:EDX.Page1GB*/ +#define CPUID_EDX_PAGE1GB (1U<<26U) +/* CPUID.07H:EBX.INVPCID*/ +#define CPUID_EBX_INVPCID (1U<<10U) +/* CPUID.07H:EBX.PQM */ +#define CPUID_EBX_PQM (1U<<12U) +/* CPUID.07H:EBX.PQE */ +#define CPUID_EBX_PQE (1U<<15U) +/* CPUID.07H:EBX.INTEL_PROCESSOR_TRACE */ +#define CPUID_EBX_PROC_TRC (1U<<25U) +/* CPUID.01H:ECX.PCID*/ +#define CPUID_ECX_PCID (1U<<17U) +/* CPUID.0DH.EAX.XCR0_BNDREGS */ +#define CPUID_EAX_XCR0_BNDREGS (1U<<3U) +/* CPUID.0DH.EAX.XCR0_BNDCSR */ +#define CPUID_EAX_XCR0_BNDCSR (1U<<4U) +/* CPUID.0DH.ECX.CET_U_STATE */ +#define CPUID_ECX_CET_U_STATE (1U<<11U) +/* CPUID.0DH.ECX.CET_S_STATE */ +#define CPUID_ECX_CET_S_STATE (1U<<12U) +/* CPUID.12H.EAX.SGX1 */ +#define CPUID_EAX_SGX1 (1U<<0U) +/* CPUID.12H.EAX.SGX2 */ +#define CPUID_EAX_SGX2 (1U<<1U) +/* CPUID.19H.EBX.KL_AES_ENABLED */ +#define CPUID_EBX_KL_AES_EN (1U<<0U) +/* CPUID.19H.EBX.KL_BACKUP_MSR */ +#define CPUID_EBX_KL_BACKUP_MSR (1U<<4U) +/* CPUID.19H.ECX.KL_NOBACKUP */ +#define CPUID_ECX_KL_NOBACKUP (1U<<0U) +/* CPUID.19H.ECX.KL_RANDOM_KS */ +#define CPUID_ECX_KL_RANDOM_KS (1U<<1U) +/* CPUID.80000001H.EDX.XD_BIT_AVAILABLE */ +#define CPUID_EDX_XD_BIT_AVIL (1U<<20U) + +/* CPUID source operands */ +#define CPUID_VENDORSTRING 0U +#define CPUID_FEATURES 1U +#define CPUID_TLB 2U +#define CPUID_SERIALNUM 3U +#define CPUID_EXTEND_FEATURE 7U +#define CPUID_XSAVE_FEATURES 0xDU +#define CPUID_RDT_ALLOCATION 0x10U +#define CPUID_MAX_EXTENDED_FUNCTION 0x80000000U +#define CPUID_EXTEND_FUNCTION_1 0x80000001U +#define CPUID_EXTEND_FUNCTION_2 0x80000002U +#define CPUID_EXTEND_FUNCTION_3 0x80000003U +#define CPUID_EXTEND_FUNCTION_4 0x80000004U +#define CPUID_EXTEND_INVA_TSC 0x80000007U +#define CPUID_EXTEND_ADDRESS_SIZE 0x80000008U + +static inline void cpuid_subleaf(uint32_t leaf, uint32_t subleaf, + uint32_t *eax, uint32_t *ebx, + uint32_t *ecx, uint32_t *edx) +{ + /* Execute CPUID instruction and save results */ + asm volatile("cpuid":"=a"(*eax), "=b"(*ebx), + "=c"(*ecx), "=d"(*edx) + : "a" (leaf), "c" (subleaf) + : "memory"); +} + +#endif /* CPUID_H_ */ diff --git a/src/components/implementation/simple_vmm/noop_nf/devices/serial/serial.c b/src/components/implementation/simple_vmm/noop_nf/devices/serial/serial.c new file mode 100644 index 0000000000..41044b056d --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/devices/serial/serial.c @@ -0,0 +1,56 @@ +#include "serial.h" + +static u8_t serial_data[0x08]; +static u8_t send_intr_enable = 0; + +void +serial_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu) +{ + assert(port <= SERIAL_PORT_MAX && port >= SERIAL_PORT_MIN); + assert(sz == IO_BYTE); + + if (dir == IO_IN) { + vcpu->shared_region->ax = serial_data[port - SERIAL_PORT_MIN]; + } else if (dir == IO_OUT) { + serial_data[port - SERIAL_PORT_MIN] = (u8_t)vcpu->shared_region->ax; + switch (port) + { + + case SERIAL_PORT1: + printc("%c", (u8_t)vcpu->shared_region->ax); + if (send_intr_enable) { + /* + * TODO: correctly handle serial output(eg: multiple vcpu case) and inject serial interrupt, + * with io apic, 34 is serial8250_interrupt vector. + */ +#if VMX_SUPPORT_POSTED_INTR + vlapic_set_intr(vcpu, 34, 0); +#else + lapic_intr_inject(vcpu, 34, 1); +#endif + serial_data[SERIAL_IIR - SERIAL_PORT_MIN] = 0x2; + serial_data[MODEM_STATUS_REGISTER - SERIAL_PORT_MIN] = 0x20; + serial_data[SERIAL_LSR - SERIAL_PORT_MIN] = 0x60; + } + break; + case SERIAL_IER: + if (0x2 & (u8_t)vcpu->shared_region->ax) { + send_intr_enable = 1; + } else { + send_intr_enable = 0; + } + break; + } + } else { + VM_PANIC(vcpu); + } + + return; +} + +static void __attribute__((constructor)) +init(void) +{ + memset(&serial_data, 0, sizeof(serial_data)); + serial_data[SERIAL_LSR - SERIAL_PORT_MIN] = 0x60; +} diff --git a/src/components/implementation/simple_vmm/noop_nf/devices/serial/serial.h b/src/components/implementation/simple_vmm/noop_nf/devices/serial/serial.h new file mode 100644 index 0000000000..46ac88dd1e --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/devices/serial/serial.h @@ -0,0 +1,17 @@ +#pragma once +#include +#include + +/* Reference: https://www.lammertbies.nl/comm/info/serial-uart */ +#define SERIAL_PORT1 0x3F8 +#define SERIAL_IER 0x3F9 +#define SERIAL_IIR 0x3FA +#define SERIAL_LCR 0x3FB +#define SERIAL_MCR 0x3FC +#define SERIAL_LSR 0x3FD +#define MODEM_STATUS_REGISTER 0x3FE + +#define SERIAL_PORT_MIN SERIAL_PORT1 +#define SERIAL_PORT_MAX MODEM_STATUS_REGISTER + +void serial_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu); diff --git a/src/components/implementation/simple_vmm/noop_nf/devices/vpci/virtio_net_io.c b/src/components/implementation/simple_vmm/noop_nf/devices/vpci/virtio_net_io.c new file mode 100644 index 0000000000..3d561a5036 --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/devices/vpci/virtio_net_io.c @@ -0,0 +1,693 @@ +/*- + * Copyright (c) 2011 NetApp, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ +#include +#include +#include +#include "virtio_net_io.h" +#include "vpci.h" +#include "virtio_ring.h" +#include +#include +#include +#include +#include +#include +#include +#include + +/* TODO: remove this warning flag when virtio-net is done */ +#pragma GCC diagnostic ignored "-Wunused-but-set-variable" + +static struct virtio_net_io_reg virtio_net_regs; +static struct virtio_queue virtio_queues[2]; +struct virtio_vq_info virtio_net_vqs[VIRTIO_NET_MAXQ - 1]; + +static unsigned char icmp_reply[] = { + /* TODO: remove icmp reply and process nic input from nic component */ +}; + +static inline int +vq_ring_ready(struct virtio_vq_info *vq) +{ + return ((vq->flags & VQ_ALLOC) == VQ_ALLOC); +} + +static inline int +vq_has_descs(struct virtio_vq_info *vq) +{ + int ret = 0; + if (vq_ring_ready(vq) && vq->last_avail != vq->avail->idx) { + if (unlikely((u16_t)((unsigned int)vq->avail->idx - vq->last_avail) > vq->qsize)) { + printc("no valid descriptor\n"); + assert(0); + } + else + ret = 1; + } + return ret; + +} + +void * +paddr_guest2host(uintptr_t gaddr, struct vmrt_vm_comp *vm) +{ + void *va = GPA2HVA(gaddr, vm); + return va; +} + +#define roundup2(x, y) (((x)+((y)-1))&(~((y)-1))) +#define mb() ({ asm volatile("mfence" ::: "memory"); (void)0; }) + +void +vq_endchains(struct vmrt_vm_vcpu *vcpu, struct virtio_vq_info *vq, int used_all_avail) +{ + u16_t event_idx, new_idx, old_idx; + int intr; + + if (unlikely(!vq || !vq->used)) + return; + + old_idx = vq->save_used; + vq->save_used = new_idx = vq->used->idx; + + intr = new_idx != old_idx && + !(vq->avail->flags & VRING_AVAIL_F_NO_INTERRUPT); + + if (intr) { + virtio_net_regs.header.ISR = 1; + /* TODO: 57 is virtio-net interrupt without io apic, 33 is with io apic */ +#if VMX_SUPPORT_POSTED_INTR + vlapic_set_intr(vcpu, 33, 0); +#else + lapic_intr_inject(vcpu, 33, 0); +#endif + } + +} + +static inline struct iovec * +rx_iov_trim(struct iovec *iov, int *niov, size_t tlen) +{ + struct iovec *riov; + + iov[0].iov_len -= tlen; + + iov[0].iov_base = (void *)((uintptr_t)iov[0].iov_base + tlen); + riov = &iov[0]; + + return riov; +} + +static void +virtio_vq_init(struct vmrt_vm_vcpu *vcpu, int nr_queue, u32_t pfn) +{ + struct virtio_vq_info *vq; + u64_t phys; + size_t size; + char *vb; + + vq = &virtio_net_vqs[nr_queue]; + vq->pfn = pfn; + phys = (u64_t)pfn << VRING_PAGE_BITS; + size = vring_size(vq->qsize, VIRTIO_PCI_VRING_ALIGN); + vb = paddr_guest2host(phys, vcpu->vm); + if (!vb) + goto error; + + /* First page(s) are descriptors... */ + vq->desc = (struct vring_desc *)vb; + vb += vq->qsize * sizeof(struct vring_desc); + + /* ... immediately followed by "avail" ring (entirely u16_t's) */ + vq->avail = (struct vring_avail *)vb; + vb += (2 + vq->qsize + 1) * sizeof(u16_t); + + /* Then it's rounded up to the next page... */ + vb = (char *)roundup2((uintptr_t)vb, VIRTIO_PCI_VRING_ALIGN); + + /* ... and the last page(s) are the used ring. */ + vq->used = (struct vring_used *)vb; + + /* Start at 0 when we use it. */ + vq->last_avail = 0; + vq->save_used = 0; + + /* Mark queue as allocated after initialization is complete. */ + mb(); + vq->flags = VQ_ALLOC; + vq->vcpu = vcpu; + + return; + +error: + vq->flags = 0; + printc("%s: vq enable failed\n", __func__); + assert(0); +} + +static inline int +_vq_record(int i, volatile struct vring_desc *vd, + struct iovec *iov, int n_iov, u16_t *flags, struct vmrt_vm_vcpu *vcpu) { + + void *host_addr; + + if (i >= n_iov) { + printc("Number of descs is more than iov slots\n"); + assert(0); + } + + host_addr = paddr_guest2host(vd->addr, vcpu->vm); + if (unlikely(!host_addr)) { + printc("Invalid host addr\n"); + assert(0); + } + iov[i].iov_base = host_addr; + iov[i].iov_len = vd->len; + if (unlikely(flags != NULL)) + flags[i] = vd->flags; + + return 0; +} + +static void +dump_packet(char *p, u16_t sz) +{ + for (int i = 0; i < sz; i++) { + if (i > 0 && (i % 8 == 0)) printc("\n"); + u8_t c = p[i]; + printc("%02x ", c); + } + printc("\n"); +} + +int +vq_getchain(struct vmrt_vm_vcpu *vcpu, struct virtio_vq_info *vq, u16_t *pidx, + struct iovec *iov, int n_iov, u16_t *flags) +{ + int i; + unsigned int ndesc, n_indir; + unsigned int idx, next; + + volatile struct vring_desc *vdir, *vindir, *vp; + /* + * Note: it's the responsibility of the guest not to + * update vq->avail->idx until all of the descriptors + * the guest has written are valid (including all their + * next fields and vd_flags). + * + * Compute (last_avail - idx) in integers mod 2**16. This is + * the number of descriptors the device has made available + * since the last time we updated vq->last_avail. + * + * We just need to do the subtraction as an unsigned int, + * then trim off excess bits. + */ + idx = vq->last_avail; + ndesc = (u16_t)((unsigned int)vq->avail->idx - idx); + if (unlikely(ndesc == 0)) + return 0; + if (unlikely(ndesc > vq->qsize)) { + printc("ndesc (%u) out of range, driver confused?\r\n", + (unsigned int)ndesc); + assert(0); + } + + /* + * Now count/parse "involved" descriptors starting from + * the head of the chain. + * + * To prevent loops, we could be more complicated and + * check whether we're re-visiting a previously visited + * index, but we just abort if the count gets excessive. + */ + *pidx = next = vq->avail->ring[idx & (vq->qsize - 1)]; + vq->last_avail++; + for (i = 0; i < VQ_MAX_DESCRIPTORS; next = vdir->next) { + if (next >= vq->qsize) { + printc("tx: descriptor index %u out of range, " + "driver confused?\r\n", + next); + assert(0); + } + vdir = &vq->desc[next]; + if (likely((vdir->flags & VRING_DESC_F_INDIRECT) == 0)) { + if (unlikely(_vq_record(i, vdir, iov, n_iov, flags, vcpu))) { + printc("mapping to host failed\r\n"); + assert(0); + } + i++; + } else { + printc("descriptor has forbidden INDIRECT flag, " + "driver confused?\r\n"); + assert(0); + } + if ((vdir->flags & VRING_DESC_F_NEXT) == 0) + return i; + } + + /* code should not come here */ + printc("descriptor loop? count > %d - driver confused?\r\n", i); + assert(0); + return -1; +} + +void +vq_relchain(struct virtio_vq_info *vq, u16_t idx, u32_t iolen) +{ + u16_t uidx, mask; + volatile struct vring_used *vuh; + volatile struct vring_used_elem *vue; + + /* + * Notes: + * - mask is N-1 where N is a power of 2 so computes x % N + * - vuh points to the "used" data shared with guest + * - vue points to the "used" ring entry we want to update + * - head is the same value we compute in vq_iovecs(). + * + * (I apologize for the two fields named idx; the + * virtio spec calls the one that vue points to, "id"...) + */ + mask = vq->qsize - 1; + vuh = vq->used; + + uidx = vuh->idx; + vue = &vuh->ring[uidx++ & mask]; + vue->id = idx; + vue->len = iolen; + vuh->idx = uidx; +} + +void +vq_retchain(struct virtio_vq_info *vq) +{ + vq->last_avail--; +} + +void +virtio_net_rcv_one_pkt(void *data, int pkt_len) +{ + struct iovec iov[VIRTIO_NET_MAXSEGS], *riov; + struct virtio_vq_info *vq; + struct vmrt_vm_vcpu *vcpu; + void *vrx; + int n; + u16_t idx; + int ret; + + vq = &virtio_net_vqs[VIRTIO_NET_RXQ]; + + vcpu = vq->vcpu; + + if (unlikely(!vq_has_descs(vq))) { + return; + } + + n = vq_getchain(vcpu, vq, &idx, iov, VIRTIO_NET_MAXSEGS, NULL); + + // if (unlikely (n < 1 || n >= VIRTIO_NET_MAXSEGS )) { + // printc("vtnet: virtio_net_tap_rx: vq_getchain = %d\n", n); + // assert(0); + // } + + vrx = iov[0].iov_base; + /* every packet needs to be proceeded by a virtio_net_rxhdr header space */ + riov = rx_iov_trim(iov, &n, sizeof(struct virtio_net_rxhdr)); + + // assert(iov[0].iov_len >= (size_t)pkt_len); + + // memcpy(iov[0].iov_base, data, pkt_len); + memcpy_fast(iov[0].iov_base, data, pkt_len); + + memset(vrx, 0, sizeof(struct virtio_net_rxhdr)); + + vq_relchain(vq, idx, pkt_len + sizeof(struct virtio_net_rxhdr)); + + vq_endchains(vcpu, vq, 1); + return; +} + +void +virtio_net_send_one_pkt(void *data, u16_t *pkt_len) +{ + struct virtio_vq_info *vq = &virtio_net_vqs[VIRTIO_NET_TXQ]; + struct iovec iov[VIRTIO_NET_MAXSEGS]; + struct vmrt_vm_vcpu *vcpu; + int i, n; + int plen, tlen; + u16_t idx; + + while (!vq_has_descs(vq)) { + *pkt_len = 0; + return; + // sched_thd_block(0); + } + vcpu = vq->vcpu; + + memset(&iov, 0, sizeof(iov)); + n = vq_getchain(vcpu, vq, &idx, iov, VIRTIO_NET_MAXSEGS, NULL); + if (unlikely(n < 1 || n >= VIRTIO_NET_MAXSEGS)) { + printc("vtnet: virtio_net_proctx: vq_getchain = %d\n", n); + assert(0); + } + + plen = 0; + tlen = iov[0].iov_len; + assert(n == 2); + + plen += iov[1].iov_len; + tlen += iov[1].iov_len; + + // memcpy(data, iov[1].iov_base, iov[1].iov_len); + memcpy_fast(data, iov[1].iov_base, iov[1].iov_len); + + *pkt_len = plen; + vq_relchain(vq, idx, tlen); + + vq_endchains(vcpu, vq, 1); + return; +} + +static void +virtio_net_outb(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + u8_t val = vcpu->shared_region->ax; + + switch (port_id) + { + case VIRTIO_NET_DEV_STATUS: + virtio_net_regs.header.dev_status = val; + break; + default: + VM_PANIC(vcpu); + break; + } + return; +} + +#define REAL_NIC 0 + +#if REAL_NIC +static u8_t virtio_net_mac[6] = {0x6c, 0xfe, 0x54, 0x40, 0x41, 0x01}; +#else +static u8_t virtio_net_mac[6] = {0x10, 0x10, 0x10, 0x10, 0x10, 0x11}; +#endif + +static void +virtio_net_inb(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + u32_t bdf = 0; + + switch (port_id) + { + case VIRTIO_NET_DEV_STATUS: + vcpu->shared_region->ax = virtio_net_regs.header.dev_status; + break; + case VIRTIO_NET_ISR: + vcpu->shared_region->ax = virtio_net_regs.header.ISR; + virtio_net_regs.header.ISR = 0; + break; + case VIRTIO_NET_STATUS: + vcpu->shared_region->ax = virtio_net_regs.config_reg.status; + break; + case VIRTIO_NET_STATUS_H: + vcpu->shared_region->ax = virtio_net_regs.config_reg.status >> 8; + break; + /* TODO: read mac address from virtio-net config space */ + case VIRTIO_NET_MAC: + vcpu->shared_region->ax = virtio_net_mac[0]; + break; + case VIRTIO_NET_MAC1: + vcpu->shared_region->ax = virtio_net_mac[1]; + break; + case VIRTIO_NET_MAC2: + vcpu->shared_region->ax = virtio_net_mac[2]; + break; + case VIRTIO_NET_MAC3: + vcpu->shared_region->ax = virtio_net_mac[3]; + break; + case VIRTIO_NET_MAC4: + vcpu->shared_region->ax = virtio_net_mac[4]; + break; + case VIRTIO_NET_MAC5: + vcpu->shared_region->ax = virtio_net_mac[5]; + break; + default: + VM_PANIC(vcpu); + break; + } +} + +static void +virtio_net_inw(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + switch (port_id) + { + case VIRTIO_NET_QUEUE_SIZE: + vcpu->shared_region->ax = virtio_queues[virtio_net_regs.header.queue_select].queue_sz; + break; + case VIRTIO_NET_QUEUE_SELECT: + vcpu->shared_region->ax = virtio_net_regs.header.queue_select; + break; + case VIRTIO_NET_QUEUE_NOTIFY: + VM_PANIC(vcpu); + vcpu->shared_region->ax = virtio_net_regs.header.queue_notify; + break; + default: + VM_PANIC(vcpu); + break; + } +} + +static void +virtio_net_outw(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + u16_t val = vcpu->shared_region->ax; + + switch (port_id) + { + case VIRTIO_NET_QUEUE_SELECT: + virtio_net_regs.header.queue_select = val; + break; + case VIRTIO_NET_QUEUE_NOTIFY: + if (val == VIRTIO_NET_TXQ) { + // sched_thd_yield(); + // sched_thd_wakeup(11); + } + virtio_net_regs.header.queue_notify = val; + break; + default: + VM_PANIC(vcpu); + break; + } +} + +static void +virtio_net_outl(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + u32_t val = vcpu->shared_region->ax; + u64_t tmp = val; + + switch (port_id) + { + case VIRTIO_NET_GUEST_FEATURES: + virtio_net_regs.header.guest_features = val; + break; + case VIRTIO_NET_QUEUE_ADDR: + virtio_queues[virtio_net_regs.header.queue_select].queue = (void *)tmp; + virtio_vq_init(vcpu, virtio_net_regs.header.queue_select, val); + break; + default: + VM_PANIC(vcpu); + break; + } + return; +} + +static void +virtio_net_inl(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + switch (port_id) + { + case VIRTIO_NET_DEV_FEATURES: + vcpu->shared_region->ax = virtio_net_regs.header.dev_features; + break; + case VIRTIO_NET_GUEST_FEATURES: + vcpu->shared_region->ax = virtio_net_regs.header.guest_features; + break; + case VIRTIO_NET_QUEUE_ADDR: + vcpu->shared_region->ax = virtio_net_regs.header.queue_addr; + break; + default: + VM_PANIC(vcpu); + break; + } +} + +void +virtio_net_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu) +{ + if (dir == IO_IN) { + switch (sz) + { + case IO_BYTE: + virtio_net_inb(port, vcpu); + break; + case IO_WORD: + virtio_net_inw(port, vcpu); + break; + case IO_LONG: + virtio_net_inl(port, vcpu); + break; + default: + VM_PANIC(vcpu); + } + } else { + switch (sz) + { + case IO_BYTE: + virtio_net_outb(port, vcpu); + break; + case IO_WORD: + virtio_net_outw(port, vcpu); + break; + case IO_LONG: + virtio_net_outl(port, vcpu); + break; + default: + VM_PANIC(vcpu); + } + } +} + +void +virtio_net_io_init(void) +{ + memset(&virtio_net_regs, 0, sizeof(virtio_net_regs)); + memset(&virtio_queues, 0, sizeof(virtio_queues)); + memset(&virtio_net_vqs, 0, sizeof(virtio_net_vqs)); + + virtio_net_regs.header.dev_features |= (1 << VIRTIO_NET_F_STATUS); + virtio_net_regs.header.dev_features |= (1 << VIRTIO_NET_F_MAC); + virtio_net_regs.config_reg.status = VIRTIO_NET_S_LINK_UP; + virtio_queues[0].queue_sz = VQ_MAX_DESCRIPTORS; + virtio_queues[1].queue_sz = VQ_MAX_DESCRIPTORS; + virtio_net_vqs[VIRTIO_NET_RX].qsize = VQ_MAX_DESCRIPTORS; + virtio_net_vqs[VIRTIO_NET_TX].qsize = VQ_MAX_DESCRIPTORS; +} + +struct tcp_udp_port +{ + u16_t src_port; + u16_t dst_port; +} __attribute__((packed)); + +void +virtio_tx_task(void *data) +{ + struct virtio_vq_info *vq; + struct iovec iov[VIRTIO_NET_MAXSEGS]; + struct vmrt_vm_vcpu *vcpu; + int i, n; + int plen, tlen; + u16_t idx; + char *pkt; + struct netshmem_pkt_buf *tx_obj; + shm_bm_objid_t tx_pktid; + struct nf_pkt_meta_data buf; + + struct nf_session *session = NULL; + shm_bm_t tx_shmemd = 0; + u16_t svc_id = 0; + + struct iphdr *iphdr = NULL; + struct tcp_udp_port *port; + + vq = &virtio_net_vqs[VIRTIO_NET_TXQ]; + while (1) { + while (!vq_has_descs(vq)) { + sched_thd_yield(); + } + + vcpu = vq->vcpu; + + memset(&iov, 0, sizeof(iov)); + + n = vq_getchain(vcpu, vq, &idx, iov, VIRTIO_NET_MAXSEGS, NULL); + if (unlikely(n < 1 || n >= VIRTIO_NET_MAXSEGS)) { + printc("vtnet: virtio_net_proctx: vq_getchain = %d\n", n); + assert(0); + } + + plen = 0; + tlen = iov[0].iov_len; + assert(n == 2); + + plen += iov[1].iov_len; + tlen += iov[1].iov_len; + + pkt = iov[1].iov_base; + + iphdr = (struct iphdr *) (pkt + ETH_HLEN); + port = (struct tcp_udp_port *)((char *)pkt + ETH_HLEN + iphdr->ihl * 4); + u16_t svc_id = ntohs(port->dst_port); + + session = get_nf_session(svc_id); + + tx_shmemd = session->tx_shmemd; + if (unlikely(!tx_shmemd)) { + svc_id = 0; + session = get_nf_session(svc_id); + tx_shmemd = session->tx_shmemd; + } + + tx_obj = shm_bm_alloc_net_pkt_buf(tx_shmemd, &tx_pktid); + + if (likely(tx_obj != NULL)){ + buf.objid = tx_pktid; + buf.pkt_len = plen; + buf.obj = tx_obj; + + // memcpy(netshmem_get_data_buf(tx_obj), pkt, plen); + memcpy_fast(netshmem_get_data_buf(tx_obj), pkt, plen); + + if ((unlikely(!nf_tx_ring_buf_enqueue(&(session->nf_tx_ring_buf), &buf)))){ + shm_bm_free_net_pkt_buf(tx_obj); + } else { + // sched_thd_wakeup(session->tx_thd); + // sync_sem_give(&session->tx_sem); + } + } else { + printc("cannot allocate objects\n"); + assert(0); + } + + vq_relchain(vq, idx, tlen); + vq_endchains(vcpu, vq, 1); + } +} diff --git a/src/components/implementation/simple_vmm/noop_nf/devices/vpci/virtio_net_io.h b/src/components/implementation/simple_vmm/noop_nf/devices/vpci/virtio_net_io.h new file mode 100644 index 0000000000..ba50bb2b77 --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/devices/vpci/virtio_net_io.h @@ -0,0 +1,144 @@ +#pragma once + +#include +#include + +#define VIRTIO_NET_IO_ADDR 0x4000 + +#define VIRTIO_NET_DEV_FEATURES (VIRTIO_NET_IO_ADDR + 0) +#define VIRTIO_NET_GUEST_FEATURES (VIRTIO_NET_IO_ADDR + 4) +#define VIRTIO_NET_QUEUE_ADDR (VIRTIO_NET_IO_ADDR + 8) +#define VIRTIO_NET_QUEUE_SIZE (VIRTIO_NET_IO_ADDR + 12) +#define VIRTIO_NET_QUEUE_SELECT (VIRTIO_NET_IO_ADDR + 14) +#define VIRTIO_NET_QUEUE_NOTIFY (VIRTIO_NET_IO_ADDR + 16) +#define VIRTIO_NET_DEV_STATUS (VIRTIO_NET_IO_ADDR + 18) +#define VIRTIO_NET_ISR (VIRTIO_NET_IO_ADDR + 19) + +#define VIRTIO_NET_MAC (VIRTIO_NET_IO_ADDR + 20) +#define VIRTIO_NET_MAC1 (VIRTIO_NET_IO_ADDR + 21) +#define VIRTIO_NET_MAC2 (VIRTIO_NET_IO_ADDR + 22) +#define VIRTIO_NET_MAC3 (VIRTIO_NET_IO_ADDR + 23) +#define VIRTIO_NET_MAC4 (VIRTIO_NET_IO_ADDR + 24) +#define VIRTIO_NET_MAC5 (VIRTIO_NET_IO_ADDR + 25) + +#define VIRTIO_NET_STATUS (VIRTIO_NET_IO_ADDR + 26) +#define VIRTIO_NET_STATUS_H (VIRTIO_NET_IO_ADDR + 27) + +#define VIRTIO_NET_F_CSUM (0) +#define VIRTIO_NET_F_GUEST_CSUM (1) +#define VIRTIO_NET_F_MAC (5) +#define VIRTIO_NET_F_GSO (6) +#define VIRTIO_NET_F_GUEST_TSO4 (7) +#define VIRTIO_NET_F_GUEST_TSO6 (8) +#define VIRTIO_NET_F_GUEST_ECN (9) +#define VIRTIO_NET_F_GUEST_UFO (10) +#define VIRTIO_NET_F_HOST_TSO4 (11) +#define VIRTIO_NET_F_HOST_TSO6 (12) +#define VIRTIO_NET_F_HOST_ECN (13) +#define VIRTIO_NET_F_HOST_UFO (14) +#define VIRTIO_NET_F_MRG_RXBUF (15) +#define VIRTIO_NET_F_STATUS (16) +#define VIRTIO_NET_F_CTRL_VQ (17) +#define VIRTIO_NET_F_CTRL_RX (18) +#define VIRTIO_NET_F_CTRL_VLAN (19) +#define VIRTIO_NET_F_GUEST_ANNOUNCE (21) + +#define VIRTIO_NET_RINGSZ 512 +#define VIRTIO_NET_MAXSEGS 32 +#define VQ_MAX_DESCRIPTORS 512 + +struct virtio_header { + u32_t dev_features; + u32_t guest_features; + u32_t queue_addr; + u16_t queue_size; + u16_t queue_select; + u16_t queue_notify; + u8_t dev_status; + u8_t ISR; +} __attribute__((packed)); + +struct virtio_queue { + u16_t queue_sz; + void *queue; +}; + +#define VIRTIO_NET_S_LINK_UP 1 +#define VIRTIO_NET_S_ANNOUNCE 2 + +#define VIRTIO_NET_RX 0 +#define VIRTIO_NET_TX 1 + +#define VIRTIO_NET_RXQ 0 +#define VIRTIO_NET_TXQ 1 +#define VIRTIO_NET_CTLQ 2 + +#define VIRTIO_NET_MAXQ 3 + +#define VRING_PAGE_BITS 12 +#define VIRTIO_PCI_VRING_ALIGN 4096 + +#define VQ_ALLOC 0x01 /* set once we have a pfn */ +#define VQ_BROKED 0x02 + +struct virtio_net_config { + u8_t mac[6]; + u16_t status; +} __attribute__((packed)); + +struct virtio_net_io_reg { + struct virtio_header header; + struct virtio_net_config config_reg; +} __attribute__((packed)); + +// struct iovec +// { +// void *iov_base; /* Pointer to data. */ +// size_t iov_len; /* Length of data. */ +// }; + +struct virtio_vq_info { + u16_t qsize; /* size of this queue (a power of 2) */ + void (*notify)(void *, struct virtio_vq_info *); + /* called instead of notify, if not NULL */ + + u16_t num; /* the num'th queue in the virtio_base */ + + u16_t flags; /* flags (see above) */ + u16_t last_avail; /* a recent value of avail->idx */ + u16_t save_used; /* saved used->idx; see vq_endchains */ + u16_t msix_idx; /* MSI-X index, or VIRTIO_MSI_NO_VECTOR */ + + u32_t pfn; /* PFN of virt queue (not shifted!) */ + + volatile struct vring_desc *desc; + /* descriptor array */ + volatile struct vring_avail *avail; + /* the "avail" ring */ + volatile struct vring_used *used; + /* the "used" ring */ + + u32_t gpa_desc[2]; /* gpa of descriptors */ + u32_t gpa_avail[2]; /* gpa of avail_ring */ + u32_t gpa_used[2]; /* gpa of used_ring */ + int enabled; /* whether the virtqueue is enabled */ + + /* each vq is bounded to a vcpu */ + struct vmrt_vm_vcpu *vcpu; +}; + +/* + * Fixed network header size + */ +struct virtio_net_rxhdr { + u8_t vrh_flags; + u8_t vrh_gso_type; + u16_t vrh_hdr_len; + u16_t vrh_gso_size; + u16_t vrh_csum_start; + u16_t vrh_csum_offset; +} __attribute__((packed)); + +void virtio_net_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu); +void virtio_net_rcv_one_pkt(void *data, int pkt_len); +void virtio_net_send_one_pkt(void *data, u16_t *pkt_len); diff --git a/src/components/implementation/simple_vmm/noop_nf/devices/vpci/virtio_net_vpci.c b/src/components/implementation/simple_vmm/noop_nf/devices/vpci/virtio_net_vpci.c new file mode 100644 index 0000000000..c1c8846def --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/devices/vpci/virtio_net_vpci.c @@ -0,0 +1,51 @@ +#include "vpci.h" + +#define VIRTIO_VENDOR_ID 0x1AF4 +#define VIRTIO_NETWORK_DEV_ID 0x1000 +#define VIRTIO_CLASS_NETWORK 0x02 +#define VIRTIO_TYPE_NET 1 + +struct vpci_config_type0 virtio_net_dev = { + .header.vendor_id = VIRTIO_VENDOR_ID, + .header.device_id = VIRTIO_NETWORK_DEV_ID, + .header.command = 0, + .header.status = 0, + .header.revision_id = 0, + .header.prog_if = 0, + .header.subclass = 0, + .header.class_code = VIRTIO_CLASS_NETWORK, + .header.cache_line_sz = 0, + .header.latency_timer = 0, + .header.header_type = PCI_HDR_TYPE_DEV, + .header.BIST = 0, + + /* Legacy virtio-net only uses bar 0, and it should be a IO bar, no capability is supported */ + .bars[0].io_bar.fixed_bit = 1, + .bars[0].io_bar.reserved = 0, + .bars[0].io_bar.base_addr = 0x1000, + + + .bars[1].raw_data = 0, + .bars[2].raw_data = 0, + .bars[3].raw_data = 0, + .bars[4].raw_data = 0, + .bars[5].raw_data = 0, + + .cardbus_cis_pointer = 0, + .subsystem_vendor_id = VIRTIO_VENDOR_ID, + .subsystem_id = VIRTIO_TYPE_NET, + .exp_rom_base = 0, + .cap_pointer = 0, + .reserved = 0, + .interrupt_line = 0, + .interrupt_pin = 0, + .min_grant = 0, + .max_lentency = 0 +}; + +void +virtio_net_dev_init(void){ + vpci_regist((struct vpci_config_space *)&virtio_net_dev, sizeof(virtio_net_dev)); + extern void virtio_net_io_init(void); + virtio_net_io_init(); +} diff --git a/src/components/implementation/simple_vmm/noop_nf/devices/vpci/virtio_ring.h b/src/components/implementation/simple_vmm/noop_nf/devices/vpci/virtio_ring.h new file mode 100644 index 0000000000..f03125851b --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/devices/vpci/virtio_ring.h @@ -0,0 +1,260 @@ +#ifndef _LINUX_VIRTIO_RING_H +#define _LINUX_VIRTIO_RING_H +/* An interface for efficient virtio implementation, currently for use by KVM, + * but hopefully others soon. Do NOT change this since it will + * break existing servers and clients. + * + * This header is BSD licensed so anyone can use the definitions to implement + * compatible drivers/servers. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of IBM nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * Copyright Rusty Russell IBM Corporation 2007. */ + +typedef unsigned short int __virtio16; +typedef unsigned int __virtio32; +typedef unsigned long long __virtio64; + +typedef short int __le16; +typedef short int __be16; +typedef unsigned int __le32; +typedef unsigned int __be32; +typedef unsigned long long __le64; +typedef unsigned long long __be64; + +typedef char __s8; +typedef unsigned char __u8; + +typedef short __s16; +typedef unsigned short __u16; + +typedef int __s32; +typedef unsigned int __u32; + +typedef unsigned long int uintptr_t; + +/* This marks a buffer as continuing via the next field. */ +#define VRING_DESC_F_NEXT 1 +/* This marks a buffer as write-only (otherwise read-only). */ +#define VRING_DESC_F_WRITE 2 +/* This means the buffer contains a list of buffer descriptors. */ +#define VRING_DESC_F_INDIRECT 4 + +/* + * Mark a descriptor as available or used in packed ring. + * Notice: they are defined as shifts instead of shifted values. + */ +#define VRING_PACKED_DESC_F_AVAIL 7 +#define VRING_PACKED_DESC_F_USED 15 + +/* The Host uses this in used->flags to advise the Guest: don't kick me when + * you add a buffer. It's unreliable, so it's simply an optimization. Guest + * will still kick if it's out of buffers. */ +#define VRING_USED_F_NO_NOTIFY 1 +/* The Guest uses this in avail->flags to advise the Host: don't interrupt me + * when you consume a buffer. It's unreliable, so it's simply an + * optimization. */ +#define VRING_AVAIL_F_NO_INTERRUPT 1 + +/* Enable events in packed ring. */ +#define VRING_PACKED_EVENT_FLAG_ENABLE 0x0 +/* Disable events in packed ring. */ +#define VRING_PACKED_EVENT_FLAG_DISABLE 0x1 +/* + * Enable events for a specific descriptor in packed ring. + * (as specified by Descriptor Ring Change Event Offset/Wrap Counter). + * Only valid if VIRTIO_RING_F_EVENT_IDX has been negotiated. + */ +#define VRING_PACKED_EVENT_FLAG_DESC 0x2 + +/* + * Wrap counter bit shift in event suppression structure + * of packed ring. + */ +#define VRING_PACKED_EVENT_F_WRAP_CTR 15 + +/* We support indirect buffer descriptors */ +#define VIRTIO_RING_F_INDIRECT_DESC 28 + +/* The Guest publishes the used index for which it expects an interrupt + * at the end of the avail ring. Host should ignore the avail->flags field. */ +/* The Host publishes the avail index for which it expects a kick + * at the end of the used ring. Guest should ignore the used->flags field. */ +#define VIRTIO_RING_F_EVENT_IDX 29 + +/* Alignment requirements for vring elements. + * When using pre-virtio 1.0 layout, these fall out naturally. + */ +#define VRING_AVAIL_ALIGN_SIZE 2 +#define VRING_USED_ALIGN_SIZE 4 +#define VRING_DESC_ALIGN_SIZE 16 + +/* Virtio ring descriptors: 16 bytes. These can chain together via "next". */ +struct vring_desc { + /* Address (guest-physical). */ + __virtio64 addr; + /* Length. */ + __virtio32 len; + /* The flags as indicated above. */ + __virtio16 flags; + /* We chain unused descriptors via this, too */ + __virtio16 next; +}; + +struct vring_avail { + __virtio16 flags; + __virtio16 idx; + __virtio16 ring[]; +}; + +/* u32 is used here for ids for padding reasons. */ +struct vring_used_elem { + /* Index of start of used descriptor chain. */ + __virtio32 id; + /* Total length of the descriptor chain which was used (written to) */ + __virtio32 len; +}; + +typedef struct vring_used_elem __attribute__((aligned(VRING_USED_ALIGN_SIZE))) + vring_used_elem_t; + +struct vring_used { + __virtio16 flags; + __virtio16 idx; + vring_used_elem_t ring[]; +}; + +/* + * The ring element addresses are passed between components with different + * alignments assumptions. Thus, we might need to decrease the compiler-selected + * alignment, and so must use a typedef to make sure the aligned attribute + * actually takes hold: + * + * https://gcc.gnu.org/onlinedocs//gcc/Common-Type-Attributes.html#Common-Type-Attributes + * + * When used on a struct, or struct member, the aligned attribute can only + * increase the alignment; in order to decrease it, the packed attribute must + * be specified as well. When used as part of a typedef, the aligned attribute + * can both increase and decrease alignment, and specifying the packed + * attribute generates a warning. + */ +typedef struct vring_desc __attribute__((aligned(VRING_DESC_ALIGN_SIZE))) + vring_desc_t; +typedef struct vring_avail __attribute__((aligned(VRING_AVAIL_ALIGN_SIZE))) + vring_avail_t; +typedef struct vring_used __attribute__((aligned(VRING_USED_ALIGN_SIZE))) + vring_used_t; + +struct vring { + unsigned int num; + + vring_desc_t *desc; + + vring_avail_t *avail; + + vring_used_t *used; +}; + +#ifndef VIRTIO_RING_NO_LEGACY + +/* The standard layout for the ring is a continuous chunk of memory which looks + * like this. We assume num is a power of 2. + * + * struct vring + * { + * // The actual descriptors (16 bytes each) + * struct vring_desc desc[num]; + * + * // A ring of available descriptor heads with free-running index. + * __virtio16 avail_flags; + * __virtio16 avail_idx; + * __virtio16 available[num]; + * __virtio16 used_event_idx; + * + * // Padding to the next align boundary. + * char pad[]; + * + * // A ring of used descriptor heads with free-running index. + * __virtio16 used_flags; + * __virtio16 used_idx; + * struct vring_used_elem used[num]; + * __virtio16 avail_event_idx; + * }; + */ +/* We publish the used event index at the end of the available ring, and vice + * versa. They are at the end for backwards compatibility. */ +#define vring_used_event(vr) ((vr)->avail->ring[(vr)->num]) +#define vring_avail_event(vr) (*(__virtio16 *)&(vr)->used->ring[(vr)->num]) + +static __inline__ void vring_init(struct vring *vr, unsigned int num, void *p, + unsigned long align) +{ + vr->num = num; + vr->desc = p; + vr->avail = (struct vring_avail *)((char *)p + num * sizeof(struct vring_desc)); + vr->used = (void *)(((uintptr_t)&vr->avail->ring[num] + sizeof(__virtio16) + + align-1) & ~(align - 1)); +} + +static __inline__ unsigned vring_size(unsigned int num, unsigned long align) +{ + return ((sizeof(struct vring_desc) * num + sizeof(__virtio16) * (3 + num) + + align - 1) & ~(align - 1)) + + sizeof(__virtio16) * 3 + sizeof(struct vring_used_elem) * num; +} + +#endif /* VIRTIO_RING_NO_LEGACY */ + +/* The following is used with USED_EVENT_IDX and AVAIL_EVENT_IDX */ +/* Assuming a given event_idx value from the other side, if + * we have just incremented index from old to new_idx, + * should we trigger an event? */ +static __inline__ int vring_need_event(__u16 event_idx, __u16 new_idx, __u16 old) +{ + /* Note: Xen has similar logic for notification hold-off + * in include/xen/interface/io/ring.h with req_event and req_prod + * corresponding to event_idx + 1 and new_idx respectively. + * Note also that req_event and req_prod in Xen start at 1, + * event indexes in virtio start at 0. */ + return (__u16)(new_idx - event_idx - 1) < (__u16)(new_idx - old); +} + +struct vring_packed_desc_event { + /* Descriptor Ring Change Event Offset/Wrap Counter. */ + __le16 off_wrap; + /* Descriptor Ring Change Event Flags. */ + __le16 flags; +}; + +struct vring_packed_desc { + /* Buffer Address. */ + __le64 addr; + /* Buffer Length. */ + __le32 len; + /* Buffer ID. */ + __le16 id; + /* The flags depending on descriptor type. */ + __le16 flags; +}; +#endif /* _LINUX_VIRTIO_RING_H */ diff --git a/src/components/implementation/simple_vmm/noop_nf/devices/vpci/vpci.c b/src/components/implementation/simple_vmm/noop_nf/devices/vpci/vpci.c new file mode 100644 index 0000000000..e1571dc17b --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/devices/vpci/vpci.c @@ -0,0 +1,316 @@ +#include +#include +#include "vpci.h" + +/* Only two are supported: one bridge pci and one virtio-net pci */ +#define MAX_VPCI_NUM 2 + +#define PCI_HOST_BRIDGE_VENDOR 0x8086 +#define PCI_HOST_BRIDGE_DEV 0x29C0 +#define PCI_CLASS_BRIDGE 0x06 +#define PCI_SUBCLASS_BRIDGE_HOST 0x00 + +struct vpci_config_space vpci_devs[MAX_VPCI_NUM]; +static u8_t free_dev = 0; + +struct vpci_config_type1 vpci_host_bridge = { + .header.vendor_id = PCI_HOST_BRIDGE_VENDOR, + .header.device_id = PCI_HOST_BRIDGE_DEV, + .header.command = 0, + .header.status = 0, + .header.revision_id = 0, + .header.prog_if = 0, + .header.subclass = PCI_SUBCLASS_BRIDGE_HOST, + .header.class_code = PCI_CLASS_BRIDGE, + .header.cache_line_sz = 0, + .header.latency_timer = 0, + .header.header_type = PCI_HDR_TYPE_BRIDGE, + .header.BIST = 0, + + .bars[0].raw_data = 0, + .bars[1].raw_data = 0, + + .primary_bus_number = 0, + .secondary_bus_number = 0, + .subordinate_bus_number = 0, + .secondary_latency_timer = 0, + .io_base = 0, + .io_limit = 0, + .secondary_status = 0, + .memory_base = 0, + .memory_limit = 0, + .prefetchable_memory_base = 0, + .prefetchable_memory_limit = 0, + .prefetchable_base_upper_32_bits = 0, + .prefetchable_limit_upper_32_bits = 0, + .io_base_upper_16_bits = 0, + .io_limit_upper_16_bits = 0, + .capability_pointer = 0, + .reserved = 0, + .expansion_rom_base_address = 0, + .interrupt_line = 0, + .interrupt_pin = 0, + .bridge_control = 0 +}; + +void +vpci_regist(struct vpci_config_space *vpci, u32_t sz) +{ + memcpy(&vpci_devs[free_dev++], vpci, sz); +} + +void +set_vpci_comm_hdr(u8_t* raw_data, u8_t reg, u32_t val) +{ + switch (reg) + { + /* TODO: implement necessary pci write emulations */ + case OFFSET_COMMAND: + break; + case OFFSET_CACHE_LINE_SZ: + break; + case OFFSET_LATENCY_TIMER: + break; + case OFFSET_STATUS: + /* Linux writes 0xFFFF to clear errors, thus ignore it */ + break; + default: + printc("trying to write RO reg:0x%x, val:0x%x", reg, val); + assert(0); + } +} + +void +set_vpci_bar(u8_t* raw_data, u8_t reg, u32_t val) +{ + u32_t bar0; + + switch (reg) + { + case OFFSET_BAR0: + bar0 = *(u32_t *)raw_data; + if (bar0 & 0x1) { /* IO bar */ + /* mask all bits that should not be writable */ + val = val & 0xFFFFC000; + val |= 0x1; + *(u32_t *)raw_data = val; + } else { /* Mem bar */ + /* Currently don't support IO bar */ + printc("no vpci bar\n"); + assert(0); + } + + break; + /* Currently only support one bar, other bars are ignored */ + case OFFSET_BAR1: + break; + case OFFSET_BAR2: + break; + case OFFSET_BAR3: + break; + case OFFSET_BAR4: + break; + case OFFSET_BAR5: + break; + default: + printc("trying to write RO reg:0x%x, val:0x%x", reg, val); + assert(0); + } +} + +void +set_vpci_host_bridge_reg(u8_t *raw_data, u8_t reg, u32_t val, u8_t sz) +{ + if (reg < OFFSET_BAR0) { + set_vpci_comm_hdr(raw_data, reg, val); + return; + } + + if (reg < OFFSET_PRIMARY_BUS_NUM) { + /* transparent bridge, ignore the write */ + return; + } + + switch (reg) + { + case OFFSET_PRIMARY_BUS_NUM: + *raw_data = (u8_t) val; + break; + case OFFSET_SECONDARY_BUS_NUMBER: + *raw_data = (u8_t) val; + break; + case OFFSET_SUBORDINATE_BUS_NUMBER: + *raw_data = (u8_t) val; + break; + case OFFSET_SECONDARY_LATENCY_TIMER: + /* Currently ignore this */ + break; + case OFFSET_IO_BASE: + /* this bridge won't support IO base */ + break; + case OFFSET_IO_LIMIT: + /* this bridge won't support IO base */ + assert(0); + break; + case OFFSET_SECONDARY_STATUS: + assert(0); + break; + case OFFSET_MEMORY_BASE: + /* Currently ignore this */ + break; + case OFFSET_MEMORY_LIMIT: + assert(0); + break; + case OFFSET_PREFETCHABLE_MEMORY_BASE: + /* Currently ignore this */ + break; + case OFFSET_PREFETCHABLE_MEMORY_LIMIT: + printc("trying to write RO reg:0x%x, val:0x%x", reg, val); + assert(0); + break; + case OFFSET_PREFETCHABLE_BASE_UPPER_32_BITS: + /* Currently ignore this */ + break; + case OFFSET_PREFETCHABLE_LIMIT_UPPER_32_BITS: + /* Currently ignore this */ + break; + case OFFSET_IO_BASE_UPPER_16_BITS: + /* Currently ignore this */ + break; + case OFFSET_IO_LIMIT_UPPER_16_BITS: + assert(0); + break; + case OFFSET_CAPABILITY_POINTER: + assert(0); + break; + case OFFSET_EXPANSION_ROM_BASE_ADDRESS: + /* Ingore this, we don't support EXP ROM */ + break; + case OFFSET_INTERRUPT_LINE: + assert(0); + break; + case OFFSET_INTERRUPT_PIN: + assert(0); + break; + case OFFSET_BRIDGE_CONTROL: + /* Currently ignore this */ + break; + default: + assert(0); + } +} + +void +set_vpci_dev_reg(u8_t* raw_data, u8_t reg, u32_t val, u8_t sz) +{ + if (reg < OFFSET_BAR0) { + set_vpci_comm_hdr(raw_data, reg, val); + return; + } + + if (reg < OFFSET_CARDBUS_CIS_POINTER) { + set_vpci_bar(raw_data, reg, val); + return; + } + switch (reg) + { + case OFFSET_CARDBUS_CIS_POINTER: + assert(0); + break; + case OFFSET_SUBSYSTEM_VENDOR_ID: + assert(0); + break; + case OFFSET_SUBSYSTEM_ID: + assert(0); + break; + case OFFSET_EXP_ROM_BASE: + /* Currently ignore this */ + break; + case OFFSET_CAP_POINTER: + assert(0); + break; + case OFFSET_RESERVED: + assert(0); + break; + case OFFSET_INTERRUPT_LINE: + assert(0); + break; + case OFFSET_INTERRUPT_PIN: + assert(0); + break; + case OFFSET_MIN_GRANT: + assert(0); + break; + case OFFSET_MAX_LENTENCY: + assert(0); + break; + default: + assert(0); + } +} + +void +set_vpci_reg(u32_t bdf, u32_t val, u8_t idx, u8_t sz) +{ + struct vpci_bdf vbdf; + u8_t index; + struct vpci_config_space *vpci; + u8_t *raw_data; + u8_t reg; + + assert(idx < 4 && sz > 0 && sz < 4); + + memcpy(&vbdf, &bdf, sizeof(vbdf)); + + index = vbdf.bus_num + vbdf.dev_num; + if (vbdf.bus_num > 0 || vbdf.dev_num > 1) return; + + vpci = &vpci_devs[index]; + + raw_data = (u8_t *)(vpci) + vbdf.reg_offset; + + raw_data += idx; + reg = vbdf.reg_offset + idx; + + switch (index) + { + case 0: + /* Process host bridge */ + set_vpci_host_bridge_reg(raw_data, reg, val, sz); + break; + + case 1: + /* Process with device */ + set_vpci_dev_reg(raw_data, reg, val, sz); + break; + default: + assert(0); + } +} + +u32_t +get_vpci_reg(u32_t bdf) +{ + struct vpci_bdf vbdf; + struct vpci_config_space *vpci; + u8_t index; + + memcpy(&vbdf, &bdf, sizeof(vbdf)); + index = vbdf.bus_num + vbdf.dev_num; + + if (vbdf.bus_num > 0 || vbdf.dev_num > 1) return 0XFFFFFFFF; + + vpci = &vpci_devs[index]; + + return *(u32_t *)((char *)(vpci) + vbdf.reg_offset); +} + +extern void virtio_net_dev_init(void); + +static void __attribute__((constructor)) +init(void) +{ + memset(&vpci_devs, 0, sizeof(vpci_devs)); + vpci_regist((struct vpci_config_space *)&vpci_host_bridge, sizeof(vpci_host_bridge)); + virtio_net_dev_init(); +} diff --git a/src/components/implementation/simple_vmm/noop_nf/devices/vpci/vpci.h b/src/components/implementation/simple_vmm/noop_nf/devices/vpci/vpci.h new file mode 100644 index 0000000000..6bfcdf004b --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/devices/vpci/vpci.h @@ -0,0 +1,180 @@ +#pragma once + +#include +#include + +#define VPCI_CONFIG_ADDRESS 0xCF8 +#define VPCI_CONFIG_DATA0 0xCFC +#define VPCI_CONFIG_DATA1 0xCFD +#define VPCI_CONFIG_DATA2 0xCFE +#define VPCI_CONFIG_DATA3 0xCFF +#define VPCI_MECHANISM_CONTROL_REG 0xCFB + +#define VPCI_MAX_CONFIG_SPACE_SZ 256 + +#define OFFSET_VENDOR_ID 0x00 +#define OFFSET_DEVICE_ID 0x02 +#define OFFSET_COMMAND 0x04 +#define OFFSET_STATUS 0x06 +#define OFFSET_REVISION_ID 0x08 +#define OFFSET_PROG_IF 0x09 +#define OFFSET_SUBCLASS 0x0A +#define OFFSET_CLASS_CODE 0x0B +#define OFFSET_CACHE_LINE_SZ 0x0C +#define OFFSET_LATENCY_TIMER 0x0D +#define OFFSET_HEADER 0x0E +#define OFFSET_BIST 0x0F + +#define OFFSET_BAR0 0x10 +#define OFFSET_BAR1 0x14 +#define OFFSET_BAR2 0x18 +#define OFFSET_BAR3 0x1C +#define OFFSET_BAR4 0x20 +#define OFFSET_BAR5 0x24 + +#define OFFSET_PRIMARY_BUS_NUM 0x18 +#define OFFSET_SECONDARY_BUS_NUMBER 0x19 +#define OFFSET_SUBORDINATE_BUS_NUMBER 0x1A +#define OFFSET_SECONDARY_LATENCY_TIMER 0x1B +#define OFFSET_IO_BASE 0x1C +#define OFFSET_IO_LIMIT 0x1D +#define OFFSET_SECONDARY_STATUS 0x1E +#define OFFSET_MEMORY_BASE 0x20 +#define OFFSET_MEMORY_LIMIT 0x22 +#define OFFSET_PREFETCHABLE_MEMORY_BASE 0x24 +#define OFFSET_PREFETCHABLE_MEMORY_LIMIT 0x26 +#define OFFSET_PREFETCHABLE_BASE_UPPER_32_BITS 0x28 +#define OFFSET_PREFETCHABLE_LIMIT_UPPER_32_BITS 0x2C +#define OFFSET_IO_BASE_UPPER_16_BITS 0x30 +#define OFFSET_IO_LIMIT_UPPER_16_BITS 0x32 +#define OFFSET_CAPABILITY_POINTER 0x34 +#define OFFSET_EXPANSION_ROM_BASE_ADDRESS 0x38 +#define OFFSET_INTERRUPT_LINE 0x3C +#define OFFSET_INTERRUPT_PIN 0x3D +#define OFFSET_BRIDGE_CONTROL 0x3E + +#define OFFSET_CARDBUS_CIS_POINTER 0x28 +#define OFFSET_SUBSYSTEM_VENDOR_ID 0x2C +#define OFFSET_SUBSYSTEM_ID 0x2E +#define OFFSET_EXP_ROM_BASE 0x30 +#define OFFSET_CAP_POINTER 0x34 +#define OFFSET_RESERVED 0x38 +#define OFFSET_MIN_GRANT 0x3E +#define OFFSET_MAX_LENTENCY 0x3F + +#define PCI_HDR_TYPE_BRIDGE 0x01 +#define PCI_HDR_TYPE_DEV 0x00 + +struct vpci_common_header { + u16_t vendor_id; + u16_t device_id; + u16_t command; + u16_t status; + u8_t revision_id; + u8_t prog_if; + u8_t subclass; + u8_t class_code; + u8_t cache_line_sz; + u8_t latency_timer; + + union + { + u8_t header_type:7; + u8_t MF:1; + u8_t header; + }; + + union + { + u8_t completion_code:4; + u8_t reserved:2; + u8_t Start_BIST:1; + u8_t BIST_capable:1; + u8_t BIST; + }; +} __attribute__((packed)); + +struct mem_bar { + u32_t fixed_bit:1; + u32_t type:2; + u32_t prefetchable:1; + /* Needs to be 16-byte aligned */ + u32_t base_addr:28; +} __attribute__((packed)); + +struct io_bar { + u32_t fixed_bit:1; + u32_t reserved:1; + /* Needs to be 4-byte aligned */ + u32_t base_addr:30; +} __attribute__((packed)); + +struct vpci_bar { + union + { + u32_t raw_data; + struct mem_bar mem_bar; + struct io_bar io_bar; + }; +} __attribute__((packed)); + +#define PCI_TYPE0_BAR_NUM 6 +#define PCI_TYPE1_BAR_NUM 2 + +struct vpci_config_type0 { + struct vpci_common_header header; + struct vpci_bar bars[PCI_TYPE0_BAR_NUM]; + u32_t cardbus_cis_pointer; + u16_t subsystem_vendor_id; + u16_t subsystem_id; + u32_t exp_rom_base; + u32_t cap_pointer; + u32_t reserved; + u8_t interrupt_line; + u8_t interrupt_pin; + u8_t min_grant; + u8_t max_lentency; +} __attribute__((packed)); + +struct vpci_config_type1 { + struct vpci_common_header header; + struct vpci_bar bars[PCI_TYPE1_BAR_NUM]; + u8_t primary_bus_number; + u8_t secondary_bus_number; + u8_t subordinate_bus_number; + u8_t secondary_latency_timer; + u8_t io_base; + u8_t io_limit; + u16_t secondary_status; + u16_t memory_base; + u16_t memory_limit; + u16_t prefetchable_memory_base; + u16_t prefetchable_memory_limit; + u32_t prefetchable_base_upper_32_bits; + u32_t prefetchable_limit_upper_32_bits; + u16_t io_base_upper_16_bits; + u16_t io_limit_upper_16_bits; + u32_t capability_pointer:8; + u32_t reserved:24; + u32_t expansion_rom_base_address; + u8_t interrupt_line; + u8_t interrupt_pin; + u16_t bridge_control; +} __attribute__((packed)); + +struct vpci_config_space { + struct vpci_common_header header; + char data[VPCI_MAX_CONFIG_SPACE_SZ - sizeof(struct vpci_common_header)]; +} __attribute__((packed)); + +struct vpci_bdf { + u8_t reg_offset; + u8_t func_num:3; + u8_t dev_num:5; + u8_t bus_num; + u8_t resverd:7; + u8_t enable_bit:1; +}; + +void vpci_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu); +void vpci_regist(struct vpci_config_space *vpci, u32_t sz); diff --git a/src/components/implementation/simple_vmm/noop_nf/devices/vpci/vpci_io.c b/src/components/implementation/simple_vmm/noop_nf/devices/vpci/vpci_io.c new file mode 100644 index 0000000000..98667e1999 --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/devices/vpci/vpci_io.c @@ -0,0 +1,191 @@ +#include +#include +#include +#include "vpci.h" + +static u32_t curr_bdf = 0; + +extern u32_t get_vpci_reg(u32_t bdf); +extern void set_vpci_reg(u32_t bdf, u32_t val, u8_t idx, u8_t sz); + +static void +vpci_outb(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + u8_t val = vcpu->shared_region->ax; + + switch (port_id) + { + case VPCI_MECHANISM_CONTROL_REG: + /* This is the register to configure the PCI access mecanism, we only support type 1 which is commonly used */ + assert(val == 0x1); + break; + case VPCI_CONFIG_DATA0: + set_vpci_reg(curr_bdf, val, 0, 1); + break; + case VPCI_CONFIG_DATA1: + set_vpci_reg(curr_bdf, val, 1, 1); + break; + case VPCI_CONFIG_DATA2: + set_vpci_reg(curr_bdf, val, 2, 1); + break; + case VPCI_CONFIG_DATA3: + set_vpci_reg(curr_bdf, val, 3, 1); + break; + default: + VM_PANIC(vcpu); + break; + } + return; +} + +static void +vpci_inb(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + u32_t bdf = 0; + + switch (port_id) + { + case VPCI_MECHANISM_CONTROL_REG: + vcpu->shared_region->ax = 1; + break; + case VPCI_CONFIG_DATA0: + bdf = get_vpci_reg(curr_bdf); + vcpu->shared_region->ax = (u8_t)bdf; + break; + case VPCI_CONFIG_DATA1: + bdf = get_vpci_reg(curr_bdf); + vcpu->shared_region->ax = (u8_t)(bdf >> 8); + break; + case VPCI_CONFIG_DATA2: + bdf = get_vpci_reg(curr_bdf); + vcpu->shared_region->ax = (u8_t)(bdf >> 16); + break; + case VPCI_CONFIG_DATA3: + bdf = get_vpci_reg(curr_bdf); + vcpu->shared_region->ax = (u8_t)(bdf >> 24); + break; + default: + VM_PANIC(vcpu); + break; + } + + return; +} + +static void +vpci_inw(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + u32_t bdf = 0; + + switch (port_id) + { + case VPCI_CONFIG_DATA0: + bdf = get_vpci_reg(curr_bdf); + vcpu->shared_region->ax = (u16_t)bdf; + break; + case VPCI_CONFIG_DATA2: + bdf = get_vpci_reg(curr_bdf); + vcpu->shared_region->ax = (u16_t)(bdf>>16); + break; + default: + VM_PANIC(vcpu); + break; + } + + return; +} + +static void +vpci_outw(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + u16_t val = vcpu->shared_region->ax; + + switch (port_id) + { + case VPCI_CONFIG_DATA0: + set_vpci_reg(curr_bdf, val, 0, 2); + break; + case VPCI_CONFIG_DATA2: + set_vpci_reg(curr_bdf, val, 2, 2); + break; + default: + VM_PANIC(vcpu); + break; + } + + return; +} + +static void +vpci_outl(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + u32_t val = vcpu->shared_region->ax; + + switch (port_id) + { + case VPCI_CONFIG_ADDRESS: + curr_bdf = val; + break; + case VPCI_CONFIG_DATA0: + set_vpci_reg(curr_bdf, val, 0, 3); + break; + default: + VM_PANIC(vcpu); + break; + } + return; +} + +static u32_t +vpci_inl(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + switch (port_id) + { + case VPCI_CONFIG_DATA0: + vcpu->shared_region->ax = get_vpci_reg(curr_bdf); + break; + case VPCI_CONFIG_ADDRESS: + vcpu->shared_region->ax = curr_bdf; + break; + default: + VM_PANIC(vcpu); + break; + } + return 0; +} + +void +vpci_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu) +{ + if (dir == IO_IN) { + switch (sz) + { + case IO_BYTE: + vpci_inb(port, vcpu); + break; + case IO_WORD: + vpci_inw(port, vcpu); + break; + case IO_LONG: + vpci_inl(port, vcpu); + break; + default: + VM_PANIC(vcpu); + } + } else { + switch (sz) + { + case IO_BYTE: + vpci_outb(port, vcpu); + break; + case IO_WORD: + vpci_outw(port, vcpu); + break; + case IO_LONG: + vpci_outl(port, vcpu); + break; + default: + VM_PANIC(vcpu); + } + } +} diff --git a/src/components/implementation/simple_vmm/noop_nf/devices/vpic/vpic.c b/src/components/implementation/simple_vmm/noop_nf/devices/vpic/vpic.c new file mode 100644 index 0000000000..f80471d528 --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/devices/vpic/vpic.c @@ -0,0 +1,109 @@ +#include +#include +#include +#include "vpic.h" + +/* TODO: implement necessary functions needed by VM */ +struct chip_8259 { + u8_t master_cmd; + u8_t master_data; + u8_t is_master_init; + u8_t master_offset; + + u8_t slave_cmd; + u8_t slave_data; + u8_t is_slave_init; + u8_t slave_offset; + + u8_t interrupt_pending; +}; + +static struct chip_8259 chip; + +static u8_t pic_elcr1 = 0, pic_elcr2 = 0; + +void +vpic_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu) +{ + assert(sz == IO_BYTE); + if (dir == IO_IN) { + switch (port) + { + case PIC_MASTER_DATA_PORT: + vcpu->shared_region->ax = chip.master_data; + break; + case PIC_SLAVE_DATA_PORT: + vcpu->shared_region->ax = chip.slave_data; + break; + case PIC_MASTER_CMD_PORT: + vcpu->shared_region->ax = chip.master_cmd; + break; + case PIC_SLAVE_CMD_PORT: + vcpu->shared_region->ax = chip.slave_cmd; + break; + case PIC_ELCR1: + vcpu->shared_region->ax = pic_elcr1; + break; + case PIC_ELCR2: + vcpu->shared_region->ax = pic_elcr2; + break; + default: + printc("vpic_handler: port: 0x%x, dir: %d\n", port, dir); + VM_PANIC(vcpu); + break; + } + } else { + u8_t val = vcpu->shared_region->ax; + switch (port) + { + case PIC_MASTER_CMD_PORT: + chip.master_cmd = val; + if (chip.master_cmd & ICW1_INIT) { + chip.is_master_init = 1; + } + if (chip.master_cmd == PIC_EOI) { + chip.interrupt_pending = 0; + } + break; + case PIC_MASTER_DATA_PORT: + chip.master_data = val; + if (chip.is_master_init) { + chip.master_offset = chip.master_data; + chip.is_master_init = 0; + } + break; + case PIC_SLAVE_CMD_PORT: + chip.slave_cmd = val; + if (chip.slave_cmd & ICW1_INIT) { + chip.is_slave_init = 1; + } + if (chip.slave_cmd == PIC_EOI) { + chip.interrupt_pending = 0; + } + break; + case PIC_SLAVE_DATA_PORT: + chip.slave_data = val; + if (chip.is_slave_init) { + chip.slave_offset = chip.slave_data; + chip.is_slave_init = 0; + } + break; + case PIC_ELCR1: + pic_elcr1 = val; + break; + case PIC_ELCR2: + pic_elcr2 = val; + break; + default: + assert(0); + break; + } + + } +} + +static void __attribute__((constructor)) +init(void) +{ + memset(&chip, 0, sizeof(chip)); +} diff --git a/src/components/implementation/simple_vmm/noop_nf/devices/vpic/vpic.h b/src/components/implementation/simple_vmm/noop_nf/devices/vpic/vpic.h new file mode 100644 index 0000000000..a7001a6b52 --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/devices/vpic/vpic.h @@ -0,0 +1,24 @@ +#pragma once + +#define PIC_MASTER_CMD_PORT 0x20 +#define PIC_MASTER_DATA_PORT 0x21 +#define PIC_SLAVE_CMD_PORT 0XA0 +#define PIC_SLAVE_DATA_PORT 0XA1 + +#define ICW1_ICW4 0x01 +#define ICW1_SINGLE 0x02 +#define ICW1_INTERVAL4 0x04 +#define ICW1_LEVEL 0x08 +#define ICW1_INIT 0x10 + +#define ICW4_8086 0x01 +#define ICW4_AUTO 0x02 +#define ICW4_BUF_SLAVE 0x08 +#define ICW4_BUF_MASTER 0x0C +#define ICW4_SFNM 0x10 + +#define PIC_EOI 0x20 +#define PIC_ELCR1 0x4d0 +#define PIC_ELCR2 0x4d1 + +void vpic_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu); diff --git a/src/components/implementation/simple_vmm/noop_nf/devices/vps2/vps2.c b/src/components/implementation/simple_vmm/noop_nf/devices/vps2/vps2.c new file mode 100644 index 0000000000..52eb9895b5 --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/devices/vps2/vps2.c @@ -0,0 +1,47 @@ +#include +#include +#include +#include "vps2.h" + +static u8_t ps2_porta_data[0x0F]; +static u8_t ps2_portb_data[0x0F]; + +void +ps2_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu) +{ + assert(port == PS2_CONTROL_PORT_A || port == PS2_CONTROL_PORT_B); + assert(sz == IO_BYTE); + + if (dir == IO_IN) { + switch (port) + { + case PS2_CONTROL_PORT_A: + vcpu->shared_region->ax = ps2_porta_data[port - 0x90]; + break; + default: + VM_PANIC(vcpu); + break; + } + } else if (dir == IO_OUT) { + switch (port) + { + case PS2_CONTROL_PORT_A: + ps2_porta_data[port - 0x90] = (u8_t)vcpu->shared_region->ax; + break; + default: + VM_PANIC(vcpu); + break; + } + } else { + VM_PANIC(vcpu); + } + + return; +} + +static void __attribute__((constructor)) +init(void) +{ + memset(&ps2_porta_data, 0, sizeof(ps2_porta_data)); + memset(&ps2_portb_data, 0, sizeof(ps2_portb_data)); +} diff --git a/src/components/implementation/simple_vmm/noop_nf/devices/vps2/vps2.h b/src/components/implementation/simple_vmm/noop_nf/devices/vps2/vps2.h new file mode 100644 index 0000000000..971009a319 --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/devices/vps2/vps2.h @@ -0,0 +1,6 @@ +#pragma once + +/* PS/2 system control port A (port B is at 0061) */ +#define PS2_CONTROL_PORT_A 0x92 +#define PS2_CONTROL_PORT_B 0x61 +void ps2_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu); diff --git a/src/components/implementation/simple_vmm/noop_nf/devices/vrtc/vrtc.c b/src/components/implementation/simple_vmm/noop_nf/devices/vrtc/vrtc.c new file mode 100644 index 0000000000..c971cef94e --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/devices/vrtc/vrtc.c @@ -0,0 +1,58 @@ +#include +#include +#include +#include "vrtc.h" + +/* NOTE: this is just to emulate those data indexed by the CMOS data adress, the functionality of rtc is not fully implemented */ +static u8_t rtc_data_address[0x1A]; +static u8_t curr_data_addr; + +void +vrtc_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu) +{ + assert(sz == IO_BYTE); + if (dir == IO_IN) { + switch (port) + { + case CMOS_CMD_PORT: + assert(0); + break;; + case CMOS_DATA_PORT: + vcpu->shared_region->ax = rtc_data_address[curr_data_addr]; + break; + default: + assert(0); + break; + } + } else { + u8_t val = vcpu->shared_region->ax; + switch (port) + { + case CMOS_CMD_PORT: + if (val & 0x80) { + printc("NMI disabled\n"); + } else { + printc("NMI enabled\n"); + } + curr_data_addr = val & 0x7f; + if (curr_data_addr == 0x0f) { + printc("shutdown status byte is set now\n"); + } else { + /* NOTE: do nothing and don't include full functionality */ + } + break; + case CMOS_DATA_PORT: + break; + default: + assert(0); + break; + } + + } +} + +static void __attribute__((constructor)) +init(void) +{ + memset(&rtc_data_address, 0, sizeof(rtc_data_address)); +} diff --git a/src/components/implementation/simple_vmm/noop_nf/devices/vrtc/vrtc.h b/src/components/implementation/simple_vmm/noop_nf/devices/vrtc/vrtc.h new file mode 100644 index 0000000000..78074feba9 --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/devices/vrtc/vrtc.h @@ -0,0 +1,7 @@ +#pragma once + +#define CMOS_CMD_PORT 0x70 +#define CMOS_DATA_PORT 0x71 + +void +vrtc_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu); diff --git a/src/components/implementation/simple_vmm/noop_nf/fast_memcpy.h b/src/components/implementation/simple_vmm/noop_nf/fast_memcpy.h new file mode 100644 index 0000000000..ddd282d4ba --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/fast_memcpy.h @@ -0,0 +1,689 @@ +//===================================================================== +// +// FastMemcpy.c - skywind3000@163.com, 2015 +// +// feature: +// 50% speed up in avg. vs standard memcpy (tested in vc2012/gcc5.1) +// +//===================================================================== +#ifndef __FAST_MEMCPY_H__ +#define __FAST_MEMCPY_H__ + +#include +#include +#include + + +//--------------------------------------------------------------------- +// force inline for compilers +//--------------------------------------------------------------------- +#ifndef INLINE +#ifdef __GNUC__ +#if (__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1)) + #define INLINE __inline__ __attribute__((always_inline)) +#else + #define INLINE __inline__ +#endif +#elif defined(_MSC_VER) + #define INLINE __forceinline +#elif (defined(__BORLANDC__) || defined(__WATCOMC__)) + #define INLINE __inline +#else + #define INLINE +#endif +#endif + + + +//--------------------------------------------------------------------- +// fast copy for different sizes +//--------------------------------------------------------------------- +static INLINE void memcpy_sse2_16(void *dst, const void *src) { + __m128i m0 = _mm_loadu_si128(((const __m128i*)src) + 0); + _mm_storeu_si128(((__m128i*)dst) + 0, m0); +} + +static INLINE void memcpy_sse2_32(void *dst, const void *src) { + __m128i m0 = _mm_loadu_si128(((const __m128i*)src) + 0); + __m128i m1 = _mm_loadu_si128(((const __m128i*)src) + 1); + _mm_storeu_si128(((__m128i*)dst) + 0, m0); + _mm_storeu_si128(((__m128i*)dst) + 1, m1); +} + +static INLINE void memcpy_sse2_64(void *dst, const void *src) { + __m128i m0 = _mm_loadu_si128(((const __m128i*)src) + 0); + __m128i m1 = _mm_loadu_si128(((const __m128i*)src) + 1); + __m128i m2 = _mm_loadu_si128(((const __m128i*)src) + 2); + __m128i m3 = _mm_loadu_si128(((const __m128i*)src) + 3); + _mm_storeu_si128(((__m128i*)dst) + 0, m0); + _mm_storeu_si128(((__m128i*)dst) + 1, m1); + _mm_storeu_si128(((__m128i*)dst) + 2, m2); + _mm_storeu_si128(((__m128i*)dst) + 3, m3); +} + +static INLINE void memcpy_sse2_128(void *dst, const void *src) { + __m128i m0 = _mm_loadu_si128(((const __m128i*)src) + 0); + __m128i m1 = _mm_loadu_si128(((const __m128i*)src) + 1); + __m128i m2 = _mm_loadu_si128(((const __m128i*)src) + 2); + __m128i m3 = _mm_loadu_si128(((const __m128i*)src) + 3); + __m128i m4 = _mm_loadu_si128(((const __m128i*)src) + 4); + __m128i m5 = _mm_loadu_si128(((const __m128i*)src) + 5); + __m128i m6 = _mm_loadu_si128(((const __m128i*)src) + 6); + __m128i m7 = _mm_loadu_si128(((const __m128i*)src) + 7); + _mm_storeu_si128(((__m128i*)dst) + 0, m0); + _mm_storeu_si128(((__m128i*)dst) + 1, m1); + _mm_storeu_si128(((__m128i*)dst) + 2, m2); + _mm_storeu_si128(((__m128i*)dst) + 3, m3); + _mm_storeu_si128(((__m128i*)dst) + 4, m4); + _mm_storeu_si128(((__m128i*)dst) + 5, m5); + _mm_storeu_si128(((__m128i*)dst) + 6, m6); + _mm_storeu_si128(((__m128i*)dst) + 7, m7); +} + + +//--------------------------------------------------------------------- +// tiny memory copy with jump table optimized +//--------------------------------------------------------------------- +static INLINE void *memcpy_tiny(void *dst, const void *src, size_t size) { + unsigned char *dd = ((unsigned char*)dst) + size; + const unsigned char *ss = ((const unsigned char*)src) + size; + + switch (size) { + case 64: + memcpy_sse2_64(dd - 64, ss - 64); + case 0: + break; + + case 65: + memcpy_sse2_64(dd - 65, ss - 65); + case 1: + dd[-1] = ss[-1]; + break; + + case 66: + memcpy_sse2_64(dd - 66, ss - 66); + case 2: + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 67: + memcpy_sse2_64(dd - 67, ss - 67); + case 3: + *((uint16_t*)(dd - 3)) = *((uint16_t*)(ss - 3)); + dd[-1] = ss[-1]; + break; + + case 68: + memcpy_sse2_64(dd - 68, ss - 68); + case 4: + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 69: + memcpy_sse2_64(dd - 69, ss - 69); + case 5: + *((uint32_t*)(dd - 5)) = *((uint32_t*)(ss - 5)); + dd[-1] = ss[-1]; + break; + + case 70: + memcpy_sse2_64(dd - 70, ss - 70); + case 6: + *((uint32_t*)(dd - 6)) = *((uint32_t*)(ss - 6)); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 71: + memcpy_sse2_64(dd - 71, ss - 71); + case 7: + *((uint32_t*)(dd - 7)) = *((uint32_t*)(ss - 7)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 72: + memcpy_sse2_64(dd - 72, ss - 72); + case 8: + *((uint64_t*)(dd - 8)) = *((uint64_t*)(ss - 8)); + break; + + case 73: + memcpy_sse2_64(dd - 73, ss - 73); + case 9: + *((uint64_t*)(dd - 9)) = *((uint64_t*)(ss - 9)); + dd[-1] = ss[-1]; + break; + + case 74: + memcpy_sse2_64(dd - 74, ss - 74); + case 10: + *((uint64_t*)(dd - 10)) = *((uint64_t*)(ss - 10)); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 75: + memcpy_sse2_64(dd - 75, ss - 75); + case 11: + *((uint64_t*)(dd - 11)) = *((uint64_t*)(ss - 11)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 76: + memcpy_sse2_64(dd - 76, ss - 76); + case 12: + *((uint64_t*)(dd - 12)) = *((uint64_t*)(ss - 12)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 77: + memcpy_sse2_64(dd - 77, ss - 77); + case 13: + *((uint64_t*)(dd - 13)) = *((uint64_t*)(ss - 13)); + *((uint32_t*)(dd - 5)) = *((uint32_t*)(ss - 5)); + dd[-1] = ss[-1]; + break; + + case 78: + memcpy_sse2_64(dd - 78, ss - 78); + case 14: + *((uint64_t*)(dd - 14)) = *((uint64_t*)(ss - 14)); + *((uint64_t*)(dd - 8)) = *((uint64_t*)(ss - 8)); + break; + + case 79: + memcpy_sse2_64(dd - 79, ss - 79); + case 15: + *((uint64_t*)(dd - 15)) = *((uint64_t*)(ss - 15)); + *((uint64_t*)(dd - 8)) = *((uint64_t*)(ss - 8)); + break; + + case 80: + memcpy_sse2_64(dd - 80, ss - 80); + case 16: + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 81: + memcpy_sse2_64(dd - 81, ss - 81); + case 17: + memcpy_sse2_16(dd - 17, ss - 17); + dd[-1] = ss[-1]; + break; + + case 82: + memcpy_sse2_64(dd - 82, ss - 82); + case 18: + memcpy_sse2_16(dd - 18, ss - 18); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 83: + memcpy_sse2_64(dd - 83, ss - 83); + case 19: + memcpy_sse2_16(dd - 19, ss - 19); + *((uint16_t*)(dd - 3)) = *((uint16_t*)(ss - 3)); + dd[-1] = ss[-1]; + break; + + case 84: + memcpy_sse2_64(dd - 84, ss - 84); + case 20: + memcpy_sse2_16(dd - 20, ss - 20); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 85: + memcpy_sse2_64(dd - 85, ss - 85); + case 21: + memcpy_sse2_16(dd - 21, ss - 21); + *((uint32_t*)(dd - 5)) = *((uint32_t*)(ss - 5)); + dd[-1] = ss[-1]; + break; + + case 86: + memcpy_sse2_64(dd - 86, ss - 86); + case 22: + memcpy_sse2_16(dd - 22, ss - 22); + *((uint32_t*)(dd - 6)) = *((uint32_t*)(ss - 6)); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 87: + memcpy_sse2_64(dd - 87, ss - 87); + case 23: + memcpy_sse2_16(dd - 23, ss - 23); + *((uint32_t*)(dd - 7)) = *((uint32_t*)(ss - 7)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 88: + memcpy_sse2_64(dd - 88, ss - 88); + case 24: + memcpy_sse2_16(dd - 24, ss - 24); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 89: + memcpy_sse2_64(dd - 89, ss - 89); + case 25: + memcpy_sse2_16(dd - 25, ss - 25); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 90: + memcpy_sse2_64(dd - 90, ss - 90); + case 26: + memcpy_sse2_16(dd - 26, ss - 26); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 91: + memcpy_sse2_64(dd - 91, ss - 91); + case 27: + memcpy_sse2_16(dd - 27, ss - 27); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 92: + memcpy_sse2_64(dd - 92, ss - 92); + case 28: + memcpy_sse2_16(dd - 28, ss - 28); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 93: + memcpy_sse2_64(dd - 93, ss - 93); + case 29: + memcpy_sse2_16(dd - 29, ss - 29); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 94: + memcpy_sse2_64(dd - 94, ss - 94); + case 30: + memcpy_sse2_16(dd - 30, ss - 30); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 95: + memcpy_sse2_64(dd - 95, ss - 95); + case 31: + memcpy_sse2_16(dd - 31, ss - 31); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 96: + memcpy_sse2_64(dd - 96, ss - 96); + case 32: + memcpy_sse2_32(dd - 32, ss - 32); + break; + + case 97: + memcpy_sse2_64(dd - 97, ss - 97); + case 33: + memcpy_sse2_32(dd - 33, ss - 33); + dd[-1] = ss[-1]; + break; + + case 98: + memcpy_sse2_64(dd - 98, ss - 98); + case 34: + memcpy_sse2_32(dd - 34, ss - 34); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 99: + memcpy_sse2_64(dd - 99, ss - 99); + case 35: + memcpy_sse2_32(dd - 35, ss - 35); + *((uint16_t*)(dd - 3)) = *((uint16_t*)(ss - 3)); + dd[-1] = ss[-1]; + break; + + case 100: + memcpy_sse2_64(dd - 100, ss - 100); + case 36: + memcpy_sse2_32(dd - 36, ss - 36); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 101: + memcpy_sse2_64(dd - 101, ss - 101); + case 37: + memcpy_sse2_32(dd - 37, ss - 37); + *((uint32_t*)(dd - 5)) = *((uint32_t*)(ss - 5)); + dd[-1] = ss[-1]; + break; + + case 102: + memcpy_sse2_64(dd - 102, ss - 102); + case 38: + memcpy_sse2_32(dd - 38, ss - 38); + *((uint32_t*)(dd - 6)) = *((uint32_t*)(ss - 6)); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 103: + memcpy_sse2_64(dd - 103, ss - 103); + case 39: + memcpy_sse2_32(dd - 39, ss - 39); + *((uint32_t*)(dd - 7)) = *((uint32_t*)(ss - 7)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 104: + memcpy_sse2_64(dd - 104, ss - 104); + case 40: + memcpy_sse2_32(dd - 40, ss - 40); + *((uint64_t*)(dd - 8)) = *((uint64_t*)(ss - 8)); + break; + + case 105: + memcpy_sse2_64(dd - 105, ss - 105); + case 41: + memcpy_sse2_32(dd - 41, ss - 41); + *((uint64_t*)(dd - 9)) = *((uint64_t*)(ss - 9)); + dd[-1] = ss[-1]; + break; + + case 106: + memcpy_sse2_64(dd - 106, ss - 106); + case 42: + memcpy_sse2_32(dd - 42, ss - 42); + *((uint64_t*)(dd - 10)) = *((uint64_t*)(ss - 10)); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 107: + memcpy_sse2_64(dd - 107, ss - 107); + case 43: + memcpy_sse2_32(dd - 43, ss - 43); + *((uint64_t*)(dd - 11)) = *((uint64_t*)(ss - 11)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 108: + memcpy_sse2_64(dd - 108, ss - 108); + case 44: + memcpy_sse2_32(dd - 44, ss - 44); + *((uint64_t*)(dd - 12)) = *((uint64_t*)(ss - 12)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 109: + memcpy_sse2_64(dd - 109, ss - 109); + case 45: + memcpy_sse2_32(dd - 45, ss - 45); + *((uint64_t*)(dd - 13)) = *((uint64_t*)(ss - 13)); + *((uint32_t*)(dd - 5)) = *((uint32_t*)(ss - 5)); + dd[-1] = ss[-1]; + break; + + case 110: + memcpy_sse2_64(dd - 110, ss - 110); + case 46: + memcpy_sse2_32(dd - 46, ss - 46); + *((uint64_t*)(dd - 14)) = *((uint64_t*)(ss - 14)); + *((uint64_t*)(dd - 8)) = *((uint64_t*)(ss - 8)); + break; + + case 111: + memcpy_sse2_64(dd - 111, ss - 111); + case 47: + memcpy_sse2_32(dd - 47, ss - 47); + *((uint64_t*)(dd - 15)) = *((uint64_t*)(ss - 15)); + *((uint64_t*)(dd - 8)) = *((uint64_t*)(ss - 8)); + break; + + case 112: + memcpy_sse2_64(dd - 112, ss - 112); + case 48: + memcpy_sse2_32(dd - 48, ss - 48); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 113: + memcpy_sse2_64(dd - 113, ss - 113); + case 49: + memcpy_sse2_32(dd - 49, ss - 49); + memcpy_sse2_16(dd - 17, ss - 17); + dd[-1] = ss[-1]; + break; + + case 114: + memcpy_sse2_64(dd - 114, ss - 114); + case 50: + memcpy_sse2_32(dd - 50, ss - 50); + memcpy_sse2_16(dd - 18, ss - 18); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 115: + memcpy_sse2_64(dd - 115, ss - 115); + case 51: + memcpy_sse2_32(dd - 51, ss - 51); + memcpy_sse2_16(dd - 19, ss - 19); + *((uint16_t*)(dd - 3)) = *((uint16_t*)(ss - 3)); + dd[-1] = ss[-1]; + break; + + case 116: + memcpy_sse2_64(dd - 116, ss - 116); + case 52: + memcpy_sse2_32(dd - 52, ss - 52); + memcpy_sse2_16(dd - 20, ss - 20); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 117: + memcpy_sse2_64(dd - 117, ss - 117); + case 53: + memcpy_sse2_32(dd - 53, ss - 53); + memcpy_sse2_16(dd - 21, ss - 21); + *((uint32_t*)(dd - 5)) = *((uint32_t*)(ss - 5)); + dd[-1] = ss[-1]; + break; + + case 118: + memcpy_sse2_64(dd - 118, ss - 118); + case 54: + memcpy_sse2_32(dd - 54, ss - 54); + memcpy_sse2_16(dd - 22, ss - 22); + *((uint32_t*)(dd - 6)) = *((uint32_t*)(ss - 6)); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 119: + memcpy_sse2_64(dd - 119, ss - 119); + case 55: + memcpy_sse2_32(dd - 55, ss - 55); + memcpy_sse2_16(dd - 23, ss - 23); + *((uint32_t*)(dd - 7)) = *((uint32_t*)(ss - 7)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 120: + memcpy_sse2_64(dd - 120, ss - 120); + case 56: + memcpy_sse2_32(dd - 56, ss - 56); + memcpy_sse2_16(dd - 24, ss - 24); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 121: + memcpy_sse2_64(dd - 121, ss - 121); + case 57: + memcpy_sse2_32(dd - 57, ss - 57); + memcpy_sse2_16(dd - 25, ss - 25); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 122: + memcpy_sse2_64(dd - 122, ss - 122); + case 58: + memcpy_sse2_32(dd - 58, ss - 58); + memcpy_sse2_16(dd - 26, ss - 26); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 123: + memcpy_sse2_64(dd - 123, ss - 123); + case 59: + memcpy_sse2_32(dd - 59, ss - 59); + memcpy_sse2_16(dd - 27, ss - 27); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 124: + memcpy_sse2_64(dd - 124, ss - 124); + case 60: + memcpy_sse2_32(dd - 60, ss - 60); + memcpy_sse2_16(dd - 28, ss - 28); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 125: + memcpy_sse2_64(dd - 125, ss - 125); + case 61: + memcpy_sse2_32(dd - 61, ss - 61); + memcpy_sse2_16(dd - 29, ss - 29); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 126: + memcpy_sse2_64(dd - 126, ss - 126); + case 62: + memcpy_sse2_32(dd - 62, ss - 62); + memcpy_sse2_16(dd - 30, ss - 30); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 127: + memcpy_sse2_64(dd - 127, ss - 127); + case 63: + memcpy_sse2_32(dd - 63, ss - 63); + memcpy_sse2_16(dd - 31, ss - 31); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 128: + memcpy_sse2_128(dd - 128, ss - 128); + break; + } + + return dst; +} + + +//--------------------------------------------------------------------- +// main routine +//--------------------------------------------------------------------- +static void* memcpy_fast(void *destination, const void *source, size_t size) +{ + unsigned char *dst = (unsigned char*)destination; + const unsigned char *src = (const unsigned char*)source; + static size_t cachesize = 0x200000; // L2-cache size + size_t padding; + + // small memory copy + if (size <= 128) { + return memcpy_tiny(dst, src, size); + } + + // align destination to 16 bytes boundary + padding = (16 - (((size_t)dst) & 15)) & 15; + + if (padding > 0) { + __m128i head = _mm_loadu_si128((const __m128i*)src); + _mm_storeu_si128((__m128i*)dst, head); + dst += padding; + src += padding; + size -= padding; + } + + // medium size copy + if (size <= cachesize) { + __m128i c0, c1, c2, c3, c4, c5, c6, c7; + + for (; size >= 128; size -= 128) { + c0 = _mm_loadu_si128(((const __m128i*)src) + 0); + c1 = _mm_loadu_si128(((const __m128i*)src) + 1); + c2 = _mm_loadu_si128(((const __m128i*)src) + 2); + c3 = _mm_loadu_si128(((const __m128i*)src) + 3); + c4 = _mm_loadu_si128(((const __m128i*)src) + 4); + c5 = _mm_loadu_si128(((const __m128i*)src) + 5); + c6 = _mm_loadu_si128(((const __m128i*)src) + 6); + c7 = _mm_loadu_si128(((const __m128i*)src) + 7); + _mm_prefetch((const char*)(src + 256), _MM_HINT_NTA); + src += 128; + _mm_store_si128((((__m128i*)dst) + 0), c0); + _mm_store_si128((((__m128i*)dst) + 1), c1); + _mm_store_si128((((__m128i*)dst) + 2), c2); + _mm_store_si128((((__m128i*)dst) + 3), c3); + _mm_store_si128((((__m128i*)dst) + 4), c4); + _mm_store_si128((((__m128i*)dst) + 5), c5); + _mm_store_si128((((__m128i*)dst) + 6), c6); + _mm_store_si128((((__m128i*)dst) + 7), c7); + dst += 128; + } + } + else { // big memory copy + __m128i c0, c1, c2, c3, c4, c5, c6, c7; + + _mm_prefetch((const char*)(src), _MM_HINT_NTA); + + if ((((size_t)src) & 15) == 0) { // source aligned + for (; size >= 128; size -= 128) { + c0 = _mm_load_si128(((const __m128i*)src) + 0); + c1 = _mm_load_si128(((const __m128i*)src) + 1); + c2 = _mm_load_si128(((const __m128i*)src) + 2); + c3 = _mm_load_si128(((const __m128i*)src) + 3); + c4 = _mm_load_si128(((const __m128i*)src) + 4); + c5 = _mm_load_si128(((const __m128i*)src) + 5); + c6 = _mm_load_si128(((const __m128i*)src) + 6); + c7 = _mm_load_si128(((const __m128i*)src) + 7); + _mm_prefetch((const char*)(src + 256), _MM_HINT_NTA); + src += 128; + _mm_stream_si128((((__m128i*)dst) + 0), c0); + _mm_stream_si128((((__m128i*)dst) + 1), c1); + _mm_stream_si128((((__m128i*)dst) + 2), c2); + _mm_stream_si128((((__m128i*)dst) + 3), c3); + _mm_stream_si128((((__m128i*)dst) + 4), c4); + _mm_stream_si128((((__m128i*)dst) + 5), c5); + _mm_stream_si128((((__m128i*)dst) + 6), c6); + _mm_stream_si128((((__m128i*)dst) + 7), c7); + dst += 128; + } + } + else { // source unaligned + for (; size >= 128; size -= 128) { + c0 = _mm_loadu_si128(((const __m128i*)src) + 0); + c1 = _mm_loadu_si128(((const __m128i*)src) + 1); + c2 = _mm_loadu_si128(((const __m128i*)src) + 2); + c3 = _mm_loadu_si128(((const __m128i*)src) + 3); + c4 = _mm_loadu_si128(((const __m128i*)src) + 4); + c5 = _mm_loadu_si128(((const __m128i*)src) + 5); + c6 = _mm_loadu_si128(((const __m128i*)src) + 6); + c7 = _mm_loadu_si128(((const __m128i*)src) + 7); + _mm_prefetch((const char*)(src + 256), _MM_HINT_NTA); + src += 128; + _mm_stream_si128((((__m128i*)dst) + 0), c0); + _mm_stream_si128((((__m128i*)dst) + 1), c1); + _mm_stream_si128((((__m128i*)dst) + 2), c2); + _mm_stream_si128((((__m128i*)dst) + 3), c3); + _mm_stream_si128((((__m128i*)dst) + 4), c4); + _mm_stream_si128((((__m128i*)dst) + 5), c5); + _mm_stream_si128((((__m128i*)dst) + 6), c6); + _mm_stream_si128((((__m128i*)dst) + 7), c7); + dst += 128; + } + } + _mm_sfence(); + } + + memcpy_tiny(dst, src, size); + + return destination; +} + + +#endif diff --git a/src/components/implementation/simple_vmm/noop_nf/guest/.gitignore b/src/components/implementation/simple_vmm/noop_nf/guest/.gitignore new file mode 100644 index 0000000000..4a60f24ce6 --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/guest/.gitignore @@ -0,0 +1,2 @@ +*.elf +*.map \ No newline at end of file diff --git a/src/components/implementation/simple_vmm/noop_nf/guest/Makefile b/src/components/implementation/simple_vmm/noop_nf/guest/Makefile new file mode 100644 index 0000000000..0228863f04 --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/guest/Makefile @@ -0,0 +1,47 @@ +CC := gcc -m64 +LD := ld -m elf_x86_64 --nmagic +AS := as --64 -g + +CFLAGS := -g -O0 -ffreestanding -Wno-unused-function -Wno-unused-variable -Wno-unused-but-set-variable -nostdinc -nostdlib -fno-pic -mno-red-zone -mcmodel=large -mno-sse -mno-sse2 -mgeneral-regs-only +LDFLAGS := -nostdlib -fno-builtin -nostartfiles -nostdinc -nodefaultlibs + +GUEST_ELF = guest.elf +GUEST_IMG = guest.img +GUEST_MAP = guest.map + +AS_FILES = guest_realmode.S +AS_OBJS = $(patsubst %.S,%.o,$(AS_FILES)) + +WARNINGS += -Wall +WARNINGS += -Wcast-align +WARNINGS += -Wformat=2 +WARNINGS += -Winit-self +WARNINGS += -Wnested-externs +WARNINGS += -Wno-system-headers +WARNINGS += -Wold-style-definition +WARNINGS += -Wredundant-decls +WARNINGS += -Wsign-compare +WARNINGS += -Wstrict-prototypes +WARNINGS += -Wundef +WARNINGS += -Wvolatile-register-var +WARNINGS += -Wwrite-strings +WARNINGS += -Wno-address-of-packed-member + +CFLAGS += $(WARNINGS) + +all: $(GUEST_IMG) + +%.o: %.S + $(CC) $(CFLAGS) -I. -o $@ -c $< + +$(GUEST_IMG):$(GUEST_ELF) + @echo "[CT] $@" + @cp $< $@ + @objcopy $@ -O binary + +$(GUEST_ELF):$(AS_OBJS) + @echo "[LD] $@" + $(LD) $(LDPARAMS) -static -Map=$(GUEST_MAP) -T guest.ld -o $(GUEST_ELF) $(AS_OBJS) + +clean: + @rm -f $(GUEST_ELF) $(GUEST_IMG) $(GUEST_MAP) *.o \ No newline at end of file diff --git a/src/components/implementation/simple_vmm/noop_nf/guest/guest.ld b/src/components/implementation/simple_vmm/noop_nf/guest/guest.ld new file mode 100644 index 0000000000..07f9206c1f --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/guest/guest.ld @@ -0,0 +1,34 @@ +ENTRY(guest_real_mode_entry) +OUTPUT_FORMAT(elf64-x86-64) +OUTPUT_ARCH(i386:x86-64) + + +SECTIONS +{ + . = 0x1000; + + .text BLOCK(4K) : ALIGN(4K) + { + *(.guest_kernel_initfn*) + *(.text*) + *(.rodata*) + } + + .data BLOCK(4K) : ALIGN(4K) + { + KEEP(*( .init_array )); + KEEP(*(SORT_BY_INIT_PRIORITY( .init_array.* ))); + *(.data*) + } + + .bss BLOCK(4K) : ALIGN(4K) + { + *(.bss*) + } + + /DISCARD/ : + { + *(.fini_array*) + *(.comment*) + } +} diff --git a/src/components/implementation/simple_vmm/noop_nf/guest/guest_realmode.S b/src/components/implementation/simple_vmm/noop_nf/guest/guest_realmode.S new file mode 100644 index 0000000000..ac2e2ec0a7 --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/guest/guest_realmode.S @@ -0,0 +1,60 @@ +#define SEG_NULLASM \ + .word 0, 0; \ + .byte 0, 0, 0, 0 +#define SEG_ASM(type,base,lim) \ + .word (((lim) >> 12) & 0xffff), ((base) & 0xffff); \ + .byte (((base) >> 16) & 0xff), (0x90 | (type)), \ + (0xC0 | (((lim) >> 28) & 0xf)), (((base) >> 24) & 0xff) + +#define STA_X 0x8 // Executable segment +#define STA_E 0x4 // Expand down (non-executable segments) +#define STA_C 0x4 // Conforming code segment (executable only) +#define STA_W 0x2 // Writeable (non-executable segments) +#define STA_R 0x2 // Readable (executable segments) +#define STA_A 0x1 // Accessed + +#define CR0_PE 0x00000001 // Protection Enable +#define CR0_WP 0x00010000 // Write Protect +#define CR0_PG 0x80000000 // Paging + +#define SEL_KCSEG 0x08 /* Kernel code selector. */ +#define SEL_KDSEG 0x10 /* Kernel data selector. */ + +.global guest_real_mode_entry +/* code start entry */ +.section .guest_kernel_initfn +.code16 +guest_real_mode_entry: + ljmp $0x0, $start + +start: + cli + lgdt smpgdtdesc + movl %cr0, %eax + orl $CR0_PE, %eax + movl %eax, %cr0 + ljmpl $(SEL_KCSEG), $smpstart32 +.align 0x10 +.code32 +smpstart32: + movw $(SEL_KDSEG), %ax + movw %ax, %ds + movw %ax, %es + movw %ax, %ss + movw $0, %ax + movw %ax, %fs + movw %ax, %gs + + /* jmp to vmlinux bootloader at the specific address */ + ljmpl $(SEL_KCSEG), $0x100000 + jmp . + +.p2align 2 +smpgdt: + SEG_NULLASM + SEG_ASM(STA_X|STA_R, 0, 0xffffffff) /* code segment for protected mode, mapping 0-4G memory */ + SEG_ASM(STA_W, 0, 0xffffffff) /* data segment for protected mode, mapping 0-4G memory */ + +smpgdtdesc: + .word (smpgdtdesc - smpgdt - 1) + .long smpgdt diff --git a/src/components/implementation/simple_vmm/noop_nf/instr_emul.c b/src/components/implementation/simple_vmm/noop_nf/instr_emul.c new file mode 100644 index 0000000000..230a0a9bdf --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/instr_emul.c @@ -0,0 +1,1381 @@ +/*- + * Copyright (c) 2012 Sandvine, Inc. + * Copyright (c) 2012 NetApp, Inc. + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#include +#include + +#include + +#define CPU_REG_FIRST CPU_REG_RAX +#define CPU_REG_LAST CPU_REG_GDTR +#define CPU_REG_GENERAL_FIRST CPU_REG_RAX +#define CPU_REG_GENERAL_LAST CPU_REG_R15 +#define CPU_REG_NONGENERAL_FIRST CPU_REG_CR0 +#define CPU_REG_NONGENERAL_LAST CPU_REG_GDTR +#define CPU_REG_NATURAL_FIRST CPU_REG_CR0 +#define CPU_REG_NATURAL_LAST CPU_REG_RFLAGS +#define CPU_REG_64BIT_FIRST CPU_REG_EFER +#define CPU_REG_64BIT_LAST CPU_REG_PDPTE3 +#define CPU_REG_SEG_FIRST CPU_REG_ES +#define CPU_REG_SEG_LAST CPU_REG_GS + +#define PSL_C 0x00000001U /* carry bit */ +#define PSL_PF 0x00000004U /* parity bit */ +#define PSL_AF 0x00000010U /* bcd carry bit */ +#define PSL_Z 0x00000040U /* zero bit */ +#define PSL_N 0x00000080U /* negative bit */ +#define PSL_D 0x00000400U /* string instruction direction bit */ +#define PSL_V 0x00000800U /* overflow bit */ +#define PSL_AC 0x00040000U /* alignment checking */ + +/* + * Protections are chosen from these bits, or-ed together + */ +#define PROT_READ 0x01U /* pages can be read */ +#define PROT_WRITE 0x02U /* pages can be written */ + +/* struct vie_op.op_type */ +#define VIE_OP_TYPE_NONE 0U +#define VIE_OP_TYPE_MOV 1U +#define VIE_OP_TYPE_MOVSX 2U +#define VIE_OP_TYPE_MOVZX 3U +#define VIE_OP_TYPE_AND 4U +#define VIE_OP_TYPE_OR 5U +#define VIE_OP_TYPE_SUB 6U +#define VIE_OP_TYPE_TWO_BYTE 7U +#define VIE_OP_TYPE_PUSH 8U +#define VIE_OP_TYPE_CMP 9U +#define VIE_OP_TYPE_POP 10U +#define VIE_OP_TYPE_MOVS 11U +#define VIE_OP_TYPE_GROUP1 12U +#define VIE_OP_TYPE_STOS 13U +#define VIE_OP_TYPE_BITTEST 14U +#define VIE_OP_TYPE_TEST 15U +#define VIE_OP_TYPE_XCHG 16U + +/* struct vie_op.op_flags */ +#define VIE_OP_F_IMM (1U << 0U) /* 16/32-bit immediate operand */ +#define VIE_OP_F_IMM8 (1U << 1U) /* 8-bit immediate operand */ +#define VIE_OP_F_MOFFSET (1U << 2U) /* 16/32/64-bit immediate moffset */ +#define VIE_OP_F_NO_MODRM (1U << 3U) +#define VIE_OP_F_CHECK_GVA_DI (1U << 4U) /* for movs, need to check DI */ +/* + * The VIE_OP_F_BYTE_OP only set when the instruction support + * Encoding of Operand Size (w) Bit and the w bit of opcode is 0. + * according B.2 GENERAL-PURPOSE INSTRUCTION FORMATS AND ENCODINGS + * FOR NON-64-BIT MODES, Vol 2, Intel SDM. + */ +#define VIE_OP_F_BYTE_OP (1U << 5U) /* 8-bit operands. */ +#define VIE_OP_F_WORD_OP (1U << 6U) /* 16-bit operands. */ + +static const struct instr_emul_vie_op two_byte_opcodes[256] = { + [0xB6] = { + .op_type = VIE_OP_TYPE_MOVZX, + .op_flags = VIE_OP_F_BYTE_OP, + }, + [0xB7] = { + .op_type = VIE_OP_TYPE_MOVZX, + .op_flags = VIE_OP_F_WORD_OP, + }, + [0xBA] = { + .op_type = VIE_OP_TYPE_BITTEST, + .op_flags = VIE_OP_F_IMM8, + }, + [0xBE] = { + .op_type = VIE_OP_TYPE_MOVSX, + .op_flags = VIE_OP_F_BYTE_OP, + }, +}; + +static const struct instr_emul_vie_op one_byte_opcodes[256] = { + [0x0F] = { + .op_type = VIE_OP_TYPE_TWO_BYTE + }, + [0x2B] = { + .op_type = VIE_OP_TYPE_SUB, + }, + [0x39] = { + .op_type = VIE_OP_TYPE_CMP, + }, + [0x3B] = { + .op_type = VIE_OP_TYPE_CMP, + }, + [0x88] = { + .op_type = VIE_OP_TYPE_MOV, + .op_flags = VIE_OP_F_BYTE_OP, + }, + [0x89] = { + .op_type = VIE_OP_TYPE_MOV, + }, + [0x8A] = { + .op_type = VIE_OP_TYPE_MOV, + .op_flags = VIE_OP_F_BYTE_OP, + }, + [0x8B] = { + .op_type = VIE_OP_TYPE_MOV, + }, + [0xA1] = { + .op_type = VIE_OP_TYPE_MOV, + .op_flags = VIE_OP_F_MOFFSET | VIE_OP_F_NO_MODRM, + }, + [0xA3] = { + .op_type = VIE_OP_TYPE_MOV, + .op_flags = VIE_OP_F_MOFFSET | VIE_OP_F_NO_MODRM, + }, + [0xA4] = { + .op_type = VIE_OP_TYPE_MOVS, + .op_flags = VIE_OP_F_NO_MODRM | VIE_OP_F_CHECK_GVA_DI | VIE_OP_F_BYTE_OP, + }, + [0xA5] = { + .op_type = VIE_OP_TYPE_MOVS, + .op_flags = VIE_OP_F_NO_MODRM | VIE_OP_F_CHECK_GVA_DI, + }, + [0xAA] = { + .op_type = VIE_OP_TYPE_STOS, + .op_flags = VIE_OP_F_NO_MODRM | VIE_OP_F_BYTE_OP, + }, + [0xAB] = { + .op_type = VIE_OP_TYPE_STOS, + .op_flags = VIE_OP_F_NO_MODRM + }, + [0xC6] = { + /* XXX Group 11 extended opcode - not just MOV */ + .op_type = VIE_OP_TYPE_MOV, + .op_flags = VIE_OP_F_IMM8 | VIE_OP_F_BYTE_OP, + }, + [0xC7] = { + .op_type = VIE_OP_TYPE_MOV, + .op_flags = VIE_OP_F_IMM, + }, + [0x23] = { + .op_type = VIE_OP_TYPE_AND, + }, + [0x80] = { + /* Group 1 extended opcode */ + .op_type = VIE_OP_TYPE_GROUP1, + .op_flags = VIE_OP_F_IMM8, + }, + [0x81] = { + /* Group 1 extended opcode */ + .op_type = VIE_OP_TYPE_GROUP1, + .op_flags = VIE_OP_F_IMM, + }, + [0x83] = { + /* Group 1 extended opcode */ + .op_type = VIE_OP_TYPE_GROUP1, + .op_flags = VIE_OP_F_IMM8, + }, + [0x84] = { + .op_type = VIE_OP_TYPE_TEST, + .op_flags = VIE_OP_F_BYTE_OP, + }, + [0x85] = { + .op_type = VIE_OP_TYPE_TEST, + }, + [0x86] = { + .op_type = VIE_OP_TYPE_XCHG, + }, + [0x87] = { + .op_type = VIE_OP_TYPE_XCHG, + }, + [0x08] = { + .op_type = VIE_OP_TYPE_OR, + .op_flags = VIE_OP_F_BYTE_OP, + }, + [0x09] = { + .op_type = VIE_OP_TYPE_OR, + }, +}; + +/* struct vie.mod */ +#define VIE_MOD_INDIRECT 0U +#define VIE_MOD_INDIRECT_DISP8 1U +#define VIE_MOD_INDIRECT_DISP32 2U +#define VIE_MOD_DIRECT 3U + +/* struct vie.rm */ +#define VIE_RM_SIB 4U +#define VIE_RM_DISP32 5U + +static uint64_t size2mask[9] = { + [1] = (1UL << 8U) - 1UL, + [2] = (1UL << 16U) - 1UL, + [4] = (1UL << 32U) - 1UL, + [8] = ~0UL, +}; + +#define VMX_INVALID_VMCS_FIELD 0xffffffffU + +/* + * This struct vmcs_seg_field is defined separately to hold the vmcs field + * address of segment selector. + */ +struct vmcs_seg_field { + uint32_t base_field; + uint32_t limit_field; + uint32_t access_field; +}; + +/* + * The 'access' field has the format specified in Table 21-2 of the Intel + * Architecture Manual vol 3b. + * + * XXX The contents of the 'access' field are architecturally defined except + * bit 16 - Segment Unusable. + */ +struct seg_desc { + uint64_t base; + uint32_t limit; + uint32_t access; +}; + +static inline struct acrn_mmio_request *vcpu_mmio_req(struct vmrt_vm_vcpu *vcpu) +{ + return (struct acrn_mmio_request *)(vcpu->mmio_request); +} + +static inline uint32_t seg_desc_type(uint32_t access) +{ + return (access & 0x001fU); +} + +static uint64_t vm_get_register(struct vmrt_vm_vcpu *vcpu, enum cpu_reg_name reg) +{ + volatile struct vm_vcpu_shared_region *regs = vcpu->shared_region; + uint64_t reg_val = 0UL; + + switch (reg) + { + case CPU_REG_RAX: + reg_val = regs->ax; + break; + case CPU_REG_RCX: + reg_val = regs->cx; + break; + case CPU_REG_RDX: + reg_val = regs->dx; + break; + case CPU_REG_RBX: + reg_val = regs->bx; + break; + case CPU_REG_RSP: + reg_val = regs->sp; + break; + case CPU_REG_RBP: + reg_val = regs->bp; + break; + case CPU_REG_RSI: + reg_val = regs->si; + break; + case CPU_REG_RDI: + reg_val = regs->di; + break; + case CPU_REG_R8: + reg_val = regs->r8; + break; + case CPU_REG_R9: + reg_val = regs->r9; + break; + case CPU_REG_R10: + reg_val = regs->r10; + break; + case CPU_REG_R11: + reg_val = regs->r11; + break; + case CPU_REG_R12: + reg_val = regs->r12; + break; + case CPU_REG_R13: + reg_val = regs->r13; + break; + case CPU_REG_R14: + reg_val = regs->r14; + break; + case CPU_REG_R15: + reg_val = regs->r15; + break; + default: + VM_PANIC(vcpu); + break; + } + + return reg_val; +} + +static void vm_set_register(struct vmrt_vm_vcpu *vcpu, enum cpu_reg_name reg, + uint64_t val) +{ + volatile struct vm_vcpu_shared_region *regs = vcpu->shared_region; + + switch (reg) + { + case CPU_REG_RAX: + regs->ax = val; + break; + case CPU_REG_RCX: + regs->cx = val; + break; + case CPU_REG_RDX: + regs->dx = val; + break; + case CPU_REG_RBX: + regs->bx = val; + break; + case CPU_REG_RSP: + regs->sp = val; + break; + case CPU_REG_RBP: + regs->bp = val; + break; + case CPU_REG_RSI: + regs->si = val; + break; + case CPU_REG_RDI: + regs->di = val; + break; + case CPU_REG_R8: + regs->r8 = val; + break; + case CPU_REG_R9: + regs->r9 = val; + break; + case CPU_REG_R10: + regs->r10 = val; + break; + case CPU_REG_R11: + regs->r11 = val; + break; + case CPU_REG_R12: + regs->r12 = val; + break; + case CPU_REG_R13: + regs->r13 = val; + break; + case CPU_REG_R14: + regs->r14 = val; + break; + case CPU_REG_R15: + regs->r15 = val; + break; + default: + VM_PANIC(vcpu); + break; + } +} + +static int32_t vie_canonical_check(uint64_t gla) +{ + int32_t ret = 0; + uint64_t mask; + + /* + * The value of the bit 47 in the 'gla' should be replicated in the + * most significant 16 bits. + */ + mask = ~((1UL << 48U) - 1UL); + if ((gla & (1UL << 47U)) != 0U) { + ret = ((gla & mask) != mask) ? 1 : 0; + } else { + ret = ((gla & mask) != 0U) ? 1 : 0; + } + + return ret; +} + +/* + * @pre vcpu != NULL + */ +static inline void vie_mmio_read(struct vmrt_vm_vcpu *vcpu, uint64_t *rval) +{ + *rval = vcpu_mmio_req(vcpu)->value; +} + +/* + * @pre vcpu != NULL + */ +static inline void vie_mmio_write(struct vmrt_vm_vcpu *vcpu, uint64_t wval) +{ + vcpu_mmio_req(vcpu)->value = wval; +} + +static void vie_calc_bytereg(const struct instr_emul_vie *vie, + enum cpu_reg_name *reg, int32_t *lhbr) +{ + *lhbr = 0; + *reg = (enum cpu_reg_name)(vie->reg); + + /* + * 64-bit mode imposes limitations on accessing legacy high byte + * registers (lhbr). + * + * The legacy high-byte registers cannot be addressed if the REX + * prefix is present. In this case the values 4, 5, 6 and 7 of the + * 'ModRM:reg' field address %spl, %bpl, %sil and %dil respectively. + * + * If the REX prefix is not present then the values 4, 5, 6 and 7 + * of the 'ModRM:reg' field address the legacy high-byte registers, + * %ah, %ch, %dh and %bh respectively. + */ + if (vie->rex_present == 0U) { + if ((vie->reg & 0x4U) != 0U) { + *lhbr = 1; + *reg = (enum cpu_reg_name)(vie->reg & 0x3U); + } + } +} + +static uint8_t vie_read_bytereg(struct vmrt_vm_vcpu *vcpu, const struct instr_emul_vie *vie) +{ + int32_t lhbr; + uint64_t val; + uint8_t reg_val; + enum cpu_reg_name reg; + + vie_calc_bytereg(vie, ®, &lhbr); + val = vm_get_register(vcpu, reg); + + /* + * To obtain the value of a legacy high byte register shift the + * base register right by 8 bits (%ah = %rax >> 8). + */ + if (lhbr != 0) { + reg_val = (uint8_t)(val >> 8U); + } else { + reg_val = (uint8_t)val; + } + + return reg_val; +} + +static void vie_write_bytereg(struct vmrt_vm_vcpu *vcpu, const struct instr_emul_vie *vie, + uint8_t byte) +{ + uint64_t origval, val, mask; + enum cpu_reg_name reg; + int32_t lhbr; + + vie_calc_bytereg(vie, ®, &lhbr); + origval = vm_get_register(vcpu, reg); + + val = byte; + mask = 0xffU; + if (lhbr != 0) { + /* + * Shift left by 8 to store 'byte' in a legacy high + * byte register. + */ + val <<= 8U; + mask <<= 8U; + } + val |= origval & ~mask; + vm_set_register(vcpu, reg, val); +} + +/** + * @pre vcpu != NULL + * @pre size = 1, 2, 4 or 8 + * @pre ((reg <= CPU_REG_LAST) && (reg >= CPU_REG_FIRST)) + * @pre ((reg != CPU_REG_CR2) && (reg != CPU_REG_IDTR) && (reg != CPU_REG_GDTR)) + */ +static void vie_update_register(struct vmrt_vm_vcpu *vcpu, enum cpu_reg_name reg, + uint64_t val_arg, uint8_t size) +{ + uint64_t origval; + uint64_t val = val_arg; + + switch (size) { + case 1U: + case 2U: + origval = vm_get_register(vcpu, reg); + val &= size2mask[size]; + val |= origval & ~size2mask[size]; + break; + case 4U: + val &= 0xffffffffUL; + break; + default: /* size == 8 */ + break; + } + + vm_set_register(vcpu, reg, val); +} + +#define RFLAGS_STATUS_BITS (PSL_C | PSL_PF | PSL_AF | PSL_Z | PSL_N | PSL_V) + +static void vie_update_rflags(struct vmrt_vm_vcpu *vcpu, uint64_t rflags2, uint64_t psl) +{ + uint8_t size; + uint64_t rflags; + + rflags = vm_get_register(vcpu, CPU_REG_RFLAGS); + + rflags &= ~RFLAGS_STATUS_BITS; + rflags |= rflags2 & psl; + size = 8U; + + vie_update_register(vcpu, CPU_REG_RFLAGS, rflags, size); +} + +/* + * Return the status flags that would result from doing (x - y). + */ +#define build_getcc(name, type) \ +static uint64_t name(type x, type y) \ +{ \ + uint64_t rflags; \ + \ + __asm __volatile("sub %2,%1; pushfq; popq %0" : \ + "=r" (rflags), "+r" (x) : "m" (y)); \ + return rflags; \ +} +build_getcc(getcc8, uint8_t) +build_getcc(getcc16, uint16_t) +build_getcc(getcc32, uint32_t) +build_getcc(getcc64, uint64_t) + +/** + * @pre opsize = 1, 2, 4 or 8 + */ +static uint64_t getcc(uint8_t opsize, uint64_t x, uint64_t y) +{ + uint64_t rflags; + switch (opsize) { + case 1U: + rflags = getcc8((uint8_t) x, (uint8_t) y); + break; + case 2U: + rflags = getcc16((uint16_t) x, (uint16_t) y); + break; + case 4U: + rflags = getcc32((uint32_t) x, (uint32_t) y); + break; + default: /* opsize == 8 */ + rflags = getcc64(x, y); + break; + } + + return rflags; +} + +static int32_t emulate_mov(struct vmrt_vm_vcpu *vcpu, const struct instr_emul_vie *vie) +{ + int32_t error; + uint8_t size; + enum cpu_reg_name reg; + uint8_t byte; + uint64_t val; + + size = vie->opsize; + error = 0; + switch (vie->opcode) { + case 0x88U: + /* + * MOV byte from reg (ModRM:reg) to mem (ModRM:r/m) + * 88/r: mov r/m8, r8 + * REX + 88/r: mov r/m8, r8 (%ah, %ch, %dh, %bh not available) + */ + byte = vie_read_bytereg(vcpu, vie); + vie_mmio_write(vcpu, byte); + break; + case 0x89U: + /* + * MOV from reg (ModRM:reg) to mem (ModRM:r/m) + * 89/r: mov r/m16, r16 + * 89/r: mov r/m32, r32 + * REX.W + 89/r mov r/m64, r64 + */ + + reg = (enum cpu_reg_name)(vie->reg); + val = vm_get_register(vcpu, reg); + val &= size2mask[size]; + vie_mmio_write(vcpu, val); + break; + case 0x8AU: + /* + * MOV byte from mem (ModRM:r/m) to reg (ModRM:reg) + * 8A/r: mov r8, r/m8 + * REX + 8A/r: mov r8, r/m8 + */ + vie_mmio_read(vcpu, &val); + vie_write_bytereg(vcpu, vie, (uint8_t)val); + break; + case 0x8BU: + /* + * MOV from mem (ModRM:r/m) to reg (ModRM:reg) + * 8B/r: mov r16, r/m16 + * 8B/r: mov r32, r/m32 + * REX.W 8B/r: mov r64, r/m64 + */ + vie_mmio_read(vcpu, &val); + reg = (enum cpu_reg_name)(vie->reg); + vie_update_register(vcpu, reg, val, size); + break; + case 0xA1U: + /* + * MOV from seg:moffset to AX/EAX/RAX + * A1: mov AX, moffs16 + * A1: mov EAX, moffs32 + * REX.W + A1: mov RAX, moffs64 + */ + vie_mmio_read(vcpu, &val); + reg = CPU_REG_RAX; + vie_update_register(vcpu, reg, val, size); + break; + case 0xA3U: + /* + * MOV from AX/EAX/RAX to seg:moffset + * A3: mov moffs16, AX + * A3: mov moffs32, EAX + * REX.W + A3: mov moffs64, RAX + */ + val = vm_get_register(vcpu, CPU_REG_RAX); + val &= size2mask[size]; + vie_mmio_write(vcpu, val); + break; + case 0xC6U: + /* + * MOV from imm8 to mem (ModRM:r/m) + * C6/0 mov r/m8, imm8 + * REX + C6/0 mov r/m8, imm8 + */ + vie_mmio_write(vcpu, (uint64_t)vie->immediate); + break; + case 0xC7U: + /* + * MOV from imm16/imm32 to mem (ModRM:r/m) + * C7/0 mov r/m16, imm16 + * C7/0 mov r/m32, imm32 + * REX.W + C7/0 mov r/m64, imm32 + * (sign-extended to 64-bits) + */ + val = (uint64_t)(vie->immediate) & size2mask[size]; + vie_mmio_write(vcpu, val); + break; + default: + /* + * For the opcode that is not handled (an invalid opcode), the + * error code is assigned to a default value (-EINVAL). + * Gracefully return this error code if prior case clauses have + * not been met. + */ + error = -EINVAL; + break; + } + + return error; +} + +static void copy_from_gva(struct vmrt_vm_vcpu *vcpu, void *buf, u64_t gva, u32_t len) +{ + void *src = GPA2HVA(vmrt_vm_gva2gpa(vcpu, gva), vcpu->vm); + memcpy(buf, src, len); +} + +static int32_t vie_init(struct instr_emul_vie *vie, struct vmrt_vm_vcpu *vcpu) +{ + volatile struct vm_vcpu_shared_region *regs = vcpu->shared_region; + u64_t inst_len = regs->inst_length; + int32_t ret; + + if ((inst_len > VIE_INST_SIZE) || (inst_len == 0U)) { + VM_PANIC(vcpu); + } else { + (void)memset(vie, 0U, sizeof(struct instr_emul_vie)); + + /* init register fields in vie. */ + vie->base_register = CPU_REG_LAST; + vie->index_register = CPU_REG_LAST; + vie->segment_register = CPU_REG_LAST; + + copy_from_gva(vcpu, vie->inst, regs->ip, inst_len); + /* + * Use this to print the inst binary to verify if the decodeed inst is correct + * + printc("inst to be decode: "); + for (u64_t i = 0; i < inst_len; i++) { + printc("%x ", vie->inst[i]); + } + printc("\ninst vie init done\n"); + */ + + vie->num_valid = (uint8_t)inst_len; + ret = 0; + } + + return ret; +} + +static int32_t vie_peek(const struct instr_emul_vie *vie, uint8_t *x) +{ + int32_t ret; + if (vie->num_processed < vie->num_valid) { + *x = vie->inst[vie->num_processed]; + ret = 0; + } else { + ret = -1; + } + return ret; +} + +static void vie_advance(struct instr_emul_vie *vie) +{ + + vie->num_processed++; +} + +static bool segment_override(uint8_t x, enum cpu_reg_name *seg) +{ + bool override = true; + switch (x) { + case 0x2EU: + *seg = CPU_REG_CS; + break; + case 0x36U: + *seg = CPU_REG_SS; + break; + case 0x3EU: + *seg = CPU_REG_DS; + break; + case 0x26U: + *seg = CPU_REG_ES; + break; + case 0x64U: + *seg = CPU_REG_FS; + break; + case 0x65U: + *seg = CPU_REG_GS; + break; + default: + override = false; + break; + } + return override; +} + +static void decode_op_and_addr_size(struct instr_emul_vie *vie) +{ + /* + * Section "Operand-Size And Address-Size Attributes", Intel SDM, Vol 1 + */ + + /* + * Default address size is 64-bits and default operand size + * is 32-bits. + */ + vie->addrsize = ((vie->addrsize_override != 0U) ? 4U : 8U); + if (vie->rex_w != 0U) { + vie->opsize = 8U; + } else if (vie->opsize_override != 0U) { + vie->opsize = 2U; + } else { + vie->opsize = 4U; + } +} +static int32_t decode_prefixes(struct instr_emul_vie *vie) +{ + uint8_t x, i; + int32_t ret = 0; + + for (i = 0U; i < VIE_PREFIX_SIZE; i++) { + if (vie_peek(vie, &x) != 0) { + ret = -1; + break; + } else { + if (x == 0x66U) { + vie->opsize_override = 1U; + } else if (x == 0x67U) { + vie->addrsize_override = 1U; + } else if (x == 0xF3U) { + vie->repz_present = 1U; + } else if (x == 0xF2U) { + vie->repnz_present = 1U; + } else if (segment_override(x, &vie->segment_register)) { + vie->seg_override = 1U; + } else { + break; + } + + vie_advance(vie); + } + } + + if (ret == 0) { + /* + * From section 2.2.1, "REX Prefixes", Intel SDM Vol 2: + * - Only one REX prefix is allowed per instruction. + * - The REX prefix must immediately precede the opcode byte or the + * escape opcode byte. + * - If an instruction has a mandatory prefix (0x66, 0xF2 or 0xF3) + * the mandatory prefix must come before the REX prefix. + */ + if ( (x >= 0x40U) && (x <= 0x4FU)) { + vie->rex_present = 1U; + vie->rex_w = (x >> 0x3U) & 1U; + vie->rex_r = (x >> 0x2U) & 1U; + vie->rex_x = (x >> 0x1U) & 1U; + vie->rex_b = (x >> 0x0U) & 1U; + vie_advance(vie); + } + decode_op_and_addr_size(vie); + } + + return ret; +} + +static int32_t decode_two_byte_opcode(struct instr_emul_vie *vie) +{ + int32_t ret = 0; + uint8_t x; + + if (vie_peek(vie, &x) != 0) { + ret = -1; + } else { + vie->opcode = x; + vie->op = two_byte_opcodes[x]; + + if (vie->op.op_type == VIE_OP_TYPE_NONE) { + ret = -1; + } else { + vie_advance(vie); + } + } + + return ret; +} + +static int32_t decode_opcode(struct instr_emul_vie *vie) +{ + int32_t ret = 0; + uint8_t x; + + if (vie_peek(vie, &x) != 0) { + ret = -1; + } else { + vie->opcode = x; + vie->op = one_byte_opcodes[x]; + + if (vie->op.op_type == VIE_OP_TYPE_NONE) { + ret = -1; + } else { + vie_advance(vie); + + if (vie->op.op_type == VIE_OP_TYPE_TWO_BYTE) { + ret = decode_two_byte_opcode(vie); + } + } + } + + return ret; +} + +static int32_t decode_modrm(struct instr_emul_vie *vie) +{ + uint8_t x; + int32_t ret; + + if ((vie->op.op_flags & VIE_OP_F_NO_MODRM) != 0U) { + ret = 0; + } else if (vie_peek(vie, &x) != 0) { + ret = -1; + } else { + vie->mod = (x >> 6U) & 0x3U; + vie->rm = (x >> 0U) & 0x7U; + vie->reg = (x >> 3U) & 0x7U; + + /* + * A direct addressing mode makes no sense in the context of an EPT + * fault. There has to be a memory access involved to cause the + * EPT fault. + */ + if (vie->mod == VIE_MOD_DIRECT) { + ret = -1; + } else { + if (((vie->mod == VIE_MOD_INDIRECT) && (vie->rm == VIE_RM_DISP32)) || + ((vie->mod != VIE_MOD_DIRECT) && (vie->rm == VIE_RM_SIB))) { + /* + * Table 2-5: Special Cases of REX Encodings + * + * mod=0, r/m=5 is used in the compatibility mode to + * indicate a disp32 without a base register. + * + * mod!=3, r/m=4 is used in the compatibility mode to + * indicate that the SIB byte is present. + * + * The 'b' bit in the REX prefix is don't care in + * this case. + */ + } else { + vie->rm |= (vie->rex_b << 3U); + } + + vie->reg |= (vie->rex_r << 3U); + + /* SIB */ + if ((vie->mod != VIE_MOD_DIRECT) && (vie->rm == VIE_RM_SIB)) { + /* done */ + } else { + vie->base_register = (enum cpu_reg_name)vie->rm; + + switch (vie->mod) { + case VIE_MOD_INDIRECT_DISP8: + vie->disp_bytes = 1U; + break; + case VIE_MOD_INDIRECT_DISP32: + vie->disp_bytes = 4U; + break; + case VIE_MOD_INDIRECT: + if (vie->rm == VIE_RM_DISP32) { + vie->disp_bytes = 4U; + /* + * Table 2-7. RIP-Relative Addressing + * + * In 64-bit mode mod=00 r/m=101 implies [rip] + disp32 + * whereas in compatibility mode it just implies disp32. + */ + + vie->base_register = CPU_REG_RIP; + printc("VM exit with RIP as indirect access"); + assert(0); + } + break; + default: + /* VIE_MOD_DIRECT */ + break; + } + + } + vie_advance(vie); + + ret = 0; + } + } + + return ret; +} + +static int32_t decode_sib(struct instr_emul_vie *vie) +{ + uint8_t x; + int32_t ret; + + /* Proceed only if SIB byte is present */ + if ((vie->mod == VIE_MOD_DIRECT) || (vie->rm != VIE_RM_SIB)) { + ret = 0; + } else if (vie_peek(vie, &x) != 0) { + ret = -1; + } else { + + /* De-construct the SIB byte */ + vie->ss = (x >> 6U) & 0x3U; + vie->index = (x >> 3U) & 0x7U; + vie->base = (x >> 0U) & 0x7U; + + /* Apply the REX prefix modifiers */ + vie->index |= vie->rex_x << 3U; + vie->base |= vie->rex_b << 3U; + + switch (vie->mod) { + case VIE_MOD_INDIRECT_DISP8: + vie->disp_bytes = 1U; + break; + case VIE_MOD_INDIRECT_DISP32: + vie->disp_bytes = 4U; + break; + default: + /* + * All possible values of 'vie->mod': + * 1. VIE_MOD_DIRECT + * has been handled at the start of this function + * 2. VIE_MOD_INDIRECT_DISP8 + * has been handled in prior case clauses + * 3. VIE_MOD_INDIRECT_DISP32 + * has been handled in prior case clauses + * 4. VIE_MOD_INDIRECT + * will be handled later after this switch statement + */ + break; + } + + if ((vie->mod == VIE_MOD_INDIRECT) && ((vie->base == 5U) || (vie->base == 13U))) { + /* + * Special case when base register is unused if mod = 0 + * and base = %rbp or %r13. + * + * Documented in: + * Table 2-3: 32-bit Addressing Forms with the SIB Byte + * Table 2-5: Special Cases of REX Encodings + */ + vie->disp_bytes = 4U; + } else { + vie->base_register = (enum cpu_reg_name)vie->base; + } + + /* + * All encodings of 'index' are valid except for %rsp (4). + * + * Documented in: + * Table 2-3: 32-bit Addressing Forms with the SIB Byte + * Table 2-5: Special Cases of REX Encodings + */ + if (vie->index != 4U) { + vie->index_register = (enum cpu_reg_name)vie->index; + } + + /* 'scale' makes sense only in the context of an index register */ + if (vie->index_register < CPU_REG_LAST) { + vie->scale = 1U << vie->ss; + } + + vie_advance(vie); + + ret = 0; + } + + return ret; +} + +static int32_t decode_displacement(struct instr_emul_vie *vie) +{ + uint8_t n, i, x; + int32_t ret = 0; + + union { + uint8_t buf[4]; + int8_t signed8; + int32_t signed32; + } u; + + n = vie->disp_bytes; + if (n != 0U) { + if ((n != 1U) && (n != 4U)) { + printc("%s: decode_displacement: invalid disp_bytes %d", __func__, n); + ret = -EINVAL; + } else { + + for (i = 0U; i < n; i++) { + if (vie_peek(vie, &x) != 0) { + ret = -1; + break; + } + + u.buf[i] = x; + vie_advance(vie); + } + + if (ret == 0) { + if (n == 1U) { + vie->displacement = u.signed8; /* sign-extended */ + } else { + vie->displacement = u.signed32; /* sign-extended */ + } + } + } + } + + return ret; +} + +static int32_t decode_immediate(struct instr_emul_vie *vie) +{ + uint8_t i, n, x; + int32_t ret = 0; + union { + uint8_t buf[4]; + int8_t signed8; + int16_t signed16; + int32_t signed32; + } u; + + /* Figure out immediate operand size (if any) */ + if ((vie->op.op_flags & VIE_OP_F_IMM) != 0U) { + /* + * Section 2.2.1.5 "Immediates", Intel SDM: + * In 64-bit mode the typical size of immediate operands + * remains 32-bits. When the operand size if 64-bits, the + * processor sign-extends all immediates to 64-bits prior + * to their use. + */ + if ((vie->opsize == 4U) || (vie->opsize == 8U)) { + vie->imm_bytes = 4U; + } + else { + vie->imm_bytes = 2U; + } + } else if ((vie->op.op_flags & VIE_OP_F_IMM8) != 0U) { + vie->imm_bytes = 1U; + } else { + /* No op_flag on immediate operand size */ + } + + n = vie->imm_bytes; + if (n != 0U) { + if ((n != 1U) && (n != 2U) && (n != 4U)) { + printc("%s: invalid number of immediate bytes: %d", __func__, n); + ret = -EINVAL; + } else { + for (i = 0U; i < n; i++) { + if (vie_peek(vie, &x) != 0) { + ret = -1; + break; + } + + u.buf[i] = x; + vie_advance(vie); + } + + if (ret == 0) { + /* sign-extend the immediate value before use */ + if (n == 1U) { + vie->immediate = u.signed8; + } else if (n == 2U) { + vie->immediate = u.signed16; + } else { + vie->immediate = u.signed32; + } + } + } + } + + return ret; +} + +static int32_t decode_moffset(struct instr_emul_vie *vie) +{ + uint8_t i, n, x; + int32_t ret = 0; + union { + uint8_t buf[8]; + uint64_t u64; + } u; + + if ((vie->op.op_flags & VIE_OP_F_MOFFSET) != 0U) { + /* + * Section 2.2.1.4, "Direct Memory-Offset MOVs", Intel SDM: + * The memory offset size follows the address-size of the instruction. + */ + n = vie->addrsize; + if ((n != 2U) && (n != 4U) && (n != 8U)) { + printc("%s: invalid moffset bytes: %hhu", __func__, n); + ret = -EINVAL; + } else { + u.u64 = 0UL; + for (i = 0U; i < n; i++) { + if (vie_peek(vie, &x) != 0) { + ret = -1; + break; + } + + u.buf[i] = x; + vie_advance(vie); + } + if (ret == 0) { + vie->displacement = (int64_t)u.u64; + } + } + } + + return ret; +} + +static int32_t local_decode_instruction(struct instr_emul_vie *vie) +{ + int32_t ret; + + if (decode_prefixes(vie) != 0) { + ret = -1; + } else if (decode_opcode(vie) != 0) { + ret = -1; + } else if (decode_modrm(vie) != 0) { + ret = -1; + } else if (decode_sib(vie) != 0) { + ret = -1; + } else if (decode_displacement(vie) != 0) { + ret = -1; + } else if (decode_immediate(vie) != 0) { + ret = -1; + } else if (decode_moffset(vie) != 0) { + ret = -1; + } else { + vie->decoded = 1U; /* success */ + ret = 0; + } + + return ret; +} + +static int32_t instr_check_gva(struct vmrt_vm_vcpu *vcpu) +{ + int32_t ret = 0; + uint64_t base, segbase, idx, gva; + enum cpu_reg_name seg; + struct instr_emul_vie *vie = &((struct instr_emul_ctxt *)vcpu->inst_ctxt)->vie; + + base = 0UL; + if (vie->base_register != CPU_REG_LAST) { + base = vm_get_register(vcpu, vie->base_register); + + /* RIP relative addressing starts from the + * following instruction + */ + if (vie->base_register == CPU_REG_RIP) { + base += vie->num_processed; + } + + } + + idx = 0UL; + if (vie->index_register != CPU_REG_LAST) { + idx = vm_get_register(vcpu, vie->index_register); + } + + /* "Specifying a Segment Selector" of SDM Vol1 3.7.4 + * + * In legacy IA-32 mode, when ESP or EBP register is used as + * base, the SS segment is default segment. + * + * All data references, except when relative to stack or + * string destination, DS is default segment. + * + * segment override could overwrite the default segment + * + * 64bit mode, segmentation is generally disabled. The + * exception are FS and GS. + */ + if (vie->seg_override != 0U) { + seg = vie->segment_register; + } else if ((vie->base_register == CPU_REG_RSP) || + (vie->base_register == CPU_REG_RBP)) { + seg = CPU_REG_SS; + } else { + seg = CPU_REG_DS; + } + + if ((seg != CPU_REG_FS) && + (seg != CPU_REG_GS)) { + segbase = 0UL; + } else { + struct seg_desc desc; + + VM_PANIC(vcpu); + segbase = desc.base; + } + + gva = segbase + base + (uint64_t)vie->scale * idx + (uint64_t)vie->displacement; + + vie->gva = gva; + + if (vie_canonical_check(gva) != 0) { + VM_PANIC(vcpu); + } else { + #define PAGE_FAULT_WR_FLAG 0x00000002U + + vmrt_vm_gva2gpa(vcpu, gva); + ret = 0; + if (ret < 0) { + VM_PANIC(vcpu); + } else { + ret = 0; + } + } + + return ret; +} + +int32_t decode_instruction(struct vmrt_vm_vcpu *vcpu) +{ + struct instr_emul_ctxt *emul_ctxt; + uint32_t csar; + int32_t retval; + + emul_ctxt = vcpu->inst_ctxt; + retval = vie_init(&emul_ctxt->vie, vcpu); + + if (retval < 0) { + VM_PANIC(vcpu); + } else { + retval = local_decode_instruction(&emul_ctxt->vie); + + if (retval != 0) { + VM_PANIC(vcpu); + } else { + /* + * We do operand check in instruction decode phase and + * inject exception accordingly. In late instruction + * emulation, it will always success. + * + * We only need to do dst check for movs. For other instructions, + * they always has one register and one mmio which trigger EPT + * by access mmio. With VMX enabled, the related check is done + * by VMX itself before hit EPT violation. + * + */ + if ((emul_ctxt->vie.op.op_flags & VIE_OP_F_CHECK_GVA_DI) != 0U) { + VM_PANIC(vcpu); + } else { + retval = instr_check_gva(vcpu); + } + + if (retval >= 0) { + /* return the Memory Operand byte size */ + if ((emul_ctxt->vie.op.op_flags & VIE_OP_F_BYTE_OP) != 0U) { + retval = 1; + } else if ((emul_ctxt->vie.op.op_flags & VIE_OP_F_WORD_OP) != 0U) { + retval = 2; + } else { + retval = (int32_t)emul_ctxt->vie.opsize; + } + } + } + } + + return retval; +} + +int32_t emulate_instruction(struct vmrt_vm_vcpu *vcpu) +{ + struct instr_emul_vie *vie = &((struct instr_emul_ctxt *)vcpu->inst_ctxt)->vie; + int32_t error; + + if (vie->decoded != 0U) { + switch (vie->op.op_type) { + case VIE_OP_TYPE_MOV: + error = emulate_mov(vcpu, vie); + break; + default: + VM_PANIC(vcpu); + error = -EINVAL; + break; + } + } else { + VM_PANIC(vcpu); + error = -EINVAL; + } + + return error; +} diff --git a/src/components/implementation/simple_vmm/noop_nf/instr_emul.h b/src/components/implementation/simple_vmm/noop_nf/instr_emul.h new file mode 100644 index 0000000000..901428dcb4 --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/instr_emul.h @@ -0,0 +1,95 @@ +/*- + * Copyright (c) 2012 NetApp, Inc. + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef INSTR_EMUL_H +#define INSTR_EMUL_H + +#include +#include + +struct vmrt_vm_vcpu; +struct instr_emul_vie_op { + uint8_t op_type; /* type of operation (e.g. MOV) */ + uint16_t op_flags; +}; + +#define VIE_PREFIX_SIZE 4U +#define VIE_INST_SIZE 15U +struct instr_emul_vie { + uint8_t inst[VIE_INST_SIZE]; /* instruction bytes */ + uint8_t num_valid; /* size of the instruction */ + uint8_t num_processed; + + uint8_t addrsize:4, opsize:4; /* address and operand sizes */ + uint8_t rex_w:1, /* REX prefix */ + rex_r:1, + rex_x:1, + rex_b:1, + rex_present:1, + repz_present:1, /* REP/REPE/REPZ prefix */ + repnz_present:1, /* REPNE/REPNZ prefix */ + opsize_override:1, /* Operand size override */ + addrsize_override:1, /* Address size override */ + seg_override:1; /* Segment override */ + + uint8_t mod:2, /* ModRM byte */ + reg:4, + rm:4; + + uint8_t ss:2, /* SIB byte */ + index:4, + base:4; + + uint8_t disp_bytes; + uint8_t imm_bytes; + + uint8_t scale; + enum cpu_reg_name base_register; /* CPU_REG_xyz */ + enum cpu_reg_name index_register; /* CPU_REG_xyz */ + enum cpu_reg_name segment_register; /* CPU_REG_xyz */ + + int64_t displacement; /* optional addr displacement */ + int64_t immediate; /* optional immediate operand */ + + uint8_t decoded; /* set to 1 if successfully decoded */ + + uint8_t opcode; + struct instr_emul_vie_op op; /* opcode description */ + + uint64_t dst_gpa; /* saved dst operand gpa. Only for movs */ + uint64_t gva; /* saved gva for instruction emulation */ +}; + +struct instr_emul_ctxt { + struct instr_emul_vie vie; +}; + +int32_t emulate_instruction(struct vmrt_vm_vcpu *vcpu); +int32_t decode_instruction(struct vmrt_vm_vcpu *vcpu); + +#endif diff --git a/src/components/implementation/simple_vmm/noop_nf/ioapic.h b/src/components/implementation/simple_vmm/noop_nf/ioapic.h new file mode 100644 index 0000000000..55b214a1e4 --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/ioapic.h @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2018-2022 Intel Corporation. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef ARCH_X86_IOAPIC_H +#define ARCH_X86_IOAPIC_H + +#include + +#define NR_LEGACY_IRQ 16U +#define NR_LEGACY_PIN NR_LEGACY_IRQ + +struct ioapic_info { + uint8_t id; /* IOAPIC ID as indicated in ACPI MADT */ + uint32_t addr; /* IOAPIC Register address */ + uint32_t gsi_base; /* Global System Interrupt where this IO-APIC's interrupt input start */ + uint32_t nr_pins; /* Number of Interrupt inputs as determined by Max. Redir Entry Register */ +}; + +void ioapic_setup_irqs(void); + +bool is_ioapic_irq(uint32_t irq); +uint32_t gsi_to_ioapic_pin(uint32_t gsi); +int32_t init_ioapic_id_info(void); +uint8_t ioapic_irq_to_ioapic_id(uint32_t irq); + +uint8_t get_platform_ioapic_info (struct ioapic_info **plat_ioapic_info); + +/** + * @defgroup ioapic_ext_apis IOAPIC External Interfaces + * + * This is a group that includes IOAPIC External Interfaces. + * + * @{ + */ + +/** + * @brief Get irq num from gsi num + * + * @param[in] gsi The gsi number + * + * @return irq number + */ +uint32_t ioapic_gsi_to_irq(uint32_t gsi); +/** + * @brief Set the redirection table entry + * + * Set the redirection table entry of an interrupt + * + * @param[in] irq The number of irq to set + * @param[in] rte Union of ioapic_rte to set + */ +void ioapic_set_rte(uint32_t irq, union ioapic_rte rte); + +/** + * @brief Get the redirection table entry + * + * Get the redirection table entry of an interrupt + * + * @param[in] irq The number of irq to fetch RTE + * @param[inout] rte Pointer to union ioapic_rte to return result RTE + * + * @pre rte != NULL + */ +void ioapic_get_rte(uint32_t irq, union ioapic_rte *rte); + +/** + * @brief Suspend ioapic + * + * Suspend ioapic, mainly save the RTEs. + */ +void suspend_ioapic(void); + +/** + * @brief Resume ioapic + * + * Resume ioapic, mainly restore the RTEs. + */ +void resume_ioapic(void); + +/** + * @} + */ +/* End of ioapic_ext_apis */ + +void ioapic_gsi_mask_irq(uint32_t irq); +void ioapic_gsi_unmask_irq(uint32_t irq); + +void ioapic_get_rte_entry(void *ioapic_base, uint32_t pin, union ioapic_rte *rte); + +void *gsi_to_ioapic_base(uint32_t gsi); +uint32_t get_max_nr_gsi(void); +uint8_t get_gsi_to_ioapic_index(uint32_t gsi); +uint32_t get_pic_pin_from_ioapic_pin(uint32_t pin_index); +bool is_gsi_valid(uint32_t gsi); + +#endif /* ARCH_X86_IOAPIC_H */ diff --git a/src/components/implementation/simple_vmm/noop_nf/irq.h b/src/components/implementation/simple_vmm/noop_nf/irq.h new file mode 100644 index 0000000000..06c21c902a --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/irq.h @@ -0,0 +1,136 @@ +/* + * Copyright (C) 2018-2022 Intel Corporation. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef ARCH_X86_IRQ_H +#define ARCH_X86_IRQ_H + +#include + +/** + * @file arch/x86/asm/irq.h + * + * @brief public APIs for x86 IRQ handling + */ + +#define DBG_LEVEL_PTIRQ 6U +#define DBG_LEVEL_IRQ 6U + +#define NR_MAX_VECTOR 0xFFU +#define VECTOR_INVALID (NR_MAX_VECTOR + 1U) + +/* # of NR_STATIC_MAPPINGS_1 entries for timer, vcpu notify, and PMI */ +#define NR_STATIC_MAPPINGS_1 3U + +/* + * The static IRQ/Vector mapping table in irq.c consists of the following entries: + * # of NR_STATIC_MAPPINGS_1 entries for timer, vcpu notify, and PMI + * + * # of CONFIG_MAX_VM_NUM entries for posted interrupt notification, platform + * specific but known at build time: + * Allocate unique Activation Notification Vectors (ANV) for each vCPU that belongs + * to the same pCPU, the ANVs need only be unique within each pCPU, not across all + * vCPUs. The max numbers of vCPUs may be running on top of a pCPU is CONFIG_MAX_VM_NUM, + * since ACRN does not support 2 vCPUs of same VM running on top of same pCPU. + * This reduces # of pre-allocated ANVs for posted interrupts to CONFIG_MAX_VM_NUM, + * and enables ACRN to avoid switching between active and wake-up vector values + * in the posted interrupt descriptor on vCPU scheduling state changes. + */ +#define NR_STATIC_MAPPINGS (NR_STATIC_MAPPINGS_1 + CONFIG_MAX_VM_NUM) + +#define HYPERVISOR_CALLBACK_HSM_VECTOR 0xF3U + +/* vectors range for dynamic allocation, usually for devices */ +#define VECTOR_DYNAMIC_START 0x20U +#define VECTOR_DYNAMIC_END 0xDFU + +/* vectors range for fixed vectors, usually for HV service */ +#define VECTOR_FIXED_START 0xE0U +#define VECTOR_FIXED_END 0xFFU + +#define TIMER_VECTOR (VECTOR_FIXED_START) +#define NOTIFY_VCPU_VECTOR (VECTOR_FIXED_START + 1U) +#define PMI_VECTOR (VECTOR_FIXED_START + 2U) +/* + * Starting vector for posted interrupts + * # of CONFIG_MAX_VM_NUM (POSTED_INTR_VECTOR ~ (POSTED_INTR_VECTOR + CONFIG_MAX_VM_NUM - 1U)) + * consecutive vectors reserved for posted interrupts + */ +#define POSTED_INTR_VECTOR (VECTOR_FIXED_START + NR_STATIC_MAPPINGS_1) + +#define TIMER_IRQ (NR_IRQS - 1U) +#define NOTIFY_VCPU_IRQ (NR_IRQS - 2U) +#define PMI_IRQ (NR_IRQS - 3U) +/* + * Starting IRQ for posted interrupts + * # of CONFIG_MAX_VM_NUM (POSTED_INTR_IRQ ~ (POSTED_INTR_IRQ + CONFIG_MAX_VM_NUM - 1U)) + * consecutive IRQs reserved for posted interrupts + */ +#define POSTED_INTR_IRQ (NR_IRQS - NR_STATIC_MAPPINGS_1 - CONFIG_MAX_VM_NUM) + +/* the maximum number of msi entry is 2048 according to PCI + * local bus specification + */ +#define MAX_MSI_ENTRY 0x800U + +#define INVALID_INTERRUPT_PIN 0xffffffffU + +/* + * x86 irq data + */ +struct x86_irq_data { + uint32_t vector; /**< assigned vector */ +#ifdef PROFILING_ON + uint64_t ctx_rip; + uint64_t ctx_rflags; + uint64_t ctx_cs; +#endif +}; + +struct intr_excp_ctx; + +/** + * @brief Allocate a vectror and bind it to irq + * + * For legacy irq (num < 16) and statically mapped ones, do nothing + * if mapping is correct. + * + * @param[in] irq The irq num to bind + * + * @return valid vector num on susccess, VECTOR_INVALID on failure + */ +uint32_t alloc_irq_vector(uint32_t irq); + +/** + * @brief Get vector number of an interrupt from irq number + * + * @param[in] irq The irq_num to convert + * + * @return vector number + */ +uint32_t irq_to_vector(uint32_t irq); + +/** + * @brief Dispatch interrupt + * + * To dispatch an interrupt, an action callback will be called if registered. + * + * @param ctx Pointer to interrupt exception context + */ +void dispatch_interrupt(const struct intr_excp_ctx *ctx); + +/* Arch specific routines called from generic IRQ handling */ + +struct irq_desc; + +void init_irq_descs_arch(struct irq_desc *descs); +void setup_irqs_arch(void); +void init_interrupt_arch(uint16_t pcpu_id); +void free_irq_arch(uint32_t irq); +bool request_irq_arch(uint32_t irq); +void pre_irq_arch(const struct irq_desc *desc); +void post_irq_arch(const struct irq_desc *desc); + +#endif /* ARCH_X86_IRQ_H */ diff --git a/src/components/implementation/simple_vmm/noop_nf/netio.c b/src/components/implementation/simple_vmm/noop_nf/netio.c new file mode 100644 index 0000000000..cc0e4acdbb --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/netio.c @@ -0,0 +1,274 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +shm_bm_objid_t +netio_get_a_packet(u16_t *pkt_len) +{ + struct netshmem_pkt_buf *tx_obj; + shm_bm_t tx_shmemd = 0; + shm_bm_objid_t tx_pktid; + u16_t _pkt_len = 0; + + tx_shmemd = netshmem_get_shm(); + tx_obj = shm_bm_alloc_net_pkt_buf(tx_shmemd, &tx_pktid); + assert(tx_obj); + + virtio_net_send_one_pkt(tx_obj->data, &_pkt_len); + *pkt_len = _pkt_len; + + return tx_pktid; +} + +void pkt_hex_dump(void *_data, u16_t len) +{ + int rowsize = 16; + int i, l, linelen, remaining; + int li = 0; + u8_t *data, ch; + + data = _data; + + printc("Packet hex dump, len:%d\n", len); + remaining = len; + for (i = 0; i < len; i += rowsize) { + printc("%06d\t", li); + + linelen = remaining < rowsize ? remaining : rowsize; + remaining -= rowsize; + + for (l = 0; l < linelen; l++) { + ch = data[l]; + printc( "%02X ", (u32_t) ch); + } + + data += linelen; + li += 10; + + printc( "dump done\n"); + } +} + +#if 0 +shm_bm_objid_t +netio_get_a_packet_batch(u8_t batch_limit) +{ + struct netshmem_pkt_buf *tx_obj; + shm_bm_t tx_shmemd = 0; + shm_bm_objid_t tx_pktid; + u16_t _pkt_len = 0; + shm_bm_objid_t first_objid; + struct netshmem_pkt_buf *first_obj; + struct netshmem_pkt_pri *first_obj_pri; + struct netshmem_meta_tuple *pkt_arr; + u8_t batch_ct = 0; + + tx_shmemd = netshmem_get_shm(); + tx_obj = first_obj = shm_bm_alloc_net_pkt_buf(tx_shmemd, &tx_pktid); + assert(tx_obj); + first_objid = tx_pktid; + first_obj_pri = netshmem_get_pri(tx_obj); + pkt_arr = (struct netshmem_meta_tuple *)&first_obj_pri->pkt_arr; + first_obj_pri->batch_len = 0; + + while (batch_ct < batch_limit) { + assert(tx_obj); + if (likely(batch_ct > 0)) { + tx_obj = shm_bm_alloc_net_pkt_buf(tx_shmemd, &tx_pktid); + assert(tx_obj); + } + + virtio_net_send_one_pkt(netshmem_get_data_buf(tx_obj), &_pkt_len); + + // pkt_hex_dump(netshmem_get_data_buf(tx_obj), _pkt_len); + if (likely(_pkt_len != 0)) { + pkt_arr[batch_ct].obj_id = tx_pktid; + pkt_arr[batch_ct].pkt_len = _pkt_len; + batch_ct++; + } else { + if (batch_ct == 0) { + sched_thd_yield(); + } else { + shm_bm_free_net_pkt_buf(tx_obj); + break; + } + } + } + first_obj_pri->batch_len = batch_ct; + return first_objid; +} +#endif + +struct nf_svc { + int svc_id; + struct vmrt_vm_comp *vm; +}; + +#define MAX_NFS 10 +#define MAX_THD_PER_NF 100 + +static struct nf_svc nf_svc_tbl[MAX_NFS][MAX_THD_PER_NF]; + +void +nf_svc_update(compid_t nf_id, int thd, int svc_id, struct vmrt_vm_comp *vm) +{ + // printc("svc update:%d, %d, %d\n", nf_id, thd, nf_svc_tbl[nf_id][thd].svc_id); + if (nf_svc_tbl[nf_id][thd].svc_id < 0) { + nf_svc_tbl[nf_id][thd].svc_id = svc_id; + nf_svc_tbl[nf_id][thd].vm = vm; + } else { + return; + } +} + +void +nf_svc_init(void) +{ + for (int i = 0; i < MAX_NFS; i++) { + for (int j = 0; j < MAX_THD_PER_NF; j++) { + nf_svc_tbl[i][j].svc_id = -1; + nf_svc_tbl[i][j].vm = NULL; + } + } +} + +shm_bm_objid_t +netio_get_a_packet_batch(u8_t batch_limit) +{ + shm_bm_objid_t first_objid; + struct netshmem_pkt_buf *first_obj; + struct netshmem_pkt_pri *first_obj_pri; + struct netshmem_pkt_buf *tx_obj; + shm_bm_objid_t tx_pktid; + struct netshmem_meta_tuple *pkt_arr; + + struct nf_session *session; + struct nf_pkt_meta_data buf; + u8_t batch_ct = 0; + compid_t vmm_id = cos_compid(); + compid_t nf_id = (compid_t)cos_inv_token(); + if (nf_id == 0) nf_id = vmm_id; + thdid_t nf_thd = cos_thdid(); + + int svc_id = nf_svc_tbl[nf_id][nf_thd].svc_id; + + if (svc_id < 0) { + printc("no svc available for this nf:%d, thd:%d\n", nf_id, nf_thd); + assert(0); + } + + session = get_nf_session(svc_id); + + while (nf_tx_ring_buf_empty(&session->nf_tx_ring_buf)) { + sched_thd_yield(); + } + + assert(nf_tx_ring_buf_dequeue(&session->nf_tx_ring_buf, &buf)); + tx_obj = first_obj = buf.obj; + assert(tx_obj); + tx_pktid = first_objid = buf.objid; + first_obj_pri = netshmem_get_pri(tx_obj); + pkt_arr = (struct netshmem_meta_tuple *)&first_obj_pri->pkt_arr; + first_obj_pri->batch_len = 0; + + pkt_arr[batch_ct].obj_id = tx_pktid; + pkt_arr[batch_ct].pkt_len = buf.pkt_len; + batch_ct++; + + while (batch_ct < batch_limit && nf_tx_ring_buf_dequeue(&session->nf_tx_ring_buf, &buf)) { + // printc("netio out a pkt, batch_ct:%d\n", batch_ct); + pkt_arr[batch_ct].obj_id = buf.objid; + pkt_arr[batch_ct].pkt_len = buf.pkt_len; + batch_ct++; + } + + first_obj_pri->batch_len = batch_ct; + return first_objid; +} + +int +netio_send_packet(shm_bm_objid_t pktid, u16_t pkt_len) +{ + struct netshmem_pkt_buf *rx_obj; + shm_bm_t rx_shmemd = 0; + + rx_shmemd = netshmem_get_shm(); + + rx_obj = shm_bm_transfer_net_pkt_buf(rx_shmemd, pktid); + virtio_net_rcv_one_pkt(rx_obj->data, pkt_len); + shm_bm_free_net_pkt_buf(rx_obj); + + return 0; +} + + +int +netio_send_packet_batch(shm_bm_objid_t pktid) +{ + struct netshmem_pkt_buf *rx_obj; + shm_bm_objid_t first_objid; + struct netshmem_pkt_buf *first_obj; + struct netshmem_pkt_pri *first_obj_pri; + struct netshmem_meta_tuple *pkt_arr; + u16_t pkt_len; + u8_t batch_tc = 0; + shm_bm_t rx_shmemd = 0; + + rx_shmemd = netshmem_get_shm(); + first_objid = pktid; + + + first_obj = shm_bm_transfer_net_pkt_buf(rx_shmemd, first_objid); + + first_obj_pri = netshmem_get_pri(first_obj); + pkt_arr = (struct netshmem_meta_tuple *)&(first_obj_pri->pkt_arr); + batch_tc = first_obj_pri->batch_len; + + pkt_len = pkt_arr[0].pkt_len; + // pkt_hex_dump(netshmem_get_data_buf(first_obj), pkt_len); + virtio_net_rcv_one_pkt(netshmem_get_data_buf(first_obj), pkt_len); + + for (u8_t i = 1; i < batch_tc; i++) { + pkt_len = pkt_arr[i].pkt_len; + pktid = pkt_arr[i].obj_id; + rx_obj = shm_bm_transfer_net_pkt_buf(rx_shmemd, pktid); + virtio_net_rcv_one_pkt(netshmem_get_data_buf(rx_obj), pkt_len); + shm_bm_free_net_pkt_buf(rx_obj); + } + + shm_bm_free_net_pkt_buf(first_obj); + + return 0; +} + +void +netio_shmem_map(cbuf_t shm_id) +{ + netshmem_map_shmem(shm_id); +} + +extern struct vmrt_vm_comp *vm_list[2]; + +void +netio_svc_update(int svc_id, u32_t vm) +{ + compid_t nf_id = cos_inv_token(); + thdid_t thd = cos_thdid(); + assert(vm < 2); + shm_bm_t tx_shm = netshmem_get_shm(); + assert(tx_shm); + + nf_svc_update(nf_id, thd, svc_id, vm_list[vm]); + + struct nf_session *session; + session = get_nf_session(svc_id); + nf_session_tx_update(session, tx_shm, thd); + sync_sem_init(&session->tx_sem, 0); + + nf_tx_ring_buf_init(&session->nf_tx_ring_buf, NF_TX_PKT_RBUF_NUM, NF_TX_PKT_RING_SZ); +} diff --git a/src/components/implementation/simple_vmm/noop_nf/nf_session.c b/src/components/implementation/simple_vmm/noop_nf/nf_session.c new file mode 100644 index 0000000000..a5d56bdb82 --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/nf_session.c @@ -0,0 +1,74 @@ +#pragma once + +#include + +CK_RING_PROTOTYPE(nf_tx_ring_buf, nf_pkt_meta_data); + +static char ring_buffers[NF_TX_MAX_RING_NUM][NF_TX_PKT_RING_SZ]; +static struct nf_session nf_sessions[MAX_SVC_NUM]; + +void +nf_sessions_init(void) +{ + for (int i = 0; i < MAX_SVC_NUM; i++) { + nf_sessions[i].rx_shmemd = 0; + nf_sessions[i].rx_thd = 0; + nf_sessions[i].tx_shmemd = 0; + nf_sessions[i].tx_thd = 0; + nf_sessions[i].nf_tx_ring_buf.ring = 0; + nf_sessions[i].nf_tx_ring_buf.ringbuf = 0; + + } +} + +void +nf_tx_ring_buf_init(struct nf_tx_ring_buf *pkt_ring_buf, size_t ringbuf_num, size_t ringbuf_sz) +{ + struct ck_ring *buf_addr; + + /* prevent multiple thread from contending memory */ + assert(cos_thdid() < 30); + buf_addr = (struct ck_ring *)&ring_buffers[cos_thdid()]; + + ck_ring_init(buf_addr, ringbuf_num); + + pkt_ring_buf->ring = buf_addr; + pkt_ring_buf->ringbuf = (struct pkt_buf *)((char *)buf_addr + sizeof(struct ck_ring)); +} + +inline int +nf_tx_ring_buf_enqueue(struct nf_tx_ring_buf *pkt_ring_buf, struct nf_pkt_meta_data *buf) +{ + assert(pkt_ring_buf->ring && pkt_ring_buf->ringbuf); + + return CK_RING_ENQUEUE_SPSC(nf_tx_ring_buf, pkt_ring_buf->ring, pkt_ring_buf->ringbuf, buf); +} + +inline int +nf_tx_ring_buf_dequeue(struct nf_tx_ring_buf *pkt_ring_buf, struct nf_pkt_meta_data *buf) +{ + assert(pkt_ring_buf->ring && pkt_ring_buf->ringbuf); + + return CK_RING_DEQUEUE_SPSC(nf_tx_ring_buf, pkt_ring_buf->ring, pkt_ring_buf->ringbuf, buf); +} + +inline int +nf_tx_ring_buf_empty(struct nf_tx_ring_buf *pkt_ring_buf) +{ + assert(pkt_ring_buf->ring); + + return (!ck_ring_size(pkt_ring_buf->ring)); +} + +struct nf_session *get_nf_session(int svc_id) +{ + if (unlikely(svc_id < 0 || svc_id > 1000)) return &nf_sessions[0]; + else return &nf_sessions[svc_id]; +} + +void +nf_session_tx_update(struct nf_session *session, shm_bm_t tx_shmemd, thdid_t tx_thd) +{ + session->tx_shmemd = tx_shmemd; + session->tx_thd = tx_thd; +} diff --git a/src/components/implementation/simple_vmm/noop_nf/nf_session.h b/src/components/implementation/simple_vmm/noop_nf/nf_session.h new file mode 100644 index 0000000000..00f81a0d44 --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/nf_session.h @@ -0,0 +1,49 @@ +#include +#include +#include +#include + +struct nf_pkt_meta_data { + void *obj; + shm_bm_objid_t objid; + u16_t pkt_len; +}; + +struct nf_tx_ring_buf { + struct ck_ring *ring; + struct nf_pkt_meta_data *ringbuf; +}; + +struct nf_session { + shm_bm_t rx_shmemd; + shm_bm_t tx_shmemd; + + thdid_t rx_thd; + thdid_t tx_thd; + + struct sync_sem tx_sem; + + struct nf_tx_ring_buf nf_tx_ring_buf; +}; + +#define NF_TX_PKT_RBUF_NUM 512 +#define NF_TX_PKT_RBUF_SZ (NF_TX_PKT_RBUF_NUM * sizeof(struct nf_tx_ring_buf)) +#define NF_TX_PKT_RING_SZ (sizeof(struct ck_ring) + NF_TX_PKT_RBUF_SZ) +#define NF_TX_PKT_RING_PAGES (round_up_to_page(NF_TX_PKT_RING_SZ)/PAGE_SIZE) + +#define NF_TX_MAX_RING_NUM 30 + +#define MAX_NF_SESSION 10 + +#define MAX_SVC_NUM (20000) + +struct nf_session *get_nf_session(int svc_id); +void nf_session_tx_update(struct nf_session *session, shm_bm_t tx_shmemd, thdid_t tx_thd); +void nf_tx_ring_buf_init(struct nf_tx_ring_buf *pkt_ring_buf, size_t ringbuf_num, size_t ringbuf_sz); +int nf_tx_ring_buf_enqueue(struct nf_tx_ring_buf *pkt_ring_buf, struct nf_pkt_meta_data *buf); +int nf_tx_ring_buf_dequeue(struct nf_tx_ring_buf *pkt_ring_buf, struct nf_pkt_meta_data *buf); +int nf_tx_ring_buf_empty(struct nf_tx_ring_buf *pkt_ring_buf); + +void nf_svc_update(compid_t nf_id, int thd_id, int svc_id, struct vmrt_vm_comp *vm); +void nf_svc_init(void); +void nf_sessions_init(void); diff --git a/src/components/implementation/simple_vmm/noop_nf/simple_vmm.c b/src/components/implementation/simple_vmm/noop_nf/simple_vmm.c new file mode 100644 index 0000000000..ee1923c1e9 --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/simple_vmm.c @@ -0,0 +1,274 @@ +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#define NF_THD_PRIORITY 31 + +#define NO_NF_TEST 1 + +#define RX_BATCH 1 +#define TX_BATCH 1 + +#define RX_PROCESSING 0 +#define TX_PROCESSING 0 + +thdid_t rx_tid = 0; +thdid_t tx_tid = 0; + +thdid_t virtio_tx_tid = 0; + +char tx_nf_buffer[4096]; +char rx_nf_buffer[4096]; + + +INCBIN(vmlinux, "guest/vmlinux.img") +INCBIN(bios, "guest/guest.img") + +/* Currently only have one VM component globally managed by this VMM */ +static struct vmrt_vm_comp *g_vm; +static struct vmrt_vm_comp *g_vm1; + +struct vmrt_vm_comp *vm_list[2] = {0}; + +#define VM_MAX_COMPS (2) +#define GUEST_MEM_SZ (310*1024*1024) + +SS_STATIC_SLAB(vm_comp, struct vmrt_vm_comp, VM_MAX_COMPS); +SS_STATIC_SLAB(vm_lapic, struct acrn_vlapic, VM_MAX_COMPS * VMRT_VM_MAX_VCPU); +SS_STATIC_SLAB(vcpu_inst_ctxt, struct instr_emul_ctxt, VM_MAX_COMPS * VMRT_VM_MAX_VCPU); +SS_STATIC_SLAB(vm_io_apic, struct acrn_vioapics, VM_MAX_COMPS); +SS_STATIC_SLAB(vcpu_mmio_req, struct acrn_mmio_request, VM_MAX_COMPS * VMRT_VM_MAX_VCPU); + +struct sync_lock vm_boot_lock; + +void +pause_handler(struct vmrt_vm_vcpu *vcpu) +{ + sched_thd_yield(); + GOTO_NEXT_INST(vcpu->shared_region); +} + +void +hlt_handler(struct vmrt_vm_vcpu *vcpu) +{ + sched_thd_yield(); + GOTO_NEXT_INST(vcpu->shared_region); +} + +void +mmio_init(struct vmrt_vm_vcpu *vcpu) +{ + vcpu->mmio_request = ss_vcpu_mmio_req_alloc(); + assert(vcpu->mmio_request); + + ss_vcpu_mmio_req_activate(vcpu->mmio_request); +} + +void +ioapic_init(struct vmrt_vm_comp *vm) +{ + vm->ioapic = ss_vm_io_apic_alloc(); + assert(vm->ioapic); + + vioapic_init(vm); + ss_vm_io_apic_activate(vm->ioapic); +} + +void +iinst_ctxt_init(struct vmrt_vm_vcpu *vcpu) +{ + vcpu->inst_ctxt = ss_vcpu_inst_ctxt_alloc(); + assert(vcpu->inst_ctxt); + + ss_vcpu_inst_ctxt_activate(vcpu->inst_ctxt); +} + +void +lapic_init(struct vmrt_vm_vcpu *vcpu) +{ + struct acrn_vlapic *vlapic = ss_vm_lapic_alloc(); + assert(vlapic); + + /* A vcpu can only have one vlapic */ + assert(vcpu->vlapic == NULL); + + vcpu->vlapic = vlapic; + vlapic->apic_page = vcpu->lapic_page; + vlapic->vcpu = vcpu; + + /* Status: enable APIC and vector be 0xFF */ + vlapic_reset(vlapic); + + ss_vm_lapic_activate(vlapic); + return; +} + +struct vmrt_vm_comp * +vm_comp_create(void) +{ + u64_t guest_mem_sz = GUEST_MEM_SZ; + u64_t num_vcpu = 1; + void *start; + void *end; + cbuf_t shm_id; + void *mem, *vm_mem; + size_t sz; + + struct vmrt_vm_comp *vm = ss_vm_comp_alloc(); + assert(vm); + + vmrt_vm_create(vm, "vmlinux-5.15", num_vcpu, guest_mem_sz); + + /* Allocate memory for the VM */ + shm_id = memmgr_shared_page_allocn_aligned(guest_mem_sz / PAGE_SIZE_4K, PAGE_SIZE_4K, (vaddr_t *)&mem); + /* Make the memory accessible to VM */ + int ret = memmgr_shared_page_map_aligned_in_vm(shm_id, PAGE_SIZE_4K, (vaddr_t *)&vm_mem, vm->comp_id); + vmrt_vm_mem_init(vm, mem); + printc("created VM with %u cpus, memory size: %luMB, at host vaddr: %p\n", vm->num_vcpu, vm->guest_mem_sz/1024/1024, vm->guest_addr); + + ss_vm_comp_activate(vm); + + start = &incbin_bios_start; + end = &incbin_bios_end; + sz = end - start + 1; + + printc("BIOS image start: %p, end: %p, size: %lu(%luKB)\n", start, end, sz, sz/1024); + vmrt_vm_data_copy_to(vm, start, sz, PAGE_SIZE_4K); + + start = &incbin_vmlinux_start; + end = &incbin_vmlinux_end; + sz = end - start + 1; + + printc("Guest Linux image start: %p, end: %p, size: %lu(%luMB)\n", start, end, sz, sz/1024/1024); + #define GUEST_IMAGE_ADDR 0x100000 + vmrt_vm_data_copy_to(vm, start, sz, GUEST_IMAGE_ADDR); + + ioapic_init(vm); + + printc("Guest(%s) image has been loaded into the VM component\n", vm->name); + + return vm; +} + +static void +tx_task(void) +{ + u16_t pkt_len; + shm_bm_objid_t objid; + + nic_shmem_map(netshmem_get_shm_id()); + + shm_bm_objid_t first_objid; + struct netshmem_pkt_buf *first_obj; + struct netshmem_pkt_pri *first_obj_pri; + struct netshmem_meta_tuple *pkt_arr; + u8_t tx_batch_ct = 0; + struct netshmem_pkt_buf *tx_obj; + u32_t ip; + + shm_bm_t tx_shmemd = 0; + tx_shmemd = netshmem_get_shm(); + ip = inet_addr("10.10.1.2"); + + nic_bind_port(ip, 1); + int svc_id = 60; + + nf_svc_update(cos_compid(), cos_thdid(), svc_id, g_vm); + + struct nf_session *session; + session = get_nf_session(svc_id); + nf_session_tx_update(session, tx_shmemd, cos_thdid()); + sync_sem_init(&session->tx_sem, 0); + + nf_tx_ring_buf_init(&session->nf_tx_ring_buf, NF_TX_PKT_RBUF_NUM, NF_TX_PKT_RING_SZ); + + virtio_tx_task(0); +} + +void +cos_init(void) +{ + + nf_svc_init(); + nf_sessions_init(); + + struct vmrt_vm_vcpu *vcpu; + g_vm = vm_comp_create(); + printc("created vm done:%d, %p\n", g_vm->comp_id, g_vm); + g_vm->vm_mac_id = 0; + + vm_list[0] = g_vm; +} + +void +cos_parallel_init(coreid_t cid, int init_core, int ncores) +{ + struct vmrt_vm_vcpu *vcpu; + + if (cid == 0) { + tx_tid = sched_thd_create((void *)tx_task, NULL); + netshmem_create(tx_tid); + + vmrt_vm_vcpu_init(g_vm, 0); + vcpu = vmrt_get_vcpu(g_vm, 0); + + lapic_init(vcpu); + iinst_ctxt_init(vcpu); + mmio_init(vcpu); + + } else { + + } + + return; +} + +void +parallel_main(coreid_t cid) +{ + struct vmrt_vm_vcpu *vcpu; + + if (cid == 0) { + printc("------STARTING VM------\n"); + sched_thd_block_timeout(0, time_now() + time_usec2cyc(10000000)); + vcpu = vmrt_get_vcpu(g_vm, 0); + vmrt_vm_vcpu_start(vcpu); + + sched_thd_param_set(tx_tid, sched_param_pack(SCHEDP_PRIO, NF_THD_PRIORITY)); + + } else if(cid == 1) { + + } + + while (1) + { + sched_thd_block(0); + /* Should not be here, or there is a bug in the scheduler! */ + assert(0); + } + + +} diff --git a/src/components/implementation/simple_vmm/noop_nf/vcpuid.c b/src/components/implementation/simple_vmm/noop_nf/vcpuid.c new file mode 100644 index 0000000000..0335ccb596 --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/vcpuid.c @@ -0,0 +1,766 @@ +#include +#include +#include +#include +#include +#include +#include "cpu.h" +#include "cpuid.h" +#include "vcpuid.h" +#include "cpu_caps.h" +#include "apicreg.h" + +/* + * Copyright (C) 2018-2022 Intel Corporation. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +static struct cpuinfo_x86 boot_cpu_data; +static struct vcpuid_entry vcpuid_entries[MAX_VM_VCPUID_ENTRIES]; +static u32_t g_entry_nr = 0, g_vcpuid_level, g_vcpuid_xlevel; +void memcpy_erms(void *d, const void *s, size_t slen) +{ + asm volatile ("rep; movsb" + : "=&D"(d), "=&S"(s) + : "c"(slen), "0" (d), "1" (s) + : "memory"); +} + +static uint64_t get_address_mask(uint8_t limit) +{ + return ((1UL << limit) - 1UL) & PAGE_MASK; +} + +/* + * @brief Copies at most slen bytes from src address to dest address, up to dmax. + * + * INPUTS + * + * @param[in] d pointer to Destination address + * @param[in] dmax maximum length of dest + * @param[in] s pointer to Source address + * @param[in] slen maximum number of bytes of src to copy + * + * @return 0 for success and -1 for runtime-constraint violation. + */ +int32_t memcpy_s(void *d, size_t dmax, const void *s, size_t slen) +{ + int32_t ret = -1; + + if ((d != NULL) && (s != NULL) && (dmax >= slen) && ((d > (s + slen)) || (s > (d + dmax)))) { + if (slen != 0U) { + memcpy_erms(d, s, slen); + } + ret = 0; + } else { + (void)memset(d, 0U, dmax); + } + + return ret; +} + +uint32_t get_tsc_khz(void) +{ + //3100.000 MHz + return 3100000; +} + +struct cpuinfo_x86 *get_pcpu_info(void) +{ + return &boot_cpu_data; +} + +/** + * initialization of virtual CPUID leaf + */ +static void init_vcpuid_entry(uint32_t leaf, uint32_t subleaf, + uint32_t flags, struct vcpuid_entry *entry) +{ + struct cpuinfo_x86 *cpu_info; + + entry->leaf = leaf; + entry->subleaf = subleaf; + entry->flags = flags; + + switch (leaf) { + + case 0x06U: + cpuid_subleaf(leaf, subleaf, &entry->eax, &entry->ebx, &entry->ecx, &entry->edx); + entry->eax &= ~(CPUID_EAX_DTHERM | CPUID_EAX_HWP | CPUID_EAX_HWP_N | CPUID_EAX_HWP_AW | CPUID_EAX_HWP_EPP | CPUID_EAX_HWP_PLR); + entry->ecx &= ~CPUID_ECX_HCFC; + break; + + case 0x07U: + if (subleaf == 0U) { + cpuid_subleaf(leaf, subleaf, &entry->eax, &entry->ebx, &entry->ecx, &entry->edx); + + entry->ebx &= ~(CPUID_EBX_PQM | CPUID_EBX_PQE); + + /* mask LA57 */ + entry->ecx &= ~CPUID_ECX_LA57; + + /* mask CPUID_EDX_IBRS_IBPB */ + entry->edx &= ~CPUID_EDX_IBRS_IBPB; + + /* mask SGX and SGX_LC */ + entry->ebx &= ~CPUID_EBX_SGX; + entry->ecx &= ~CPUID_ECX_SGX_LC; + + /* mask MPX */ + entry->ebx &= ~CPUID_EBX_MPX; + + /* mask Intel Processor Trace, since 14h is disabled */ + entry->ebx &= ~CPUID_EBX_PROC_TRC; + + /* mask CET shadow stack and indirect branch tracking */ + entry->ecx &= ~CPUID_ECX_CET_SS; + entry->edx &= ~CPUID_EDX_CET_IBT; + + // entry->ebx &= ~CPUID_EBX_FSGSBASE; + + entry->ebx &= ~CPUID_EBX_SMEP; + + entry->ebx &= ~CPUID_EBX_SMAP; + + entry->ecx &= ~CPUID_ECX_UMIP; + + entry->ecx &= ~CPUID_ECX_PKE; + + entry->ecx &= ~CPUID_ECX_LA57; + + entry->ecx &= ~CPUID_ECX_PKS; + } else { + entry->eax = 0U; + entry->ebx = 0U; + entry->ecx = 0U; + entry->edx = 0U; + } + break; + + case 0x16U: + cpu_info = get_pcpu_info(); + if (cpu_info->cpuid_level >= 0x16U) { + /* + * call the cpuid when 0x16 is supported, + * but nested vmx will not return correct values, + * thus use the second way here. If you are using + * the real hardware, can test if this will work. + */ + // cpuid_subleaf(leaf, subleaf, &entry->eax, &entry->ebx, &entry->ecx, &entry->edx); + + /* Use the tsc to derive the emulated 0x16U cpuid. */ + entry->eax = (uint32_t) (get_tsc_khz() / 1000U); + entry->ebx = entry->eax; + /* Bus frequency: hard coded to 100M */ + entry->ecx = 100U; + entry->edx = 0U; + + } else { + /* Use the tsc to derive the emulated 0x16U cpuid. */ + entry->eax = (uint32_t) (get_tsc_khz() / 1000U); + entry->ebx = entry->eax; + /* Bus frequency: hard coded to 100M */ + entry->ecx = 100U; + entry->edx = 0U; + } + break; + + /* + * Leaf 0x40000000 + * This leaf returns the CPUID leaf range supported by the + * hypervisor and the hypervisor vendor signature. + * + * EAX: The maximum input value for CPUID supported by the + * hypervisor. + * EBX, ECX, EDX: Hypervisor vendor ID signature. + */ + case 0x40000000U: + { + static const char sig[12] = "ACRNACRNACRN"; + const uint32_t *sigptr = (const uint32_t *)sig; + + entry->eax = 0x40000010U; + entry->ebx = sigptr[0]; + entry->ecx = sigptr[1]; + entry->edx = sigptr[2]; + break; + } + + /* + * Leaf 0x40000001 - ACRN extended information. + * This leaf returns the extended information of ACRN hypervisor. + * + * EAX: Guest capability flags + * EBX, ECX, EDX: RESERVED (reserved fields are set to zero). + */ + case 0x40000001U: + entry->eax = 0U; + entry->ebx = 0U; + entry->ecx = 0U; + entry->edx = 0U; + break; + + /* + * Leaf 0x40000010 - Timing Information. + * This leaf returns the current TSC frequency and + * current Bus frequency in kHz. + * + * EAX: (Virtual) TSC frequency in kHz. + * TSC frequency is calculated from PIT in ACRN + * EBX, ECX, EDX: RESERVED (reserved fields are set to zero). + */ + case 0x40000010U: + entry->eax = get_tsc_khz(); + entry->ebx = 0U; + entry->ecx = 0U; + entry->edx = 0U; + break; + + default: + cpuid_subleaf(leaf, subleaf, &entry->eax, &entry->ebx, &entry->ecx, &entry->edx); + break; + } +} + +static inline int32_t set_vcpuid_entry(struct vcpuid_entry vcpuid_entries[], + const struct vcpuid_entry *entry) +{ + struct vcpuid_entry *tmp; + size_t entry_size = sizeof(struct vcpuid_entry); + int32_t ret; + + if (g_entry_nr == MAX_VM_VCPUID_ENTRIES) { + printc("%s, vcpuid entry over MAX_VM_VCPUID_ENTRIES(%u)\n", __func__, MAX_VM_VCPUID_ENTRIES); + ret = -ENOMEM; + } else { + tmp = &vcpuid_entries[g_entry_nr]; + g_entry_nr++; + (void)memcpy_s(tmp, entry_size, entry, entry_size); + ret = 0; + } + return ret; +} + +static inline bool is_percpu_related(uint32_t leaf) +{ + return ((leaf == 0x1U) || (leaf == 0xbU) || (leaf == 0xdU) || (leaf == 0x19U) || (leaf == 0x80000001U) || (leaf == 0x2U) || (leaf == 0x1aU)); +} + +static int32_t set_vcpuid_extended_function(void) +{ + uint32_t i, limit; + struct vcpuid_entry entry; + int32_t result; + + init_vcpuid_entry(0x40000000U, 0U, 0U, &entry); + result = set_vcpuid_entry(vcpuid_entries, &entry); + if (result == 0) { + init_vcpuid_entry(0x40000001U, 0U, 0U, &entry); + + result = set_vcpuid_entry(vcpuid_entries, &entry); + } + + if (result == 0) { + init_vcpuid_entry(0x40000010U, 0U, 0U, &entry); + result = set_vcpuid_entry(vcpuid_entries, &entry); + } + + if (result == 0) { + init_vcpuid_entry(0x80000000U, 0U, 0U, &entry); + result = set_vcpuid_entry(vcpuid_entries, &entry); + } + + if (result == 0) { + limit = entry.eax; + g_vcpuid_xlevel = limit; + for (i = 0x80000002U; i <= limit; i++) { + init_vcpuid_entry(i, 0U, 0U, &entry); + result = set_vcpuid_entry(vcpuid_entries, &entry); + if (result != 0) { + break; + } + } + } + + return result; +} + +void init_pcpu_capabilities(void) +{ + uint32_t eax, unused; + uint32_t family_id, model_id, displayfamily, displaymodel; + + cpuid_subleaf(CPUID_VENDORSTRING, 0x0U, + &boot_cpu_data.cpuid_level, + &unused, &unused, &unused); + + cpuid_subleaf(CPUID_FEATURES, 0x0U, &eax, &unused, + &boot_cpu_data.cpuid_leaves[FEAT_1_ECX], + &boot_cpu_data.cpuid_leaves[FEAT_1_EDX]); + + /* SDM Vol.2A 3-211 states the algorithm to calculate DisplayFamily and DisplayModel */ + family_id = (eax >> 8U) & 0xfU; + displayfamily = family_id; + if (family_id == 0xFU) { + displayfamily += ((eax >> 20U) & 0xffU); + } + boot_cpu_data.displayfamily = (uint8_t)displayfamily; + + model_id = (eax >> 4U) & 0xfU; + displaymodel = model_id; + if ((family_id == 0x06U) || (family_id == 0xFU)) { + displaymodel += ((eax >> 16U) & 0xfU) << 4U; + } + boot_cpu_data.displaymodel = (uint8_t)displaymodel; + + + cpuid_subleaf(CPUID_EXTEND_FEATURE, 0x0U, &unused, + &boot_cpu_data.cpuid_leaves[FEAT_7_0_EBX], + &boot_cpu_data.cpuid_leaves[FEAT_7_0_ECX], + &boot_cpu_data.cpuid_leaves[FEAT_7_0_EDX]); + + cpuid_subleaf(CPUID_EXTEND_FEATURE, 0x2U, &unused, &unused, &unused, + &boot_cpu_data.cpuid_leaves[FEAT_7_2_EDX]); + + cpuid_subleaf(CPUID_MAX_EXTENDED_FUNCTION, 0x0U, + &boot_cpu_data.extended_cpuid_level, + &unused, &unused, &unused); + + if (boot_cpu_data.extended_cpuid_level >= CPUID_EXTEND_FUNCTION_1) { + cpuid_subleaf(CPUID_EXTEND_FUNCTION_1, 0x0U, &unused, &unused, + &boot_cpu_data.cpuid_leaves[FEAT_8000_0001_ECX], + &boot_cpu_data.cpuid_leaves[FEAT_8000_0001_EDX]); + } + + if (boot_cpu_data.extended_cpuid_level >= CPUID_EXTEND_INVA_TSC) { + cpuid_subleaf(CPUID_EXTEND_INVA_TSC, 0x0U, &eax, &unused, &unused, + &boot_cpu_data.cpuid_leaves[FEAT_8000_0007_EDX]); + } + + if (boot_cpu_data.extended_cpuid_level >= CPUID_EXTEND_ADDRESS_SIZE) { + cpuid_subleaf(CPUID_EXTEND_ADDRESS_SIZE, 0x0U, &eax, + &boot_cpu_data.cpuid_leaves[FEAT_8000_0008_EBX], + &unused, &unused); + + /* EAX bits 07-00: #Physical Address Bits + * bits 15-08: #Linear Address Bits + */ + boot_cpu_data.virt_bits = (uint8_t)((eax >> 8U) & 0xffU); + boot_cpu_data.phys_bits = (uint8_t)(eax & 0xffU); + boot_cpu_data.physical_address_mask = + get_address_mask(boot_cpu_data.phys_bits); + } + + // detect_pcpu_cap(); +} + +int32_t +set_vcpuid_entries(void) +{ + int32_t result; + struct vcpuid_entry entry; + uint32_t limit; + uint32_t i, j; + struct cpuinfo_x86 *cpu_info = get_pcpu_info(); + + init_vcpuid_entry(0U, 0U, 0U, &entry); + + if (cpu_info->cpuid_level < 0x16U) { + /* The cpuid with zero leaf returns the max level. Emulate that the 0x16U is supported */ + entry.eax = 0x16U; + } + result = set_vcpuid_entry(vcpuid_entries, &entry); + if (result == 0) { + limit = entry.eax; + g_vcpuid_level = limit; + + for (i = 1U; i <= limit; i++) { + if (is_percpu_related(i)) { + continue; + } + + switch (i) { + case 0x04U: + for (j = 0U; ; j++) { + init_vcpuid_entry(i, j, CPUID_CHECK_SUBLEAF, &entry); + if (entry.eax == 0U) { + break; + } + + result = set_vcpuid_entry(vcpuid_entries, &entry); + if (result != 0) { + /* wants to break out of switch */ + break; + } + } + break; + /* MONITOR/MWAIT */ + case 0x05U: + break; + case 0x07U: + init_vcpuid_entry(i, 0U, CPUID_CHECK_SUBLEAF, &entry); + if (entry.eax != 0U) { + printc("vcpuid: only support subleaf 0 for cpu leaf 07h\n"); + entry.eax = 0U; + } + /* mask CPUID_EDX_IBRS_IBPB */ + entry.edx &= ~CPUID_EDX_IBRS_IBPB; + + entry.ecx &= ~CPUID_ECX_WAITPKG; + + result = set_vcpuid_entry(vcpuid_entries, &entry); + break; + case 0x12U: + break; + /* These features are disabled */ + /* PMU is not supported except for core partition VM, like RTVM */ + case 0x0aU: + break; + + /* Intel RDT */ + case 0x0fU: + break; + /* Intel RDT */ + case 0x10U: + break; + + /* Intel Processor Trace */ + case 0x14U: + /* PCONFIG */ + case 0x1bU: + /* V2 Extended Topology Enumeration Leaf */ + case 0x1fU: + break; + default: + init_vcpuid_entry(i, 0U, 0U, &entry); + result = set_vcpuid_entry(vcpuid_entries, &entry); + break; + } + + /* WARNING: do nothing between break out of switch and before this check */ + if (result != 0) { + /* break out of for */ + break; + } + } + + if (result == 0) { + result = set_vcpuid_extended_function(); + } + } + + return result; +} + +static inline const struct vcpuid_entry *local_find_vcpuid_entry(uint32_t leaf, uint32_t subleaf) +{ + uint32_t i = 0U, nr, half; + const struct vcpuid_entry *found_entry = NULL; + + nr = g_entry_nr; + half = nr >> 1U; + if (vcpuid_entries[half].leaf < leaf) { + i = half; + } + + for (; i < nr; i++) { + const struct vcpuid_entry *tmp = (const struct vcpuid_entry *)(&vcpuid_entries[i]); + + if (tmp->leaf < leaf) { + continue; + } else if (tmp->leaf == leaf) { + if (((tmp->flags & CPUID_CHECK_SUBLEAF) != 0U) && (tmp->subleaf != subleaf)) { + continue; + } + found_entry = tmp; + break; + } else { + /* tmp->leaf > leaf */ + break; + } + } + + return found_entry; +} + +static inline const struct vcpuid_entry *find_vcpuid_entry(uint32_t leaf_arg, uint32_t subleaf) +{ + const struct vcpuid_entry *entry; + uint32_t leaf = leaf_arg; + + entry = local_find_vcpuid_entry(leaf, subleaf); + if (entry == NULL) { + uint32_t limit; + + if ((leaf & 0x80000000U) != 0U) { + limit = g_vcpuid_xlevel; + } else { + limit = g_vcpuid_level; + } + + if (leaf > limit) { + /* Intel documentation states that invalid EAX input + * will return the same information as EAX=cpuid_level + * (Intel SDM Vol. 2A - Instruction Set Reference - + * CPUID) + */ + leaf = g_vcpuid_level; + entry = local_find_vcpuid_entry(leaf, subleaf); + } + + } + + return entry; +} + +static void guest_cpuid_01h(struct vmrt_vm_vcpu *vcpu, uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) +{ + uint32_t apicid = 1; + + cpuid_subleaf(0x1U, 0x0U, eax, ebx, ecx, edx); + /* Patching initial APIC ID */ + *ebx &= ~APIC_ID_MASK; + *ebx |= (apicid << APIC_ID_SHIFT); + + *edx &= ~CPUID_EDX_MTRR; + + /* mask Safer Mode Extension */ + *ecx &= ~CPUID_ECX_SMX; + + *ecx &= ~CPUID_ECX_EST; + + /* mask SDBG for silicon debug */ + *ecx &= ~CPUID_ECX_SDBG; + + /* mask VMX to guest OS */ + *ecx &= ~CPUID_ECX_VMX; + + /* set Hypervisor Present Bit */ + *ecx |= CPUID_ECX_HV; + + /* Warning: should we support pcid in VM? Let's begin with not setting it first */ + *ecx &= ~CPUID_ECX_PCID; + + /* + * Hide MONITOR/MWAIT. + */ + // *ecx &= ~CPUID_ECX_MONITOR; + + /* Warning: should we support CPUID_ECX_OSXSAVE in VM? Let's begin with not setting it first */ + *ecx &= ~CPUID_ECX_OSXSAVE; + if ((*ecx & CPUID_ECX_XSAVE) != 0U) { + uint64_t cr4; + /*read guest CR4*/ + cr4 = vcpu->shared_region->cr4; + if ((cr4 & CR4_OSXSAVE) != 0UL) { + *ecx |= CPUID_ECX_OSXSAVE; + } + } + + /* disable thermal ctrl*/ + *edx &= ~CPUID_EDX_TM1; + + *edx &= ~CPUID_EDX_VME; + + *edx &= ~CPUID_EDX_DE; + + *edx &= ~CPUID_EDX_PSE; + + /* Warning: it seems that PAE, PGE, FXSR should be supported */ + // *edx &= ~CPUID_EDX_PAE; + + // *edx &= ~CPUID_EDX_PGE; + + // *edx &= ~CPUID_EDX_FXSR; + + /* Don't support complex apic */ + *ecx &= ~CPUID_ECX_x2APIC; + + /* DS/PEBS is not supported except for core partition VM, like RTVM */ + /* mask Debug Store feature */ + *ecx &= ~(CPUID_ECX_DTES64 | CPUID_ECX_DS_CPL); + + /* mask PDCM: Perfmon and Debug Capability */ + *ecx &= ~CPUID_ECX_PDCM; + + /* mask Debug Store feature */ + *edx &= ~CPUID_EDX_DTES; +} + +static void guest_cpuid_0bh(uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) +{ + /* Forward host cpu topology to the guest, guest will know the native platform information such as host cpu topology here */ + cpuid_subleaf(0x0BU, *ecx, eax, ebx, ecx, edx); + + /* Patching X2APIC */ + *edx = 1; +} + +static void guest_cpuid_0dh(uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) +{ + uint32_t subleaf = *ecx; + + cpuid_subleaf(0x0dU, subleaf, eax, ebx, ecx, edx); + switch (subleaf) { + case 0U: + /* SDM Vol.1 17-2, On processors that do not support Intel MPX, + * CPUID.(EAX=0DH,ECX=0):EAX[3] and + * CPUID.(EAX=0DH,ECX=0):EAX[4] will both be 0 */ + *eax &= ~(CPUID_EAX_XCR0_BNDREGS | CPUID_EAX_XCR0_BNDCSR); + break; + case 1U: + *ecx &= ~(CPUID_ECX_CET_U_STATE | CPUID_ECX_CET_S_STATE); + break; + case 11U: + case 12U: + *eax = 0U; + *ebx = 0U; + *ecx = 0U; + *edx = 0U; + break; + default: + /* No emulation for other leaves */ + break; + } +} + +static void guest_cpuid_19h(uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) +{ + *eax = 0U; + *ebx = 0U; + *ecx = 0U; + *edx = 0U; +} + +static void guest_cpuid_80000001h(const struct vmrt_vm_vcpu *vcpu, + uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) +{ + const struct vcpuid_entry *entry_check = find_vcpuid_entry(0x80000000U, 0); + uint64_t guest_ia32_misc_enable = 0x800001; + uint32_t leaf = 0x80000001U; + + if ((entry_check != NULL) && (entry_check->eax >= leaf)) { + cpuid_subleaf(leaf, 0x0U, eax, ebx, ecx, edx); + /* SDM Vol4 2.1, XD Bit Disable of MSR_IA32_MISC_ENABLE + * When set to 1, the Execute Disable Bit feature (XD Bit) is disabled and the XD Bit + * extended feature flag will be clear (CPUID.80000001H: EDX[20]=0) + */ + if ((guest_ia32_misc_enable & MSR_IA32_MISC_ENABLE_XD_DISABLE) != 0UL) { + *edx = *edx & ~CPUID_EDX_XD_BIT_AVIL; + } + } else { + *eax = 0U; + *ebx = 0U; + *ecx = 0U; + *edx = 0U; + } +} + +static void guest_limit_cpuid(const struct vmrt_vm_vcpu *vcpu, uint32_t leaf, + uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) +{ + uint64_t guest_ia32_misc_enable = 0x800001; + + if ((guest_ia32_misc_enable & MSR_IA32_MISC_ENABLE_LIMIT_CPUID) != 0UL) { + /* limit the leaf number to 2 */ + if (leaf == 0U) { + *eax = 2U; + } else if (leaf > 2U) { + *eax = 0U; + *ebx = 0U; + *ecx = 0U; + *edx = 0U; + } else { + /* In this case, leaf is 1U, return the cpuid value get above */ + } + } +} + +void guest_cpuid(struct vmrt_vm_vcpu *vcpu, uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) +{ + uint32_t leaf = *eax; + uint32_t subleaf = *ecx; + + /* vm related */ + if (!is_percpu_related(leaf)) { + const struct vcpuid_entry *entry = find_vcpuid_entry(leaf, subleaf); + + if (entry != NULL) { + *eax = entry->eax; + *ebx = entry->ebx; + *ecx = entry->ecx; + *edx = entry->edx; + } else { + *eax = 0U; + *ebx = 0U; + *ecx = 0U; + *edx = 0U; + } + } else { + /* percpu related */ + switch (leaf) { + case 0x01U: + guest_cpuid_01h(vcpu, eax, ebx, ecx, edx); + break; + + case 0x0bU: + guest_cpuid_0bh(eax, ebx, ecx, edx); + break; + + case 0x0dU: + guest_cpuid_0dh(eax, ebx, ecx, edx); + break; + + case 0x19U: + guest_cpuid_19h(eax, ebx, ecx, edx); + break; + + case 0x80000001U: + guest_cpuid_80000001h(vcpu, eax, ebx, ecx, edx); + break; + + default: + /* + * In this switch statement, leaf 0x01/0x0b/0x0d/0x19/0x80000001 + * shall be handled specifically. All the other cases + * just return physical value. + */ + cpuid_subleaf(leaf, *ecx, eax, ebx, ecx, edx); + break; + } + } + + guest_limit_cpuid(vcpu, leaf, eax, ebx, ecx, edx); +} + +void +cpuid_handler(struct vmrt_vm_vcpu *vcpu) +{ + uint64_t rax, rbx, rcx, rdx; + volatile struct vm_vcpu_shared_region *regs = vcpu->shared_region; + int test = 0; + + rax = regs->ax; + rbx = regs->bx; + rcx = regs->cx; + rdx = regs->dx; + + guest_cpuid(vcpu, (uint32_t *)&rax, (uint32_t *)&rbx, (uint32_t *)&rcx, (uint32_t *)&rdx); + + regs->ax = rax; + regs->bx = rbx; + regs->cx = rcx; + regs->dx = rdx; + + GOTO_NEXT_INST(regs); + + return; +} + +static void __attribute__((constructor)) +init(void) +{ + init_pcpu_capabilities(); + set_vcpuid_entries(); +} diff --git a/src/components/implementation/simple_vmm/noop_nf/vcpuid.h b/src/components/implementation/simple_vmm/noop_nf/vcpuid.h new file mode 100644 index 0000000000..9124eedb0e --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/vcpuid.h @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2018-2022 Intel Corporation. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef VCPUID_H_ +#define VCPUID_H_ +#include + +#define CPUID_CHECK_SUBLEAF (1U << 0U) +#define MAX_VM_VCPUID_ENTRIES 64U + +/* Guest capability flags reported by CPUID */ +#define GUEST_CAPS_PRIVILEGE_VM (1U << 0U) + +struct vcpuid_entry { + uint32_t eax; + uint32_t ebx; + uint32_t ecx; + uint32_t edx; + uint32_t leaf; + uint32_t subleaf; + uint32_t flags; + uint32_t padding; +}; + +#define FEATURE_WORDS 16U + +int32_t set_vcpuid_entries(void); +void guest_cpuid(struct vmrt_vm_vcpu *vcpu, + uint32_t *eax, uint32_t *ebx, + uint32_t *ecx, uint32_t *edx); + +#endif /* VCPUID_H_ */ diff --git a/src/components/implementation/simple_vmm/noop_nf/vio.c b/src/components/implementation/simple_vmm/noop_nf/vio.c new file mode 100644 index 0000000000..b63253b7b1 --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/vio.c @@ -0,0 +1,106 @@ +#include +#include "devices/serial/serial.h" +#include "devices/vpci/vpci.h" +#include "devices/vpic/vpic.h" +#include "devices/vrtc/vrtc.h" +#include "devices/vps2/vps2.h" +#include "devices/vpci/virtio_net_io.h" + +void +io_handler(struct vmrt_vm_vcpu *vcpu) +{ + volatile struct vm_vcpu_shared_region *regs = vcpu->shared_region; + u64_t qualification = regs->qualification; + + u16_t port_id = (qualification >> 16) & 0XFFFF; + u8_t access_sz = qualification & 7; + u8_t access_dir = (qualification >> 3) & 1; + + assert(!((qualification >> 4) & 1)); + assert(!((qualification >> 5) & 1)); + + switch (access_sz) + { + case 0: + access_sz = IO_BYTE; + break; + case 1: + access_sz = IO_WORD; + break; + case 3: + access_sz = IO_LONG; + break; + default: + VM_PANIC(vcpu); + + } + if (port_id == 0x3ff || port_id == 0x2f9 || port_id == 0x2fc || port_id == 0x2fb || port_id == 0x2fa || port_id == 0x2ff || port_id == 0x2f8 || port_id == 0x3e9 || port_id == 0x3ec || port_id == 0x3eb || port_id == 0x3ea || port_id == 0x3ef || port_id == 0x3e8 + || port_id == 0x2e9 || port_id == 0x2ec || port_id == 0x2eb || port_id == 0x2ee) { + /* TODO: fix these io ports emulcation */ + goto done; + } + if (port_id <= SERIAL_PORT_MAX && port_id >= SERIAL_PORT_MIN) { + serial_handler(port_id, access_dir, access_sz, vcpu); + goto done; + } + + /* Fast path for virtio-net processing */ + switch (port_id) + { + case VIRTIO_NET_DEV_FEATURES: + case VIRTIO_NET_GUEST_FEATURES: + case VIRTIO_NET_QUEUE_ADDR: + case VIRTIO_NET_QUEUE_SIZE: + case VIRTIO_NET_QUEUE_SELECT: + case VIRTIO_NET_QUEUE_NOTIFY: + case VIRTIO_NET_DEV_STATUS: + case VIRTIO_NET_ISR: + case VIRTIO_NET_MAC: + case VIRTIO_NET_MAC1: + case VIRTIO_NET_MAC2: + case VIRTIO_NET_MAC3: + case VIRTIO_NET_MAC4: + case VIRTIO_NET_MAC5: + case VIRTIO_NET_STATUS: + case VIRTIO_NET_STATUS_H: + virtio_net_handler(port_id, access_dir, access_sz, vcpu); + goto done; + default: + break; + } + + switch (port_id) + { + case CMOS_CMD_PORT: + case CMOS_DATA_PORT: + vrtc_handler(port_id, access_dir, access_sz, vcpu); + goto done; + case PIC_MASTER_CMD_PORT: + case PIC_MASTER_DATA_PORT: + case PIC_SLAVE_CMD_PORT: + case PIC_SLAVE_DATA_PORT: + case PIC_ELCR1: + case PIC_ELCR2: + vpic_handler(port_id, access_dir, access_sz, vcpu); + goto done; + case PS2_CONTROL_PORT_A: + case PS2_CONTROL_PORT_B: + ps2_handler(port_id, access_dir, access_sz, vcpu); + goto done; + case VPCI_CONFIG_ADDRESS: + case VPCI_CONFIG_DATA0: + case VPCI_CONFIG_DATA1: + case VPCI_CONFIG_DATA2: + case VPCI_CONFIG_DATA3: + case VPCI_MECHANISM_CONTROL_REG: + vpci_handler(port_id, access_dir, access_sz, vcpu); + goto done; + } + + printc("port id:%x, sz:%d, dir:%d\n", port_id, access_sz, access_dir); + VM_PANIC(vcpu); +done: + GOTO_NEXT_INST(regs); + + return; +} \ No newline at end of file diff --git a/src/components/implementation/simple_vmm/noop_nf/vioapic.c b/src/components/implementation/simple_vmm/noop_nf/vioapic.c new file mode 100644 index 0000000000..1dfcdbdc43 --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/vioapic.c @@ -0,0 +1,564 @@ +/*- + * Copyright (c) 2013 Tycho Nightingale + * Copyright (c) 2013 Neel Natu + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#define pr_prefix "vioapic: " + +#include +#include +#include +#include +#include +#include +#include +#include + + +#define RTBL_RO_BITS ((uint32_t)0x00004000U | (uint32_t)0x00001000U) /*Remote IRR and Delivery Status bits*/ + +#define DBG_LEVEL_VIOAPIC 6U +#define ACRN_IOAPIC_VERSION 0x11U + +#define MASK_ALL_INTERRUPTS 0x0001000000010000UL + +static inline struct acrn_vioapics *vm_ioapics(const struct vmrt_vm_comp *vm) +{ + return (struct acrn_vioapics *)(vm->ioapic); +} + +/** + * @pre pin < vioapic->chipinfo.nr_pins + */ +static void +vioapic_generate_intr(struct acrn_single_vioapic *vioapic, uint32_t pin) +{ + uint32_t vector, dest, delmode; + union ioapic_rte rte; + bool level, phys; + + rte = vioapic->rtbl[pin]; + + if (rte.bits.intr_mask == IOAPIC_RTE_MASK_SET) { + printc("ioapic pin%hhu: masked\n", pin); + } else { + phys = (rte.bits.dest_mode == IOAPIC_RTE_DESTMODE_PHY); + delmode = rte.bits.delivery_mode; + level = (rte.bits.trigger_mode == IOAPIC_RTE_TRGRMODE_LEVEL); + + /* For level trigger irq, avoid send intr if + * previous one hasn't received EOI + */ + if (!level || (vioapic->rtbl[pin].bits.remote_irr == 0UL)) { + if (level) { + vioapic->rtbl[pin].bits.remote_irr = IOAPIC_RTE_REM_IRR; + } + vector = rte.bits.vector; + dest = rte.bits.dest_field; + vlapic_receive_intr(vioapic->vm, level, dest, phys, delmode, vector, false); + } + } +} + +/** + * @pre pin < vioapic->chipinfo.nr_pins + */ +static void +vioapic_set_pinstate(struct acrn_single_vioapic *vioapic, uint32_t pin, uint32_t level) +{ + uint32_t old_lvl; + union ioapic_rte rte; + + if (pin < vioapic->chipinfo.nr_pins) { + rte = vioapic->rtbl[pin]; + old_lvl = (uint32_t)bitmap_test((uint16_t)(pin & 0x3FU), &vioapic->pin_state[pin >> 6U]); + if (level == 0U) { + /* clear pin_state and deliver interrupt according to polarity */ + bitmap_clear_nolock((uint16_t)(pin & 0x3FU), &vioapic->pin_state[pin >> 6U]); + if ((rte.bits.intr_polarity == IOAPIC_RTE_INTPOL_ALO) + && (old_lvl != level)) { + vioapic_generate_intr(vioapic, pin); + } + } else { + /* set pin_state and deliver intrrupt according to polarity */ + bitmap_set_nolock((uint16_t)(pin & 0x3FU), &vioapic->pin_state[pin >> 6U]); + if ((rte.bits.intr_polarity == IOAPIC_RTE_INTPOL_AHI) + && (old_lvl != level)) { + vioapic_generate_intr(vioapic, pin); + } + } + } +} + + +struct acrn_single_vioapic * +vgsi_to_vioapic_and_vpin(const struct vmrt_vm_comp *vm, uint32_t vgsi, uint32_t *vpin) +{ + struct acrn_single_vioapic *vioapic; + uint8_t vioapic_index = 0U; + + if (vpin != NULL) { + *vpin = vgsi; + } + + vioapic = (struct acrn_single_vioapic *)&(vm_ioapics(vm)->vioapic_array[vioapic_index]); + + return vioapic; +} + +/** + * @brief Set vIOAPIC IRQ line status. + * + * Similar with vioapic_set_irqline_lock(),but would not make sure + * operation be done with ioapic lock. + * + * @param[in] vm Pointer to target VM + * @param[in] vgsi Target GSI number + * @param[in] operation Action options: GSI_SET_HIGH/GSI_SET_LOW/ + * GSI_RAISING_PULSE/GSI_FALLING_PULSE + * + * @pre vgsi < get_vm_gsicount(vm) + * @pre vm != NULL + * @return None + */ +void +vioapic_set_irqline_nolock(const struct vmrt_vm_comp *vm, uint32_t vgsi, uint32_t operation) +{ + struct acrn_single_vioapic *vioapic; + uint32_t pin; + + vioapic = vgsi_to_vioapic_and_vpin(vm, vgsi, &pin); + + switch (operation) { + case GSI_SET_HIGH: + vioapic_set_pinstate(vioapic, pin, 1U); + break; + case GSI_SET_LOW: + vioapic_set_pinstate(vioapic, pin, 0U); + break; + case GSI_RAISING_PULSE: + vioapic_set_pinstate(vioapic, pin, 1U); + vioapic_set_pinstate(vioapic, pin, 0U); + break; + case GSI_FALLING_PULSE: + vioapic_set_pinstate(vioapic, pin, 0U); + vioapic_set_pinstate(vioapic, pin, 1U); + break; + default: + /* + * The function caller could guarantee the pre condition. + */ + break; + } +} + +/** + * @brief Set vIOAPIC IRQ line status. + * + * @param[in] vm Pointer to target VM + * @param[in] vgsi Target GSI number + * @param[in] operation Action options: GSI_SET_HIGH/GSI_SET_LOW/ + * GSI_RAISING_PULSE/GSI_FALLING_PULSE + * + * @pre vgsi < get_vm_gsicount(vm) + * @pre vm != NULL + * + * @return None + */ +void +vioapic_set_irqline_lock(const struct vmrt_vm_comp *vm, uint32_t vgsi, uint32_t operation) +{ + uint64_t rflags; + + vioapic_set_irqline_nolock(vm, vgsi, operation); +} + +static uint32_t +vioapic_indirect_read(struct acrn_single_vioapic *vioapic, uint32_t addr) +{ + uint32_t regnum, ret = 0U; + uint32_t pin, pincount = vioapic->chipinfo.nr_pins; + + regnum = addr & 0xffU; + switch (regnum) { + case IOAPIC_ID: + ret = (uint32_t)vioapic->chipinfo.id << IOAPIC_ID_SHIFT; + break; + case IOAPIC_VER: + ret = ((pincount - 1U) << MAX_RTE_SHIFT) | ACRN_IOAPIC_VERSION; + break; + case IOAPIC_ARB: + ret = (uint32_t)vioapic->chipinfo.id << IOAPIC_ID_SHIFT; + break; + default: + /* + * In this switch statement, regnum shall either be IOAPIC_ID or + * IOAPIC_VER or IOAPIC_ARB. + * All the other cases will be handled properly later after this + * switch statement. + */ + break; + } + + /* redirection table entries */ + if ((regnum >= IOAPIC_REDTBL) && + (regnum < (IOAPIC_REDTBL + (pincount * 2U)))) { + uint32_t addr_offset = regnum - IOAPIC_REDTBL; + uint32_t rte_offset = addr_offset >> 1U; + pin = rte_offset; + if ((addr_offset & 0x1U) != 0U) { + ret = vioapic->rtbl[pin].u.hi_32; + } else { + ret = vioapic->rtbl[pin].u.lo_32; + } + } + + return ret; +} + +static inline bool vioapic_need_intr(const struct acrn_single_vioapic *vioapic, uint16_t pin) +{ + uint32_t lvl; + union ioapic_rte rte; + bool ret = false; + + if ((uint32_t)pin < vioapic->chipinfo.nr_pins) { + rte = vioapic->rtbl[pin]; + lvl = (uint32_t)bitmap_test(pin & 0x3FU, &vioapic->pin_state[pin >> 6U]); + ret = !!(((rte.bits.intr_polarity == IOAPIC_RTE_INTPOL_ALO) && (lvl == 0U)) || + ((rte.bits.intr_polarity == IOAPIC_RTE_INTPOL_AHI) && (lvl != 0U))); + } + + return ret; +} + +/* + * Due to the race between vcpus and vioapic->lock could be accessed from softirq, ensure to do + * spinlock_irqsave_obtain(&(vioapic->lock), &rflags) & spinlock_irqrestore_release(&(vioapic->lock), rflags) + * by caller. + */ +static void vioapic_indirect_write(struct acrn_single_vioapic *vioapic, uint32_t addr, uint32_t data) +{ + union ioapic_rte last, new, changed; + uint32_t regnum; + uint32_t pin, pincount = vioapic->chipinfo.nr_pins; + + regnum = addr & 0xffUL; + switch (regnum) { + case IOAPIC_ID: + vioapic->chipinfo.id = (uint8_t)((data & IOAPIC_ID_MASK) >> IOAPIC_ID_SHIFT); + break; + case IOAPIC_VER: + case IOAPIC_ARB: + /* readonly */ + break; + default: + /* + * In this switch statement, regnum shall either be IOAPIC_ID or + * IOAPIC_VER or IOAPIC_ARB. + * All the other cases will be handled properly later after this + * switch statement. + */ + break; + } + + /* redirection table entries */ + if ((regnum >= IOAPIC_REDTBL) && (regnum < (IOAPIC_REDTBL + (pincount * 2U)))) { + bool wire_mode_valid = true; + uint32_t addr_offset = regnum - IOAPIC_REDTBL; + uint32_t rte_offset = addr_offset >> 1U; + pin = rte_offset; + + last = vioapic->rtbl[pin]; + new = last; + if ((addr_offset & 1U) != 0U) { + new.u.hi_32 = data; + } else { + new.u.lo_32 &= RTBL_RO_BITS; + new.u.lo_32 |= (data & ~RTBL_RO_BITS); + } + + /* In some special scenarios, the LAPIC somehow hasn't send + * EOI to IOAPIC which cause the Remote IRR bit can't be clear. + * To clear it, some OSes will use EOI Register to clear it for + * 0x20 version IOAPIC, otherwise use switch Trigger Mode to + * Edge Sensitive to clear it. + */ + if (new.bits.trigger_mode == IOAPIC_RTE_TRGRMODE_EDGE) { + new.bits.remote_irr = 0U; + } + + changed.full = last.full ^ new.full; + /* pin0 from vpic mask/unmask */ + if ((pin == 0U) && (changed.bits.intr_mask != 0UL)) { + /* mask -> umask */ + if (last.bits.intr_mask == IOAPIC_RTE_MASK_SET) { + if ((vioapic->vm->wire_mode == VPIC_WIRE_NULL) || + (vioapic->vm->wire_mode == VPIC_WIRE_INTR)) { + vioapic->vm->wire_mode = VPIC_WIRE_IOAPIC; + printc("vpic wire mode -> IOAPIC\n"); + } else { + printc("WARNING: invalid vpic wire mode change\n"); + wire_mode_valid = false; + } + /* unmask -> mask */ + } else { + if (vioapic->vm->wire_mode == VPIC_WIRE_IOAPIC) { + vioapic->vm->wire_mode = VPIC_WIRE_INTR; + printc("vpic wire mode -> INTR\n"); + } + } + } + + if (wire_mode_valid) { + vioapic->rtbl[pin] = new; + + /* remap for ptdev */ + if ((new.bits.intr_mask == IOAPIC_RTE_MASK_CLR) || (last.bits.intr_mask == IOAPIC_RTE_MASK_CLR)) { + /* TODO: set pin remap*/ + } + + /* + * Generate an interrupt if the following conditions are met: + * - pin is not masked + * - previous interrupt has been EOIed + * - pin level is asserted + */ + if ((vioapic->rtbl[pin].bits.intr_mask == IOAPIC_RTE_MASK_CLR) && + (vioapic->rtbl[pin].bits.remote_irr == 0UL) && + vioapic_need_intr(vioapic, (uint16_t)pin)) { + vioapic_generate_intr(vioapic, pin); + } + } + } +} + +static void +vioapic_mmio_rw(struct acrn_single_vioapic *vioapic, uint64_t gpa, + uint32_t *data, bool do_read) +{ + uint32_t offset; + uint64_t rflags; + + offset = (uint32_t)(gpa - vioapic->chipinfo.addr); + + /* The IOAPIC specification allows 32-bit wide accesses to the + * IOAPIC_REGSEL (offset 0) and IOAPIC_WINDOW (offset 16) registers. + */ + switch (offset) { + case IOAPIC_REGSEL: + if (do_read) { + *data = vioapic->ioregsel; + } else { + vioapic->ioregsel = *data & 0xFFU; + } + break; + case IOAPIC_WINDOW: + if (do_read) { + *data = vioapic_indirect_read(vioapic, + vioapic->ioregsel); + } else { + vioapic_indirect_write(vioapic, + vioapic->ioregsel, *data); + } + break; + default: + assert(0); + if (do_read) { + *data = 0xFFFFFFFFU; + } + break; + } +} + +/* + * @pre vm != NULL + */ +static void +vioapic_process_eoi(struct acrn_single_vioapic *vioapic, uint32_t vector) +{ + uint32_t pin, pincount = vioapic->chipinfo.nr_pins; + union ioapic_rte rte; + uint64_t rflags; + + if ((vector < VECTOR_DYNAMIC_START) || (vector > NR_MAX_VECTOR)) { + printc("vioapic_process_eoi: invalid vector %u", vector); + } + + printc("ioapic processing eoi for vector %u\n", vector); + + /* notify device to ack if assigned pin */ + for (pin = 0U; pin < pincount; pin++) { + rte = vioapic->rtbl[pin]; + if ((rte.bits.vector != vector) || + (rte.bits.remote_irr == 0U)) { + continue; + } + } + + /* + * XXX keep track of the pins associated with this vector instead + * of iterating on every single pin each time. + */ + for (pin = 0U; pin < pincount; pin++) { + rte = vioapic->rtbl[pin]; + if ((rte.bits.vector != vector) || + (rte.bits.remote_irr == 0U)) { + continue; + } + + vioapic->rtbl[pin].bits.remote_irr = 0U; + if (vioapic_need_intr(vioapic, (uint16_t)pin)) { + printc("ioapic pin%hhu: asserted at eoi\n", pin); + vioapic_generate_intr(vioapic, pin); + } + } +} + +void vioapic_broadcast_eoi(const struct vmrt_vm_comp *vm, uint32_t vector) +{ + struct acrn_single_vioapic *vioapic; + uint8_t vioapic_index; + + /* + * For platforms with multiple IO-APICs, EOI message from LAPIC is + * broadcast to all IO-APICs. Emulating the same behavior here. + */ + + for (vioapic_index = 0U; vioapic_index < vm_ioapics(vm)->ioapic_num; vioapic_index++) { + vioapic = &(vm_ioapics(vm)->vioapic_array[vioapic_index]); + vioapic_process_eoi(vioapic, vector); + } +} + +static void reset_one_vioapic(struct acrn_single_vioapic *vioapic) +{ + uint32_t pin, pincount; + + /* Initialize all redirection entries to mask all interrupts */ + pincount = vioapic->chipinfo.nr_pins; + for (pin = 0U; pin < pincount; pin++) { + vioapic->rtbl[pin].full = MASK_ALL_INTERRUPTS; + } + vioapic->chipinfo.id = 0U; + vioapic->ioregsel = 0U; +} + +void reset_vioapics(const struct vmrt_vm_comp *vm) +{ + struct acrn_vioapics *vioapics = vm_ioapics(vm); + uint8_t vioapic_index; + + for (vioapic_index = 0U; vioapic_index < vioapics->ioapic_num; vioapic_index++) { + reset_one_vioapic(&vioapics->vioapic_array[vioapic_index]); + } +} + +void +vioapic_init(struct vmrt_vm_comp *vm) +{ + static struct ioapic_info virt_ioapic_info = { + .nr_pins = VIOAPIC_RTE_NUM, + .addr = VIOAPIC_BASE + }; + + struct ioapic_info *vioapic_info; + uint8_t vioapic_index; + struct acrn_single_vioapic *vioapic = NULL; + struct acrn_vioapics *vioapics = vm_ioapics(vm); + + /* only set one io apic */ + vioapics->ioapic_num = 1U; + vioapic_info = &virt_ioapic_info; + + for (vioapic_index = 0U; vioapic_index < vioapics->ioapic_num; vioapic_index++) { + vioapic = &vioapics->vioapic_array[vioapic_index]; + vioapic->chipinfo = vioapic_info[vioapic_index]; + + vioapic->vm = vm; + reset_one_vioapic(vioapic); + } + + /* + * Maximum number of GSI is computed as GSI base of the IOAPIC i.e. enumerated last in ACPI MADT + * plus the number of interrupt pins of that IOAPIC. + */ + if (vioapic != NULL) { + vioapics->nr_gsi = vioapic->chipinfo.gsi_base + vioapic->chipinfo.nr_pins; + } +} + +uint32_t +get_vm_gsicount(const struct vmrt_vm_comp *vm) +{ + struct acrn_vioapics *vioapics = vm_ioapics(vm); + return vioapics->nr_gsi; +} + +/* + * @pre handler_private_data != NULL + */ +int32_t vioapic_mmio_access_handler(struct vmrt_vm_vcpu *vcpu) +{ + struct acrn_mmio_request *mmio = vcpu->mmio_request; + struct acrn_single_vioapic *vioapic = &vm_ioapics(vcpu->vm)->vioapic_array[0]; + uint64_t gpa = mmio->address; + int32_t ret = 0; + + /* Note all RW to IOAPIC are 32-Bit in size */ + if (mmio->size == 4UL) { + uint32_t data = (uint32_t)mmio->value; + + if (mmio->direction == ACRN_IOREQ_DIR_READ) { + vioapic_mmio_rw(vioapic, gpa, &data, true); + mmio->value = (uint64_t)data; + } else if (mmio->direction == ACRN_IOREQ_DIR_WRITE) { + vioapic_mmio_rw(vioapic, gpa, &data, false); + } else { + ret = -EINVAL; + } + } else { + printc("All RW to IOAPIC must be 32-bits in size\n"); + assert(0); + } + + return ret; +} + +/** + * @pre vm->arch_vm.vioapics != NULL + * @pre vgsi < get_vm_gsicount(vm) + * @pre rte != NULL + */ +void vioapic_get_rte(const struct vmrt_vm_comp *vm, uint32_t vgsi, union ioapic_rte *rte) +{ + struct acrn_single_vioapic *vioapic; + uint32_t pin; + vioapic = vgsi_to_vioapic_and_vpin(vm, vgsi, &pin); + + *rte = vioapic->rtbl[pin]; +} diff --git a/src/components/implementation/simple_vmm/noop_nf/vioapic.h b/src/components/implementation/simple_vmm/noop_nf/vioapic.h new file mode 100644 index 0000000000..73794a091e --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/vioapic.h @@ -0,0 +1,128 @@ +/*- + * Copyright (c) 2013 Tycho Nightingale + * Copyright (c) 2013 Neel Natu + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef VIOAPIC_H +#define VIOAPIC_H + +/** + * @file vioapic.h + * + * @brief public APIs for virtual I/O APIC + */ + +#include +#include +#include + +#define VIOAPIC_BASE 0xFEC00000UL +#define VIOAPIC_SIZE 4096UL +#define MAX_IOAPIC_NUM 1 + +#define REDIR_ENTRIES_HW 120U /* Service VM align with native ioapic */ +#define STATE_BITMAP_SIZE INT_DIV_ROUNDUP(REDIR_ENTRIES_HW, 64U) + +#define IOAPIC_RTE_LOW_INTVEC ((uint32_t)IOAPIC_RTE_INTVEC) + +/* + * id field is used to emulate the IOAPIC_ID register of vIOAPIC + */ + +struct acrn_single_vioapic { + // spinlock_t lock; + struct vmrt_vm_comp *vm; + struct ioapic_info chipinfo; + uint32_t ioregsel; + union ioapic_rte rtbl[REDIR_ENTRIES_HW]; + /* pin_state status bitmap: 1 - high, 0 - low */ + uint64_t pin_state[STATE_BITMAP_SIZE]; +}; + +/* + * ioapic_num represents the number of IO-APICs emulated for the VM. + * nr_gsi represents the maximum number of GSI emulated for the VM. + */ +struct acrn_vioapics { + uint8_t ioapic_num; + uint32_t nr_gsi; + struct acrn_single_vioapic vioapic_array[MAX_IOAPIC_NUM]; +}; + +void dump_vioapic(struct vmrt_vm_comp *vm); +void vioapic_init(struct vmrt_vm_comp *vm); +void reset_vioapics(const struct vmrt_vm_comp *vm); + + +/** + * @brief virtual I/O APIC + * + * @addtogroup acrn_vioapic ACRN vIOAPIC + * @{ + */ + +/** + * @brief Set vIOAPIC IRQ line status. + * + * @param[in] vm Pointer to target VM + * @param[in] vgsi GSI for the virtual interrupt + * @param[in] operation Action options: GSI_SET_HIGH/GSI_SET_LOW/ + * GSI_RAISING_PULSE/GSI_FALLING_PULSE + * + * @pre irqline < vioapic_pincount(vm) + * + * @return None + */ +void vioapic_set_irqline_lock(const struct vmrt_vm_comp *vm, uint32_t vgsi, uint32_t operation); + +/** + * @brief Set vIOAPIC IRQ line status. + * + * Similar with vioapic_set_irqline_lock(),but would not make sure + * operation be done with ioapic lock. + * + * @param[in] vm Pointer to target VM + * @param[in] vgsi GSI for the virtual interrupt + * @param[in] operation Action options: GSI_SET_HIGH/GSI_SET_LOW/ + * GSI_RAISING_PULSE/GSI_FALLING_PULSE + * + * @pre irqline < vioapic_pincount(vm) + * @return None + */ +void vioapic_set_irqline_nolock(const struct vmrt_vm_comp *vm, uint32_t vgsi, uint32_t operation); + +uint32_t get_vm_gsicount(const struct vmrt_vm_comp *vm); +void vioapic_broadcast_eoi(const struct vmrt_vm_comp *vm, uint32_t vector); +void vioapic_get_rte(const struct vmrt_vm_comp *vm, uint32_t vgsi, union ioapic_rte *rte); +int32_t vioapic_mmio_access_handler(struct vmrt_vm_vcpu *vcpu); +struct acrn_single_vioapic *vgsi_to_vioapic_and_vpin(const struct vmrt_vm_comp *vm, uint32_t vgsi, uint32_t *vpin); + +/** + * @} + */ +/* End of acrn_vioapic */ +#endif /* VIOAPIC_H */ diff --git a/src/components/implementation/simple_vmm/noop_nf/vlapic.c b/src/components/implementation/simple_vmm/noop_nf/vlapic.c new file mode 100644 index 0000000000..155eed10e3 --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/vlapic.c @@ -0,0 +1,1554 @@ +/*- + * Copyright (c) 2011 NetApp, Inc. + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#define pr_prefix "vlapic: " + +#include +#include +#include +#include +#include +#include +#include "vpic.h" +#include "bits.h" +#include "atomic.h" + +#include + +#pragma GCC diagnostic ignored "-Wunused-but-set-variable" +#define VLAPIC_VERBOS 0 + +#define VLAPIC_VERSION (16U) +#define APICBASE_BSP 0x00000100UL +#define APICBASE_X2APIC 0x00000400UL +#define APICBASE_XAPIC 0x00000800UL +#define APICBASE_LAPIC_MODE (APICBASE_XAPIC | APICBASE_X2APIC) +#define APICBASE_ENABLED 0x00000800UL +#define LOGICAL_ID_MASK 0xFU +#define CLUSTER_ID_MASK 0xFFFF0U + +#define DBG_LEVEL_VLAPIC 6U + +int g_vlapi_enabled = 0; + +static inline struct vmrt_vm_vcpu *vlapic2vcpu(const struct acrn_vlapic *vlapic) +{ + return vlapic->vcpu; +} +static inline struct acrn_vlapic *vcpu_vlapic(struct vmrt_vm_vcpu *vcpu) +{ + return vcpu->vlapic; +} +static inline bool is_lapic_pt_configured(void) +{ + return false; +} + +static inline void vlapic_dump_irr(__unused const struct acrn_vlapic *vlapic, __unused const char *msg) {} +static inline void vlapic_dump_isr(__unused const struct acrn_vlapic *vlapic, __unused const char *msg) {} + +const struct acrn_apicv_ops *apicv_ops; + +static bool apicv_set_intr_ready(struct acrn_vlapic *vlapic, uint32_t vector); + +static void apicv_trigger_pi_anv(uint16_t dest_pcpu_id, uint32_t anv); + +static void vlapic_x2apic_self_ipi_handler(struct acrn_vlapic *vlapic); + +/* + * Post an interrupt to the vcpu running on 'hostcpu'. This will use a + * hardware assist if available (e.g. Posted Interrupt) or fall back to + * sending an 'ipinum' to interrupt the 'hostcpu'. + */ +static void vlapic_set_error(struct acrn_vlapic *vlapic, uint32_t mask); + +void vlapic_timer_expired(struct vmrt_vm_vcpu *vcpu); +static struct pi_desc *get_pi_desc(struct vmrt_vm_vcpu *vcpu); + +static inline bool vlapic_enabled(const struct acrn_vlapic *vlapic) +{ + const struct lapic_regs *lapic = vlapic->apic_page; + + return (((vlapic->msr_apicbase & APICBASE_ENABLED) != 0UL) && + ((lapic->svr.v & APIC_SVR_ENABLE) != 0U)); +} + +static inline void vlapic_build_x2apic_id(struct acrn_vlapic *vlapic) +{ + struct lapic_regs *lapic; + uint32_t logical_id, cluster_id; + + lapic = vlapic->apic_page; + lapic->id.v = vlapic->vapic_id; + logical_id = lapic->id.v & LOGICAL_ID_MASK; + cluster_id = (lapic->id.v & CLUSTER_ID_MASK) >> 4U; + lapic->ldr.v = (cluster_id << 16U) | (1U << logical_id); +} + +static inline uint32_t vlapic_find_isrv(const struct acrn_vlapic *vlapic) +{ + const struct lapic_regs *lapic = vlapic->apic_page; + uint32_t i, val, bitpos, isrv = 0U; + const struct lapic_reg *isrptr; + + isrptr = &lapic->isr[0]; + + /* i ranges effectively from 7 to 1 */ + for (i = 7U; i > 0U; i--) { + val = isrptr[i].v; + if (val != 0U) { + bitpos = (uint32_t)fls32(val); + isrv = (i << 5U) | bitpos; + break; + } + } + + return isrv; +} + +static void +vlapic_write_dfr(struct acrn_vlapic *vlapic) +{ + struct lapic_regs *lapic; + + lapic = vlapic->apic_page; + lapic->dfr.v &= APIC_DFR_MODEL_MASK; + lapic->dfr.v |= APIC_DFR_RESERVED; + + if ((lapic->dfr.v & APIC_DFR_MODEL_MASK) == APIC_DFR_MODEL_FLAT) { + printc("vlapic DFR in Flat Model\n"); + } else if ((lapic->dfr.v & APIC_DFR_MODEL_MASK) + == APIC_DFR_MODEL_CLUSTER) { + printc("vlapic DFR in Cluster Model\n"); + } else { + assert(0); + } +} + +static void +vlapic_write_ldr(struct acrn_vlapic *vlapic) +{ + struct lapic_regs *lapic; + + lapic = vlapic->apic_page; + lapic->ldr.v &= ~APIC_LDR_RESERVED; +} + +static inline uint32_t +vlapic_timer_divisor_shift(uint32_t dcr) +{ + uint32_t val; + + val = ((dcr & 0x3U) | ((dcr & 0x8U) >> 1U)); + return ((val + 1U) & 0x7U); +} + +__unused static inline bool +vlapic_lvtt_oneshot(const struct acrn_vlapic *vlapic) +{ + return (((vlapic->apic_page->lvt[APIC_LVT_TIMER].v) & APIC_LVTT_TM) + == APIC_LVTT_TM_ONE_SHOT); +} + +static inline bool +vlapic_lvtt_period(const struct acrn_vlapic *vlapic) +{ + return (((vlapic->apic_page->lvt[APIC_LVT_TIMER].v) & APIC_LVTT_TM) + == APIC_LVTT_TM_PERIODIC); +} + +static inline bool +vlapic_lvtt_tsc_deadline(const struct acrn_vlapic *vlapic) +{ + return (((vlapic->apic_page->lvt[APIC_LVT_TIMER].v) & APIC_LVTT_TM) + == APIC_LVTT_TM_TSCDLT); +} + +static inline bool +vlapic_lvtt_masked(const struct acrn_vlapic *vlapic) +{ + return (((vlapic->apic_page->lvt[APIC_LVT_TIMER].v) & APIC_LVTT_M) != 0U); +} + +static bool +set_expiration(struct acrn_vlapic *vlapic) +{ + struct vlapic_timer *vtimer; + uint32_t tmicr, divisor_shift; + bool ret; + + vtimer = &vlapic->vtimer; + tmicr = vtimer->tmicr; + divisor_shift = vtimer->divisor_shift; + + if ((tmicr == 0U) || (divisor_shift > 8U)) { + ret = false; + } else { + uint64_t delta = (uint64_t)tmicr << divisor_shift; + assert(0); + + ret = true; + } + return ret; +} + +static void vlapic_update_lvtt(struct acrn_vlapic *vlapic, + uint32_t val) +{ + uint32_t timer_mode = val & APIC_LVTT_TM; + struct vlapic_timer *vtimer = &vlapic->vtimer; + + if (vtimer->mode != timer_mode) { + struct hv_timer *timer = &vtimer->timer; + + /* + * A write to the LVT Timer Register that changes + * the timer mode disarms the local APIC timer. + */ + /* TODO: reset timer */ + vtimer->mode = timer_mode; + } +} + +static uint32_t vlapic_get_ccr(const struct acrn_vlapic *vlapic) +{ + uint32_t remain_count = 0U; + const struct vlapic_timer *vtimer = &vlapic->vtimer; + + if ((vtimer->tmicr != 0U) && (!vlapic_lvtt_tsc_deadline(vlapic))) { + uint64_t remains; + assert(0); + } + + return remain_count; +} + +static void vlapic_write_dcr(struct acrn_vlapic *vlapic) +{ + uint32_t divisor_shift; + struct vlapic_timer *vtimer; + struct lapic_regs *lapic = vlapic->apic_page; + + vtimer = &vlapic->vtimer; + divisor_shift = vlapic_timer_divisor_shift(lapic->dcr_timer.v); + + vtimer->divisor_shift = divisor_shift; +} + +static void vlapic_write_icrtmr(struct acrn_vlapic *vlapic) +{ + struct lapic_regs *lapic; + struct vlapic_timer *vtimer; + + if (!vlapic_lvtt_tsc_deadline(vlapic)) { + lapic = vlapic->apic_page; + vtimer = &vlapic->vtimer; + vtimer->tmicr = lapic->icr_timer.v; + } +} + +static void +vlapic_write_esr(struct acrn_vlapic *vlapic) +{ + struct lapic_regs *lapic; + + lapic = vlapic->apic_page; + lapic->esr.v = vlapic->esr_pending; + vlapic->esr_pending = 0U; +} + +static void +vlapic_set_tmr(struct acrn_vlapic *vlapic, uint32_t vector, bool level) +{ + struct lapic_reg *tmrptr = &(vlapic->apic_page->tmr[0]); + if (level) { + if (!bitmap32_test_and_set_lock((uint16_t)(vector & 0x1fU), &tmrptr[(vector & 0xffU) >> 5U].v)) { + assert(0); + } + } else { + if (bitmap32_test_and_clear_lock((uint16_t)(vector & 0x1fU), &tmrptr[(vector & 0xffU) >> 5U].v)) { + assert(0); + } + } +} + +static void apicv_basic_accept_intr(struct acrn_vlapic *vlapic, uint32_t vector, bool level) +{ + struct lapic_regs *lapic; + struct lapic_reg *irrptr; + uint32_t idx; + + lapic = vlapic->apic_page; + idx = vector >> 5U; + irrptr = &lapic->irr[0]; + + /* If the interrupt is set, don't try to do it again */ + if (!bitmap32_test_and_set_lock((uint16_t)(vector & 0x1fU), &irrptr[idx].v)) { + /* update TMR if interrupt trigger mode has changed */ + vlapic_set_tmr(vlapic, vector, level); + assert(0); + } +} + +static void apicv_advanced_accept_intr(struct acrn_vlapic *vlapic, uint32_t vector, bool level) +{ + /* update TMR if interrupt trigger mode has changed */ + vlapic_set_tmr(vlapic, vector, level); + + if (apicv_set_intr_ready(vlapic, vector)) { + /* + * Send interrupt to vCPU via posted interrupt way: + * 1. If target vCPU is in root mode(isn't running), + * record this request as ACRN_REQUEST_EVENT,then + * will pick up the interrupt from PIR and inject + * it to vCPU in next vmentry. + * 2. If target vCPU is in non-root mode(running), + * send PI notification to vCPU and hardware will + * sync PIR to vIRR automatically. + */ + + /* TODO: handle cross-core virtual interrupt notification */ + } +} + +/* + * @pre vector >= 16 + */ +static void vlapic_accept_intr(struct acrn_vlapic *vlapic, uint32_t vector, bool level) +{ + struct lapic_regs *lapic; + assert(vector <= 255); + + lapic = vlapic->apic_page; + if ((lapic->svr.v & APIC_SVR_ENABLE) == 0U) { + printc("vlapic is software disabled, ignoring interrupt %u", vector); + assert(0); + } else { + apicv_advanced_accept_intr(vlapic, vector, level); + } +} + +/** + * @brief Send notification vector to target pCPU. + * + * If APICv Posted-Interrupt is enabled and target pCPU is in non-root mode, + * pCPU will sync pending virtual interrupts from PIR to vIRR automatically, + * without VM exit. + * If pCPU in root-mode, virtual interrupt will be injected in next VM entry. + * + * @param[in] dest_pcpu_id Target CPU ID. + * @param[in] anv Activation Notification Vectors (ANV) + * + * @return None + */ +static void apicv_trigger_pi_anv(uint16_t dest_pcpu_id, uint32_t anv) +{ + /* TODO: support pi in the future */ + assert(0); +} + +/** + * @pre offset value shall be one of the folllowing values: + * APIC_OFFSET_CMCI_LVT + * APIC_OFFSET_TIMER_LVT + * APIC_OFFSET_THERM_LVT + * APIC_OFFSET_PERF_LVT + * APIC_OFFSET_LINT0_LVT + * APIC_OFFSET_LINT1_LVT + * APIC_OFFSET_ERROR_LVT + */ +static inline uint32_t +lvt_off_to_idx(uint32_t offset) +{ + uint32_t index; + + switch (offset) { + case APIC_OFFSET_CMCI_LVT: + index = APIC_LVT_CMCI; + break; + case APIC_OFFSET_TIMER_LVT: + index = APIC_LVT_TIMER; + break; + case APIC_OFFSET_THERM_LVT: + index = APIC_LVT_THERMAL; + break; + case APIC_OFFSET_PERF_LVT: + index = APIC_LVT_PMC; + break; + case APIC_OFFSET_LINT0_LVT: + index = APIC_LVT_LINT0; + break; + case APIC_OFFSET_LINT1_LVT: + index = APIC_LVT_LINT1; + break; + case APIC_OFFSET_ERROR_LVT: + default: + /* + * The function caller could guarantee the pre condition. + * So, all of the possible 'offset' other than + * APIC_OFFSET_ERROR_LVT has been handled in prior cases. + */ + index = APIC_LVT_ERROR; + break; + } + + return index; +} + +/** + * @pre offset value shall be one of the folllowing values: + * APIC_OFFSET_CMCI_LVT + * APIC_OFFSET_TIMER_LVT + * APIC_OFFSET_THERM_LVT + * APIC_OFFSET_PERF_LVT + * APIC_OFFSET_LINT0_LVT + * APIC_OFFSET_LINT1_LVT + * APIC_OFFSET_ERROR_LVT + */ +static inline uint32_t * +vlapic_get_lvtptr(struct acrn_vlapic *vlapic, uint32_t offset) +{ + struct lapic_regs *lapic = vlapic->apic_page; + uint32_t i; + uint32_t *lvt_ptr; + + switch (offset) { + case APIC_OFFSET_CMCI_LVT: + lvt_ptr = &lapic->lvt_cmci.v; + break; + default: + /* + * The function caller could guarantee the pre condition. + * All the possible 'offset' other than APIC_OFFSET_CMCI_LVT + * could be handled here. + */ + i = lvt_off_to_idx(offset); + lvt_ptr = &(lapic->lvt[i].v); + break; + } + return lvt_ptr; +} + +static inline uint32_t +vlapic_get_lvt(const struct acrn_vlapic *vlapic, uint32_t offset) +{ + uint32_t idx; + + idx = lvt_off_to_idx(offset); + return vlapic->lvt_last[idx]; +} + +static void +vlapic_write_lvt(struct acrn_vlapic *vlapic, uint32_t offset) +{ + uint32_t *lvtptr, mask, val, idx; + struct lapic_regs *lapic; + bool error = false; + + lapic = vlapic->apic_page; + lvtptr = vlapic_get_lvtptr(vlapic, offset); + val = *lvtptr; + + if ((lapic->svr.v & APIC_SVR_ENABLE) == 0U) { + val |= APIC_LVT_M; + } + mask = APIC_LVT_M | APIC_LVT_DS | APIC_LVT_VECTOR; + switch (offset) { + case APIC_OFFSET_TIMER_LVT: + mask |= APIC_LVTT_TM; + break; + case APIC_OFFSET_ERROR_LVT: + break; + case APIC_OFFSET_LINT0_LVT: + case APIC_OFFSET_LINT1_LVT: + mask |= APIC_LVT_TM | APIC_LVT_RIRR | APIC_LVT_IIPP; + /* FALLTHROUGH */ + default: + mask |= APIC_LVT_DM; + break; + } + val &= mask; + + /* vlapic mask/unmask LINT0 for ExtINT? */ + if ((offset == APIC_OFFSET_LINT0_LVT) && + ((val & APIC_LVT_DM) == APIC_LVT_DM_EXTINT)) { + uint32_t last = vlapic_get_lvt(vlapic, offset); + struct vmrt_vm_comp *vm = vlapic2vcpu(vlapic)->vm; + + /* mask -> unmask: may from every vlapic in the vm */ + if (((last & APIC_LVT_M) != 0U) && ((val & APIC_LVT_M) == 0U)) { + if ((vm->wire_mode == VPIC_WIRE_INTR) || + (vm->wire_mode == VPIC_WIRE_NULL)) { + vm->wire_mode = VPIC_WIRE_LAPIC; + printc("vpic wire mode -> LAPIC\n"); + } else { + printc("WARNING:invalid vpic wire mode change\n"); + assert(0); + } + /* unmask -> mask: only from the vlapic LINT0-ExtINT enabled */ + } else if (((last & APIC_LVT_M) == 0U) && ((val & APIC_LVT_M) != 0U)) { + if (vm->wire_mode == VPIC_WIRE_LAPIC) { + vm->wire_mode = VPIC_WIRE_NULL; + printc("vpic wire mode -> NULL\n"); + } + } else { + /* APIC_LVT_M unchanged. No action required. */ + } + } else if (offset == APIC_OFFSET_TIMER_LVT) { + vlapic_update_lvtt(vlapic, val); + } else { + /* No action required. */ + } + + if (!error) { + *lvtptr = val; + idx = lvt_off_to_idx(offset); + vlapic->lvt_last[idx] = val; + } +} + +static void +vlapic_mask_lvts(struct acrn_vlapic *vlapic) +{ + struct lapic_regs *lapic = vlapic->apic_page; + + lapic->lvt_cmci.v |= APIC_LVT_M; + vlapic_write_lvt(vlapic, APIC_OFFSET_CMCI_LVT); + + lapic->lvt[APIC_LVT_TIMER].v |= APIC_LVT_M; + vlapic_write_lvt(vlapic, APIC_OFFSET_TIMER_LVT); + + lapic->lvt[APIC_LVT_THERMAL].v |= APIC_LVT_M; + vlapic_write_lvt(vlapic, APIC_OFFSET_THERM_LVT); + + lapic->lvt[APIC_LVT_PMC].v |= APIC_LVT_M; + vlapic_write_lvt(vlapic, APIC_OFFSET_PERF_LVT); + + lapic->lvt[APIC_LVT_LINT0].v |= APIC_LVT_M; + vlapic_write_lvt(vlapic, APIC_OFFSET_LINT0_LVT); + + lapic->lvt[APIC_LVT_LINT1].v |= APIC_LVT_M; + vlapic_write_lvt(vlapic, APIC_OFFSET_LINT1_LVT); + + lapic->lvt[APIC_LVT_ERROR].v |= APIC_LVT_M; + vlapic_write_lvt(vlapic, APIC_OFFSET_ERROR_LVT); +} + +/* + * Algorithm adopted from section "Interrupt, Task and Processor Priority" + * in Intel Architecture Manual Vol 3a. + */ +static void +vlapic_update_ppr(struct acrn_vlapic *vlapic) +{ + uint32_t isrv, tpr, ppr; + + isrv = vlapic->isrv; + tpr = vlapic->apic_page->tpr.v; + + if (prio(tpr) >= prio(isrv)) { + ppr = tpr; + } else { + ppr = isrv & 0xf0U; + } + + vlapic->apic_page->ppr.v = ppr; +} + +static void +vlapic_process_eoi(struct acrn_vlapic *vlapic) +{ + struct lapic_regs *lapic = vlapic->apic_page; + struct lapic_reg *isrptr, *tmrptr; + uint32_t i, vector, bitpos; + + isrptr = &lapic->isr[0]; + tmrptr = &lapic->tmr[0]; + + if (vlapic->isrv != 0U) { + vector = vlapic->isrv; + i = (vector >> 5U); + bitpos = (vector & 0x1fU); + bitmap32_clear_nolock((uint16_t)bitpos, &isrptr[i].v); + + vlapic_dump_isr(vlapic, "vlapic_process_eoi"); + + vlapic->isrv = vlapic_find_isrv(vlapic); + vlapic_update_ppr(vlapic); + } +} + +static void +vlapic_set_error(struct acrn_vlapic *vlapic, uint32_t mask) +{ + uint32_t lvt, vec; + + vlapic->esr_pending |= mask; + if (vlapic->esr_firing == 0) { + vlapic->esr_firing = 1; + + /* The error LVT always uses the fixed delivery mode. */ + lvt = vlapic_get_lvt(vlapic, APIC_OFFSET_ERROR_LVT); + if ((lvt & APIC_LVT_M) == 0U) { + vec = lvt & APIC_LVT_VECTOR; + if (vec >= 16U) { + vlapic_accept_intr(vlapic, vec, LAPIC_TRIG_EDGE); + } + } + vlapic->esr_firing = 0; + } +} + +static void vlapic_write_icrlo(struct acrn_vlapic *vlapic) +{ + uint16_t vcpu_id; + bool phys = false, is_broadcast = false; + uint64_t dmask; + uint32_t icr_low, icr_high, dest; + uint32_t vec, mode, shorthand; + struct lapic_regs *lapic; + struct vmrt_vm_vcpu *target_vcpu; + + lapic = vlapic->apic_page; + lapic->icr_lo.v &= ~APIC_DELSTAT_PEND; + + icr_low = lapic->icr_lo.v; + icr_high = lapic->icr_hi.v; + if (is_x2apic_enabled(vlapic)) { + dest = icr_high; + is_broadcast = (dest == 0xffffffffU); + } else { + dest = icr_high >> APIC_ID_SHIFT; + is_broadcast = (dest == 0xffU); + } + vec = icr_low & APIC_VECTOR_MASK; + mode = icr_low & APIC_DELMODE_MASK; + phys = ((icr_low & APIC_DESTMODE_LOG) == 0UL); + shorthand = icr_low & APIC_DEST_MASK; + + if ((mode == APIC_DELMODE_FIXED) && (vec < 16U)) { + vlapic_set_error(vlapic, APIC_ESR_SEND_ILLEGAL_VECTOR); + printc("Ignoring invalid IPI %u", vec); + assert(0); + } else if (((shorthand == APIC_DEST_SELF) || (shorthand == APIC_DEST_ALLISELF)) + && ((mode == APIC_DELMODE_NMI) || (mode == APIC_DELMODE_INIT) + || (mode == APIC_DELMODE_STARTUP))) { + printc("unsupported ICR command, ignore it\n"); + } else { + struct vmrt_vm_vcpu *vcpu = vlapic2vcpu(vlapic); + + printc( + "icrlo 0x%08x icrhi 0x%08x triggered ipi %u", + icr_low, icr_high, vec); + + assert(0); + } +} + +static inline uint32_t vlapic_find_highest_irr(const struct acrn_vlapic *vlapic) +{ + const struct lapic_regs *lapic = vlapic->apic_page; + uint32_t i, val, bitpos, vec = 0U; + const struct lapic_reg *irrptr; + + irrptr = &lapic->irr[0]; + + /* i ranges effectively from 7 to 1 */ + for (i = 7U; i > 0U; i--) { + val = irrptr[i].v; + if (val != 0U) { + bitpos = (uint32_t)fls32(val); + vec = (i * 32U) + bitpos; + break; + } + } + + return vec; +} + +/** + * @brief Find a deliverable virtual interrupts for vLAPIC in irr. + * + * @param[in] vlapic Pointer to target vLAPIC data structure + * @param[inout] vecptr Pointer to vector buffer and will be filled + * with eligible vector if any. + * + * @retval false There is no deliverable pending vector. + * @retval true There is deliverable vector. + * + * @remark The vector does not automatically transition to the ISR as a + * result of calling this function. + * This function is only for case that APICv/VID is NOT supported. + */ +static bool vlapic_find_deliverable_intr(const struct acrn_vlapic *vlapic, uint32_t *vecptr) +{ + const struct lapic_regs *lapic = vlapic->apic_page; + uint32_t vec; + bool ret = false; + + vec = vlapic_find_highest_irr(vlapic); + if (prio(vec) > prio(lapic->ppr.v)) { + ret = true; + if (vecptr != NULL) { + *vecptr = vec; + } + } + + return ret; +} + +/** + * @brief Get a deliverable virtual interrupt from irr to isr. + * + * Transition 'vector' from IRR to ISR. This function is called with the + * vector returned by 'vlapic_find_deliverable_intr()' when the guest is able to + * accept this interrupt (i.e. RFLAGS.IF = 1 and no conditions exist that + * block interrupt delivery). + * + * @param[in] vlapic Pointer to target vLAPIC data structure + * @param[in] vector Target virtual interrupt vector + * + * @return None + * + * @pre vlapic != NULL + */ +static void vlapic_get_deliverable_intr(struct acrn_vlapic *vlapic, uint32_t vector) +{ + struct lapic_regs *lapic = vlapic->apic_page; + struct lapic_reg *irrptr, *isrptr; + uint32_t idx; + + /* + * clear the ready bit for vector being accepted in irr + * and set the vector as in service in isr. + */ + idx = vector >> 5U; + + irrptr = &lapic->irr[0]; + bitmap32_clear_lock((uint16_t)(vector & 0x1fU), &irrptr[idx].v); + + vlapic_dump_irr(vlapic, "vlapic_get_deliverable_intr"); + + isrptr = &lapic->isr[0]; + bitmap32_set_nolock((uint16_t)(vector & 0x1fU), &isrptr[idx].v); + vlapic_dump_isr(vlapic, "vlapic_get_deliverable_intr"); + + vlapic->isrv = vector; + + /* + * Update the PPR + */ + vlapic_update_ppr(vlapic); +} + +static void +vlapic_write_svr(struct acrn_vlapic *vlapic) +{ + struct lapic_regs *lapic; + uint32_t old, new, changed; + + lapic = vlapic->apic_page; + + new = lapic->svr.v; + old = vlapic->svr_last; + vlapic->svr_last = new; + + changed = old ^ new; + + if ((changed & APIC_SVR_ENABLE) != 0U) { + if ((new & APIC_SVR_ENABLE) == 0U) { + struct vmrt_vm_comp *vm = vlapic2vcpu(vlapic)->vm; + /* + * The apic is now disabled so stop the apic timer + * and mask all the LVT entries. + */ + printc("vlapic is software-disabled\n"); + + vlapic_mask_lvts(vlapic); + /* the only one enabled LINT0-ExtINT vlapic disabled */ + if (vm->wire_mode == VPIC_WIRE_NULL) { + vm->wire_mode = VPIC_WIRE_INTR; + printc("vpic wire mode -> INTR\n"); + } + } else { + /* + * The apic is now enabled so restart the apic timer + * if it is configured in periodic mode. + */ + printc("vlapic is software-enabled\n"); + g_vlapi_enabled = 1; + if (vlapic_lvtt_period(vlapic)) { + /* TODO: set timer logic */ + assert(0); + } + } + } +} + +static int32_t vlapic_read(struct acrn_vlapic *vlapic, uint32_t offset_arg, uint64_t *data) +{ + int32_t ret = 0; + struct lapic_regs *lapic = vlapic->apic_page; + uint32_t i; + uint32_t offset = offset_arg; + *data = 0UL; + + if (offset > sizeof(*lapic)) { + ret = -EACCES; + } else { + + offset &= ~0x3UL; + switch (offset) { + case APIC_OFFSET_ID: + *data = lapic->id.v; + break; + case APIC_OFFSET_VER: + *data = lapic->version.v; + break; + case APIC_OFFSET_PPR: + *data = lapic->ppr.v; + break; + case APIC_OFFSET_EOI: + *data = lapic->eoi.v; + break; + case APIC_OFFSET_LDR: + *data = lapic->ldr.v; + break; + case APIC_OFFSET_DFR: + *data = lapic->dfr.v; + break; + case APIC_OFFSET_SVR: + *data = lapic->svr.v; + break; + case APIC_OFFSET_ISR0: + case APIC_OFFSET_ISR1: + case APIC_OFFSET_ISR2: + case APIC_OFFSET_ISR3: + case APIC_OFFSET_ISR4: + case APIC_OFFSET_ISR5: + case APIC_OFFSET_ISR6: + case APIC_OFFSET_ISR7: + i = (offset - APIC_OFFSET_ISR0) >> 4U; + *data = lapic->isr[i].v; + break; + case APIC_OFFSET_TMR0: + case APIC_OFFSET_TMR1: + case APIC_OFFSET_TMR2: + case APIC_OFFSET_TMR3: + case APIC_OFFSET_TMR4: + case APIC_OFFSET_TMR5: + case APIC_OFFSET_TMR6: + case APIC_OFFSET_TMR7: + i = (offset - APIC_OFFSET_TMR0) >> 4U; + *data = lapic->tmr[i].v; + break; + case APIC_OFFSET_IRR0: + case APIC_OFFSET_IRR1: + case APIC_OFFSET_IRR2: + case APIC_OFFSET_IRR3: + case APIC_OFFSET_IRR4: + case APIC_OFFSET_IRR5: + case APIC_OFFSET_IRR6: + case APIC_OFFSET_IRR7: + i = (offset - APIC_OFFSET_IRR0) >> 4U; + *data = lapic->irr[i].v; + break; + case APIC_OFFSET_ESR: + *data = lapic->esr.v; + break; + case APIC_OFFSET_ICR_LOW: + *data = lapic->icr_lo.v; + if (is_x2apic_enabled(vlapic)) { + *data |= ((uint64_t)lapic->icr_hi.v) << 32U; + } + break; + case APIC_OFFSET_ICR_HI: + *data = lapic->icr_hi.v; + break; + case APIC_OFFSET_CMCI_LVT: + case APIC_OFFSET_TIMER_LVT: + case APIC_OFFSET_THERM_LVT: + case APIC_OFFSET_PERF_LVT: + case APIC_OFFSET_LINT0_LVT: + case APIC_OFFSET_LINT1_LVT: + case APIC_OFFSET_ERROR_LVT: + *data = vlapic_get_lvt(vlapic, offset); +#ifdef INVARIANTS + reg = vlapic_get_lvtptr(vlapic, offset); + assert(*data == *reg, "inconsistent lvt value at offset %#x: %#lx/%#x", offset, *data, *reg); +#endif + break; + case APIC_OFFSET_TIMER_ICR: + /* if TSCDEADLINE mode always return 0*/ + if (vlapic_lvtt_tsc_deadline(vlapic)) { + *data = 0UL; + } else { + *data = lapic->icr_timer.v; + } + break; + case APIC_OFFSET_TIMER_CCR: + *data = vlapic_get_ccr(vlapic); + break; + case APIC_OFFSET_TIMER_DCR: + *data = lapic->dcr_timer.v; + break; + default: + ret = -EACCES; + break; + } + } + + return ret; +} + + + +/* + * @pre vcpu != NULL + * @pre vector <= 255U + */ +void +vlapic_set_intr(struct vmrt_vm_vcpu *vcpu, uint32_t vector, bool level) +{ + struct acrn_vlapic *vlapic; + + vlapic = vcpu_vlapic(vcpu); + if (vector < 16U) { + vlapic_set_error(vlapic, APIC_ESR_RECEIVE_ILLEGAL_VECTOR); + assert(0); + } else { + vlapic_accept_intr(vlapic, vector, level); + } +} + +void vlapic_timer_expired(struct vmrt_vm_vcpu *vcpu) +{ + struct acrn_vlapic *vlapic; + struct lapic_regs *lapic; + + vlapic = vcpu_vlapic(vcpu); + lapic = vlapic->apic_page; + + /* inject vcpu timer interrupt if not masked */ + if (!vlapic_lvtt_masked(vlapic)) { + vlapic_set_intr(vcpu, lapic->lvt[APIC_LVT_TIMER].v & APIC_LVTT_VECTOR, LAPIC_TRIG_EDGE); + } +} + +/* + * @pre vm != NULL + */ +bool is_x2apic_enabled(const struct acrn_vlapic *vlapic) +{ + bool ret = false; + + return ret; +} + +bool is_xapic_enabled(const struct acrn_vlapic *vlapic) +{ + bool ret = true; + + return ret; +} + + +static bool apicv_basic_x2apic_read_msr_may_valid(uint32_t offset) +{ + return (offset != APIC_OFFSET_DFR) && (offset != APIC_OFFSET_ICR_HI); +} + +static bool apicv_advanced_x2apic_read_msr_may_valid(uint32_t offset) +{ + return (offset == APIC_OFFSET_TIMER_CCR); +} + +static bool apicv_basic_x2apic_write_msr_may_valid(uint32_t offset) +{ + return (offset != APIC_OFFSET_DFR) && (offset != APIC_OFFSET_ICR_HI); +} + +static bool apicv_advanced_x2apic_write_msr_may_valid(uint32_t offset) +{ + return (offset != APIC_OFFSET_DFR) && (offset != APIC_OFFSET_ICR_HI) && + (offset != APIC_OFFSET_EOI) && (offset != APIC_OFFSET_SELF_IPI); +} + + +/** + * APIC-v functions + * @pre get_pi_desc(vlapic2vcpu(vlapic)) != NULL + */ +static bool +apicv_set_intr_ready(struct acrn_vlapic *vlapic, uint32_t vector) +{ + struct pi_desc *pid; + uint32_t idx; + bool notify = false; + + pid = get_pi_desc(vlapic2vcpu(vlapic)); + idx = vector >> 6U; + if (!bitmap_test_and_set_lock((uint16_t)(vector & 0x3fU), &pid->pir[idx])) { + notify = !bitmap_test_and_set_lock(POSTED_INTR_ON, &pid->control.value); + } + return notify; +} + + +static void apicv_basic_inject_intr(struct acrn_vlapic *vlapic, + bool guest_irq_enabled, bool injected) +{ + uint32_t vector = 0U; + + if (guest_irq_enabled && (!injected)) { + vlapic_update_ppr(vlapic); + if (vlapic_find_deliverable_intr(vlapic, &vector)) { + assert(0); + vlapic_get_deliverable_intr(vlapic, vector); + } + } + + vlapic_update_tpr_threshold(vlapic); +} + +/* + * @brief Send a Posted Interrupt to itself. + * + * Interrupts are disabled on pCPU at this point of time. + * Upon the next VMEnter the self-IPI is serviced by the logical processor. + * Since the IPI vector is Posted Interrupt vector, logical processor syncs + * PIR to vIRR and updates RVI. + * + * @pre get_pi_desc(vlapic->vcpu) != NULL + */ +static inline struct pi_desc *get_pi_desc(struct vmrt_vm_vcpu *vcpu) +{ + return (struct pi_desc *)&(vcpu->shared_region->pi_desc); +} + +static void apicv_advanced_inject_intr(struct acrn_vlapic *vlapic, + __unused bool guest_irq_enabled, __unused bool injected) +{ + struct vmrt_vm_vcpu *vcpu = vlapic2vcpu(vlapic); + struct pi_desc *pid = get_pi_desc(vcpu); + + if (bitmap_test(POSTED_INTR_ON, &(pid->control.value))) { + vcpu->shared_region->inject_evt = 1; + } +} + +void vlapic_inject_intr(struct vmrt_vm_vcpu *vcpu) +{ + struct acrn_vlapic *vlapic = vcpu_vlapic(vcpu); + apicv_advanced_inject_intr(vlapic, 0, 0); +} + +static bool apicv_basic_has_pending_delivery_intr(struct vmrt_vm_vcpu *vcpu) +{ + uint32_t vector; + struct acrn_vlapic *vlapic = vcpu_vlapic(vcpu); + + vlapic_update_ppr(vlapic); + + /* check and raise request if we have a deliverable irq in LAPIC IRR */ + if (vlapic_find_deliverable_intr(vlapic, &vector)) { + /* we have pending IRR */ + assert(0); + } + + return vcpu->pending_req != 0UL; +} + +static bool apicv_advanced_has_pending_delivery_intr(__unused struct vmrt_vm_vcpu *vcpu) +{ + return false; +} + +bool vlapic_has_pending_delivery_intr(struct vmrt_vm_vcpu *vcpu) +{ + struct acrn_vlapic *vlapic = vcpu_vlapic(vcpu); + return vlapic->ops->has_pending_delivery_intr(vcpu); +} + +uint32_t vlapic_get_next_pending_intr(struct vmrt_vm_vcpu *vcpu) +{ + struct acrn_vlapic *vlapic = vcpu_vlapic(vcpu); + uint32_t vector; + + vector = vlapic_find_highest_irr(vlapic); + + return vector; +} + +static bool apicv_basic_has_pending_intr(struct vmrt_vm_vcpu *vcpu) +{ + return vlapic_get_next_pending_intr(vcpu) != 0UL; +} + +static bool apicv_advanced_has_pending_intr(struct vmrt_vm_vcpu *vcpu) +{ + return apicv_basic_has_pending_intr(vcpu); +} + +bool vlapic_clear_pending_intr(struct vmrt_vm_vcpu *vcpu, uint32_t vector) +{ + struct acrn_vlapic *vlapic = vcpu_vlapic(vcpu); + struct lapic_reg *irrptr = &(vlapic->apic_page->irr[0]); + uint32_t idx = vector >> 5U; + return bitmap32_test_and_clear_lock((uint16_t)(vector & 0x1fU), &irrptr[idx].v); +} + +bool vlapic_has_pending_intr(struct vmrt_vm_vcpu *vcpu) +{ + struct acrn_vlapic *vlapic = vcpu_vlapic(vcpu); + return vlapic->ops->has_pending_intr(vcpu); +} + +static bool apicv_basic_apic_read_access_may_valid(__unused uint32_t offset) +{ + return true; +} + +static bool apicv_advanced_apic_read_access_may_valid(uint32_t offset) +{ + return ((offset == APIC_OFFSET_CMCI_LVT) || (offset == APIC_OFFSET_TIMER_CCR)); +} + +static bool apicv_basic_apic_write_access_may_valid(uint32_t offset) +{ + return (offset != APIC_OFFSET_SELF_IPI); +} + +static bool apicv_advanced_apic_write_access_may_valid(uint32_t offset) +{ + return (offset == APIC_OFFSET_CMCI_LVT); +} + +int32_t veoi_vmexit_handler(struct vmrt_vm_vcpu *vcpu) +{ + struct acrn_vlapic *vlapic = NULL; + + uint32_t vector; + struct lapic_regs *lapic; + struct lapic_reg *tmrptr; + uint32_t idx; + + /* TODO: fix veoi if necessary */ + assert(0); + + return 0; +} + +static void vlapic_x2apic_self_ipi_handler(struct acrn_vlapic *vlapic) +{ + /* TODO: fix x2apic virtualization if necessary */ + struct lapic_regs *lapic; + uint32_t vector; + + lapic = vlapic->apic_page; + vector = lapic->self_ipi.v & APIC_VECTOR_MASK; + assert(0); +} + + +/* + * TPR threshold (32 bits). Bits 3:0 of this field determine the threshold + * below which bits 7:4 of VTPR (see Section 29.1.1) cannot fall. + */ +void vlapic_update_tpr_threshold(const struct acrn_vlapic *vlapic) +{ + /* TODO: fix trp virtualization if necessary */ + uint32_t irr, tpr, threshold; + assert(0); +} + +int32_t tpr_below_threshold_vmexit_handler(struct vmrt_vm_vcpu *vcpu) +{ + /* TODO: fix trp virtualization if necessary */ + assert(0); + + return 0; +} + +static const struct acrn_apicv_ops apicv_basic_ops = { + .accept_intr = apicv_basic_accept_intr, + .inject_intr = apicv_basic_inject_intr, + .has_pending_delivery_intr = apicv_basic_has_pending_delivery_intr, + .has_pending_intr = apicv_basic_has_pending_intr, + .apic_read_access_may_valid = apicv_basic_apic_read_access_may_valid, + .apic_write_access_may_valid = apicv_basic_apic_write_access_may_valid, + .x2apic_read_msr_may_valid = apicv_basic_x2apic_read_msr_may_valid, + .x2apic_write_msr_may_valid = apicv_basic_x2apic_write_msr_may_valid, +}; + +static const struct acrn_apicv_ops apicv_advanced_ops = { + .accept_intr = apicv_advanced_accept_intr, + .inject_intr = apicv_advanced_inject_intr, + .has_pending_delivery_intr = apicv_advanced_has_pending_delivery_intr, + .has_pending_intr = apicv_advanced_has_pending_intr, + .apic_read_access_may_valid = apicv_advanced_apic_read_access_may_valid, + .apic_write_access_may_valid = apicv_advanced_apic_write_access_may_valid, + .x2apic_read_msr_may_valid = apicv_advanced_x2apic_read_msr_may_valid, + .x2apic_write_msr_may_valid = apicv_advanced_x2apic_write_msr_may_valid, +}; + +/* + * set apicv ops for apicv basic mode or apicv advenced mode. + */ +void vlapic_set_apicv_ops(void) +{ + if (is_apicv_advanced_feature_supported()) { + apicv_ops = &apicv_advanced_ops; + } else { + apicv_ops = &apicv_basic_ops; + } +} + +static uint16_t vm_apicid2vcpu_id(struct vmrt_vm_comp *vm, uint32_t lapicid) +{ + uint16_t i; + struct vmrt_vm_vcpu *vcpu = NULL; + uint16_t cpu_id = INVALID_CPU_ID; + + for (int i = 0; i < vm->num_vcpu; i++) { + vcpu = &vm->vcpus[i]; + if (vcpu_vlapic(vcpu)->vapic_id == lapicid) { + cpu_id = vcpu->cpuid; + break; + } + } + + if (cpu_id == INVALID_CPU_ID) { + printc("%s: bad lapicid %u", __func__, lapicid); + assert(0); + } + + return cpu_id; + +} + +static inline void set_dest_mask_phys(struct vmrt_vm_comp *vm, uint64_t *dmask, uint32_t dest) +{ + uint16_t vcpu_id; + + vcpu_id = vm_apicid2vcpu_id(vm, dest); + if (vcpu_id < vm->num_vcpu) { + bitmap_set_nolock(vcpu_id, dmask); + } +} + +/* + * This function tells if a vlapic belongs to the destination. + * If yes, return true, else reture false. + * + * @pre vlapic != NULL + */ +static inline bool is_dest_field_matched(const struct acrn_vlapic *vlapic, uint32_t dest) +{ + uint32_t logical_id, cluster_id, dest_logical_id, dest_cluster_id; + uint32_t ldr = vlapic->apic_page->ldr.v; + bool ret = false; + + if (is_x2apic_enabled(vlapic)) { + logical_id = ldr & 0xFFFFU; + cluster_id = (ldr >> 16U) & 0xFFFFU; + dest_logical_id = dest & 0xFFFFU; + dest_cluster_id = (dest >> 16U) & 0xFFFFU; + if ((cluster_id == dest_cluster_id) && ((logical_id & dest_logical_id) != 0U)) { + ret = true; + } + } else { + uint32_t dfr = vlapic->apic_page->dfr.v; + if ((dfr & APIC_DFR_MODEL_MASK) == APIC_DFR_MODEL_FLAT) { + /* + * In the "Flat Model" the MDA is interpreted as an 8-bit wide + * bitmask. This model is available in the xAPIC mode only. + */ + logical_id = ldr >> 24U; + dest_logical_id = dest & 0xffU; + if ((logical_id & dest_logical_id) != 0U) { + ret = true; + } + } else if ((dfr & APIC_DFR_MODEL_MASK) == APIC_DFR_MODEL_CLUSTER) { + /* + * In the "Cluster Model" the MDA is used to identify a + * specific cluster and a set of APICs in that cluster. + */ + logical_id = (ldr >> 24U) & 0xfU; + cluster_id = ldr >> 28U; + dest_logical_id = dest & 0xfU; + dest_cluster_id = (dest >> 4U) & 0xfU; + if ((cluster_id == dest_cluster_id) && ((logical_id & dest_logical_id) != 0U)) { + ret = true; + } + } else { + /* Guest has configured a bad logical model for this vcpu. */ + printc("vlapic has bad logical model %x", dfr); + assert(0); + } + } + + return ret; +} + +/* + * This function populates 'dmask' with the set of vcpus that match the + * addressing specified by the (dest, phys, lowprio) tuple. + */ +uint64_t +vlapic_calc_dest_noshort(struct vmrt_vm_comp *vm, bool is_broadcast, + uint32_t dest, bool phys, bool lowprio) +{ + uint64_t dmask = 0UL; + struct acrn_vlapic *vlapic, *lowprio_dest = NULL; + struct vmrt_vm_vcpu *vcpu; + uint16_t vcpu_id; + + if (is_broadcast) { + /* Broadcast in both logical and physical modes. */ + printc("Broadcast is not supported now\n"); + assert(0); + } else if (phys) { + /* Physical mode: "dest" is local APIC ID. */ + printc("vlapic phy dst mode to find cpu\n"); + set_dest_mask_phys(vm, &dmask, dest); + } else { + /* + * Logical mode: "dest" is message destination addr + * to be compared with the logical APIC ID in LDR. + */ + for (int i = 0; i < vm->num_vcpu; i++) { + vcpu = &vm->vcpus[i]; + vcpu_id = i; + vlapic = vcpu_vlapic(vcpu); + if (!is_dest_field_matched(vlapic, dest)) { + continue; + } + + if (lowprio) { + /* + * for lowprio delivery mode, the lowest-priority one + * among all "dest" matched processors accepts the intr. + */ + if (lowprio_dest == NULL) { + lowprio_dest = vlapic; + } else if (lowprio_dest->apic_page->ppr.v > vlapic->apic_page->ppr.v) { + lowprio_dest = vlapic; + } else { + /* No other state currently, do nothing */ + } + } else { + bitmap_set_nolock(vcpu_id, &dmask); + } + } + + if (lowprio && (lowprio_dest != NULL)) { + bitmap_set_nolock(vlapic2vcpu(lowprio_dest)->cpuid, &dmask); + } + } + + return dmask; +} + +void +vlapic_receive_intr(struct vmrt_vm_comp *vm, bool level, uint32_t dest, bool phys, + uint32_t delmode, uint32_t vec, bool rh) +{ + bool lowprio; + uint16_t vcpu_id; + uint64_t dmask; + struct vmrt_vm_vcpu *target_vcpu; + + if ((delmode != IOAPIC_RTE_DELMODE_FIXED) && + (delmode != IOAPIC_RTE_DELMODE_LOPRI) && + (delmode != IOAPIC_RTE_DELMODE_EXINT)) { + printc("vlapic intr invalid delmode %#x", delmode); + assert(0); + } else { + lowprio = (delmode == IOAPIC_RTE_DELMODE_LOPRI) || rh; + + /* + * We don't provide any virtual interrupt redirection hardware so + * all interrupts originating from the ioapic or MSI specify the + * 'dest' in the legacy xAPIC format. + */ + dmask = vlapic_calc_dest_noshort(vm, false, dest, phys, lowprio); + + for (vcpu_id = 0U; vcpu_id < vm->num_vcpu; vcpu_id++) { + struct acrn_vlapic *vlapic; + if ((dmask & (1UL << vcpu_id)) != 0UL) { + target_vcpu = vmrt_get_vcpu(vm, vcpu_id); + + /* only make request when vlapic enabled */ + vlapic = vcpu_vlapic(target_vcpu); + if (vlapic_enabled(vlapic)) { + if (delmode == IOAPIC_RTE_DELMODE_EXINT) { + assert(0); + } else { + vlapic_set_intr(target_vcpu, vec, level); + } + } else {assert(0);} + } + } + } +} + +void +vlapic_reset(struct acrn_vlapic *vlapic) +{ + struct lapic_regs *lapic; + + vlapic->msr_apicbase = DEFAULT_APIC_BASE; + + if (vlapic2vcpu(vlapic)->cpuid == BSP_CPU_ID) { + vlapic->msr_apicbase |= APICBASE_BSP; + } + vlapic->vapic_id = vlapic2vcpu(vlapic)->cpuid; + + /* Upon reset, vlapic is set to xAPIC mode. */ + vlapic->msr_apicbase |= APICBASE_XAPIC; + + lapic = vlapic->apic_page; + (void)memset((void *)lapic, 0U, sizeof(struct lapic_regs)); + + lapic->id.v = vlapic->vapic_id; + if (!is_x2apic_enabled(vlapic)) { + lapic->id.v <<= APIC_ID_SHIFT; + } + + lapic->version.v = VLAPIC_VERSION; + lapic->version.v |= (VLAPIC_MAXLVT_INDEX << MAXLVTSHIFT); + lapic->dfr.v = 0xffffffffU; + lapic->svr.v = APIC_SVR_VECTOR; + vlapic_mask_lvts(vlapic); + + lapic->icr_timer.v = 0U; + lapic->dcr_timer.v = 0U; + vlapic_write_dcr(vlapic); + + vlapic->svr_last = lapic->svr.v; + + vlapic->isrv = 0U; +} + + +int32_t apic_write_vmexit_handler(struct vmrt_vm_vcpu *vcpu) +{ + uint64_t qual; + int32_t err = 0; + uint32_t offset; + struct acrn_vlapic *vlapic = NULL; + + qual = vcpu->shared_region->qualification; + offset = (uint32_t)(qual & 0xFFFUL); + + vlapic = vcpu->vlapic; + + switch (offset) { + case APIC_OFFSET_ID: + /* Force APIC ID as read only */ + break; + case APIC_OFFSET_LDR: + vlapic_write_ldr(vlapic); + break; + case APIC_OFFSET_DFR: + vlapic_write_dfr(vlapic); + break; + case APIC_OFFSET_SVR: + vlapic_write_svr(vlapic); + break; + case APIC_OFFSET_ESR: + vlapic_write_esr(vlapic); + break; + case APIC_OFFSET_ICR_LOW: + vlapic_write_icrlo(vlapic); + break; + case APIC_OFFSET_CMCI_LVT: + case APIC_OFFSET_TIMER_LVT: + case APIC_OFFSET_THERM_LVT: + case APIC_OFFSET_PERF_LVT: + case APIC_OFFSET_LINT0_LVT: + case APIC_OFFSET_LINT1_LVT: + case APIC_OFFSET_ERROR_LVT: + vlapic_write_lvt(vlapic, offset); + break; + case APIC_OFFSET_TIMER_ICR: + vlapic_write_icrtmr(vlapic); + break; + case APIC_OFFSET_TIMER_DCR: + vlapic_write_dcr(vlapic); + break; + case APIC_OFFSET_SELF_IPI: + if (is_x2apic_enabled(vlapic)) { + /* Don't support x2apic */ + assert(0); + break; + } + /* falls through */ + default: + err = -EACCES; + printc("Unhandled APIC-Write, offset:0x%x", offset); + VM_PANIC(vcpu); + break; + } + + return err; +} + +void +lapic_write_handler(struct vmrt_vm_vcpu *vcpu) +{ + apic_write_vmexit_handler(vcpu); +} + +void +lapic_intr_inject(struct vmrt_vm_vcpu *vcpu, u8_t vector, int autoeoi) +{ + struct vm_vcpu_shared_region *shared_region = vcpu->shared_region; + struct acrn_vlapic *vlapic = vcpu_vlapic(vcpu); + struct lapic_regs *lapic = vlapic->apic_page; + u8_t offset = vector / 32; + u8_t bit = vector % 32; + + u8_t svi = (u8_t)(shared_region->interrupt_status >> 8); + u8_t rvi = (u8_t)shared_region->interrupt_status; + + if (svi == vector && autoeoi) { + /* TODO: svi should be the second highest priority bit in isr */ + svi = 0; + lapic->isr[offset].v &= ~(1U << bit); + } + if (rvi < vector) { + rvi = vector; + } + + /* Accept the interrupt */ + lapic->irr[offset].v |= (1U << bit); + + shared_region->interrupt_status = svi << 8 | rvi; +} diff --git a/src/components/implementation/simple_vmm/noop_nf/vlapic.h b/src/components/implementation/simple_vmm/noop_nf/vlapic.h new file mode 100644 index 0000000000..d4e8645661 --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/vlapic.h @@ -0,0 +1,260 @@ +/*- + * Copyright (c) 2011 NetApp, Inc. + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef VLAPIC_H +#define VLAPIC_H + +#include +#include + +/** + * @file vlapic.h + * + * @brief public APIs for virtual LAPIC + */ + + +#define VLAPIC_MAXLVT_INDEX APIC_LVT_CMCI + +struct hv_timer { + // struct list_head node; /**< link all timers */ + int mode; /**< timer mode: one-shot or periodic */ + uint64_t timeout; /**< tsc deadline to interrupt */ + uint64_t period_in_cycle; /**< period of the periodic timer in CPU ticks */ + // timer_handle_t func; /**< callback if time reached */ + void *priv_data; /**< func private data */ +}; + +struct vlapic_timer { + struct hv_timer timer; + uint32_t mode; + uint32_t tmicr; + uint32_t divisor_shift; +}; + +struct acrn_vlapic { + /* + * Please keep 'apic_page' as the first field in + * current structure, as below alignment restrictions are mandatory + * to support APICv features: + * - 'apic_page' MUST be 4KB aligned. + * IRR, TMR and PIR could be accessed by other vCPUs when deliver + * an interrupt to vLAPIC. + */ + struct lapic_regs *apic_page; + + struct vmrt_vm_vcpu *vcpu; + + uint32_t vapic_id; + uint32_t esr_pending; + int32_t esr_firing; + + struct vlapic_timer vtimer; + + /* + * isrv: vector number for the highest priority bit that is set in the ISR + */ + uint32_t isrv; + + uint64_t msr_apicbase; + + const struct acrn_apicv_ops *ops; + + /* + * Copies of some registers in the virtual APIC page. We do this for + * a couple of different reasons: + * - to be able to detect what changed (e.g. svr_last) + * - to maintain a coherent snapshot of the register (e.g. lvt_last) + */ + uint32_t svr_last; + uint32_t lvt_last[VLAPIC_MAXLVT_INDEX + 1]; +} __attribute__((aligned(PAGE_SIZE_4K))); + + +struct vmrt_vm_vcpu; +struct acrn_apicv_ops { + void (*accept_intr)(struct acrn_vlapic *vlapic, uint32_t vector, bool level); + void (*inject_intr)(struct acrn_vlapic *vlapic, bool guest_irq_enabled, bool injected); + bool (*has_pending_delivery_intr)(struct vmrt_vm_vcpu *vcpu); + bool (*has_pending_intr)(struct vmrt_vm_vcpu *vcpu); + bool (*apic_read_access_may_valid)(uint32_t offset); + bool (*apic_write_access_may_valid)(uint32_t offset); + bool (*x2apic_read_msr_may_valid)(uint32_t offset); + bool (*x2apic_write_msr_may_valid)(uint32_t offset); +}; + +enum reset_mode; +extern const struct acrn_apicv_ops *apicv_ops; +void vlapic_set_apicv_ops(void); + +/** + * @brief virtual LAPIC + * + * @addtogroup acrn_vlapic ACRN vLAPIC + * @{ + */ + +void vlapic_inject_intr(struct vmrt_vm_vcpu *vcpu); +bool vlapic_has_pending_delivery_intr(struct vmrt_vm_vcpu *vcpu); +bool vlapic_has_pending_intr(struct vmrt_vm_vcpu *vcpu); + +/** + * Returns the highest priority pending vector on vLAPIC, or + * 0 if there is no pending vector. + */ +uint32_t vlapic_get_next_pending_intr(struct vmrt_vm_vcpu *vcpu); + +/** + * Clears a pending vector from vIRR. Returns true if + * the bit was previously present, false otherwise. + */ +bool vlapic_clear_pending_intr(struct vmrt_vm_vcpu *vcpu, uint32_t vector); + +uint64_t vlapic_get_tsc_deadline_msr(const struct acrn_vlapic *vlapic); +void vlapic_set_tsc_deadline_msr(struct acrn_vlapic *vlapic, uint64_t val_arg); +uint64_t vlapic_get_apicbase(const struct acrn_vlapic *vlapic); +int32_t vlapic_set_apicbase(struct acrn_vlapic *vlapic, uint64_t new); +int32_t vlapic_x2apic_read(struct vmrt_vm_vcpu *vcpu, uint32_t msr, uint64_t *val); +int32_t vlapic_x2apic_write(struct vmrt_vm_vcpu *vcpu, uint32_t msr, uint64_t val); + +/* + * Signals to the LAPIC that an interrupt at 'vector' needs to be generated + * to the 'cpu', the state is recorded in IRR. + * @pre vcpu != NULL + * @pre vector <= 255U + */ +void vlapic_set_intr(struct vmrt_vm_vcpu *vcpu, uint32_t vector, bool level); + +#define LAPIC_TRIG_LEVEL true +#define LAPIC_TRIG_EDGE false + +static inline uint32_t prio(uint32_t x) +{ + return (x >> 4U); +} + +/** + * @brief Triggers LAPIC local interrupt(LVT). + * + * @param[in] vm Pointer to VM data structure + * @param[in] vcpu_id_arg ID of vCPU, BROADCAST_CPU_ID means triggering + * interrupt to all vCPUs. + * @param[in] lvt_index The index which LVT would to be fired. + * + * @retval 0 on success. + * @retval -EINVAL on error that vcpu_id_arg or vector of the LVT is invalid. + * + * @pre vm != NULL + */ +int32_t vlapic_set_local_intr(struct vmrt_vm_comp *vm, uint16_t vcpu_id_arg, uint32_t lvt_index); + +/** + * @brief Inject MSI to target VM. + * + * @param[in] vm Pointer to VM data structure + * @param[in] addr MSI address. + * @param[in] data MSI data. + * + * @retval 0 on success. + * @retval -1 on error that addr is invalid. + * + * @pre vm != NULL + */ +int32_t vlapic_inject_msi(struct vmrt_vm_comp *vm, uint64_t addr, uint64_t data); + + +void vlapic_receive_intr(struct vmrt_vm_comp *vm, bool level, uint32_t dest, + bool phys, uint32_t delmode, uint32_t vec, bool rh); + +/** + * @pre vlapic != NULL + */ +static inline uint32_t vlapic_get_apicid(const struct acrn_vlapic *vlapic) +{ + return vlapic->vapic_id; +} + +void vlapic_create(struct vmrt_vm_vcpu *vcpu, uint16_t pcpu_id); +/* + * @pre vcpu != NULL + */ +void vlapic_free(struct vmrt_vm_vcpu *vcpu); + +void vlapic_reset(struct acrn_vlapic *vlapic); +void vlapic_restore(struct acrn_vlapic *vlapic, const struct lapic_regs *regs); +uint64_t vlapic_apicv_get_apic_access_addr(void); +uint64_t vlapic_apicv_get_apic_page_addr(struct acrn_vlapic *vlapic); +int32_t apic_access_vmexit_handler(struct vmrt_vm_vcpu *vcpu); +int32_t apic_write_vmexit_handler(struct vmrt_vm_vcpu *vcpu); +int32_t veoi_vmexit_handler(struct vmrt_vm_vcpu *vcpu); +void vlapic_update_tpr_threshold(const struct acrn_vlapic *vlapic); +int32_t tpr_below_threshold_vmexit_handler(struct vmrt_vm_vcpu *vcpu); +uint64_t vlapic_calc_dest_noshort(struct vmrt_vm_comp *vm, bool is_broadcast, + uint32_t dest, bool phys, bool lowprio); +bool is_x2apic_enabled(const struct acrn_vlapic *vlapic); +bool is_xapic_enabled(const struct acrn_vlapic *vlapic); + +static inline bool is_apicv_advanced_feature_supported(void) +{ + return false; +} +#define POSTED_INTR_ON 0U +/* Posted Interrupt Descriptor (PID) in VT-d spec */ +struct pi_desc { + /* Posted Interrupt Requests, one bit per requested vector */ + uint64_t pir[4]; + + union { + struct { + /* Outstanding Notification */ + uint16_t on:1; + + /* Suppress Notification, of non-urgent interrupts */ + uint16_t sn:1; + + uint16_t rsvd_1:14; + + /* Notification Vector */ + uint8_t nv; + + uint8_t rsvd_2; + + /* Notification destination, a physical LAPIC ID */ + uint32_t ndst; + } bits; + + uint64_t value; + } control; + + uint32_t rsvd[6]; +} __attribute__((aligned(64)));; +/** + * @} + */ +/* End of acrn_vlapic */ +#endif /* VLAPIC_H */ diff --git a/src/components/implementation/simple_vmm/noop_nf/vlapic_priv.h b/src/components/implementation/simple_vmm/noop_nf/vlapic_priv.h new file mode 100644 index 0000000000..6c66f6c84e --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/vlapic_priv.h @@ -0,0 +1,84 @@ +/*- + * Copyright (c) 2013 Neel Natu + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef VLAPIC_PRIV_H +#define VLAPIC_PRIV_H + +/* + * APIC Register: Offset Description + */ +#define APIC_OFFSET_ID 0x20U /* Local APIC ID */ +#define APIC_OFFSET_VER 0x30U /* Local APIC Version */ +#define APIC_OFFSET_TPR 0x80U /* Task Priority Register */ +#define APIC_OFFSET_APR 0x90U /* Arbitration Priority */ +#define APIC_OFFSET_PPR 0xA0U /* Processor Priority Register */ +#define APIC_OFFSET_EOI 0xB0U /* EOI Register */ +#define APIC_OFFSET_RRR 0xC0U /* Remote read */ +#define APIC_OFFSET_LDR 0xD0U /* Logical Destination */ +#define APIC_OFFSET_DFR 0xE0U /* Destination Format Register */ +#define APIC_OFFSET_SVR 0xF0U /* Spurious Vector Register */ +#define APIC_OFFSET_ISR0 0x100U /* In Service Register */ +#define APIC_OFFSET_ISR1 0x110U +#define APIC_OFFSET_ISR2 0x120U +#define APIC_OFFSET_ISR3 0x130U +#define APIC_OFFSET_ISR4 0x140U +#define APIC_OFFSET_ISR5 0x150U +#define APIC_OFFSET_ISR6 0x160U +#define APIC_OFFSET_ISR7 0x170U +#define APIC_OFFSET_TMR0 0x180U /* Trigger Mode Register */ +#define APIC_OFFSET_TMR1 0x190U +#define APIC_OFFSET_TMR2 0x1A0U +#define APIC_OFFSET_TMR3 0x1B0U +#define APIC_OFFSET_TMR4 0x1C0U +#define APIC_OFFSET_TMR5 0x1D0U +#define APIC_OFFSET_TMR6 0x1E0U +#define APIC_OFFSET_TMR7 0x1F0U +#define APIC_OFFSET_IRR0 0x200U /* Interrupt Request Register */ +#define APIC_OFFSET_IRR1 0x210U +#define APIC_OFFSET_IRR2 0x220U +#define APIC_OFFSET_IRR3 0x230U +#define APIC_OFFSET_IRR4 0x240U +#define APIC_OFFSET_IRR5 0x250U +#define APIC_OFFSET_IRR6 0x260U +#define APIC_OFFSET_IRR7 0x270U +#define APIC_OFFSET_ESR 0x280U /* Error Status Register */ +#define APIC_OFFSET_CMCI_LVT 0x2F0U /* Local Vector Table (CMCI) */ +#define APIC_OFFSET_ICR_LOW 0x300U /* Interrupt Command Register */ +#define APIC_OFFSET_ICR_HI 0x310U +#define APIC_OFFSET_TIMER_LVT 0x320U /* Local Vector Table (Timer) */ +#define APIC_OFFSET_THERM_LVT 0x330U /* Local Vector Table (Thermal) */ +#define APIC_OFFSET_PERF_LVT 0x340U /* Local Vector Table (PMC) */ +#define APIC_OFFSET_LINT0_LVT 0x350U /* Local Vector Table (LINT0) */ +#define APIC_OFFSET_LINT1_LVT 0x360U /* Local Vector Table (LINT1) */ +#define APIC_OFFSET_ERROR_LVT 0x370U /* Local Vector Table (ERROR) */ +#define APIC_OFFSET_TIMER_ICR 0x380U /* Timer's Initial Count */ +#define APIC_OFFSET_TIMER_CCR 0x390U /* Timer's Current Count */ +#define APIC_OFFSET_TIMER_DCR 0x3E0U /* Timer's Divide Configuration */ +#define APIC_OFFSET_SELF_IPI 0x3F0U /* Self IPI Register */ + +#endif /* VLAPIC_PRIV_H */ diff --git a/src/components/implementation/simple_vmm/noop_nf/vmmio.c b/src/components/implementation/simple_vmm/noop_nf/vmmio.c new file mode 100644 index 0000000000..1efb26ee1b --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/vmmio.c @@ -0,0 +1,53 @@ +#include +#include +#include +#include + +void +ept_violation_handler(struct vmrt_vm_vcpu *vcpu) +{ + volatile struct vm_vcpu_shared_region *regs = vcpu->shared_region; + u64_t qualification = regs->qualification; + u64_t gpa; + struct acrn_mmio_request *mmio_req = vcpu->mmio_request; + + gpa = regs->gpa; + + /* Specify if read or write operation */ + if ((qualification & 0x2UL) != 0UL) { + /* Write operation */ + mmio_req->direction = ACRN_IOREQ_DIR_WRITE; + mmio_req->value = 0UL; + } else { + /* Read operation */ + mmio_req->direction = ACRN_IOREQ_DIR_READ; + } + + mmio_req->address = gpa; + + if (gpa >= IOAPIC_BASE_ADDR && gpa < IOAPIC_BASE_ADDR + PAGE_SIZE_4K) { + int ret = decode_instruction(vcpu); + + if (ret > 0) { + mmio_req->size = (uint64_t)ret; + } else { + VM_PANIC(vcpu); + } + + if (mmio_req->direction == ACRN_IOREQ_DIR_WRITE) { + if (emulate_instruction(vcpu) != 0) { + VM_PANIC(vcpu); + } + } + + vioapic_mmio_access_handler(vcpu); + + if (mmio_req->direction == ACRN_IOREQ_DIR_READ) { + /* Emulate instruction and update vcpu register set */ + (void)emulate_instruction(vcpu); + } + GOTO_NEXT_INST(regs); + } else { + VM_PANIC(vcpu); + } +} diff --git a/src/components/implementation/simple_vmm/noop_nf/vmsr.c b/src/components/implementation/simple_vmm/noop_nf/vmsr.c new file mode 100644 index 0000000000..1f45f13692 --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/vmsr.c @@ -0,0 +1,249 @@ +#include +#include + +void +rdmsr_handler(struct vmrt_vm_vcpu *vcpu) +{ + volatile struct vm_vcpu_shared_region *regs = vcpu->shared_region; + + switch (regs->cx) { + case MSR_IA32_EFER: + { + u64_t guest_efer = regs->efer; + regs->ax = (u32_t)guest_efer; + regs->dx = (u32_t)(guest_efer >> 32); + goto done; + } + case MSR_IA32_MISC_ENABLE: + { + /* Note: read only MSR, and its value can be fixed for all cores */ + u64_t misc = 0x800001; + regs->ax = (u32_t)misc; + regs->dx = (u32_t)(misc >> 32); + goto done; + } + case MSR_IA32_BIOS_SIGN_ID: + { + /* Note: microcode is pre-set in the kernel */ + u64_t v = regs->microcode_version; + regs->ax = (u32_t)v; + regs->dx = (u32_t)(v >> 32); + goto done; + } + case MSR_IA32_TSC_ADJUST: + { + /* TODO: need to handle tsc adjustment in VM */ + u32_t ax, dx; + regs->ax = 0; + regs->dx = 0; + goto done; + } + + /* MTRRs can be ingored in Linux and Linux knows it is a virtual environment */ + case MSR_IA32_MTRR_CAP: + case MSR_IA32_MTRR_DEF_TYPE: + case MSR_IA32_MTRR_PHYSBASE_0: + case MSR_IA32_MTRR_PHYSMASK_0: + case MSR_IA32_MTRR_PHYSBASE_1: + case MSR_IA32_MTRR_PHYSMASK_1: + case MSR_IA32_MTRR_PHYSBASE_2: + case MSR_IA32_MTRR_PHYSMASK_2: + case MSR_IA32_MTRR_PHYSBASE_3: + case MSR_IA32_MTRR_PHYSMASK_3: + case MSR_IA32_MTRR_PHYSBASE_4: + case MSR_IA32_MTRR_PHYSMASK_4: + case MSR_IA32_MTRR_PHYSBASE_5: + case MSR_IA32_MTRR_PHYSMASK_5: + case MSR_IA32_MTRR_PHYSBASE_6: + case MSR_IA32_MTRR_PHYSMASK_6: + case MSR_IA32_MTRR_PHYSBASE_7: + case MSR_IA32_MTRR_PHYSMASK_7: + case MSR_IA32_MTRR_PHYSBASE_8: + case MSR_IA32_MTRR_PHYSMASK_8: + case MSR_IA32_MTRR_PHYSBASE_9: + case MSR_IA32_MTRR_PHYSMASK_9: + case MSR_IA32_MTRR_FIX64K_00000: + case MSR_IA32_MTRR_FIX16K_80000: + case MSR_IA32_MTRR_FIX16K_A0000: + case MSR_IA32_MTRR_FIX4K_C0000: + case MSR_IA32_MTRR_FIX4K_C8000: + case MSR_IA32_MTRR_FIX4K_D0000: + case MSR_IA32_MTRR_FIX4K_D8000: + case MSR_IA32_MTRR_FIX4K_E0000: + case MSR_IA32_MTRR_FIX4K_E8000: + case MSR_IA32_MTRR_FIX4K_F0000: + case MSR_IA32_MTRR_FIX4K_F8000: + case MSR_IA32_PAT: + { + regs->ax = 0; + regs->dx = 0; + goto done; + } + case MSR_PPERF: + { + /* FIXME: should inject #GP to guest, thus guest knows this MSR is not present */ + regs->ax = 0; + regs->dx = 0; + goto done; + } + case MSR_SMI_COUNT: + { + /* FIXME: should inject #GP to guest, thus guest knows this MSR is not present */ + regs->ax = 0; + regs->dx = 0; + goto done; + } + case MSR_IA32_APIC_BASE: + { + /* TODO: for non-BSP, the BSP flag should be cleared */ + /* 0x900 : enable xapic and this is BSP */ + regs->ax = 0XFEE00000 | 0x900; + regs->dx = 0; + goto done; + } + case MSR_IA32_FEATURE_CONTROL: + { + /* Lock the feature control in VM */ + regs->ax = 1; + regs->dx = 0; + goto done; + } + case MSR_MISC_FEATURE_ENABLES: + { + /* This MSR can be reserved to 0 */ + regs->ax = 0; + regs->dx = 0; + goto done; + } + case MSR_PLATFORM_INFO: + { + /* Contains power management stuff and can be ignored */ + regs->ax = 0; + regs->dx = 0; + goto done; + } + case MSR_IA32_SPEC_CTRL: + { + /* This MSR has a value of 0 after reset, thus just keep it ad default, don't modify */ + regs->ax = 0; + regs->dx = 0; + goto done; + } + default: + VM_PANIC(vcpu); + } +done: + GOTO_NEXT_INST(regs); + return; +} + +void +wrmsr_handler(struct vmrt_vm_vcpu *vcpu) +{ + volatile struct vm_vcpu_shared_region *regs = vcpu->shared_region; + + switch (regs->cx) { + case MSR_IA32_EFER: + { + u64_t guest_efer; + guest_efer = regs->ax & 0XFFFFFFFF; + guest_efer |= ((regs->dx & 0XFFFFFFFF) << 32); + regs->efer = guest_efer; + + goto done; + } + case MSR_IA32_BIOS_SIGN_ID: + { + /* Microcode has been retrived in the kernel, thus don't need to process here */ + goto done; + } + case MSR_IA32_XSS: + { + u64_t guest_xss; + guest_xss = regs->ax & 0XFFFFFFFF; + guest_xss |= ((regs->dx & 0XFFFFFFFF) << 32); + if ((guest_xss & ~(MSR_IA32_XSS_PT | MSR_IA32_XSS_HDC)) != 0UL) { + /* Assuming other features are not supported */ + VM_PANIC(vcpu); + } else { + /* TODO: only enable the xss pt and hdx, but currently just ignore them */ + } + goto done; + } + case MSR_IA32_MTRR_CAP: + case MSR_IA32_MTRR_DEF_TYPE: + case MSR_IA32_MTRR_PHYSBASE_0: + case MSR_IA32_MTRR_PHYSMASK_0: + case MSR_IA32_MTRR_PHYSBASE_1: + case MSR_IA32_MTRR_PHYSMASK_1: + case MSR_IA32_MTRR_PHYSBASE_2: + case MSR_IA32_MTRR_PHYSMASK_2: + case MSR_IA32_MTRR_PHYSBASE_3: + case MSR_IA32_MTRR_PHYSMASK_3: + case MSR_IA32_MTRR_PHYSBASE_4: + case MSR_IA32_MTRR_PHYSMASK_4: + case MSR_IA32_MTRR_PHYSBASE_5: + case MSR_IA32_MTRR_PHYSMASK_5: + case MSR_IA32_MTRR_PHYSBASE_6: + case MSR_IA32_MTRR_PHYSMASK_6: + case MSR_IA32_MTRR_PHYSBASE_7: + case MSR_IA32_MTRR_PHYSMASK_7: + case MSR_IA32_MTRR_PHYSBASE_8: + case MSR_IA32_MTRR_PHYSMASK_8: + case MSR_IA32_MTRR_PHYSBASE_9: + case MSR_IA32_MTRR_PHYSMASK_9: + case MSR_IA32_MTRR_FIX64K_00000: + case MSR_IA32_MTRR_FIX16K_80000: + case MSR_IA32_MTRR_FIX16K_A0000: + case MSR_IA32_MTRR_FIX4K_C0000: + case MSR_IA32_MTRR_FIX4K_C8000: + case MSR_IA32_MTRR_FIX4K_D0000: + case MSR_IA32_MTRR_FIX4K_D8000: + case MSR_IA32_MTRR_FIX4K_E0000: + case MSR_IA32_MTRR_FIX4K_E8000: + case MSR_IA32_MTRR_FIX4K_F0000: + case MSR_IA32_MTRR_FIX4K_F8000: + case MSR_IA32_PAT: + { + /* MTRRs can be ingored in Linux and Linux knows it is a virtual environment */ + goto done; + } + case MSR_IA32_TSC_DEADLINE: { + u64_t tsc_future, curr_tsc; + rdtscll(curr_tsc); + tsc_future = regs->ax & 0xffffffff; + tsc_future |= ((regs->dx & 0xffffffff) << 32); + vcpu->next_timer = tsc_future; + + goto done; + } + case MSR_MISC_FEATURE_ENABLES: + { + /* Write to this MSR will be all 0 since we ignored this, doesn't matter */ + goto done; + } + case MSR_IA32_SYSENTER_CS: + case MSR_IA32_SYSENTER_ESP: + case MSR_IA32_SYSENTER_EIP: + { + /* 64-bit system doesn't require these MSRs, its fine to ignore them */ + goto done; + } + case MSR_IA32_SPEC_CTRL: + { + /* This MSR has a value of 0 after reset, thus just keep it ad default, don't modify */ + goto done; + } + case MSR_IA32_APIC_BASE: + { + VM_PANIC(vcpu); + goto done; + } + default: + VM_PANIC(vcpu);; + } + +done: + GOTO_NEXT_INST(regs); + return; +} diff --git a/src/components/implementation/simple_vmm/noop_nf/vpic.h b/src/components/implementation/simple_vmm/noop_nf/vpic.h new file mode 100644 index 0000000000..b9cab609cb --- /dev/null +++ b/src/components/implementation/simple_vmm/noop_nf/vpic.h @@ -0,0 +1,191 @@ +/*- + * Copyright (c) 2014 Tycho Nightingale + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef VPIC_H +#define VPIC_H + +#include +/** + * @file vpic.h + * + * @brief public APIs for virtual PIC + */ + + +#define ICU_IMR_OFFSET 1U + +/* Initialization control word 1. Written to even address. */ +#define ICW1_IC4 0x01U /* ICW4 present */ +#define ICW1_SNGL 0x02U /* 1 = single, 0 = cascaded */ +#define ICW1_ADI 0x04U /* 1 = 4, 0 = 8 byte vectors */ +#define ICW1_LTIM 0x08U /* 1 = level trigger, 0 = edge */ +#define ICW1_RESET 0x10U /* must be 1 */ +/* 0x20 - 0x80 - in 8080/8085 mode only */ + +/* Initialization control word 2. Written to the odd address. */ +/* No definitions, it is the base vector of the IDT for 8086 mode */ + +/* Initialization control word 3. Written to the odd address. */ +/* For a primary PIC, bitfield indicating a secondary PIC on given input */ +/* For a secondary PIC, lower 3 bits are the PIC's ID binary id on primary PIC */ + +/* Initialization control word 4. Written to the odd address. */ +#define ICW4_8086 0x01U /* 1 = 8086, 0 = 8080 */ +#define ICW4_AEOI 0x02U /* 1 = Auto EOI */ +#define ICW4_MS 0x04U /* 1 = buffered primary PIC, 0 = secondary PIC*/ +#define ICW4_BUF 0x08U /* 1 = enable buffer mode */ +#define ICW4_SFNM 0x10U /* 1 = special fully nested mode */ + +/* Operation control words. Written after initialization. */ + +/* Operation control word type 1 */ +/* + * No definitions. Written to the odd address. Bitmask for interrupts. + * 1 = disabled. + */ + +/* Operation control word type 2. Bit 3 (0x08) must be zero. Even address. */ +#define OCW2_L0 0x01U /* Level */ +#define OCW2_L1 0x02U +#define OCW2_L2 0x04U +/* 0x08 must be 0 to select OCW2 vs OCW3 */ +/* 0x10 must be 0 to select OCW2 vs ICW1 */ +#define OCW2_EOI 0x20U /* 1 = EOI */ +#define OCW2_SL 0x40U /* EOI mode */ +#define OCW2_R 0x80U /* EOI mode */ + +/* Operation control word type 3. Bit 3 (0x08) must be set. Even address. */ +#define OCW3_RIS 0x01U /* 1 = read IS, 0 = read IR */ +#define OCW3_RR 0x02U /* register read */ +#define OCW3_P 0x04U /* poll mode command */ +/* 0x08 must be 1 to select OCW3 vs OCW2 */ +#define OCW3_SEL 0x08U /* must be 1 */ +/* 0x10 must be 0 to select OCW3 vs ICW1 */ +#define OCW3_SMM 0x20U /* special mode mask */ +#define OCW3_ESMM 0x40U /* enable SMM */ + +#define IO_ELCR1 0x4d0U +#define IO_ELCR2 0x4d1U + +#define NR_VPIC_PINS_PER_CHIP 8U +#define NR_VPIC_PINS_TOTAL 16U + +enum vpic_wire_mode { + VPIC_WIRE_INTR = 0, + VPIC_WIRE_LAPIC, + VPIC_WIRE_IOAPIC, + VPIC_WIRE_NULL +}; + +enum vpic_trigger { + EDGE_TRIGGER, + LEVEL_TRIGGER +}; + +struct i8259_reg_state { + bool ready; + uint8_t icw_num; + uint8_t rd_cmd_reg; + + bool aeoi; + bool poll; + bool rotate; + bool sfn; /* special fully-nested mode */ + + uint32_t irq_base; + uint8_t request; /* Interrupt Request Register (IIR) */ + uint8_t service; /* Interrupt Service (ISR) */ + uint8_t mask; /* Interrupt Mask Register (IMR) */ + uint8_t smm; /* special mask mode */ + + uint8_t pin_state[8]; /* pin state for level */ + uint32_t lowprio; /* lowest priority irq */ + + bool intr_raised; + uint8_t elc; +}; + +struct acrn_vpic { + // spinlock_t lock; + struct i8259_reg_state i8259[2]; +}; + +struct acrn_vm; +void vpic_init(struct acrn_vm *vm); + +/** + * @brief virtual PIC + * + * @addtogroup acrn_vpic ACRN vPIC + * @{ + */ + +/** + * @brief Set vPIC IRQ line status. + * + * @param[in] vpic Pointer to target VM's vpic table + * @param[in] vgsi GSI for the virtual interrupt + * @param[in] operation action options:GSI_SET_HIGH/GSI_SET_LOW/ + * GSI_RAISING_PULSE/GSI_FALLING_PULSE + * + * @return None + */ +void vpic_set_irqline(struct acrn_vpic *vpic, uint32_t vgsi, uint32_t operation); + +/** + * @brief Get pending virtual interrupts for vPIC. + * + * @param[in] vpic Pointer to target VM's vpic table + * @param[inout] vecptr Pointer to vector buffer and will be filled + * with eligible vector if any. + * + * @return None + */ +void vpic_pending_intr(struct acrn_vpic *vpic, uint32_t *vecptr); + +/** + * @brief Accept virtual interrupt for vPIC. + * + * @param[in] vpic Pointer to target VM's vpic table + * @param[in] vector Target virtual interrupt vector + * + * @return None + * + * @pre vm != NULL + */ +void vpic_intr_accepted(struct acrn_vpic *vpic, uint32_t vector); +void vpic_get_irqline_trigger_mode(const struct acrn_vpic *vpic, uint32_t vgsi, enum vpic_trigger *trigger); +uint32_t vpic_pincount(void); +struct acrn_vpic *vm_pic(const struct acrn_vm *vm); + +/** + * @} + */ +/* End of acrn_vpic */ + +#endif /* VPIC_H */ diff --git a/src/components/implementation/simple_vmm/vmm/simple_vmm.c b/src/components/implementation/simple_vmm/vmm/simple_vmm.c index ccacf9f790..ba71c48eb5 100644 --- a/src/components/implementation/simple_vmm/vmm/simple_vmm.c +++ b/src/components/implementation/simple_vmm/vmm/simple_vmm.c @@ -360,6 +360,8 @@ parallel_main(coreid_t cid) struct vmrt_vm_vcpu *vcpu; if (cid == 0) { + printc("------STARTING VM------\n"); + sched_thd_block_timeout(0, time_now() + time_usec2cyc(10000000)); vcpu = vmrt_get_vcpu(g_vm, 0); vmrt_vm_vcpu_start(vcpu); diff --git a/src/components/interface/netshmem/lib.c b/src/components/interface/netshmem/lib.c index d67671834d..cf6f251907 100644 --- a/src/components/interface/netshmem/lib.c +++ b/src/components/interface/netshmem/lib.c @@ -42,6 +42,8 @@ netshmem_get_shm() return netshmems[cos_thdid()].shm; } +static char testbuffer[PAGE_SIZE]; + void netshmem_map_shmem(cbuf_t shm_id) { @@ -54,6 +56,11 @@ netshmem_map_shmem(cbuf_t shm_id) assert(!netshmems[thd].shm); npages = memmgr_shared_page_map_aligned(shm_id, SHM_BM_ALIGN, (vaddr_t *)&mem); + printc("---test mem accessibility---\n"); + for (int i = 0; i < npages; i++) { + memcpy(testbuffer, mem + i * PAGE_SIZE, PAGE_SIZE); + } + printc("---mem accessibility ok---\n"); shm = shm_bm_create_net_pkt_buf(mem, npages * PAGE_SIZE); assert(shm); diff --git a/src/components/lib/dpdk/cos_dpdk.c b/src/components/lib/dpdk/cos_dpdk.c index c5fe45ef9e..e39f094bfa 100644 --- a/src/components/lib/dpdk/cos_dpdk.c +++ b/src/components/lib/dpdk/cos_dpdk.c @@ -114,10 +114,11 @@ cos_eth_ports_init(void) for (i = 0; i < nb_ports; i++) { cos_eth_info_print(ports_ids[i]); } -#if 1 - ports_ids[0] = 1; - nb_ports = 1; -#endif + + if (nb_ports != 1) { + ports_ids[0] = 1; + nb_ports = 1; + } return nb_ports; } diff --git a/src/components/lib/slm/slm_blkpt.c b/src/components/lib/slm/slm_blkpt.c index ae2f7548c8..94afb68b7f 100644 --- a/src/components/lib/slm/slm_blkpt.c +++ b/src/components/lib/slm/slm_blkpt.c @@ -101,7 +101,7 @@ slm_blkpt_trigger(sched_blkpt_id_t blkpt, struct slm_thd *current, sched_blkpt_e } ps_lock_release(&m->lock); /* most likely we switch to a woken thread here */ - slm_cs_exit_reschedule(current, SLM_CS_CHECK_TIMEOUT); + slm_cs_exit_reschedule(current, SLM_CS_NONE); return 0; unlock: @@ -156,7 +156,7 @@ slm_blkpt_block(sched_blkpt_id_t blkpt, struct slm_thd *current, sched_blkpt_epo ERR_THROW(0, unlock); } ps_lock_release(&m->lock); - slm_cs_exit_reschedule(current, SLM_CS_CHECK_TIMEOUT); + slm_cs_exit_reschedule(current, SLM_CS_NONE); assert(stacklist_is_removed(&sl)); return 0; From d76e0789d2dd755f8855e0db5d9cc3bdc8390366 Mon Sep 17 00:00:00 2001 From: betahxy Date: Wed, 20 Mar 2024 03:20:00 -0400 Subject: [PATCH 09/60] Integration Testing --- .gitignore | 1 + composition_scripts/vmm_no_nf_multi_vm.toml | 49 + .../simple_vmm/multi_vmm/Makefile | 29 + .../simple_vmm/multi_vmm/acrn_common.h | 797 +++++++++ .../simple_vmm/multi_vmm/acrn_types.h | 51 + .../simple_vmm/multi_vmm/apicreg.h | 444 +++++ .../simple_vmm/multi_vmm/atomic.h | 152 ++ .../simple_vmm/multi_vmm/bits.h | 298 ++++ .../implementation/simple_vmm/multi_vmm/cpu.h | 337 ++++ .../simple_vmm/multi_vmm/cpu_caps.h | 68 + .../simple_vmm/multi_vmm/cpuid.h | 186 ++ .../multi_vmm/devices/serial/serial.c | 56 + .../multi_vmm/devices/serial/serial.h | 17 + .../multi_vmm/devices/vpci/virtio_net_io.c | 725 ++++++++ .../multi_vmm/devices/vpci/virtio_net_io.h | 144 ++ .../multi_vmm/devices/vpci/virtio_net_vpci.c | 51 + .../multi_vmm/devices/vpci/virtio_ring.h | 260 +++ .../simple_vmm/multi_vmm/devices/vpci/vpci.c | 316 ++++ .../simple_vmm/multi_vmm/devices/vpci/vpci.h | 180 ++ .../multi_vmm/devices/vpci/vpci_io.c | 191 ++ .../simple_vmm/multi_vmm/devices/vpic/vpic.c | 109 ++ .../simple_vmm/multi_vmm/devices/vpic/vpic.h | 24 + .../simple_vmm/multi_vmm/devices/vps2/vps2.c | 47 + .../simple_vmm/multi_vmm/devices/vps2/vps2.h | 6 + .../simple_vmm/multi_vmm/devices/vrtc/vrtc.c | 58 + .../simple_vmm/multi_vmm/devices/vrtc/vrtc.h | 7 + .../simple_vmm/multi_vmm/fast_memcpy.h | 689 ++++++++ .../simple_vmm/multi_vmm/guest/.gitignore | 2 + .../simple_vmm/multi_vmm/guest/Makefile | 47 + .../simple_vmm/multi_vmm/guest/guest.ld | 34 + .../multi_vmm/guest/guest_realmode.S | 60 + .../simple_vmm/multi_vmm/instr_emul.c | 1381 +++++++++++++++ .../simple_vmm/multi_vmm/instr_emul.h | 95 + .../simple_vmm/multi_vmm/ioapic.h | 99 ++ .../implementation/simple_vmm/multi_vmm/irq.h | 136 ++ .../simple_vmm/multi_vmm/netio.c | 274 +++ .../simple_vmm/multi_vmm/nf_session.c | 74 + .../simple_vmm/multi_vmm/nf_session.h | 49 + .../simple_vmm/multi_vmm/simple_vmm.c | 381 ++++ .../simple_vmm/multi_vmm/vcpuid.c | 766 ++++++++ .../simple_vmm/multi_vmm/vcpuid.h | 35 + .../implementation/simple_vmm/multi_vmm/vio.c | 106 ++ .../simple_vmm/multi_vmm/vioapic.c | 564 ++++++ .../simple_vmm/multi_vmm/vioapic.h | 128 ++ .../simple_vmm/multi_vmm/vlapic.c | 1554 +++++++++++++++++ .../simple_vmm/multi_vmm/vlapic.h | 260 +++ .../simple_vmm/multi_vmm/vlapic_priv.h | 84 + .../simple_vmm/multi_vmm/vmmio.c | 53 + .../simple_vmm/multi_vmm/vmsr.c | 249 +++ .../simple_vmm/multi_vmm/vpic.h | 191 ++ 50 files changed, 11914 insertions(+) create mode 100644 composition_scripts/vmm_no_nf_multi_vm.toml create mode 100644 src/components/implementation/simple_vmm/multi_vmm/Makefile create mode 100644 src/components/implementation/simple_vmm/multi_vmm/acrn_common.h create mode 100644 src/components/implementation/simple_vmm/multi_vmm/acrn_types.h create mode 100644 src/components/implementation/simple_vmm/multi_vmm/apicreg.h create mode 100644 src/components/implementation/simple_vmm/multi_vmm/atomic.h create mode 100644 src/components/implementation/simple_vmm/multi_vmm/bits.h create mode 100755 src/components/implementation/simple_vmm/multi_vmm/cpu.h create mode 100644 src/components/implementation/simple_vmm/multi_vmm/cpu_caps.h create mode 100644 src/components/implementation/simple_vmm/multi_vmm/cpuid.h create mode 100644 src/components/implementation/simple_vmm/multi_vmm/devices/serial/serial.c create mode 100644 src/components/implementation/simple_vmm/multi_vmm/devices/serial/serial.h create mode 100644 src/components/implementation/simple_vmm/multi_vmm/devices/vpci/virtio_net_io.c create mode 100644 src/components/implementation/simple_vmm/multi_vmm/devices/vpci/virtio_net_io.h create mode 100644 src/components/implementation/simple_vmm/multi_vmm/devices/vpci/virtio_net_vpci.c create mode 100644 src/components/implementation/simple_vmm/multi_vmm/devices/vpci/virtio_ring.h create mode 100644 src/components/implementation/simple_vmm/multi_vmm/devices/vpci/vpci.c create mode 100644 src/components/implementation/simple_vmm/multi_vmm/devices/vpci/vpci.h create mode 100644 src/components/implementation/simple_vmm/multi_vmm/devices/vpci/vpci_io.c create mode 100644 src/components/implementation/simple_vmm/multi_vmm/devices/vpic/vpic.c create mode 100644 src/components/implementation/simple_vmm/multi_vmm/devices/vpic/vpic.h create mode 100644 src/components/implementation/simple_vmm/multi_vmm/devices/vps2/vps2.c create mode 100644 src/components/implementation/simple_vmm/multi_vmm/devices/vps2/vps2.h create mode 100644 src/components/implementation/simple_vmm/multi_vmm/devices/vrtc/vrtc.c create mode 100644 src/components/implementation/simple_vmm/multi_vmm/devices/vrtc/vrtc.h create mode 100644 src/components/implementation/simple_vmm/multi_vmm/fast_memcpy.h create mode 100644 src/components/implementation/simple_vmm/multi_vmm/guest/.gitignore create mode 100644 src/components/implementation/simple_vmm/multi_vmm/guest/Makefile create mode 100644 src/components/implementation/simple_vmm/multi_vmm/guest/guest.ld create mode 100644 src/components/implementation/simple_vmm/multi_vmm/guest/guest_realmode.S create mode 100644 src/components/implementation/simple_vmm/multi_vmm/instr_emul.c create mode 100644 src/components/implementation/simple_vmm/multi_vmm/instr_emul.h create mode 100644 src/components/implementation/simple_vmm/multi_vmm/ioapic.h create mode 100644 src/components/implementation/simple_vmm/multi_vmm/irq.h create mode 100644 src/components/implementation/simple_vmm/multi_vmm/netio.c create mode 100644 src/components/implementation/simple_vmm/multi_vmm/nf_session.c create mode 100644 src/components/implementation/simple_vmm/multi_vmm/nf_session.h create mode 100644 src/components/implementation/simple_vmm/multi_vmm/simple_vmm.c create mode 100644 src/components/implementation/simple_vmm/multi_vmm/vcpuid.c create mode 100644 src/components/implementation/simple_vmm/multi_vmm/vcpuid.h create mode 100644 src/components/implementation/simple_vmm/multi_vmm/vio.c create mode 100644 src/components/implementation/simple_vmm/multi_vmm/vioapic.c create mode 100644 src/components/implementation/simple_vmm/multi_vmm/vioapic.h create mode 100644 src/components/implementation/simple_vmm/multi_vmm/vlapic.c create mode 100644 src/components/implementation/simple_vmm/multi_vmm/vlapic.h create mode 100644 src/components/implementation/simple_vmm/multi_vmm/vlapic_priv.h create mode 100644 src/components/implementation/simple_vmm/multi_vmm/vmmio.c create mode 100644 src/components/implementation/simple_vmm/multi_vmm/vmsr.c create mode 100644 src/components/implementation/simple_vmm/multi_vmm/vpic.h diff --git a/.gitignore b/.gitignore index 5336b2fe9c..88c69f830b 100644 --- a/.gitignore +++ b/.gitignore @@ -58,3 +58,4 @@ src/components/lib/libc/musl-1.2.0/include/asm-generic/ src/components/lib/libc/musl-1.2.0/include/linux/ src/components/lib/libc/musl-1.2.0/include/sys/queue.h src/kernel/include/shared/cpu_ghz.h +build.sh diff --git a/composition_scripts/vmm_no_nf_multi_vm.toml b/composition_scripts/vmm_no_nf_multi_vm.toml new file mode 100644 index 0000000000..90adef5c05 --- /dev/null +++ b/composition_scripts/vmm_no_nf_multi_vm.toml @@ -0,0 +1,49 @@ +[system] +description = "Simple VMM" + +[[components]] +name = "booter" +img = "no_interface.llbooter" +implements = [{interface = "init"}, {interface = "addr"}] +deps = [{srv = "kernel", interface = "init", variant = "kernel"}] +constructor = "kernel" + +[[components]] +name = "capmgr" +img = "capmgr.simple" +deps = [{srv = "booter", interface = "init"}, {srv = "booter", interface = "addr"}] +implements = [{interface = "capmgr"}, {interface = "init"}, {interface = "memmgr"}, {interface = "capmgr_create"}, {interface = "contigmem"}] +constructor = "booter" +baseaddr = "0x1000000" + +[[components]] +name = "sched" +img = "sched.pfprr_quantum_static" +deps = [{srv = "capmgr", interface = "init"}, {srv = "capmgr", interface = "capmgr"}, {srv = "capmgr", interface = "memmgr"}] +implements = [{interface = "sched"}, {interface = "syncipc"}, {interface = "init"}] +constructor = "booter" +baseaddr = "0x1600000" + +[[components]] +name = "nicmgr" +img = "nicmgr.dpdk" +deps = [{srv = "sched", interface = "sched"}, {srv = "sched", interface = "init"}, {srv = "capmgr", interface = "capmgr_create"}, {srv = "capmgr", interface = "memmgr"}, {srv = "capmgr", interface = "contigmem"}] +implements = [{interface = "nic"}] +constructor = "booter" +baseaddr = "0x6000000" + +[[components]] +name = "vmm" +img = "simple_vmm.vmm" +deps = [{srv = "sched", interface = "sched"}, {srv = "sched", interface = "init"},{srv = "capmgr", interface = "capmgr"}, {srv = "capmgr", interface = "memmgr"}, {srv = "capmgr", interface = "contigmem"}, {srv = "nicmgr", interface = "nic"}] +implements = [{interface = "netio"}] +constructor = "booter" +baseaddr = "0x2000000" + +[[components]] +name = "vmm1" +img = "simple_vmm.multi_vmm" +deps = [{srv = "sched", interface = "sched"}, {srv = "sched", interface = "init"},{srv = "capmgr", interface = "capmgr"}, {srv = "capmgr", interface = "memmgr"}, {srv = "capmgr", interface = "contigmem"}, {srv = "nicmgr", interface = "nic"}] +implements = [{interface = "netio"}] +constructor = "booter" +baseaddr = "0x9000000" diff --git a/src/components/implementation/simple_vmm/multi_vmm/Makefile b/src/components/implementation/simple_vmm/multi_vmm/Makefile new file mode 100644 index 0000000000..96d9511070 --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/Makefile @@ -0,0 +1,29 @@ +# Required variables used to drive the compilation process. It is OK +# for many of these to be empty. +# +# The set of interfaces that this component exports for use by other +# components. This is a list of the interface names. +INTERFACE_EXPORTS = netio +# The interfaces this component is dependent on for compilation (this +# is a list of directory names in interface/) +INTERFACE_DEPENDENCIES = contigmem netshmem nic sched nic +# The library dependencies this component is reliant on for +# compilation/linking (this is a list of directory names in lib/) +LIBRARY_DEPENDENCIES = ubench component kernel initargs vmrt shm_bm sync time ck +# Note: Both the interface and library dependencies should be +# *minimal*. That is to say that removing a dependency should cause +# the build to fail. The build system does not validate this +# minimality; that's on you! + +CFILES+=devices/serial/serial.c +CFILES+=devices/vpci/vpci.c +CFILES+=devices/vpci/vpci_io.c +CFILES+=devices/vpci/virtio_net_vpci.c +CFILES+=devices/vpci/virtio_net_io.c +CFILES+=devices/vpic/vpic.c +CFILES+=devices/vrtc/vrtc.c +CFILES+=devices/vps2/vps2.c + +C_OBJS+=$(CFILES:%.c=%.o) +COMP_FLAGS= -mavx -mavx2 -mfma -I$(LIBDIR)/dpdk/dpdk/build/install/include +include Makefile.subsubdir diff --git a/src/components/implementation/simple_vmm/multi_vmm/acrn_common.h b/src/components/implementation/simple_vmm/multi_vmm/acrn_common.h new file mode 100644 index 0000000000..b97561f61b --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/acrn_common.h @@ -0,0 +1,797 @@ +/* + * common definition + * + * Copyright (C) 2017-2022 Intel Corporation. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/** + * @file acrn_common.h + * + * @brief acrn common data structure for hypercall or ioctl + */ + +#ifndef ACRN_COMMON_H +#define ACRN_COMMON_H + +#include + +/* + * Common structures for ACRN/HSM/DM + */ + +/* + * IO request + */ + +#define ACRN_IO_REQUEST_MAX 16U +#define ACRN_ASYNCIO_MAX 64U + +#define ACRN_IOREQ_STATE_PENDING 0U +#define ACRN_IOREQ_STATE_COMPLETE 1U +#define ACRN_IOREQ_STATE_PROCESSING 2U +#define ACRN_IOREQ_STATE_FREE 3U + +#define ACRN_IOREQ_TYPE_PORTIO 0U +#define ACRN_IOREQ_TYPE_MMIO 1U +#define ACRN_IOREQ_TYPE_PCICFG 2U +#define ACRN_IOREQ_TYPE_WP 3U + +#define ACRN_IOREQ_DIR_READ 0U +#define ACRN_IOREQ_DIR_WRITE 1U + + + +/* IOAPIC device model info */ +#define VIOAPIC_RTE_NUM 48U /* vioapic pins */ + +#if VIOAPIC_RTE_NUM < 24U +#error "VIOAPIC_RTE_NUM must be larger than 23" +#endif + +/* Generic VM flags from guest OS */ +#define GUEST_FLAG_SECURE_WORLD_ENABLED (1UL << 0U) /* Whether secure world is enabled */ +#define GUEST_FLAG_LAPIC_PASSTHROUGH (1UL << 1U) /* Whether LAPIC is passed through */ +#define GUEST_FLAG_IO_COMPLETION_POLLING (1UL << 2U) /* Whether need hypervisor poll IO completion */ +#define GUEST_FLAG_HIDE_MTRR (1UL << 3U) /* Whether hide MTRR from VM */ +#define GUEST_FLAG_RT (1UL << 4U) /* Whether the vm is RT-VM */ +#define GUEST_FLAG_NVMX_ENABLED (1UL << 5U) /* Whether this VM supports nested virtualization */ +#define GUEST_FLAG_SECURITY_VM (1UL << 6U) /* Whether this VM needs to do security-vm related fixup (TPM2 and SMBIOS pt) */ +#define GUEST_FLAG_VCAT_ENABLED (1UL << 7U) /* Whether this VM supports vCAT */ +#define GUEST_FLAG_STATIC_VM (1UL << 8U) /* Whether this VM uses static VM configuration */ +#define GUEST_FLAG_TEE (1UL << 9U) /* Whether the VM is TEE VM */ +#define GUEST_FLAG_REE (1UL << 10U) /* Whether the VM is REE VM */ +#define GUEST_FLAG_PMU_PASSTHROUGH (1UL << 11U) /* Whether PMU is passed through */ + + +/* TODO: We may need to get this addr from guest ACPI instead of hardcode here */ +#define VIRTUAL_SLEEP_CTL_ADDR 0x400U /* Pre-launched VM uses ACPI reduced HW mode and sleep control register */ +#define VIRTUAL_PM1A_CNT_ADDR 0x404U +#define VIRTUAL_PM1A_SCI_EN 0x0001 +#define VIRTUAL_PM1A_SLP_TYP 0x1c00U +#define VIRTUAL_PM1A_SLP_EN 0x2000U +#define VIRTUAL_PM1A_ALWAYS_ZERO 0xc003 + +#define MAX_VM_NAME_LEN (16U) + +/** + * @brief Hypercall + * + * @addtogroup acrn_hypercall ACRN Hypercall + * @{ + */ + +/** + * @brief Representation of a MMIO request + */ +struct acrn_mmio_request { + /** + * @brief Direction of the access + * + * Either \p ACRN_IOREQ_DIR_READ or \p ACRN_IOREQ_DIR_WRITE. + */ + uint32_t direction; + + /** + * @brief reserved + */ + uint32_t reserved; + + /** + * @brief Address of the I/O access + */ + uint64_t address; + + /** + * @brief Width of the I/O access in byte + */ + uint64_t size; + + /** + * @brief The value read for I/O reads or to be written for I/O writes + */ + uint64_t value; +}; + +/** + * @brief Representation of a port I/O request + */ +struct acrn_pio_request { + /** + * @brief Direction of the access + * + * Either \p ACRN_IOREQ_DIR_READ or \p ACRN_IOREQ_DIR_WRITE. + */ + uint32_t direction; + + /** + * @brief reserved + */ + uint32_t reserved; + + /** + * @brief Port address of the I/O access + */ + uint64_t address; + + /** + * @brief Width of the I/O access in byte + */ + uint64_t size; + + /** + * @brief The value read for I/O reads or to be written for I/O writes + */ + uint32_t value; +}; + +/** + * @brief Representation of a PCI configuration space access + */ +struct acrn_pci_request { + /** + * @brief Direction of the access + * + * Either \p ACRN_IOREQ_DIR_READ or \p ACRN_IOREQ_DIR_WRITE. + */ + uint32_t direction; + + /** + * @brief Reserved + */ + uint32_t reserved[3];/* need keep same header fields with pio_request */ + + /** + * @brief Width of the I/O access in byte + */ + int64_t size; + + /** + * @brief The value read for I/O reads or to be written for I/O writes + */ + int32_t value; + + /** + * @brief The \p bus part of the BDF of the device + */ + int32_t bus; + + /** + * @brief The \p device part of the BDF of the device + */ + int32_t dev; + + /** + * @brief The \p function part of the BDF of the device + */ + int32_t func; + + /** + * @brief The register to be accessed in the configuration space + */ + int32_t reg; +}; + +/** + * @brief 256-byte I/O requests + * + * The state transitions of a I/O request are: + * + * FREE -> PENDING -> PROCESSING -> COMPLETE -> FREE -> ... + * + * When a request is in COMPLETE or FREE state, the request is owned by the + * hypervisor. Service VM (HSM or DM) shall not read or write the internals of the + * request except the state. + * + * When a request is in PENDING or PROCESSING state, the request is owned by + * Service VM. The hypervisor shall not read or write the request other than the state. + * + * Based on the rules above, a typical I/O request lifecycle should looks like + * the following. + * + * @verbatim embed:rst:leading-asterisk + * + * +-----------------------+-------------------------+----------------------+ + * | Service VM vCPU 0 | Service VM vCPU x | User VM vCPU y | + * +=======================+=========================+======================+ + * | | | Hypervisor: | + * | | | | + * | | | - Fill in type, | + * | | | addr, etc. | + * | | | - Pause User VM vCPU | + * | | | - Set state to | + * | | | PENDING (a) | + * | | | - Fire upcall to | + * | | | Service VM vCPU 0 | + * | | | | + * +-----------------------+-------------------------+----------------------+ + * | HSM: | | | + * | | | | + * | - Scan for pending | | | + * | requests | | | + * | - Set state to | | | + * | PROCESSING (b) | | | + * | - Assign requests to | | | + * | clients (c) | | | + * | | | | + * +-----------------------+-------------------------+----------------------+ + * | | Client: | | + * | | | | + * | | - Scan for assigned | | + * | | requests | | + * | | - Handle the | | + * | | requests (d) | | + * | | - Set state to COMPLETE | | + * | | - Notify the hypervisor | | + * | | | | + * +-----------------------+-------------------------+----------------------+ + * | | Hypervisor: | | + * | | | | + * | | - resume User VM vCPU y | | + * | | (e) | | + * | | | | + * +-----------------------+-------------------------+----------------------+ + * | | | Hypervisor: | + * | | | | + * | | | - Post-work (f) | + * | | | - set state to FREE | + * | | | | + * +-----------------------+-------------------------+----------------------+ + * + * @endverbatim + * + * Note that the following shall hold. + * + * 1. (a) happens before (b) + * 2. (c) happens before (d) + * 3. (e) happens before (f) + * 4. One vCPU cannot trigger another I/O request before the previous one has + * completed (i.e. the state switched to FREE) + * + * Accesses to the state of a acrn_io_request shall be atomic and proper barriers + * are needed to ensure that: + * + * 1. Setting state to PENDING is the last operation when issuing a request in + * the hypervisor, as the hypervisor shall not access the request any more. + * + * 2. Due to similar reasons, setting state to COMPLETE is the last operation + * of request handling in HSM or clients in Service VM. + */ +struct acrn_io_request { + /** + * @brief Type of this request. + * + * Byte offset: 0. + */ + uint32_t type; + + /** + * @brief Hypervisor will poll completion if set. + * + * Byte offset: 4. + */ + uint32_t completion_polling; + + /** + * @brief Reserved. + * + * Byte offset: 8. + */ + uint32_t reserved0[14]; + + /** + * @brief Details about this request. + * + * Byte offset: 64. + */ + union { + struct acrn_pio_request pio_request; + struct acrn_pci_request pci_request; + struct acrn_mmio_request mmio_request; + uint64_t data[8]; + } reqs; + + /** + * @brief Reserved. + * + * Byte offset: 128. + */ + uint32_t reserved1; + + /** + * @brief If this request has been handled by HSM driver. + * + * Byte offset: 132. + */ + int32_t kernel_handled; + + /** + * @brief The status of this request. + * + * Taking ACRN_IOREQ_STATE_xxx as values. + * + * Byte offset: 136. + */ + uint32_t processed; +}__attribute__((aligned(256))); + +struct acrn_io_request_buffer { + union { + struct acrn_io_request req_slot[ACRN_IO_REQUEST_MAX]; + int8_t reserved[4096]; + }; +}; + +struct acrn_asyncio_info { + uint32_t type; + uint64_t addr; + uint64_t fd; +}; + +/** + * @brief Info to create a VM, the parameter for HC_CREATE_VM hypercall + */ +struct acrn_vm_creation { + /** created vmid return to HSM. Keep it first field */ + uint16_t vmid; + + /** Reserved */ + uint16_t reserved0; + + /** VCPU numbers this VM want to create */ + uint16_t vcpu_num; + + /** Reserved */ + uint16_t reserved1; + + /** the name of this VM */ + uint8_t name[MAX_VM_NAME_LEN]; + + /* VM flag bits from Guest OS, now used + * GUEST_FLAG_SECURE_WORLD_ENABLED (1UL<<0) + */ + uint64_t vm_flag; + + uint64_t ioreq_buf; + + /** + * The least significant set bit is the PCPU # the VCPU 0 maps to; + * second set least significant bit is the PCPU # the VCPU 1 maps to; + * and so on... + */ + uint64_t cpu_affinity; +}; + +/* General-purpose register layout aligned with the general-purpose register idx + * when vmexit, such as vmexit due to CR access, refer to SMD Vol.3C 27-6. + */ +struct acrn_gp_regs { + uint64_t rax; + uint64_t rcx; + uint64_t rdx; + uint64_t rbx; + uint64_t rsp; + uint64_t rbp; + uint64_t rsi; + uint64_t rdi; + uint64_t r8; + uint64_t r9; + uint64_t r10; + uint64_t r11; + uint64_t r12; + uint64_t r13; + uint64_t r14; + uint64_t r15; +}; + +/* struct to define how the descriptor stored in memory. + * Refer SDM Vol3 3.5.1 "Segment Descriptor Tables" + * Figure 3-11 + */ +struct acrn_descriptor_ptr { + uint16_t limit; + uint64_t base; + uint16_t reserved[3]; /* align struct size to 64bit */ +} __packed; + +/** + * @brief registers info for vcpu. + */ +struct acrn_regs { + struct acrn_gp_regs gprs; + struct acrn_descriptor_ptr gdt; + struct acrn_descriptor_ptr idt; + + uint64_t rip; + uint64_t cs_base; + uint64_t cr0; + uint64_t cr4; + uint64_t cr3; + uint64_t ia32_efer; + uint64_t rflags; + uint64_t reserved_64[4]; + + uint32_t cs_ar; + uint32_t cs_limit; + uint32_t reserved_32[3]; + + /* don't change the order of following sel */ + uint16_t cs_sel; + uint16_t ss_sel; + uint16_t ds_sel; + uint16_t es_sel; + uint16_t fs_sel; + uint16_t gs_sel; + uint16_t ldt_sel; + uint16_t tr_sel; +}; + +/** + * @brief Info to set vcpu state + * + * the parameter for HC_SET_VCPU_STATE + */ +struct acrn_vcpu_regs { + /** the virtual CPU ID for the VCPU to set state */ + uint16_t vcpu_id; + + /** reserved space to make cpu_state aligned to 8 bytes */ + uint16_t reserved[3]; + + /** the structure to hold vcpu state */ + struct acrn_regs vcpu_regs; +}; + +/** Operation types for setting IRQ line */ +#define GSI_SET_HIGH 0U +#define GSI_SET_LOW 1U +#define GSI_RAISING_PULSE 2U +#define GSI_FALLING_PULSE 3U + +/** + * @brief Info to Set/Clear/Pulse a virtual IRQ line for a VM + * + * the parameter for HC_SET_IRQLINE hypercall + */ +struct acrn_irqline_ops { + uint32_t gsi; + uint32_t op; +}; + + +/** + * @brief Info to inject a MSI interrupt to VM + * + * the parameter for HC_INJECT_MSI hypercall + */ +struct acrn_msi_entry { + /** MSI addr[19:12] with dest VCPU ID */ + uint64_t msi_addr; + + /** MSI data[7:0] with vector */ + uint64_t msi_data; +}; + +/** + * @brief Info The power state data of a VCPU. + * + */ + +#define SPACE_SYSTEM_MEMORY 0U +#define SPACE_SYSTEM_IO 1U +#define SPACE_PCI_CONFIG 2U +#define SPACE_Embedded_Control 3U +#define SPACE_SMBUS 4U +#define SPACE_PLATFORM_COMM 10U +#define SPACE_FFixedHW 0x7FU + +struct acrn_acpi_generic_address { + uint8_t space_id; + uint8_t bit_width; + uint8_t bit_offset; + uint8_t access_size; + uint64_t address; +} __attribute__ ((__packed__)); + +struct acrn_cstate_data { + struct acrn_acpi_generic_address cx_reg; + uint8_t type; + uint32_t latency; + uint64_t power; +}; + +struct acrn_pstate_data { + uint64_t core_frequency; /* megahertz */ + uint64_t power; /* milliWatts */ + uint64_t transition_latency; /* microseconds */ + uint64_t bus_master_latency; /* microseconds */ + uint64_t control; /* control value */ + uint64_t status; /* success indicator */ +}; + +enum acrn_cpufreq_policy_type { + CPUFREQ_POLICY_PERFORMANCE, + CPUFREQ_POLICY_NOMINAL, +}; + +struct acrn_cpufreq_limits { + /* Performance levels for HWP */ + uint8_t guaranteed_hwp_lvl; + uint8_t highest_hwp_lvl; + uint8_t lowest_hwp_lvl; + /* Index for the p-state table _PSS */ + uint8_t nominal_pstate; + uint8_t performance_pstate; +}; + +struct acpi_sx_pkg { + uint8_t val_pm1a; + uint8_t val_pm1b; + uint16_t reserved; +} __attribute__((aligned(8))); + +struct pm_s_state_data { + struct acrn_acpi_generic_address pm1a_evt; + struct acrn_acpi_generic_address pm1b_evt; + struct acrn_acpi_generic_address pm1a_cnt; + struct acrn_acpi_generic_address pm1b_cnt; + struct acpi_sx_pkg s3_pkg; + struct acpi_sx_pkg s5_pkg; + uint32_t *wake_vector_32; + uint64_t *wake_vector_64; +} __attribute__((aligned(8))); + +/** + * @brief Info PM command from DM/HSM. + * + * The command would specify request type(e.g. get px count or data) for + * specific VM and specific VCPU with specific state number. + * For Px, PMCMD_STATE_NUM means Px number from 0 to (MAX_PSTATE - 1), + * For Cx, PMCMD_STATE_NUM means Cx entry index from 1 to MAX_CX_ENTRY. + */ +#define PMCMD_VMID_MASK 0xff000000U +#define PMCMD_VCPUID_MASK 0x00ff0000U +#define PMCMD_STATE_NUM_MASK 0x0000ff00U +#define PMCMD_TYPE_MASK 0x000000ffU + +#define PMCMD_VMID_SHIFT 24U +#define PMCMD_VCPUID_SHIFT 16U +#define PMCMD_STATE_NUM_SHIFT 8U + +enum acrn_pm_cmd_type { + ACRN_PMCMD_GET_PX_CNT, + ACRN_PMCMD_GET_PX_DATA, + ACRN_PMCMD_GET_CX_CNT, + ACRN_PMCMD_GET_CX_DATA, +}; + +/** + * @brief Info to get a VM interrupt count data + * + * the parameter for HC_VM_INTR_MONITOR hypercall + */ +#define MAX_PTDEV_NUM 24U +struct acrn_intr_monitor { + /** sub command for intr monitor */ + uint32_t cmd; + /** the count of this buffer to save */ + uint32_t buf_cnt; + + /** the buffer which save each interrupt count */ + uint64_t buffer[MAX_PTDEV_NUM * 2]; +} __attribute__((aligned(8))); + +/** cmd for intr monitor **/ +#define INTR_CMD_GET_DATA 0U +#define INTR_CMD_DELAY_INT 1U + +/* + * PRE_LAUNCHED_VM is launched by ACRN hypervisor, with LAPIC_PT; + * Service VM is launched by ACRN hypervisor, without LAPIC_PT; + * POST_LAUNCHED_VM is launched by ACRN devicemodel, with/without LAPIC_PT depends on usecases. + * + * Assumption: vm_configs array is completely initialized w.r.t. load_order member of + * acrn_vm_config for all the VMs. + */ +enum acrn_vm_load_order { + PRE_LAUNCHED_VM = 0, + SERVICE_VM, + POST_LAUNCHED_VM, /* Launched by Devicemodel in Service VM */ + MAX_LOAD_ORDER +}; + +struct acrn_vm_config_header { + enum acrn_vm_load_order load_order; + char name[MAX_VM_NAME_LEN]; + uint8_t reserved[2]; + uint8_t severity; + uint64_t cpu_affinity; + uint64_t guest_flags; + /* + * The following are hv-specific members and are thus opaque. + * vm_config_entry_size determines the real size of this structure. + */ +} __attribute__((aligned(8))); + +/** + * @brief Info to configure virtual root port + * + * Configuration passed to hv when adding a virtual root port which + * is used as PTM root + */ +struct vrp_config +{ + uint16_t phy_bdf; + uint8_t max_payload; /* dev cap's max payload */ + uint8_t primary_bus; + uint8_t secondary_bus; + uint8_t subordinate_bus; + uint8_t ptm_capable; + uint32_t ptm_cap_offset; +}; + +/* Type of PCI device assignment */ +#define ACRN_PTDEV_QUIRK_ASSIGN (1U << 0) + +#define ACRN_PCI_NUM_BARS 6U +/** + * @brief Info to assign or deassign PCI for a VM + * + */ +struct acrn_pcidev { + /** the type of the the pass-through PCI device */ + uint32_t type; + + /** virtual BDF# of the pass-through PCI device */ + uint16_t virt_bdf; + + /** physical BDF# of the pass-through PCI device */ + uint16_t phys_bdf; + + /** the PCI Interrupt Line, initialized by ACRN-DM, which is RO and + * ideally not used for pass-through MSI/MSI-x devices. + */ + uint8_t intr_line; + + /** the PCI Interrupt Pin, initialized by ACRN-DM, which is RO and + * ideally not used for pass-through MSI/MSI-x devices. + */ + uint8_t intr_pin; + + /** the base address of the PCI BAR, initialized by ACRN-DM. */ + uint32_t bar[ACRN_PCI_NUM_BARS]; +}; + +#define MMIODEV_RES_NUM 3 + +/** + * @brief Info to assign or deassign a MMIO device for a VM + */ +struct acrn_mmiodev { + char name[8]; + struct acrn_mmiores { + /** the gpa of the MMIO region for the MMIO device */ + uint64_t user_vm_pa; + /** the hpa of the MMIO region for the MMIO device: for post-launched VM + * it's pa in service vm; for pre-launched VM it's pa in HV. + */ + uint64_t host_pa; + /** the size of the MMIO region for the MMIO resource */ + uint64_t size; + /** the memory type of the MMIO region for the MMIO resource */ + uint64_t mem_type; + } res[MMIODEV_RES_NUM]; +}; + +/** + * @brief Info to create or destroy a virtual PCI or legacy device for a VM + * + * the parameter for HC_CREATE_VDEV or HC_DESTROY_VDEV hypercall + */ +struct acrn_vdev { + /* + * the identifier of the device, the low 32 bits represent the vendor + * id and device id of PCI device and the high 32 bits represent the + * device number of the legacy device + */ + union { + uint64_t value; + struct { + uint16_t vendor; + uint16_t device; + uint32_t legacy_id; + } fields; + } id; + + /* + * the slot of the device, if the device is a PCI device, the slot + * represents BDF, otherwise it represents legacy device slot number + */ + uint64_t slot; + + /** the IO resource address of the device, initialized by ACRN-DM. */ + uint32_t io_addr[ACRN_PCI_NUM_BARS]; + + /** the IO resource size of the device, initialized by ACRN-DM. */ + uint32_t io_size[ACRN_PCI_NUM_BARS]; + + /** the options for the virtual device, initialized by ACRN-DM. */ + uint8_t args[128]; +}; + +#define ACRN_ASYNCIO_PIO (0x01U) +#define ACRN_ASYNCIO_MMIO (0x02U) + +#define SBUF_MAGIC 0x5aa57aa71aa13aa3UL +#define SBUF_MAX_SIZE (1UL << 22U) +#define SBUF_HEAD_SIZE 64U + +/* sbuf flags */ +#define OVERRUN_CNT_EN (1U << 0U) /* whether overrun counting is enabled */ +#define OVERWRITE_EN (1U << 1U) /* whether overwrite is enabled */ + +/** + * (sbuf) head + buf (store (ele_num - 1) elements at most) + * buffer empty: tail == head + * buffer full: (tail + ele_size) % size == head + * + * Base of memory for elements + * | + * | + * ---------------------------------------------------------------------- + * | struct shared_buf | raw data (ele_size)| ... | raw data (ele_size) | + * ---------------------------------------------------------------------- + * | + * | + * struct shared_buf *buf + */ + +enum { + ACRN_TRACE = 0U, + ACRN_HVLOG, + ACRN_SEP, + ACRN_SOCWATCH, + /* The sbuf with above ids are created each pcpu */ + ACRN_SBUF_PER_PCPU_ID_MAX, + ACRN_ASYNCIO = 64, +}; + +/* Make sure sizeof(struct shared_buf) == SBUF_HEAD_SIZE */ +struct shared_buf { + uint64_t magic; + uint32_t ele_num; /* number of elements */ + uint32_t ele_size; /* sizeof of elements */ + uint32_t head; /* offset from base, to read */ + uint32_t tail; /* offset from base, to write */ + uint32_t flags; + uint32_t reserved; + uint32_t overrun_cnt; /* count of overrun */ + uint32_t size; /* ele_num * ele_size */ + uint32_t padding[6]; +}; + +/** + * @} + */ +#endif /* ACRN_COMMON_H */ diff --git a/src/components/implementation/simple_vmm/multi_vmm/acrn_types.h b/src/components/implementation/simple_vmm/multi_vmm/acrn_types.h new file mode 100644 index 0000000000..0d6b92fcd9 --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/acrn_types.h @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2018-2022 Intel Corporation. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef ACRN_TYPES_H +#define ACRN_TYPES_H + +#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) +#define __aligned(x) __attribute__((aligned(x))) +#define __packed __attribute__((packed)) +#define __unused __attribute__((unused)) + +#include + +/** Roundup (x/y) to ( x/y + (x%y) ? 1 : 0) **/ +#define INT_DIV_ROUNDUP(x, y) ((((x)+(y))-1)/(y)) + +/* Define standard data types. These definitions allow software components + * to perform in the same manner on different target platforms. + */ +typedef signed char int8_t; +typedef unsigned char uint8_t; +typedef signed short int16_t; +typedef unsigned short uint16_t; +typedef signed int int32_t; +typedef unsigned int uint32_t; +typedef unsigned long uint64_t; +typedef signed long int64_t; +typedef __builtin_va_list va_list; + +#ifndef NULL +#define NULL ((void *) 0) +#endif + +#ifndef true +#define true ((_Bool) 1) +#define false ((_Bool) 0) +#endif + +#ifndef UINT64_MAX +#define UINT64_MAX (0xffffffffffffffffUL) +#endif + +#ifndef UINT32_MAX +#define UINT32_MAX (0xffffffffU) +#endif + + +#endif /* INCLUDE_TYPES_H defined */ diff --git a/src/components/implementation/simple_vmm/multi_vmm/apicreg.h b/src/components/implementation/simple_vmm/multi_vmm/apicreg.h new file mode 100644 index 0000000000..0b8579ffb2 --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/apicreg.h @@ -0,0 +1,444 @@ +/*- + * Copyright (c) 1996, by Peter Wemm and Steve Passe + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. The name of the developer may NOT be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef APICREG_H +#define APICREG_H + +#include +/* + * Local && I/O APIC definitions. + */ + +/****************************************************************************** + * global defines, etc. + */ + + +/****************************************************************************** + * LOCAL APIC structure + */ +struct lapic_reg { + uint32_t v; + uint32_t pad[3]; +}; + +struct lapic_regs { /*OFFSET(Hex)*/ + struct lapic_reg rsv0[2]; + struct lapic_reg id; /*020*/ + struct lapic_reg version; /*030*/ + struct lapic_reg rsv1[4]; + struct lapic_reg tpr; /*080*/ + struct lapic_reg apr; /*090*/ + struct lapic_reg ppr; /*0A0*/ + struct lapic_reg eoi; /*0B0*/ + struct lapic_reg rrd; /*0C0*/ + struct lapic_reg ldr; /*0D0*/ + struct lapic_reg dfr; /*0EO*/ + struct lapic_reg svr; /*0F0*/ + struct lapic_reg isr[8]; /*100 -- 170*/ + struct lapic_reg tmr[8]; /*180 -- 1F0*/ + struct lapic_reg irr[8]; /*200 -- 270*/ + struct lapic_reg esr; /*280*/ + struct lapic_reg rsv2[6]; + struct lapic_reg lvt_cmci; /*2F0*/ + struct lapic_reg icr_lo; /*300*/ + struct lapic_reg icr_hi; /*310*/ + struct lapic_reg lvt[6]; /*320 -- 370*/ + struct lapic_reg icr_timer;/*380*/ + struct lapic_reg ccr_timer;/*390*/ + struct lapic_reg rsv3[4]; + struct lapic_reg dcr_timer;/*3E0*/ + struct lapic_reg self_ipi; /*3F0*/ + + /*roundup sizeof current struct to 4KB*/ + struct lapic_reg rsv5[192]; /*400 -- FF0*/ +} __attribute__((aligned(4096))); + +enum LAPIC_REGISTERS { + LAPIC_ID = 0x2, + LAPIC_VERSION = 0x3, + LAPIC_TPR = 0x8, + LAPIC_APR = 0x9, + LAPIC_PPR = 0xa, + LAPIC_EOI = 0xb, + LAPIC_LDR = 0xd, + LAPIC_DFR = 0xe, /* Not in x2APIC */ + LAPIC_SVR = 0xf, + LAPIC_ISR0 = 0x10, + LAPIC_ISR1 = 0x11, + LAPIC_ISR2 = 0x12, + LAPIC_ISR3 = 0x13, + LAPIC_ISR4 = 0x14, + LAPIC_ISR5 = 0x15, + LAPIC_ISR6 = 0x16, + LAPIC_ISR7 = 0x17, + LAPIC_TMR0 = 0x18, + LAPIC_TMR1 = 0x19, + LAPIC_TMR2 = 0x1a, + LAPIC_TMR3 = 0x1b, + LAPIC_TMR4 = 0x1c, + LAPIC_TMR5 = 0x1d, + LAPIC_TMR6 = 0x1e, + LAPIC_TMR7 = 0x1f, + LAPIC_IRR0 = 0x20, + LAPIC_IRR1 = 0x21, + LAPIC_IRR2 = 0x22, + LAPIC_IRR3 = 0x23, + LAPIC_IRR4 = 0x24, + LAPIC_IRR5 = 0x25, + LAPIC_IRR6 = 0x26, + LAPIC_IRR7 = 0x27, + LAPIC_ESR = 0x28, + LAPIC_LVT_CMCI = 0x2f, + LAPIC_ICR_LO = 0x30, + LAPIC_ICR_HI = 0x31, /* Not in x2APIC */ + LAPIC_LVT_TIMER = 0x32, + LAPIC_LVT_THERMAL = 0x33, + LAPIC_LVT_PCINT = 0x34, + LAPIC_LVT_LINT0 = 0x35, + LAPIC_LVT_LINT1 = 0x36, + LAPIC_LVT_ERROR = 0x37, + LAPIC_ICR_TIMER = 0x38, + LAPIC_CCR_TIMER = 0x39, + LAPIC_DCR_TIMER = 0x3e, + LAPIC_SELF_IPI = 0x3f, /* Only in x2APIC */ + LAPIC_EXT_FEATURES = 0x40, /* AMD */ + LAPIC_EXT_CTRL = 0x41, /* AMD */ + LAPIC_EXT_SEOI = 0x42, /* AMD */ + LAPIC_EXT_IER0 = 0x48, /* AMD */ + LAPIC_EXT_IER1 = 0x49, /* AMD */ + LAPIC_EXT_IER2 = 0x4a, /* AMD */ + LAPIC_EXT_IER3 = 0x4b, /* AMD */ + LAPIC_EXT_IER4 = 0x4c, /* AMD */ + LAPIC_EXT_IER5 = 0x4d, /* AMD */ + LAPIC_EXT_IER6 = 0x4e, /* AMD */ + LAPIC_EXT_IER7 = 0x4f, /* AMD */ + LAPIC_EXT_LVT0 = 0x50, /* AMD */ + LAPIC_EXT_LVT1 = 0x51, /* AMD */ + LAPIC_EXT_LVT2 = 0x52, /* AMD */ + LAPIC_EXT_LVT3 = 0x53, /* AMD */ +}; + +#define LAPIC_MEM_MUL 0x10 + +/* + * Although some registers are available on AMD processors only, + * it's not a big waste to reserve them on all platforms. + * However, we need to watch out for this space being assigned for + * non-APIC purposes in the future processor models. + */ +#define LAPIC_MEM_REGION ((LAPIC_EXT_LVT3 + 1) * LAPIC_MEM_MUL) + +/****************************************************************************** + * I/O APIC structure + */ + +struct ioapic { + uint32_t ioregsel; + uint32_t rsv0[3]; + uint32_t iowin; + uint32_t rsv1[3]; +}; + +/* + * Macros for bits in union ioapic_rte + */ +#define IOAPIC_RTE_MASK_CLR 0x0U /* Interrupt Mask: Clear */ +#define IOAPIC_RTE_MASK_SET 0x1U /* Interrupt Mask: Set */ + +#define IOAPIC_RTE_TRGRMODE_EDGE 0x0U /* Trigger Mode: Edge */ +#define IOAPIC_RTE_TRGRMODE_LEVEL 0x1U /* Trigger Mode: Level */ + +#define IOAPIC_RTE_REM_IRR 0x1U /* Remote IRR: Read-Only */ + +#define IOAPIC_RTE_INTPOL_AHI 0x0U /* Interrupt Polarity: active high */ +#define IOAPIC_RTE_INTPOL_ALO 0x1U /* Interrupt Polarity: active low */ + +#define IOAPIC_RTE_DELIVS 0x1U /* Delivery Status: Read-Only */ + +#define IOAPIC_RTE_DESTMODE_PHY 0x0U /* Destination Mode: Physical */ +#define IOAPIC_RTE_DESTMODE_LOGICAL 0x1U /* Destination Mode: Logical */ + +#define IOAPIC_RTE_DELMODE_FIXED 0x0U /* Delivery Mode: Fixed */ +#define IOAPIC_RTE_DELMODE_LOPRI 0x1U /* Delivery Mode: Lowest priority */ +#define IOAPIC_RTE_DELMODE_INIT 0x5U /* Delivery Mode: INIT signal */ +#define IOAPIC_RTE_DELMODE_EXINT 0x7U /* Delivery Mode: External INTerrupt */ + +/* IOAPIC Redirection Table (RTE) Entry structure */ +union ioapic_rte { + uint64_t full; + struct { + uint32_t lo_32; + uint32_t hi_32; + } u; + struct { + uint8_t vector:8; + uint64_t delivery_mode:3; + uint64_t dest_mode:1; + uint64_t delivery_status:1; + uint64_t intr_polarity:1; + uint64_t remote_irr:1; + uint64_t trigger_mode:1; + uint64_t intr_mask:1; + uint64_t rsvd_1:39; + uint8_t dest_field:8; + } bits __attribute__((packed)); + struct { + uint32_t vector:8; + uint32_t constant:3; + uint32_t intr_index_high:1; + uint32_t delivery_status:1; + uint32_t intr_polarity:1; + uint32_t remote_irr:1; + uint32_t trigger_mode:1; + uint32_t intr_mask:1; + uint32_t rsvd_1:15; + uint32_t rsvd_2:16; + uint32_t intr_format:1; + uint32_t intr_index_low:15; + } ir_bits __attribute__((packed)); +}; + +/****************************************************************************** + * various code 'logical' values + */ + +/****************************************************************************** + * LOCAL APIC defines + */ + +/* default physical locations of LOCAL (CPU) APICs */ +#define DEFAULT_APIC_BASE 0xfee00000UL + +/* constants relating to APIC ID registers */ +#define APIC_ID_MASK 0xff000000U +#define APIC_ID_SHIFT 24U +#define APIC_ID_CLUSTER 0xf0U +#define APIC_ID_CLUSTER_ID 0x0fU +#define APIC_MAX_CLUSTER 0xeU +#define APIC_MAX_INTRACLUSTER_ID 3 +#define APIC_ID_CLUSTER_SHIFT 4 + +/* fields in VER */ +#define APIC_VER_VERSION 0x000000ffU +#define APIC_VER_MAXLVT 0x00ff0000U +#define MAXLVTSHIFT 16U +#define APIC_VER_EOI_SUPPRESSION 0x01000000U +#define APIC_VER_AMD_EXT_SPACE 0x80000000U + +/* fields in LDR */ +#define APIC_LDR_RESERVED 0x00ffffffU + +/* fields in DFR */ +#define APIC_DFR_RESERVED 0x0fffffffU +#define APIC_DFR_MODEL_MASK 0xf0000000U +#define APIC_DFR_MODEL_FLAT 0xf0000000U +#define APIC_DFR_MODEL_CLUSTER 0x00000000U + +/* fields in SVR */ +#define APIC_SVR_VECTOR 0x000000ffU +#define APIC_SVR_VEC_PROG 0x000000f0U +#define APIC_SVR_VEC_FIX 0x0000000fU +#define APIC_SVR_ENABLE 0x00000100U +#define APIC_SVR_SWDIS 0x00000000U +#define APIC_SVR_SWEN 0x00000100U +#define APIC_SVR_FOCUS 0x00000200U +#define APIC_SVR_FEN 0x00000000U +#define APIC_SVR_FDIS 0x00000200U +#define APIC_SVR_EOI_SUPPRESSION 0x00001000U + +/* fields in TPR */ +#define APIC_TPR_PRIO 0x000000ffU +#define APIC_TPR_INT 0x000000f0U +#define APIC_TPR_SUB 0x0000000fU + +/* fields in ESR */ +#define APIC_ESR_SEND_CS_ERROR 0x00000001U +#define APIC_ESR_RECEIVE_CS_ERROR 0x00000002U +#define APIC_ESR_SEND_ACCEPT 0x00000004U +#define APIC_ESR_RECEIVE_ACCEPT 0x00000008U +#define APIC_ESR_SEND_ILLEGAL_VECTOR 0x00000020U +#define APIC_ESR_RECEIVE_ILLEGAL_VECTOR 0x00000040U +#define APIC_ESR_ILLEGAL_REGISTER 0x00000080U + +/* fields in ICR_LOW */ +#define APIC_VECTOR_MASK 0x000000ffU + +#define APIC_DELMODE_MASK 0x00000700U +#define APIC_DELMODE_FIXED 0x00000000U +#define APIC_DELMODE_LOWPRIO 0x00000100U +#define APIC_DELMODE_SMI 0x00000200U +#define APIC_DELMODE_RR 0x00000300U +#define APIC_DELMODE_NMI 0x00000400U +#define APIC_DELMODE_INIT 0x00000500U +#define APIC_DELMODE_STARTUP 0x00000600U +#define APIC_DELMODE_RESV 0x00000700U + +#define APIC_DESTMODE_MASK 0x00000800U +#define APIC_DESTMODE_PHY 0x00000000U +#define APIC_DESTMODE_LOG 0x00000800U + +#define APIC_DELSTAT_MASK 0x00001000U +#define APIC_DELSTAT_IDLE 0x00000000U +#define APIC_DELSTAT_PEND 0x00001000U + +#define APIC_RESV1_MASK 0x00002000U + +#define APIC_LEVEL_MASK 0x00004000U +#define APIC_LEVEL_DEASSERT 0x00000000U +#define APIC_LEVEL_ASSERT 0x00004000U + +#define APIC_TRIGMOD_MASK 0x00008000U +#define APIC_TRIGMOD_EDGE 0x00000000U +#define APIC_TRIGMOD_LEVEL 0x00008000U + +#define APIC_RRSTAT_MASK 0x00030000U +#define APIC_RRSTAT_INVALID 0x00000000U +#define APIC_RRSTAT_INPROG 0x00010000U +#define APIC_RRSTAT_VALID 0x00020000U +#define APIC_RRSTAT_RESV 0x00030000U + +#define APIC_DEST_MASK 0x000c0000U +#define APIC_DEST_NOSHORT 0x00000000U +#define APIC_DEST_SELF 0x00040000U +#define APIC_DEST_ALLISELF 0x00080000U +#define APIC_DEST_ALLESELF 0x000c0000U + +#define APIC_RESV2_MASK 0xfff00000U + +#define APIC_ICRLO_RESV_MASK (APIC_RESV1_MASK | APIC_RESV2_MASK) + +/* fields in LVT1/2 */ +#define APIC_LVT_VECTOR 0x000000ffU +#define APIC_LVT_DM 0x00000700U +#define APIC_LVT_DM_FIXED 0x00000000U +#define APIC_LVT_DM_SMI 0x00000200U +#define APIC_LVT_DM_NMI 0x00000400U +#define APIC_LVT_DM_INIT 0x00000500U +#define APIC_LVT_DM_EXTINT 0x00000700U +#define APIC_LVT_DS 0x00001000U +#define APIC_LVT_IIPP 0x00002000U +#define APIC_LVT_IIPP_INTALO 0x00002000U +#define APIC_LVT_IIPP_INTAHI 0x00000000U +#define APIC_LVT_RIRR 0x00004000U +#define APIC_LVT_TM 0x00008000U +#define APIC_LVT_M 0x00010000U + + +/* fields in LVT Timer */ +#define APIC_LVTT_VECTOR 0x000000ffU +#define APIC_LVTT_DS 0x00001000U +#define APIC_LVTT_M 0x00010000U +#define APIC_LVTT_TM 0x00060000U +#define APIC_LVTT_TM_ONE_SHOT 0x00000000U +#define APIC_LVTT_TM_PERIODIC 0x00020000U +#define APIC_LVTT_TM_TSCDLT 0x00040000U +#define APIC_LVTT_TM_RSRV 0x00060000U + +/* APIC timer current count */ +#define APIC_TIMER_MAX_COUNT 0xffffffffU + +/* fields in TDCR */ +#define APIC_TDCR_2 0x00U +#define APIC_TDCR_4 0x01U +#define APIC_TDCR_8 0x02U +#define APIC_TDCR_16 0x03U +#define APIC_TDCR_32 0x08U +#define APIC_TDCR_64 0x09U +#define APIC_TDCR_128 0x0aU +#define APIC_TDCR_1 0x0bU + +/* Constants related to AMD Extended APIC Features Register */ +#define APIC_EXTF_ELVT_MASK 0x00ff0000U +#define APIC_EXTF_ELVT_SHIFT 16 +#define APIC_EXTF_EXTID_CAP 0x00000004U +#define APIC_EXTF_SEIO_CAP 0x00000002U +#define APIC_EXTF_IER_CAP 0x00000001U + +/* LVT table indices */ +#define APIC_LVT_TIMER 0U +#define APIC_LVT_THERMAL 1U +#define APIC_LVT_PMC 2U +#define APIC_LVT_LINT0 3U +#define APIC_LVT_LINT1 4U +#define APIC_LVT_ERROR 5U +#define APIC_LVT_CMCI 6U +#define APIC_LVT_MAX APIC_LVT_CMCI + +/* AMD extended LVT constants, seem to be assigned by fiat */ +#define APIC_ELVT_IBS 0 /* Instruction based sampling */ +#define APIC_ELVT_MCA 1 /* MCE thresholding */ +#define APIC_ELVT_DEI 2 /* Deferred error interrupt */ +#define APIC_ELVT_SBI 3 /* Sideband interface */ +#define APIC_ELVT_MAX APIC_ELVT_SBI + +/****************************************************************************** + * I/O APIC defines + */ + +/* window register offset */ +#define IOAPIC_REGSEL 0x00U +#define IOAPIC_WINDOW 0x10U + +/* indexes into IO APIC */ +#define IOAPIC_ID 0x00U +#define IOAPIC_VER 0x01U +#define IOAPIC_ARB 0x02U +#define IOAPIC_REDTBL 0x10U +#define IOAPIC_REDTBL0 IOAPIC_REDTBL +#define IOAPIC_REDTBL1 (IOAPIC_REDTBL+0x02U) +#define IOAPIC_REDTBL2 (IOAPIC_REDTBL+0x04U) +#define IOAPIC_REDTBL3 (IOAPIC_REDTBL+0x06U) +#define IOAPIC_REDTBL4 (IOAPIC_REDTBL+0x08U) +#define IOAPIC_REDTBL5 (IOAPIC_REDTBL+0x0aU) +#define IOAPIC_REDTBL6 (IOAPIC_REDTBL+0x0cU) +#define IOAPIC_REDTBL7 (IOAPIC_REDTBL+0x0eU) +#define IOAPIC_REDTBL8 (IOAPIC_REDTBL+0x10U) +#define IOAPIC_REDTBL9 (IOAPIC_REDTBL+0x12U) +#define IOAPIC_REDTBL10 (IOAPIC_REDTBL+0x14U) +#define IOAPIC_REDTBL11 (IOAPIC_REDTBL+0x16U) +#define IOAPIC_REDTBL12 (IOAPIC_REDTBL+0x18U) +#define IOAPIC_REDTBL13 (IOAPIC_REDTBL+0x1aU) +#define IOAPIC_REDTBL14 (IOAPIC_REDTBL+0x1cU) +#define IOAPIC_REDTBL15 (IOAPIC_REDTBL+0x1eU) +#define IOAPIC_REDTBL16 (IOAPIC_REDTBL+0x20U) +#define IOAPIC_REDTBL17 (IOAPIC_REDTBL+0x22U) +#define IOAPIC_REDTBL18 (IOAPIC_REDTBL+0x24U) +#define IOAPIC_REDTBL19 (IOAPIC_REDTBL+0x26U) +#define IOAPIC_REDTBL20 (IOAPIC_REDTBL+0x28U) +#define IOAPIC_REDTBL21 (IOAPIC_REDTBL+0x2aU) +#define IOAPIC_REDTBL22 (IOAPIC_REDTBL+0x2cU) +#define IOAPIC_REDTBL23 (IOAPIC_REDTBL+0x2eU) + +#define IOAPIC_ID_MASK 0x0f000000U +#define IOAPIC_ID_SHIFT 24U + +/* fields in VER, for redirection entry */ +#define IOAPIC_MAX_RTE_MASK 0x00ff0000U +#define MAX_RTE_SHIFT 16U + +#endif /* APICREG_H */ diff --git a/src/components/implementation/simple_vmm/multi_vmm/atomic.h b/src/components/implementation/simple_vmm/multi_vmm/atomic.h new file mode 100644 index 0000000000..08de71b656 --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/atomic.h @@ -0,0 +1,152 @@ +/*- + * Copyright (c) 1998 Doug Rabson + * Copyright (c) 2018-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef ATOMIC_H +#define ATOMIC_H +#include +#define BUS_LOCK "lock ; " + +#define build_atomic_inc(name, size, type) \ +static inline void name(type *ptr) \ +{ \ + asm volatile(BUS_LOCK "inc" size " %0" \ + : "=m" (*ptr) \ + : "m" (*ptr)); \ +} +build_atomic_inc(atomic_inc16, "w", uint16_t) +build_atomic_inc(atomic_inc32, "l", uint32_t) +build_atomic_inc(atomic_inc64, "q", uint64_t) + +#define build_atomic_dec(name, size, type) \ +static inline void name(type *ptr) \ +{ \ + asm volatile(BUS_LOCK "dec" size " %0" \ + : "=m" (*ptr) \ + : "m" (*ptr)); \ +} +build_atomic_dec(atomic_dec16, "w", uint16_t) +build_atomic_dec(atomic_dec32, "l", uint32_t) +build_atomic_dec(atomic_dec64, "q", uint64_t) + +#define build_atomic_swap(name, size, type) \ +static inline type name(type *ptr, type v) \ +{ \ + asm volatile(BUS_LOCK "xchg" size " %1,%0" \ + : "+m" (*ptr), "+r" (v) \ + : \ + : "cc", "memory"); \ + return v; \ +} +build_atomic_swap(atomic_swap32, "l", uint32_t) +build_atomic_swap(atomic_swap64, "q", uint64_t) + + /* + * #define atomic_readandclear32(P) \ + * (return (*(uint32_t *)(P)); *(uint32_t *)(P) = 0U;) + */ +static inline uint32_t atomic_readandclear32(uint32_t *p) +{ + return atomic_swap32(p, 0U); +} + + /* + * #define atomic_readandclear64(P) \ + * (return (*(uint64_t *)(P)); *(uint64_t *)(P) = 0UL;) + */ +static inline uint64_t atomic_readandclear64(uint64_t *p) +{ + return atomic_swap64(p, 0UL); +} + +#define build_atomic_cmpxchg(name, size, type) \ +static inline type name(volatile type *ptr, type old, type new) \ +{ \ + type ret; \ + asm volatile(BUS_LOCK "cmpxchg" size " %2,%1" \ + : "=a" (ret), "+m" (*ptr) \ + : "r" (new), "0" (old) \ + : "memory"); \ + return ret; \ +} +build_atomic_cmpxchg(atomic_cmpxchg32, "l", uint32_t) +build_atomic_cmpxchg(atomic_cmpxchg64, "q", uint64_t) + +#define build_atomic_xadd(name, size, type) \ +static inline type name(type *ptr, type v) \ +{ \ + asm volatile(BUS_LOCK "xadd" size " %0,%1" \ + : "+r" (v), "+m" (*ptr) \ + : \ + : "cc", "memory"); \ + return v; \ + } +build_atomic_xadd(atomic_xadd16, "w", uint16_t) +build_atomic_xadd(atomic_xadd32, "l", int32_t) +build_atomic_xadd(atomic_xadd64, "q", int64_t) + +static inline int32_t atomic_add_return(int32_t *p, int32_t v) +{ + return (atomic_xadd32(p, v) + v); +} + +static inline int32_t atomic_sub_return(int32_t *p, int32_t v) +{ + return (atomic_xadd32(p, -v) - v); +} + +static inline int32_t atomic_inc_return(int32_t *v) +{ + return atomic_add_return(v, 1); +} + +static inline int32_t atomic_dec_return(int32_t *v) +{ + return atomic_sub_return(v, 1); +} + +static inline int64_t atomic_add64_return(int64_t *p, int64_t v) +{ + return (atomic_xadd64(p, v) + v); +} + +static inline int64_t atomic_sub64_return(int64_t *p, int64_t v) +{ + return (atomic_xadd64(p, -v) - v); +} + +static inline int64_t atomic_inc64_return(int64_t *v) +{ + return atomic_add64_return(v, 1); +} + +static inline int64_t atomic_dec64_return(int64_t *v) +{ + return atomic_sub64_return(v, 1); +} + +#endif /* ATOMIC_H*/ diff --git a/src/components/implementation/simple_vmm/multi_vmm/bits.h b/src/components/implementation/simple_vmm/multi_vmm/bits.h new file mode 100644 index 0000000000..f7f8b732e7 --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/bits.h @@ -0,0 +1,298 @@ +/*- + * Copyright (c) 1998 Doug Rabson + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef BITS_H +#define BITS_H +#include "atomic.h" + +/** + * + * INVALID_BIT_INDEX means when input paramter is zero, + * bit operations function can't find bit set and return + * the invalid bit index directly. + * + **/ +#define INVALID_BIT_INDEX 0xffffU + +/* + * + * fls32 - Find the Last (most significant) bit Set in value and + * return the bit index of that bit. + * + * Bits are numbered starting at 0,the least significant bit. + * A return value of INVALID_BIT_INDEX means return value is + * invalid bit index when the input argument was zero. + * + * Examples: + * fls32 (0x0) = INVALID_BIT_INDEX + * fls32 (0x01) = 0 + * fls32 (0x80) = 7 + * ... + * fls32 (0x80000001) = 31 + * + * @param value: 'uint32_t' type value + * + * @return value: zero-based bit index, INVALID_BIT_INDEX means + * when 'value' was zero, bit operations function can't find bit + * set and return the invalid bit index directly. + * + */ +static inline uint16_t fls32(uint32_t value) +{ + uint32_t ret; + asm volatile("bsrl %1,%0\n\t" + "jnz 1f\n\t" + "mov %2,%0\n" + "1:" : "=r" (ret) + : "rm" (value), "i" (INVALID_BIT_INDEX)); + return (uint16_t)ret; +} + +static inline uint16_t fls64(uint64_t value) +{ + uint64_t ret = 0UL; + asm volatile("bsrq %1,%0\n\t" + "jnz 1f\n\t" + "mov %2,%0\n" + "1:" : "=r" (ret) + : "rm" (value), "i" (INVALID_BIT_INDEX)); + return (uint16_t)ret; +} + +/* + * + * ffs64 - Find the First (least significant) bit Set in value(Long type) + * and return the index of that bit. + * + * Bits are numbered starting at 0,the least significant bit. + * A return value of INVALID_BIT_INDEX means that the return value is the inalid + * bit index when the input argument was zero. + * + * Examples: + * ffs64 (0x0) = INVALID_BIT_INDEX + * ffs64 (0x01) = 0 + * ffs64 (0xf0) = 4 + * ffs64 (0xf00) = 8 + * ... + * ffs64 (0x8000000000000001) = 0 + * ffs64 (0xf000000000000000) = 60 + * + * @param value: 'uint64_t' type value + * + * @return value: zero-based bit index, INVALID_BIT_INDEX means + * when 'value' was zero, bit operations function can't find bit + * set and return the invalid bit index directly. + * + */ +static inline uint16_t ffs64(uint64_t value) +{ + uint64_t ret; + asm volatile("bsfq %1,%0\n\t" + "jnz 1f\n\t" + "mov %2,%0\n" + "1:" : "=r" (ret) + : "rm" (value), "i" (INVALID_BIT_INDEX)); + return (uint16_t)ret; +} + +/*bit scan forward for the least significant bit '0'*/ +static inline uint16_t ffz64(uint64_t value) +{ + return ffs64(~value); +} + + +/* + * find the first zero bit in a uint64_t array. + * @pre: the size must be multiple of 64. + */ +static inline uint64_t ffz64_ex(const uint64_t *addr, uint64_t size) +{ + uint64_t ret = size; + uint64_t idx; + + for (idx = 0UL; (idx << 6U) < size; idx++) { + if (addr[idx] != ~0UL) { + ret = (idx << 6U) + ffz64(addr[idx]); + break; + } + } + + return ret; +} +/* + * Counts leading zeros. + * + * The number of leading zeros is defined as the number of + * most significant bits which are not '1'. E.g.: + * clz(0x80000000)==0 + * clz(0x40000000)==1 + * ... + * clz(0x00000001)==31 + * clz(0x00000000)==32 + * + * @param value:The 32 bit value to count the number of leading zeros. + * + * @return The number of leading zeros in 'value'. + */ +static inline uint16_t clz(uint32_t value) +{ + return ((value != 0U) ? (31U - fls32(value)) : 32U); +} + +/* + * Counts leading zeros (64 bit version). + * + * @param value:The 64 bit value to count the number of leading zeros. + * + * @return The number of leading zeros in 'value'. + */ +static inline uint16_t clz64(uint64_t value) +{ + return ((value != 0UL) ? (63U - fls64(value)) : 64U); +} + +/* + * (*addr) |= (1UL<=64, it will be truncated. + */ +#define build_bitmap_set(name, op_len, op_type, lock) \ +static inline void name(uint16_t nr_arg, volatile op_type *addr) \ +{ \ + uint16_t nr; \ + nr = nr_arg & ((8U * sizeof(op_type)) - 1U); \ + asm volatile(lock "or" op_len " %1,%0" \ + : "+m" (*addr) \ + : "r" ((op_type)(1UL<=64, it will be truncated. + */ +#define build_bitmap_clear(name, op_len, op_type, lock) \ +static inline void name(uint16_t nr_arg, volatile op_type *addr) \ +{ \ + uint16_t nr; \ + nr = nr_arg & ((8U * sizeof(op_type)) - 1U); \ + asm volatile(lock "and" op_len " %1,%0" \ + : "+m" (*addr) \ + : "r" ((op_type)(~(1UL<<(nr)))) \ + : "cc", "memory"); \ +} +build_bitmap_clear(bitmap_clear_nolock, "q", uint64_t, "") +build_bitmap_clear(bitmap_clear_lock, "q", uint64_t, BUS_LOCK) +build_bitmap_clear(bitmap32_clear_nolock, "l", uint32_t, "") +build_bitmap_clear(bitmap32_clear_lock, "l", uint32_t, BUS_LOCK) + +/* + * return !!((*addr) & (1UL<=64, it will + * be truncated. + */ +static inline bool bitmap_test(uint16_t nr, const volatile uint64_t *addr) +{ + int32_t ret = 0; + asm volatile("btq %q2,%1\n\tsbbl %0, %0" + : "=r" (ret) + : "m" (*addr), "r" ((uint64_t)(nr & 0x3fU)) + : "cc", "memory"); + return (ret != 0); +} + +static inline bool bitmap32_test(uint16_t nr, const volatile uint32_t *addr) +{ + int32_t ret = 0; + asm volatile("btl %2,%1\n\tsbbl %0, %0" + : "=r" (ret) + : "m" (*addr), "r" ((uint32_t)(nr & 0x1fU)) + : "cc", "memory"); + return (ret != 0); +} + +/* + * bool ret = (*addr) & (1UL<=64, it + * will be truncated. + */ +#define build_bitmap_testandset(name, op_len, op_type, lock) \ +static inline bool name(uint16_t nr_arg, volatile op_type *addr) \ +{ \ + uint16_t nr; \ + int32_t ret=0; \ + nr = nr_arg & ((8U * sizeof(op_type)) - 1U); \ + asm volatile(lock "bts" op_len " %2,%1\n\tsbbl %0,%0" \ + : "=r" (ret), "=m" (*addr) \ + : "r" ((op_type)nr) \ + : "cc", "memory"); \ + return (ret != 0); \ +} +build_bitmap_testandset(bitmap_test_and_set_nolock, "q", uint64_t, "") +build_bitmap_testandset(bitmap_test_and_set_lock, "q", uint64_t, BUS_LOCK) +build_bitmap_testandset(bitmap32_test_and_set_nolock, "l", uint32_t, "") +build_bitmap_testandset(bitmap32_test_and_set_lock, "l", uint32_t, BUS_LOCK) + +/* + * bool ret = (*addr) & (1UL<=64, + * it will be truncated. + */ +#define build_bitmap_testandclear(name, op_len, op_type, lock) \ +static inline bool name(uint16_t nr_arg, volatile op_type *addr) \ +{ \ + uint16_t nr; \ + int32_t ret=0; \ + nr = nr_arg & ((8U * sizeof(op_type)) - 1U); \ + asm volatile(lock "btr" op_len " %2,%1\n\tsbbl %0,%0" \ + : "=r" (ret), "=m" (*addr) \ + : "r" ((op_type)nr) \ + : "cc", "memory"); \ + return (ret != 0); \ +} +build_bitmap_testandclear(bitmap_test_and_clear_nolock, "q", uint64_t, "") +build_bitmap_testandclear(bitmap_test_and_clear_lock, "q", uint64_t, BUS_LOCK) +build_bitmap_testandclear(bitmap32_test_and_clear_nolock, "l", uint32_t, "") +build_bitmap_testandclear(bitmap32_test_and_clear_lock, "l", uint32_t, BUS_LOCK) + +static inline uint16_t bitmap_weight(uint64_t bits) +{ + return (uint16_t)__builtin_popcountl(bits); +} + +#endif /* BITS_H*/ diff --git a/src/components/implementation/simple_vmm/multi_vmm/cpu.h b/src/components/implementation/simple_vmm/multi_vmm/cpu.h new file mode 100755 index 0000000000..96f6a6ce4d --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/cpu.h @@ -0,0 +1,337 @@ +/*- + * Copyright (c) 1989, 1990 William F. Jolitz + * Copyright (c) 1990 The Regents of the University of California. + * Copyright (c) 2017-2022 Intel Corporation. + * + * This code is derived from software contributed to Berkeley by + * William Jolitz. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * from: @(#)segments.h 7.1 (Berkeley) 5/9/91 + * $FreeBSD$ + */ + +#ifndef CPU_H +#define CPU_H +#include +#include +#include +#include + +/* Define CPU stack alignment */ +#define CPU_STACK_ALIGN 16UL + +/* CR0 register definitions */ +#define CR0_PG (1UL<<31U) /* paging enable */ +#define CR0_CD (1UL<<30U) /* cache disable */ +#define CR0_NW (1UL<<29U) /* not write through */ +#define CR0_AM (1UL<<18U) /* alignment mask */ +#define CR0_WP (1UL<<16U) /* write protect */ +#define CR0_NE (1UL<<5U) /* numeric error */ +#define CR0_ET (1UL<<4U) /* extension type */ +#define CR0_TS (1UL<<3U) /* task switched */ +#define CR0_EM (1UL<<2U) /* emulation */ +#define CR0_MP (1UL<<1U) /* monitor coprocessor */ +#define CR0_PE (1UL<<0U) /* protected mode enabled */ + +/* CR3 register definitions */ +#define CR3_PWT (1UL<<3U) /* page-level write through */ +#define CR3_PCD (1UL<<4U) /* page-level cache disable */ + +/* CR4 register definitions */ +#define CR4_VME (1UL<<0U) /* virtual 8086 mode extensions */ +#define CR4_PVI (1UL<<1U) /* protected mode virtual interrupts */ +#define CR4_TSD (1UL<<2U) /* time stamp disable */ +#define CR4_DE (1UL<<3U) /* debugging extensions */ +#define CR4_PSE (1UL<<4U) /* page size extensions */ +#define CR4_PAE (1UL<<5U) /* physical address extensions */ +#define CR4_MCE (1UL<<6U) /* machine check enable */ +#define CR4_PGE (1UL<<7U) /* page global enable */ +#define CR4_PCE (1UL<<8U) +/* performance monitoring counter enable */ +#define CR4_OSFXSR (1UL<<9U) /* OS support for FXSAVE/FXRSTOR */ +#define CR4_OSXMMEXCPT (1UL<<10U) +/* OS support for unmasked SIMD floating point exceptions */ +#define CR4_UMIP (1UL<<11U) /* User-Mode Inst prevention */ +#define CR4_LA57 (1UL<<12U) /* 57-bit linear address */ +#define CR4_VMXE (1UL<<13U) /* VMX enable */ +#define CR4_SMXE (1UL<<14U) /* SMX enable */ +#define CR4_FSGSBASE (1UL<<16U) /* RD(FS|GS|FS)BASE inst */ +#define CR4_PCIDE (1UL<<17U) /* PCID enable */ +/* XSAVE and Processor Extended States enable bit */ +#define CR4_OSXSAVE (1UL<<18U) +#define CR4_KL (1UL<<19U) /* KeyLocker enable */ +#define CR4_SMEP (1UL<<20U) +#define CR4_SMAP (1UL<<21U) +#define CR4_PKE (1UL<<22U) /* Protect-key-enable */ +#define CR4_CET (1UL<<23U) /* Control-flow Enforcement Technology enable */ +#define CR4_PKS (1UL<<24U) /* Enable protection keys for supervisor-mode pages */ + +/* XCR0_SSE */ +#define XCR0_SSE (1UL<<1U) +/* XCR0_AVX */ +#define XCR0_AVX (1UL<<2U) +/* XCR0_BNDREGS */ +#define XCR0_BNDREGS (1UL<<3U) +/* XCR0_BNDCSR */ +#define XCR0_BNDCSR (1UL<<4U) +/* According to SDM Vol1 13.3: + * XCR0[63:10] and XCR0[8] are reserved. Executing the XSETBV instruction causes + * a general-protection fault if ECX = 0 and any corresponding bit in EDX:EAX + * is not 0. + */ +#define XCR0_RESERVED_BITS ((~((1UL << 10U) - 1UL)) | (1UL << 8U)) + + +/* + * Entries in the Interrupt Descriptor Table (IDT) + */ +#define IDT_DE 0U /* #DE: Divide Error */ +#define IDT_DB 1U /* #DB: Debug */ +#define IDT_NMI 2U /* Nonmaskable External Interrupt */ +#define IDT_BP 3U /* #BP: Breakpoint */ +#define IDT_OF 4U /* #OF: Overflow */ +#define IDT_BR 5U /* #BR: Bound Range Exceeded */ +#define IDT_UD 6U /* #UD: Undefined/Invalid Opcode */ +#define IDT_NM 7U /* #NM: No Math Coprocessor */ +#define IDT_DF 8U /* #DF: Double Fault */ +#define IDT_FPUGP 9U /* Coprocessor Segment Overrun */ +#define IDT_TS 10U /* #TS: Invalid TSS */ +#define IDT_NP 11U /* #NP: Segment Not Present */ +#define IDT_SS 12U /* #SS: Stack Segment Fault */ +#define IDT_GP 13U /* #GP: General Protection Fault */ +#define IDT_PF 14U /* #PF: Page Fault */ +#define IDT_MF 16U /* #MF: FPU Floating-Point Error */ +#define IDT_AC 17U /* #AC: Alignment Check */ +#define IDT_MC 18U /* #MC: Machine Check */ +#define IDT_XF 19U /* #XF: SIMD Floating-Point Exception */ +#define IDT_VE 20U /* #VE: Virtualization Exception */ + +/*Bits in EFER special registers */ +#define EFER_LMA 0x00000400U /* Long mode active (R) */ + +#define RFLAGS_C (1U<<0U) +#define RFLAGS_P (1U<<2U) +#define RFLAGS_A (1U<<4U) +#define RFLAGS_Z (1U<<6U) +#define RFLAGS_S (1U<<7U) +#define RFLAGS_O (1U<<11U) +#define RFLAGS_VM (1U<<17U) +#define RFLAGS_AC (1U<<18U) + +/* CPU clock frequencies (FSB) */ +#define CPU_FSB_83KHZ 83200 +#define CPU_FSB_100KHZ 99840 +#define CPU_FSB_133KHZ 133200 +#define CPU_FSB_166KHZ 166400 + +/* Time conversions */ +#define CPU_GHZ_TO_HZ 1000000000 +#define CPU_GHZ_TO_KHZ 1000000 +#define CPU_GHZ_TO_MHZ 1000 +#define CPU_MHZ_TO_HZ 1000000 +#define CPU_MHZ_TO_KHZ 1000 + + +/* Number of GPRs saved / restored for guest in VCPU structure */ +#define NUM_GPRS 16U + +#define XSAVE_STATE_AREA_SIZE 4096U +#define XSAVE_LEGACY_AREA_SIZE 512U +#define XSAVE_HEADER_AREA_SIZE 64U +#define XSAVE_EXTEND_AREA_SIZE (XSAVE_STATE_AREA_SIZE - \ + XSAVE_HEADER_AREA_SIZE - \ + XSAVE_LEGACY_AREA_SIZE) +#define XSAVE_COMPACTED_FORMAT (1UL << 63U) + +#define XSAVE_FPU (1UL << 0U) +#define XSAVE_SSE (1UL << 1U) + +#define CPU_CONTEXT_OFFSET_RAX 0U +#define CPU_CONTEXT_OFFSET_RCX 8U +#define CPU_CONTEXT_OFFSET_RDX 16U +#define CPU_CONTEXT_OFFSET_RBX 24U +#define CPU_CONTEXT_OFFSET_RSP 32U +#define CPU_CONTEXT_OFFSET_RBP 40U +#define CPU_CONTEXT_OFFSET_RSI 48U +#define CPU_CONTEXT_OFFSET_RDI 56U +#define CPU_CONTEXT_OFFSET_R8 64U +#define CPU_CONTEXT_OFFSET_R9 72U +#define CPU_CONTEXT_OFFSET_R10 80U +#define CPU_CONTEXT_OFFSET_R11 88U +#define CPU_CONTEXT_OFFSET_R12 96U +#define CPU_CONTEXT_OFFSET_R13 104U +#define CPU_CONTEXT_OFFSET_R14 112U +#define CPU_CONTEXT_OFFSET_R15 120U +#define CPU_CONTEXT_OFFSET_CR0 128U +#define CPU_CONTEXT_OFFSET_CR2 136U +#define CPU_CONTEXT_OFFSET_CR4 144U +#define CPU_CONTEXT_OFFSET_RIP 152U +#define CPU_CONTEXT_OFFSET_RFLAGS 160U +#define CPU_CONTEXT_OFFSET_IA32_SPEC_CTRL 168U +#define CPU_CONTEXT_OFFSET_IA32_EFER 176U +#define CPU_CONTEXT_OFFSET_EXTCTX_START 184U +#define CPU_CONTEXT_OFFSET_CR3 184U +#define CPU_CONTEXT_OFFSET_IDTR 192U +#define CPU_CONTEXT_OFFSET_LDTR 216U + +#ifndef ASSEMBLER + +#define ALL_CPUS_MASK ((1UL << get_pcpu_nums()) - 1UL) +#define AP_MASK (ALL_CPUS_MASK & ~(1UL << BSP_CPU_ID)) + +/** + * + * Identifiers for architecturally defined registers. + * + * These register names is used in condition statement. + * Within the following groups,register name need to be + * kept in order: + * General register names group (CPU_REG_RAX~CPU_REG_R15); + * Non general register names group (CPU_REG_CR0~CPU_REG_GDTR); + * Segement register names group (CPU_REG_ES~CPU_REG_GS). + */ +enum cpu_reg_name { + /* General purpose register layout should align with + * struct acrn_gp_regs + */ + CPU_REG_RAX, + CPU_REG_RCX, + CPU_REG_RDX, + CPU_REG_RBX, + CPU_REG_RSP, + CPU_REG_RBP, + CPU_REG_RSI, + CPU_REG_RDI, + CPU_REG_R8, + CPU_REG_R9, + CPU_REG_R10, + CPU_REG_R11, + CPU_REG_R12, + CPU_REG_R13, + CPU_REG_R14, + CPU_REG_R15, + + CPU_REG_CR0, + CPU_REG_CR2, + CPU_REG_CR3, + CPU_REG_CR4, + CPU_REG_DR7, + CPU_REG_RIP, + CPU_REG_RFLAGS, + /*CPU_REG_NATURAL_LAST*/ + CPU_REG_EFER, + CPU_REG_PDPTE0, + CPU_REG_PDPTE1, + CPU_REG_PDPTE2, + CPU_REG_PDPTE3, + /*CPU_REG_64BIT_LAST,*/ + CPU_REG_ES, + CPU_REG_CS, + CPU_REG_SS, + CPU_REG_DS, + CPU_REG_FS, + CPU_REG_GS, + CPU_REG_LDTR, + CPU_REG_TR, + CPU_REG_IDTR, + CPU_REG_GDTR + /*CPU_REG_LAST*/ +}; + +/**********************************/ +/* EXTERNAL VARIABLES */ +/**********************************/ + +/* In trampoline range, hold the jump target which trampline will jump to */ +extern uint64_t main_entry[1]; +extern uint64_t secondary_cpu_stack[1]; + +/* + * To support per_cpu access, we use a special struct "per_cpu_region" to hold + * the pattern of per CPU data. And we allocate memory for per CPU data + * according to multiple this struct size and pcpu number. + * + * +-------------------+------------------+---+------------------+ + * | percpu for pcpu0 | percpu for pcpu1 |...| percpu for pcpuX | + * +-------------------+------------------+---+------------------+ + * ^ ^ + * | | + * + * + * To access per cpu data, we use: + * per_cpu_base_ptr + sizeof(struct per_cpu_region) * curr_pcpu_id + * + offset_of_member_per_cpu_region + * to locate the per cpu data. + */ + +/* Boot CPU ID */ +#define BSP_CPU_ID 0U + +/** + *The invalid cpu_id (INVALID_CPU_ID) is error + *code for error handling, this means that + *caller can't find a valid physical cpu + *or virtual cpu. + */ +#define INVALID_CPU_ID 0xffffU +/** + *The broadcast id (BROADCAST_CPU_ID) + *used to notify all valid phyiscal cpu + *or virtual cpu. + */ +#define BROADCAST_CPU_ID 0xfffeU + +struct descriptor_table { + uint16_t limit; + uint64_t base; +} __packed; + +/* CPU states defined */ +enum pcpu_boot_state { + PCPU_STATE_RESET = 0U, + PCPU_STATE_INITIALIZING, + PCPU_STATE_RUNNING, + PCPU_STATE_HALTED, + PCPU_STATE_DEAD, +}; + +#define NEED_OFFLINE (1U) +#define NEED_SHUTDOWN_VM (2U) +void make_pcpu_offline(uint16_t pcpu_id); +bool need_offline(uint16_t pcpu_id); + +struct segment_sel { + uint16_t selector; + uint64_t base; + uint32_t limit; + uint32_t attr; +}; +#else /* ASSEMBLER defined */ + +#endif /* ASSEMBLER defined */ + +#endif /* CPU_H */ diff --git a/src/components/implementation/simple_vmm/multi_vmm/cpu_caps.h b/src/components/implementation/simple_vmm/multi_vmm/cpu_caps.h new file mode 100644 index 0000000000..466a024840 --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/cpu_caps.h @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2018-2022 Intel Corporation. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef CPUINFO_H +#define CPUINFO_H + +#define MAX_PSTATE 20U /* max num of supported Px count */ +#define MAX_CSTATE 8U /* max num of supported Cx count */ +/* We support MAX_CSTATE num of Cx, means have (MAX_CSTATE - 1) Cx entries, + * i.e. supported Cx entry index range from 1 to MAX_CX_ENTRY. + */ +#define MAX_CX_ENTRY (MAX_CSTATE - 1U) + +/* CPUID feature words */ +#define FEAT_1_ECX 0U /* CPUID[1].ECX */ +#define FEAT_1_EDX 1U /* CPUID[1].EDX */ +#define FEAT_7_0_EBX 2U /* CPUID[EAX=7,ECX=0].EBX */ +#define FEAT_7_0_ECX 3U /* CPUID[EAX=7,ECX=0].ECX */ +#define FEAT_7_0_EDX 4U /* CPUID[EAX=7,ECX=0].EDX */ +#define FEAT_8000_0001_ECX 5U /* CPUID[8000_0001].ECX */ +#define FEAT_8000_0001_EDX 6U /* CPUID[8000_0001].EDX */ +#define FEAT_8000_0007_EDX 7U /* CPUID[8000_0007].EDX */ +#define FEAT_8000_0008_EBX 8U /* CPUID[8000_0008].EBX */ +#define FEAT_D_0_EAX 9U /* CPUID[D][0].EAX */ +#define FEAT_D_0_EDX 10U /* CPUID[D][0].EDX */ +#define FEAT_D_1_EAX 11U /* CPUID[D][1].EAX */ +#define FEAT_D_1_ECX 13U /* CPUID[D][1].ECX */ +#define FEAT_D_1_EDX 14U /* CPUID[D][1].EDX */ +#define FEAT_7_2_EDX 15U /* CPUID[EAX=7,ECX=2].EDX */ +#define FEATURE_WORDS 16U + +struct cpuinfo_x86 { + /* SDM 2-2 Vol.4 Table 2-1 uses DisplayFamily_DisplayModel to + * distinguish Processor Families/Processor Number Series. + */ + uint8_t displayfamily, displaymodel; + uint8_t virt_bits; + uint8_t phys_bits; + uint32_t cpuid_level; + uint32_t extended_cpuid_level; + uint64_t physical_address_mask; + uint32_t cpuid_leaves[FEATURE_WORDS]; + char model_name[64]; +}; + +bool has_monitor_cap(void); +bool disable_host_monitor_wait(void); +bool is_apl_platform(void); +bool pcpu_has_cap(uint32_t bit); +bool pcpu_has_vmx_ept_vpid_cap(uint64_t bit_mask); +bool is_apl_platform(void); +bool has_core_cap(uint32_t bit_mask); +bool is_ac_enabled(void); +bool is_gp_enabled(void); +void init_pcpu_capabilities(void); +void init_pcpu_model_name(void); +int32_t detect_hardware_support(void); +struct cpuinfo_x86 *get_pcpu_info(void); + +/* The bits of MSR IA32_CORE_CAPABILITIES */ +#define CORE_CAP_SPLIT_LOCK (1U << 5U) /* support #AC for Split-locked Access */ +#define CORE_CAP_UC_LOCK (1U << 4U) /* support #GP for non-guaranteed-atomic-locked access at Non-WB memory */ + + +#endif /* CPUINFO_H */ diff --git a/src/components/implementation/simple_vmm/multi_vmm/cpuid.h b/src/components/implementation/simple_vmm/multi_vmm/cpuid.h new file mode 100644 index 0000000000..cd6bfa93ad --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/cpuid.h @@ -0,0 +1,186 @@ +/* + * Copyright (C) 2018-2022 Intel Corporation. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* +* cpuid.h +* +* Created on: Jan 4, 2018 +* Author: don +*/ + +#ifndef CPUID_H_ +#define CPUID_H_ + +/* CPUID bit definitions */ +#define CPUID_ECX_SSE3 (1U<<0U) +#define CPUID_ECX_PCLMUL (1U<<1U) +#define CPUID_ECX_DTES64 (1U<<2U) +#define CPUID_ECX_MONITOR (1U<<3U) +#define CPUID_ECX_DS_CPL (1U<<4U) +#define CPUID_ECX_VMX (1U<<5U) +#define CPUID_ECX_SMX (1U<<6U) +#define CPUID_ECX_EST (1U<<7U) +#define CPUID_ECX_TM2 (1U<<8U) +#define CPUID_ECX_SSSE3 (1U<<9U) +#define CPUID_ECX_CID (1U<<10U) +#define CPUID_ECX_SDBG (1U<<11U) +#define CPUID_ECX_FMA (1U<<12U) +#define CPUID_ECX_CX16 (1U<<13U) +#define CPUID_ECX_ETPRD (1U<<14U) +#define CPUID_ECX_PDCM (1U<<15U) +#define CPUID_ECX_DCA (1U<<18U) +#define CPUID_ECX_SSE4_1 (1U<<19U) +#define CPUID_ECX_SSE4_2 (1U<<20U) +#define CPUID_ECX_x2APIC (1U<<21U) +#define CPUID_ECX_MOVBE (1U<<22U) +#define CPUID_ECX_POPCNT (1U<<23U) +#define CPUID_ECX_AES (1U<<25U) +#define CPUID_ECX_XSAVE (1U<<26U) +#define CPUID_ECX_OSXSAVE (1U<<27U) +#define CPUID_ECX_AVX (1U<<28U) +#define CPUID_ECX_HV (1U<<31U) +#define CPUID_ECX_MWAIT (1U<<0U) +#define CPUID_ECX_MWAIT_INT (1U<<1U) +#define CPUID_EDX_FPU (1U<<0U) +#define CPUID_EDX_VME (1U<<1U) +#define CPUID_EDX_DE (1U<<2U) +#define CPUID_EDX_PSE (1U<<3U) +#define CPUID_EDX_TSC (1U<<4U) +#define CPUID_EDX_MSR (1U<<5U) +#define CPUID_EDX_PAE (1U<<6U) +#define CPUID_EDX_MCE (1U<<7U) +#define CPUID_EDX_CX8 (1U<<8U) +#define CPUID_EDX_APIC (1U<<9U) +#define CPUID_EDX_SEP (1U<<11U) +#define CPUID_EDX_MTRR (1U<<12U) +#define CPUID_EDX_PGE (1U<<13U) +#define CPUID_EDX_MCA (1U<<14U) +#define CPUID_EDX_CMOV (1U<<15U) +#define CPUID_EDX_PAT (1U<<16U) +#define CPUID_EDX_PSE36 (1U<<17U) +#define CPUID_EDX_PSN (1U<<18U) +#define CPUID_EDX_CLF (1U<<19U) +#define CPUID_EDX_DTES (1U<<21U) +#define CPUID_EDX_ACPI (1U<<22U) +#define CPUID_EDX_MMX (1U<<23U) +#define CPUID_EDX_FXSR (1U<<24U) +#define CPUID_EDX_SSE (1U<<25U) +#define CPUID_EDX_SSE2 (1U<<26U) +#define CPUID_EDX_SS (1U<<27U) +#define CPUID_EDX_HTT (1U<<28U) +#define CPUID_EDX_TM1 (1U<<29U) +#define CPUID_EDX_IA64 (1U<<30U) +#define CPUID_EDX_PBE (1U<<31U) + +/* CPUID.06H:EAX.DTHERM */ +#define CPUID_EAX_DTHERM (1U<<0U) +/* CPUID.06H:EAX.HWP */ +#define CPUID_EAX_HWP (1U<<7U) +/* CPUID.06H:EAX.HWP_Notification */ +#define CPUID_EAX_HWP_N (1U<<8U) +/* CPUID.06H:EAX.HWP_Activity_Window */ +#define CPUID_EAX_HWP_AW (1U<<9U) +/* CPUID.06H:EAX.HWP_Energy_Performance_Preference */ +#define CPUID_EAX_HWP_EPP (1U<<10U) +/* CPUID.06H:EAX.HWP_Package_Level_Request */ +#define CPUID_EAX_HWP_PLR (1U<<11U) +/* CPUID.06H:ECX.Hardware_Coordination_Feedback_Capability */ +#define CPUID_ECX_HCFC (1U<<0U) +/* CPUID.07H:EBX.FSGSBASE*/ +#define CPUID_EBX_FSGSBASE (1U<<0U) +/* CPUID.07H:EBX.TSC_ADJUST*/ +#define CPUID_EBX_TSC_ADJ (1U<<1U) +/* CPUID.07H:EBX.SGX */ +#define CPUID_EBX_SGX (1U<<2U) +/* CPUID.07H:EBX.SMEP*/ +#define CPUID_EBX_SMEP (1U<<7U) +/* CPUID.07H:EBX.MPX */ +#define CPUID_EBX_MPX (1U<<14U) +/* CPUID.07H:EBX.SMAP*/ +#define CPUID_EBX_SMAP (1U<<20U) +/* CPUID.07H:ECX.UMIP */ +#define CPUID_ECX_UMIP (1U<<2U) +/* CPUID.07H:ECX.PKE */ +#define CPUID_ECX_PKE (1U<<3U) +/* CPUID.07H:ECX.WAITPKG */ +#define CPUID_ECX_WAITPKG (1U<<5U) +/* CPUID.07H:ECX.CET_SS */ +#define CPUID_ECX_CET_SS (1U<<7U) +/* CPUID.07H:ECX.LA57 */ +#define CPUID_ECX_LA57 (1U<<16U) +/* CPUID.07H:ECX.SGX_LC*/ +#define CPUID_ECX_SGX_LC (1U<<30U) +/* CPUID.07H:ECX.PKS*/ +#define CPUID_ECX_PKS (1U<<31U) +/* CPUID.07H:EDX.CET_IBT */ +#define CPUID_EDX_CET_IBT (1U<<20U) +/* CPUID.07H:EDX.IBRS_IBPB*/ +#define CPUID_EDX_IBRS_IBPB (1U<<26U) +/* CPUID.07H:EDX.STIBP*/ +#define CPUID_EDX_STIBP (1U<<27U) +/* CPUID.80000001H:EDX.Page1GB*/ +#define CPUID_EDX_PAGE1GB (1U<<26U) +/* CPUID.07H:EBX.INVPCID*/ +#define CPUID_EBX_INVPCID (1U<<10U) +/* CPUID.07H:EBX.PQM */ +#define CPUID_EBX_PQM (1U<<12U) +/* CPUID.07H:EBX.PQE */ +#define CPUID_EBX_PQE (1U<<15U) +/* CPUID.07H:EBX.INTEL_PROCESSOR_TRACE */ +#define CPUID_EBX_PROC_TRC (1U<<25U) +/* CPUID.01H:ECX.PCID*/ +#define CPUID_ECX_PCID (1U<<17U) +/* CPUID.0DH.EAX.XCR0_BNDREGS */ +#define CPUID_EAX_XCR0_BNDREGS (1U<<3U) +/* CPUID.0DH.EAX.XCR0_BNDCSR */ +#define CPUID_EAX_XCR0_BNDCSR (1U<<4U) +/* CPUID.0DH.ECX.CET_U_STATE */ +#define CPUID_ECX_CET_U_STATE (1U<<11U) +/* CPUID.0DH.ECX.CET_S_STATE */ +#define CPUID_ECX_CET_S_STATE (1U<<12U) +/* CPUID.12H.EAX.SGX1 */ +#define CPUID_EAX_SGX1 (1U<<0U) +/* CPUID.12H.EAX.SGX2 */ +#define CPUID_EAX_SGX2 (1U<<1U) +/* CPUID.19H.EBX.KL_AES_ENABLED */ +#define CPUID_EBX_KL_AES_EN (1U<<0U) +/* CPUID.19H.EBX.KL_BACKUP_MSR */ +#define CPUID_EBX_KL_BACKUP_MSR (1U<<4U) +/* CPUID.19H.ECX.KL_NOBACKUP */ +#define CPUID_ECX_KL_NOBACKUP (1U<<0U) +/* CPUID.19H.ECX.KL_RANDOM_KS */ +#define CPUID_ECX_KL_RANDOM_KS (1U<<1U) +/* CPUID.80000001H.EDX.XD_BIT_AVAILABLE */ +#define CPUID_EDX_XD_BIT_AVIL (1U<<20U) + +/* CPUID source operands */ +#define CPUID_VENDORSTRING 0U +#define CPUID_FEATURES 1U +#define CPUID_TLB 2U +#define CPUID_SERIALNUM 3U +#define CPUID_EXTEND_FEATURE 7U +#define CPUID_XSAVE_FEATURES 0xDU +#define CPUID_RDT_ALLOCATION 0x10U +#define CPUID_MAX_EXTENDED_FUNCTION 0x80000000U +#define CPUID_EXTEND_FUNCTION_1 0x80000001U +#define CPUID_EXTEND_FUNCTION_2 0x80000002U +#define CPUID_EXTEND_FUNCTION_3 0x80000003U +#define CPUID_EXTEND_FUNCTION_4 0x80000004U +#define CPUID_EXTEND_INVA_TSC 0x80000007U +#define CPUID_EXTEND_ADDRESS_SIZE 0x80000008U + +static inline void cpuid_subleaf(uint32_t leaf, uint32_t subleaf, + uint32_t *eax, uint32_t *ebx, + uint32_t *ecx, uint32_t *edx) +{ + /* Execute CPUID instruction and save results */ + asm volatile("cpuid":"=a"(*eax), "=b"(*ebx), + "=c"(*ecx), "=d"(*edx) + : "a" (leaf), "c" (subleaf) + : "memory"); +} + +#endif /* CPUID_H_ */ diff --git a/src/components/implementation/simple_vmm/multi_vmm/devices/serial/serial.c b/src/components/implementation/simple_vmm/multi_vmm/devices/serial/serial.c new file mode 100644 index 0000000000..41044b056d --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/devices/serial/serial.c @@ -0,0 +1,56 @@ +#include "serial.h" + +static u8_t serial_data[0x08]; +static u8_t send_intr_enable = 0; + +void +serial_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu) +{ + assert(port <= SERIAL_PORT_MAX && port >= SERIAL_PORT_MIN); + assert(sz == IO_BYTE); + + if (dir == IO_IN) { + vcpu->shared_region->ax = serial_data[port - SERIAL_PORT_MIN]; + } else if (dir == IO_OUT) { + serial_data[port - SERIAL_PORT_MIN] = (u8_t)vcpu->shared_region->ax; + switch (port) + { + + case SERIAL_PORT1: + printc("%c", (u8_t)vcpu->shared_region->ax); + if (send_intr_enable) { + /* + * TODO: correctly handle serial output(eg: multiple vcpu case) and inject serial interrupt, + * with io apic, 34 is serial8250_interrupt vector. + */ +#if VMX_SUPPORT_POSTED_INTR + vlapic_set_intr(vcpu, 34, 0); +#else + lapic_intr_inject(vcpu, 34, 1); +#endif + serial_data[SERIAL_IIR - SERIAL_PORT_MIN] = 0x2; + serial_data[MODEM_STATUS_REGISTER - SERIAL_PORT_MIN] = 0x20; + serial_data[SERIAL_LSR - SERIAL_PORT_MIN] = 0x60; + } + break; + case SERIAL_IER: + if (0x2 & (u8_t)vcpu->shared_region->ax) { + send_intr_enable = 1; + } else { + send_intr_enable = 0; + } + break; + } + } else { + VM_PANIC(vcpu); + } + + return; +} + +static void __attribute__((constructor)) +init(void) +{ + memset(&serial_data, 0, sizeof(serial_data)); + serial_data[SERIAL_LSR - SERIAL_PORT_MIN] = 0x60; +} diff --git a/src/components/implementation/simple_vmm/multi_vmm/devices/serial/serial.h b/src/components/implementation/simple_vmm/multi_vmm/devices/serial/serial.h new file mode 100644 index 0000000000..46ac88dd1e --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/devices/serial/serial.h @@ -0,0 +1,17 @@ +#pragma once +#include +#include + +/* Reference: https://www.lammertbies.nl/comm/info/serial-uart */ +#define SERIAL_PORT1 0x3F8 +#define SERIAL_IER 0x3F9 +#define SERIAL_IIR 0x3FA +#define SERIAL_LCR 0x3FB +#define SERIAL_MCR 0x3FC +#define SERIAL_LSR 0x3FD +#define MODEM_STATUS_REGISTER 0x3FE + +#define SERIAL_PORT_MIN SERIAL_PORT1 +#define SERIAL_PORT_MAX MODEM_STATUS_REGISTER + +void serial_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu); diff --git a/src/components/implementation/simple_vmm/multi_vmm/devices/vpci/virtio_net_io.c b/src/components/implementation/simple_vmm/multi_vmm/devices/vpci/virtio_net_io.c new file mode 100644 index 0000000000..cab977330b --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/devices/vpci/virtio_net_io.c @@ -0,0 +1,725 @@ +/*- + * Copyright (c) 2011 NetApp, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ +#include +#include +#include +#include "virtio_net_io.h" +#include "vpci.h" +#include "virtio_ring.h" +#include +#include +#include +#include +#include +#include +#include +#include + +/* TODO: remove this warning flag when virtio-net is done */ +#pragma GCC diagnostic ignored "-Wunused-but-set-variable" + +static struct virtio_net_io_reg virtio_net_regs; +static struct virtio_queue virtio_queues[2]; +struct virtio_vq_info virtio_net_vqs[VIRTIO_NET_MAXQ - 1]; + +static unsigned char icmp_reply[] = { + /* TODO: remove icmp reply and process nic input from nic component */ +}; + +static inline int +vq_ring_ready(struct virtio_vq_info *vq) +{ + return ((vq->flags & VQ_ALLOC) == VQ_ALLOC); +} + +static inline int +vq_has_descs(struct virtio_vq_info *vq) +{ + int ret = 0; + if (vq_ring_ready(vq) && vq->last_avail != vq->avail->idx) { + if (unlikely((u16_t)((unsigned int)vq->avail->idx - vq->last_avail) > vq->qsize)) { + printc("no valid descriptor\n"); + assert(0); + } + else + ret = 1; + } + return ret; + +} + +void * +paddr_guest2host(uintptr_t gaddr, struct vmrt_vm_comp *vm) +{ + void *va = GPA2HVA(gaddr, vm); + return va; +} + +#define roundup2(x, y) (((x)+((y)-1))&(~((y)-1))) +#define mb() ({ asm volatile("mfence" ::: "memory"); (void)0; }) + +void +vq_endchains(struct vmrt_vm_vcpu *vcpu, struct virtio_vq_info *vq, int used_all_avail) +{ + u16_t event_idx, new_idx, old_idx; + int intr; + + if (unlikely(!vq || !vq->used)) + return; + + old_idx = vq->save_used; + vq->save_used = new_idx = vq->used->idx; + + intr = new_idx != old_idx && + !(vq->avail->flags & VRING_AVAIL_F_NO_INTERRUPT); + + if (intr) { + virtio_net_regs.header.ISR = 1; + /* TODO: 57 is virtio-net interrupt without io apic, 33 is with io apic */ +#if VMX_SUPPORT_POSTED_INTR + vlapic_set_intr(vcpu, 33, 0); +#else + lapic_intr_inject(vcpu, 33, 0); +#endif + } + +} + +static inline struct iovec * +rx_iov_trim(struct iovec *iov, int *niov, size_t tlen) +{ + struct iovec *riov; + + iov[0].iov_len -= tlen; + + iov[0].iov_base = (void *)((uintptr_t)iov[0].iov_base + tlen); + riov = &iov[0]; + + return riov; +} + +static void +virtio_vq_init(struct vmrt_vm_vcpu *vcpu, int nr_queue, u32_t pfn) +{ + struct virtio_vq_info *vq; + u64_t phys; + size_t size; + char *vb; + + vq = &virtio_net_vqs[nr_queue]; + vq->pfn = pfn; + phys = (u64_t)pfn << VRING_PAGE_BITS; + size = vring_size(vq->qsize, VIRTIO_PCI_VRING_ALIGN); + vb = paddr_guest2host(phys, vcpu->vm); + if (!vb) + goto error; + + /* First page(s) are descriptors... */ + vq->desc = (struct vring_desc *)vb; + vb += vq->qsize * sizeof(struct vring_desc); + + /* ... immediately followed by "avail" ring (entirely u16_t's) */ + vq->avail = (struct vring_avail *)vb; + vb += (2 + vq->qsize + 1) * sizeof(u16_t); + + /* Then it's rounded up to the next page... */ + vb = (char *)roundup2((uintptr_t)vb, VIRTIO_PCI_VRING_ALIGN); + + /* ... and the last page(s) are the used ring. */ + vq->used = (struct vring_used *)vb; + + /* Start at 0 when we use it. */ + vq->last_avail = 0; + vq->save_used = 0; + + /* Mark queue as allocated after initialization is complete. */ + mb(); + vq->flags = VQ_ALLOC; + vq->vcpu = vcpu; + + return; + +error: + vq->flags = 0; + printc("%s: vq enable failed\n", __func__); + assert(0); +} + +static inline int +_vq_record(int i, volatile struct vring_desc *vd, + struct iovec *iov, int n_iov, u16_t *flags, struct vmrt_vm_vcpu *vcpu) { + + void *host_addr; + + if (i >= n_iov) { + printc("Number of descs is more than iov slots\n"); + assert(0); + } + + host_addr = paddr_guest2host(vd->addr, vcpu->vm); + if (unlikely(!host_addr)) { + printc("Invalid host addr\n"); + assert(0); + } + iov[i].iov_base = host_addr; + iov[i].iov_len = vd->len; + if (unlikely(flags != NULL)) + flags[i] = vd->flags; + + return 0; +} + +static void +dump_packet(char *p, u16_t sz) +{ + for (int i = 0; i < sz; i++) { + if (i > 0 && (i % 8 == 0)) printc("\n"); + u8_t c = p[i]; + printc("%02x ", c); + } + printc("\n"); +} + +int +vq_getchain(struct vmrt_vm_vcpu *vcpu, struct virtio_vq_info *vq, u16_t *pidx, + struct iovec *iov, int n_iov, u16_t *flags) +{ + int i; + unsigned int ndesc, n_indir; + unsigned int idx, next; + + volatile struct vring_desc *vdir, *vindir, *vp; + /* + * Note: it's the responsibility of the guest not to + * update vq->avail->idx until all of the descriptors + * the guest has written are valid (including all their + * next fields and vd_flags). + * + * Compute (last_avail - idx) in integers mod 2**16. This is + * the number of descriptors the device has made available + * since the last time we updated vq->last_avail. + * + * We just need to do the subtraction as an unsigned int, + * then trim off excess bits. + */ + idx = vq->last_avail; + ndesc = (u16_t)((unsigned int)vq->avail->idx - idx); + if (unlikely(ndesc == 0)) + return 0; + if (unlikely(ndesc > vq->qsize)) { + printc("ndesc (%u) out of range, driver confused?\r\n", + (unsigned int)ndesc); + assert(0); + } + + /* + * Now count/parse "involved" descriptors starting from + * the head of the chain. + * + * To prevent loops, we could be more complicated and + * check whether we're re-visiting a previously visited + * index, but we just abort if the count gets excessive. + */ + *pidx = next = vq->avail->ring[idx & (vq->qsize - 1)]; + vq->last_avail++; + for (i = 0; i < VQ_MAX_DESCRIPTORS; next = vdir->next) { + if (next >= vq->qsize) { + printc("tx: descriptor index %u out of range, " + "driver confused?\r\n", + next); + assert(0); + } + vdir = &vq->desc[next]; + if (likely((vdir->flags & VRING_DESC_F_INDIRECT) == 0)) { + if (unlikely(_vq_record(i, vdir, iov, n_iov, flags, vcpu))) { + printc("mapping to host failed\r\n"); + assert(0); + } + i++; + } else { + printc("descriptor has forbidden INDIRECT flag, " + "driver confused?\r\n"); + assert(0); + } + if ((vdir->flags & VRING_DESC_F_NEXT) == 0) + return i; + } + + /* code should not come here */ + printc("descriptor loop? count > %d - driver confused?\r\n", i); + assert(0); + return -1; +} + +void +vq_relchain(struct virtio_vq_info *vq, u16_t idx, u32_t iolen) +{ + u16_t uidx, mask; + volatile struct vring_used *vuh; + volatile struct vring_used_elem *vue; + + /* + * Notes: + * - mask is N-1 where N is a power of 2 so computes x % N + * - vuh points to the "used" data shared with guest + * - vue points to the "used" ring entry we want to update + * - head is the same value we compute in vq_iovecs(). + * + * (I apologize for the two fields named idx; the + * virtio spec calls the one that vue points to, "id"...) + */ + mask = vq->qsize - 1; + vuh = vq->used; + + uidx = vuh->idx; + vue = &vuh->ring[uidx++ & mask]; + vue->id = idx; + vue->len = iolen; + vuh->idx = uidx; +} + +void +vq_retchain(struct virtio_vq_info *vq) +{ + vq->last_avail--; +} + +void +virtio_net_rcv_one_pkt(void *data, int pkt_len) +{ + struct iovec iov[VIRTIO_NET_MAXSEGS], *riov; + struct virtio_vq_info *vq; + struct vmrt_vm_vcpu *vcpu; + void *vrx; + int n; + u16_t idx; + int ret; + + vq = &virtio_net_vqs[VIRTIO_NET_RXQ]; + + vcpu = vq->vcpu; + + if (unlikely(!vq_has_descs(vq))) { + return; + } + + n = vq_getchain(vcpu, vq, &idx, iov, VIRTIO_NET_MAXSEGS, NULL); + + // if (unlikely (n < 1 || n >= VIRTIO_NET_MAXSEGS )) { + // printc("vtnet: virtio_net_tap_rx: vq_getchain = %d\n", n); + // assert(0); + // } + + vrx = iov[0].iov_base; + /* every packet needs to be proceeded by a virtio_net_rxhdr header space */ + riov = rx_iov_trim(iov, &n, sizeof(struct virtio_net_rxhdr)); + + // assert(iov[0].iov_len >= (size_t)pkt_len); + + // memcpy(iov[0].iov_base, data, pkt_len); + memcpy_fast(iov[0].iov_base, data, pkt_len); + + memset(vrx, 0, sizeof(struct virtio_net_rxhdr)); + + vq_relchain(vq, idx, pkt_len + sizeof(struct virtio_net_rxhdr)); + + vq_endchains(vcpu, vq, 1); + return; +} + +void +virtio_net_send_one_pkt(void *data, u16_t *pkt_len) +{ + struct virtio_vq_info *vq = &virtio_net_vqs[VIRTIO_NET_TXQ]; + struct iovec iov[VIRTIO_NET_MAXSEGS]; + struct vmrt_vm_vcpu *vcpu; + int i, n; + int plen, tlen; + u16_t idx; + + while (!vq_has_descs(vq)) { + *pkt_len = 0; + return; + // sched_thd_block(0); + } + vcpu = vq->vcpu; + + memset(&iov, 0, sizeof(iov)); + n = vq_getchain(vcpu, vq, &idx, iov, VIRTIO_NET_MAXSEGS, NULL); + if (unlikely(n < 1 || n >= VIRTIO_NET_MAXSEGS)) { + printc("vtnet: virtio_net_proctx: vq_getchain = %d\n", n); + assert(0); + } + + plen = 0; + tlen = iov[0].iov_len; + assert(n == 2); + + plen += iov[1].iov_len; + tlen += iov[1].iov_len; + + // memcpy(data, iov[1].iov_base, iov[1].iov_len); + memcpy_fast(data, iov[1].iov_base, iov[1].iov_len); + + *pkt_len = plen; + vq_relchain(vq, idx, tlen); + + vq_endchains(vcpu, vq, 1); + return; +} + +static void +virtio_net_outb(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + u8_t val = vcpu->shared_region->ax; + + switch (port_id) + { + case VIRTIO_NET_DEV_STATUS: + virtio_net_regs.header.dev_status = val; + break; + default: + VM_PANIC(vcpu); + break; + } + return; +} + +#define REAL_NIC 0 + +#if REAL_NIC +static u8_t virtio_net_mac[6] = {0x6c, 0xfe, 0x54, 0x40, 0x41, 0x01}; +#else +static u8_t virtio_net_mac[6] = {0x10, 0x10, 0x10, 0x10, 0x10, 0x13}; +#endif + +static void +virtio_net_inb(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + u32_t bdf = 0; + + switch (port_id) + { + case VIRTIO_NET_DEV_STATUS: + vcpu->shared_region->ax = virtio_net_regs.header.dev_status; + break; + case VIRTIO_NET_ISR: + vcpu->shared_region->ax = virtio_net_regs.header.ISR; + virtio_net_regs.header.ISR = 0; + break; + case VIRTIO_NET_STATUS: + vcpu->shared_region->ax = virtio_net_regs.config_reg.status; + break; + case VIRTIO_NET_STATUS_H: + vcpu->shared_region->ax = virtio_net_regs.config_reg.status >> 8; + break; + /* TODO: read mac address from virtio-net config space */ + case VIRTIO_NET_MAC: + vcpu->shared_region->ax = virtio_net_mac[0]; + break; + case VIRTIO_NET_MAC1: + vcpu->shared_region->ax = virtio_net_mac[1]; + break; + case VIRTIO_NET_MAC2: + vcpu->shared_region->ax = virtio_net_mac[2]; + break; + case VIRTIO_NET_MAC3: + vcpu->shared_region->ax = virtio_net_mac[3]; + break; + case VIRTIO_NET_MAC4: + vcpu->shared_region->ax = virtio_net_mac[4]; + break; + case VIRTIO_NET_MAC5: + vcpu->shared_region->ax = virtio_net_mac[5]; + break; + default: + VM_PANIC(vcpu); + break; + } +} + +static void +virtio_net_inw(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + switch (port_id) + { + case VIRTIO_NET_QUEUE_SIZE: + vcpu->shared_region->ax = virtio_queues[virtio_net_regs.header.queue_select].queue_sz; + break; + case VIRTIO_NET_QUEUE_SELECT: + vcpu->shared_region->ax = virtio_net_regs.header.queue_select; + break; + case VIRTIO_NET_QUEUE_NOTIFY: + VM_PANIC(vcpu); + vcpu->shared_region->ax = virtio_net_regs.header.queue_notify; + break; + default: + VM_PANIC(vcpu); + break; + } +} + +static void +virtio_net_outw(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + u16_t val = vcpu->shared_region->ax; + + switch (port_id) + { + case VIRTIO_NET_QUEUE_SELECT: + virtio_net_regs.header.queue_select = val; + break; + case VIRTIO_NET_QUEUE_NOTIFY: + if (val == VIRTIO_NET_TXQ) { + // sched_thd_yield(); + // sched_thd_wakeup(11); + } + virtio_net_regs.header.queue_notify = val; + break; + default: + VM_PANIC(vcpu); + break; + } +} + +static void +virtio_net_outl(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + u32_t val = vcpu->shared_region->ax; + u64_t tmp = val; + + switch (port_id) + { + case VIRTIO_NET_GUEST_FEATURES: + virtio_net_regs.header.guest_features = val; + break; + case VIRTIO_NET_QUEUE_ADDR: + virtio_queues[virtio_net_regs.header.queue_select].queue = (void *)tmp; + virtio_vq_init(vcpu, virtio_net_regs.header.queue_select, val); + break; + default: + VM_PANIC(vcpu); + break; + } + return; +} + +static void +virtio_net_inl(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + switch (port_id) + { + case VIRTIO_NET_DEV_FEATURES: + vcpu->shared_region->ax = virtio_net_regs.header.dev_features; + break; + case VIRTIO_NET_GUEST_FEATURES: + vcpu->shared_region->ax = virtio_net_regs.header.guest_features; + break; + case VIRTIO_NET_QUEUE_ADDR: + vcpu->shared_region->ax = virtio_net_regs.header.queue_addr; + break; + default: + VM_PANIC(vcpu); + break; + } +} + +void +virtio_net_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu) +{ + if (dir == IO_IN) { + switch (sz) + { + case IO_BYTE: + virtio_net_inb(port, vcpu); + break; + case IO_WORD: + virtio_net_inw(port, vcpu); + break; + case IO_LONG: + virtio_net_inl(port, vcpu); + break; + default: + VM_PANIC(vcpu); + } + } else { + switch (sz) + { + case IO_BYTE: + virtio_net_outb(port, vcpu); + break; + case IO_WORD: + virtio_net_outw(port, vcpu); + break; + case IO_LONG: + virtio_net_outl(port, vcpu); + break; + default: + VM_PANIC(vcpu); + } + } +} + +void +virtio_net_io_init(void) +{ + memset(&virtio_net_regs, 0, sizeof(virtio_net_regs)); + memset(&virtio_queues, 0, sizeof(virtio_queues)); + memset(&virtio_net_vqs, 0, sizeof(virtio_net_vqs)); + + virtio_net_regs.header.dev_features |= (1 << VIRTIO_NET_F_STATUS); + virtio_net_regs.header.dev_features |= (1 << VIRTIO_NET_F_MAC); + virtio_net_regs.config_reg.status = VIRTIO_NET_S_LINK_UP; + virtio_queues[0].queue_sz = VQ_MAX_DESCRIPTORS; + virtio_queues[1].queue_sz = VQ_MAX_DESCRIPTORS; + virtio_net_vqs[VIRTIO_NET_RX].qsize = VQ_MAX_DESCRIPTORS; + virtio_net_vqs[VIRTIO_NET_TX].qsize = VQ_MAX_DESCRIPTORS; +} + +struct tcp_udp_port +{ + u16_t src_port; + u16_t dst_port; +} __attribute__((packed)); + +void +virtio_tx_task(void *data) +{ + struct virtio_vq_info *vq; + struct iovec iov[VIRTIO_NET_MAXSEGS]; + struct vmrt_vm_vcpu *vcpu; + int i, n; + int plen, tlen; + u16_t idx; + char *pkt; + struct netshmem_pkt_buf *tx_obj; + shm_bm_objid_t tx_pktid; + struct nf_pkt_meta_data buf; + + struct nf_session *session = NULL; + shm_bm_t tx_shmemd = 0; + u16_t svc_id = 0; + + struct iphdr *iphdr = NULL; + struct tcp_udp_port *port; + + vq = &virtio_net_vqs[VIRTIO_NET_TXQ]; + while (1) { + while (!vq_has_descs(vq)) { + shm_bm_objid_t first_objid; + struct netshmem_pkt_buf *first_obj; + struct netshmem_pkt_pri *first_obj_pri; + struct netshmem_meta_tuple *pkt_arr; + u8_t batch_ct; + + session = get_nf_session(0); + tx_shmemd = session->tx_shmemd; + + while (nf_tx_ring_buf_dequeue(&session->nf_tx_ring_buf, &buf)) { + batch_ct = 0; + first_obj = buf.obj; + first_objid = buf.objid; + first_obj_pri = netshmem_get_pri(first_obj); + pkt_arr = (struct netshmem_meta_tuple *)&first_obj_pri->pkt_arr; + first_obj_pri->batch_len = 0; + + pkt_arr[batch_ct].obj_id = buf.objid; + pkt_arr[batch_ct].pkt_len = buf.pkt_len; + batch_ct++; + while (batch_ct < 32 && nf_tx_ring_buf_dequeue(&session->nf_tx_ring_buf, &buf)) { + pkt_arr[batch_ct].obj_id = buf.objid; + pkt_arr[batch_ct].pkt_len = buf.pkt_len; + batch_ct++; + } + first_obj_pri->batch_len = batch_ct; + // printc("nic send in tx:%d, %u\n", batch_ct, cos_thdid()); + nic_send_packet_batch(first_objid); + } + + sched_thd_yield(); + } + + vcpu = vq->vcpu; + + memset(&iov, 0, sizeof(iov)); + + n = vq_getchain(vcpu, vq, &idx, iov, VIRTIO_NET_MAXSEGS, NULL); + if (unlikely(n < 1 || n >= VIRTIO_NET_MAXSEGS)) { + printc("vtnet: virtio_net_proctx: vq_getchain = %d\n", n); + assert(0); + } + + plen = 0; + tlen = iov[0].iov_len; + assert(n == 2); + + plen += iov[1].iov_len; + tlen += iov[1].iov_len; + + pkt = iov[1].iov_base; + + iphdr = (struct iphdr *) (pkt + ETH_HLEN); + port = (struct tcp_udp_port *)((char *)pkt + ETH_HLEN + iphdr->ihl * 4); + u16_t svc_id = ntohs(port->dst_port); + + session = get_nf_session(svc_id); + + tx_shmemd = session->tx_shmemd; + if (unlikely(!tx_shmemd)) { + svc_id = 0; + session = get_nf_session(svc_id); + tx_shmemd = session->tx_shmemd; + } + + // printc("tx shmemd:%p, %d\n", tx_shmemd, svc_id); + tx_obj = shm_bm_alloc_net_pkt_buf(tx_shmemd, &tx_pktid); + // printc("tx shmemd:%p, tx_obj:%p\n", tx_shmemd, tx_obj); + + if (likely(tx_obj != NULL)){ + buf.objid = tx_pktid; + buf.pkt_len = plen; + buf.obj = tx_obj; + + // memcpy(netshmem_get_data_buf(tx_obj), pkt, plen); + memcpy_fast(netshmem_get_data_buf(tx_obj), pkt, plen); + + if ((unlikely(!nf_tx_ring_buf_enqueue(&(session->nf_tx_ring_buf), &buf)))){ + shm_bm_free_net_pkt_buf(tx_obj); + } else { + // sched_thd_wakeup(session->tx_thd); + // sync_sem_give(&session->tx_sem); + } + } else { + printc("cannot allocate objects\n"); + assert(0); + } + + vq_relchain(vq, idx, tlen); + vq_endchains(vcpu, vq, 1); + } +} diff --git a/src/components/implementation/simple_vmm/multi_vmm/devices/vpci/virtio_net_io.h b/src/components/implementation/simple_vmm/multi_vmm/devices/vpci/virtio_net_io.h new file mode 100644 index 0000000000..ba50bb2b77 --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/devices/vpci/virtio_net_io.h @@ -0,0 +1,144 @@ +#pragma once + +#include +#include + +#define VIRTIO_NET_IO_ADDR 0x4000 + +#define VIRTIO_NET_DEV_FEATURES (VIRTIO_NET_IO_ADDR + 0) +#define VIRTIO_NET_GUEST_FEATURES (VIRTIO_NET_IO_ADDR + 4) +#define VIRTIO_NET_QUEUE_ADDR (VIRTIO_NET_IO_ADDR + 8) +#define VIRTIO_NET_QUEUE_SIZE (VIRTIO_NET_IO_ADDR + 12) +#define VIRTIO_NET_QUEUE_SELECT (VIRTIO_NET_IO_ADDR + 14) +#define VIRTIO_NET_QUEUE_NOTIFY (VIRTIO_NET_IO_ADDR + 16) +#define VIRTIO_NET_DEV_STATUS (VIRTIO_NET_IO_ADDR + 18) +#define VIRTIO_NET_ISR (VIRTIO_NET_IO_ADDR + 19) + +#define VIRTIO_NET_MAC (VIRTIO_NET_IO_ADDR + 20) +#define VIRTIO_NET_MAC1 (VIRTIO_NET_IO_ADDR + 21) +#define VIRTIO_NET_MAC2 (VIRTIO_NET_IO_ADDR + 22) +#define VIRTIO_NET_MAC3 (VIRTIO_NET_IO_ADDR + 23) +#define VIRTIO_NET_MAC4 (VIRTIO_NET_IO_ADDR + 24) +#define VIRTIO_NET_MAC5 (VIRTIO_NET_IO_ADDR + 25) + +#define VIRTIO_NET_STATUS (VIRTIO_NET_IO_ADDR + 26) +#define VIRTIO_NET_STATUS_H (VIRTIO_NET_IO_ADDR + 27) + +#define VIRTIO_NET_F_CSUM (0) +#define VIRTIO_NET_F_GUEST_CSUM (1) +#define VIRTIO_NET_F_MAC (5) +#define VIRTIO_NET_F_GSO (6) +#define VIRTIO_NET_F_GUEST_TSO4 (7) +#define VIRTIO_NET_F_GUEST_TSO6 (8) +#define VIRTIO_NET_F_GUEST_ECN (9) +#define VIRTIO_NET_F_GUEST_UFO (10) +#define VIRTIO_NET_F_HOST_TSO4 (11) +#define VIRTIO_NET_F_HOST_TSO6 (12) +#define VIRTIO_NET_F_HOST_ECN (13) +#define VIRTIO_NET_F_HOST_UFO (14) +#define VIRTIO_NET_F_MRG_RXBUF (15) +#define VIRTIO_NET_F_STATUS (16) +#define VIRTIO_NET_F_CTRL_VQ (17) +#define VIRTIO_NET_F_CTRL_RX (18) +#define VIRTIO_NET_F_CTRL_VLAN (19) +#define VIRTIO_NET_F_GUEST_ANNOUNCE (21) + +#define VIRTIO_NET_RINGSZ 512 +#define VIRTIO_NET_MAXSEGS 32 +#define VQ_MAX_DESCRIPTORS 512 + +struct virtio_header { + u32_t dev_features; + u32_t guest_features; + u32_t queue_addr; + u16_t queue_size; + u16_t queue_select; + u16_t queue_notify; + u8_t dev_status; + u8_t ISR; +} __attribute__((packed)); + +struct virtio_queue { + u16_t queue_sz; + void *queue; +}; + +#define VIRTIO_NET_S_LINK_UP 1 +#define VIRTIO_NET_S_ANNOUNCE 2 + +#define VIRTIO_NET_RX 0 +#define VIRTIO_NET_TX 1 + +#define VIRTIO_NET_RXQ 0 +#define VIRTIO_NET_TXQ 1 +#define VIRTIO_NET_CTLQ 2 + +#define VIRTIO_NET_MAXQ 3 + +#define VRING_PAGE_BITS 12 +#define VIRTIO_PCI_VRING_ALIGN 4096 + +#define VQ_ALLOC 0x01 /* set once we have a pfn */ +#define VQ_BROKED 0x02 + +struct virtio_net_config { + u8_t mac[6]; + u16_t status; +} __attribute__((packed)); + +struct virtio_net_io_reg { + struct virtio_header header; + struct virtio_net_config config_reg; +} __attribute__((packed)); + +// struct iovec +// { +// void *iov_base; /* Pointer to data. */ +// size_t iov_len; /* Length of data. */ +// }; + +struct virtio_vq_info { + u16_t qsize; /* size of this queue (a power of 2) */ + void (*notify)(void *, struct virtio_vq_info *); + /* called instead of notify, if not NULL */ + + u16_t num; /* the num'th queue in the virtio_base */ + + u16_t flags; /* flags (see above) */ + u16_t last_avail; /* a recent value of avail->idx */ + u16_t save_used; /* saved used->idx; see vq_endchains */ + u16_t msix_idx; /* MSI-X index, or VIRTIO_MSI_NO_VECTOR */ + + u32_t pfn; /* PFN of virt queue (not shifted!) */ + + volatile struct vring_desc *desc; + /* descriptor array */ + volatile struct vring_avail *avail; + /* the "avail" ring */ + volatile struct vring_used *used; + /* the "used" ring */ + + u32_t gpa_desc[2]; /* gpa of descriptors */ + u32_t gpa_avail[2]; /* gpa of avail_ring */ + u32_t gpa_used[2]; /* gpa of used_ring */ + int enabled; /* whether the virtqueue is enabled */ + + /* each vq is bounded to a vcpu */ + struct vmrt_vm_vcpu *vcpu; +}; + +/* + * Fixed network header size + */ +struct virtio_net_rxhdr { + u8_t vrh_flags; + u8_t vrh_gso_type; + u16_t vrh_hdr_len; + u16_t vrh_gso_size; + u16_t vrh_csum_start; + u16_t vrh_csum_offset; +} __attribute__((packed)); + +void virtio_net_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu); +void virtio_net_rcv_one_pkt(void *data, int pkt_len); +void virtio_net_send_one_pkt(void *data, u16_t *pkt_len); diff --git a/src/components/implementation/simple_vmm/multi_vmm/devices/vpci/virtio_net_vpci.c b/src/components/implementation/simple_vmm/multi_vmm/devices/vpci/virtio_net_vpci.c new file mode 100644 index 0000000000..c1c8846def --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/devices/vpci/virtio_net_vpci.c @@ -0,0 +1,51 @@ +#include "vpci.h" + +#define VIRTIO_VENDOR_ID 0x1AF4 +#define VIRTIO_NETWORK_DEV_ID 0x1000 +#define VIRTIO_CLASS_NETWORK 0x02 +#define VIRTIO_TYPE_NET 1 + +struct vpci_config_type0 virtio_net_dev = { + .header.vendor_id = VIRTIO_VENDOR_ID, + .header.device_id = VIRTIO_NETWORK_DEV_ID, + .header.command = 0, + .header.status = 0, + .header.revision_id = 0, + .header.prog_if = 0, + .header.subclass = 0, + .header.class_code = VIRTIO_CLASS_NETWORK, + .header.cache_line_sz = 0, + .header.latency_timer = 0, + .header.header_type = PCI_HDR_TYPE_DEV, + .header.BIST = 0, + + /* Legacy virtio-net only uses bar 0, and it should be a IO bar, no capability is supported */ + .bars[0].io_bar.fixed_bit = 1, + .bars[0].io_bar.reserved = 0, + .bars[0].io_bar.base_addr = 0x1000, + + + .bars[1].raw_data = 0, + .bars[2].raw_data = 0, + .bars[3].raw_data = 0, + .bars[4].raw_data = 0, + .bars[5].raw_data = 0, + + .cardbus_cis_pointer = 0, + .subsystem_vendor_id = VIRTIO_VENDOR_ID, + .subsystem_id = VIRTIO_TYPE_NET, + .exp_rom_base = 0, + .cap_pointer = 0, + .reserved = 0, + .interrupt_line = 0, + .interrupt_pin = 0, + .min_grant = 0, + .max_lentency = 0 +}; + +void +virtio_net_dev_init(void){ + vpci_regist((struct vpci_config_space *)&virtio_net_dev, sizeof(virtio_net_dev)); + extern void virtio_net_io_init(void); + virtio_net_io_init(); +} diff --git a/src/components/implementation/simple_vmm/multi_vmm/devices/vpci/virtio_ring.h b/src/components/implementation/simple_vmm/multi_vmm/devices/vpci/virtio_ring.h new file mode 100644 index 0000000000..f03125851b --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/devices/vpci/virtio_ring.h @@ -0,0 +1,260 @@ +#ifndef _LINUX_VIRTIO_RING_H +#define _LINUX_VIRTIO_RING_H +/* An interface for efficient virtio implementation, currently for use by KVM, + * but hopefully others soon. Do NOT change this since it will + * break existing servers and clients. + * + * This header is BSD licensed so anyone can use the definitions to implement + * compatible drivers/servers. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of IBM nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * Copyright Rusty Russell IBM Corporation 2007. */ + +typedef unsigned short int __virtio16; +typedef unsigned int __virtio32; +typedef unsigned long long __virtio64; + +typedef short int __le16; +typedef short int __be16; +typedef unsigned int __le32; +typedef unsigned int __be32; +typedef unsigned long long __le64; +typedef unsigned long long __be64; + +typedef char __s8; +typedef unsigned char __u8; + +typedef short __s16; +typedef unsigned short __u16; + +typedef int __s32; +typedef unsigned int __u32; + +typedef unsigned long int uintptr_t; + +/* This marks a buffer as continuing via the next field. */ +#define VRING_DESC_F_NEXT 1 +/* This marks a buffer as write-only (otherwise read-only). */ +#define VRING_DESC_F_WRITE 2 +/* This means the buffer contains a list of buffer descriptors. */ +#define VRING_DESC_F_INDIRECT 4 + +/* + * Mark a descriptor as available or used in packed ring. + * Notice: they are defined as shifts instead of shifted values. + */ +#define VRING_PACKED_DESC_F_AVAIL 7 +#define VRING_PACKED_DESC_F_USED 15 + +/* The Host uses this in used->flags to advise the Guest: don't kick me when + * you add a buffer. It's unreliable, so it's simply an optimization. Guest + * will still kick if it's out of buffers. */ +#define VRING_USED_F_NO_NOTIFY 1 +/* The Guest uses this in avail->flags to advise the Host: don't interrupt me + * when you consume a buffer. It's unreliable, so it's simply an + * optimization. */ +#define VRING_AVAIL_F_NO_INTERRUPT 1 + +/* Enable events in packed ring. */ +#define VRING_PACKED_EVENT_FLAG_ENABLE 0x0 +/* Disable events in packed ring. */ +#define VRING_PACKED_EVENT_FLAG_DISABLE 0x1 +/* + * Enable events for a specific descriptor in packed ring. + * (as specified by Descriptor Ring Change Event Offset/Wrap Counter). + * Only valid if VIRTIO_RING_F_EVENT_IDX has been negotiated. + */ +#define VRING_PACKED_EVENT_FLAG_DESC 0x2 + +/* + * Wrap counter bit shift in event suppression structure + * of packed ring. + */ +#define VRING_PACKED_EVENT_F_WRAP_CTR 15 + +/* We support indirect buffer descriptors */ +#define VIRTIO_RING_F_INDIRECT_DESC 28 + +/* The Guest publishes the used index for which it expects an interrupt + * at the end of the avail ring. Host should ignore the avail->flags field. */ +/* The Host publishes the avail index for which it expects a kick + * at the end of the used ring. Guest should ignore the used->flags field. */ +#define VIRTIO_RING_F_EVENT_IDX 29 + +/* Alignment requirements for vring elements. + * When using pre-virtio 1.0 layout, these fall out naturally. + */ +#define VRING_AVAIL_ALIGN_SIZE 2 +#define VRING_USED_ALIGN_SIZE 4 +#define VRING_DESC_ALIGN_SIZE 16 + +/* Virtio ring descriptors: 16 bytes. These can chain together via "next". */ +struct vring_desc { + /* Address (guest-physical). */ + __virtio64 addr; + /* Length. */ + __virtio32 len; + /* The flags as indicated above. */ + __virtio16 flags; + /* We chain unused descriptors via this, too */ + __virtio16 next; +}; + +struct vring_avail { + __virtio16 flags; + __virtio16 idx; + __virtio16 ring[]; +}; + +/* u32 is used here for ids for padding reasons. */ +struct vring_used_elem { + /* Index of start of used descriptor chain. */ + __virtio32 id; + /* Total length of the descriptor chain which was used (written to) */ + __virtio32 len; +}; + +typedef struct vring_used_elem __attribute__((aligned(VRING_USED_ALIGN_SIZE))) + vring_used_elem_t; + +struct vring_used { + __virtio16 flags; + __virtio16 idx; + vring_used_elem_t ring[]; +}; + +/* + * The ring element addresses are passed between components with different + * alignments assumptions. Thus, we might need to decrease the compiler-selected + * alignment, and so must use a typedef to make sure the aligned attribute + * actually takes hold: + * + * https://gcc.gnu.org/onlinedocs//gcc/Common-Type-Attributes.html#Common-Type-Attributes + * + * When used on a struct, or struct member, the aligned attribute can only + * increase the alignment; in order to decrease it, the packed attribute must + * be specified as well. When used as part of a typedef, the aligned attribute + * can both increase and decrease alignment, and specifying the packed + * attribute generates a warning. + */ +typedef struct vring_desc __attribute__((aligned(VRING_DESC_ALIGN_SIZE))) + vring_desc_t; +typedef struct vring_avail __attribute__((aligned(VRING_AVAIL_ALIGN_SIZE))) + vring_avail_t; +typedef struct vring_used __attribute__((aligned(VRING_USED_ALIGN_SIZE))) + vring_used_t; + +struct vring { + unsigned int num; + + vring_desc_t *desc; + + vring_avail_t *avail; + + vring_used_t *used; +}; + +#ifndef VIRTIO_RING_NO_LEGACY + +/* The standard layout for the ring is a continuous chunk of memory which looks + * like this. We assume num is a power of 2. + * + * struct vring + * { + * // The actual descriptors (16 bytes each) + * struct vring_desc desc[num]; + * + * // A ring of available descriptor heads with free-running index. + * __virtio16 avail_flags; + * __virtio16 avail_idx; + * __virtio16 available[num]; + * __virtio16 used_event_idx; + * + * // Padding to the next align boundary. + * char pad[]; + * + * // A ring of used descriptor heads with free-running index. + * __virtio16 used_flags; + * __virtio16 used_idx; + * struct vring_used_elem used[num]; + * __virtio16 avail_event_idx; + * }; + */ +/* We publish the used event index at the end of the available ring, and vice + * versa. They are at the end for backwards compatibility. */ +#define vring_used_event(vr) ((vr)->avail->ring[(vr)->num]) +#define vring_avail_event(vr) (*(__virtio16 *)&(vr)->used->ring[(vr)->num]) + +static __inline__ void vring_init(struct vring *vr, unsigned int num, void *p, + unsigned long align) +{ + vr->num = num; + vr->desc = p; + vr->avail = (struct vring_avail *)((char *)p + num * sizeof(struct vring_desc)); + vr->used = (void *)(((uintptr_t)&vr->avail->ring[num] + sizeof(__virtio16) + + align-1) & ~(align - 1)); +} + +static __inline__ unsigned vring_size(unsigned int num, unsigned long align) +{ + return ((sizeof(struct vring_desc) * num + sizeof(__virtio16) * (3 + num) + + align - 1) & ~(align - 1)) + + sizeof(__virtio16) * 3 + sizeof(struct vring_used_elem) * num; +} + +#endif /* VIRTIO_RING_NO_LEGACY */ + +/* The following is used with USED_EVENT_IDX and AVAIL_EVENT_IDX */ +/* Assuming a given event_idx value from the other side, if + * we have just incremented index from old to new_idx, + * should we trigger an event? */ +static __inline__ int vring_need_event(__u16 event_idx, __u16 new_idx, __u16 old) +{ + /* Note: Xen has similar logic for notification hold-off + * in include/xen/interface/io/ring.h with req_event and req_prod + * corresponding to event_idx + 1 and new_idx respectively. + * Note also that req_event and req_prod in Xen start at 1, + * event indexes in virtio start at 0. */ + return (__u16)(new_idx - event_idx - 1) < (__u16)(new_idx - old); +} + +struct vring_packed_desc_event { + /* Descriptor Ring Change Event Offset/Wrap Counter. */ + __le16 off_wrap; + /* Descriptor Ring Change Event Flags. */ + __le16 flags; +}; + +struct vring_packed_desc { + /* Buffer Address. */ + __le64 addr; + /* Buffer Length. */ + __le32 len; + /* Buffer ID. */ + __le16 id; + /* The flags depending on descriptor type. */ + __le16 flags; +}; +#endif /* _LINUX_VIRTIO_RING_H */ diff --git a/src/components/implementation/simple_vmm/multi_vmm/devices/vpci/vpci.c b/src/components/implementation/simple_vmm/multi_vmm/devices/vpci/vpci.c new file mode 100644 index 0000000000..e1571dc17b --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/devices/vpci/vpci.c @@ -0,0 +1,316 @@ +#include +#include +#include "vpci.h" + +/* Only two are supported: one bridge pci and one virtio-net pci */ +#define MAX_VPCI_NUM 2 + +#define PCI_HOST_BRIDGE_VENDOR 0x8086 +#define PCI_HOST_BRIDGE_DEV 0x29C0 +#define PCI_CLASS_BRIDGE 0x06 +#define PCI_SUBCLASS_BRIDGE_HOST 0x00 + +struct vpci_config_space vpci_devs[MAX_VPCI_NUM]; +static u8_t free_dev = 0; + +struct vpci_config_type1 vpci_host_bridge = { + .header.vendor_id = PCI_HOST_BRIDGE_VENDOR, + .header.device_id = PCI_HOST_BRIDGE_DEV, + .header.command = 0, + .header.status = 0, + .header.revision_id = 0, + .header.prog_if = 0, + .header.subclass = PCI_SUBCLASS_BRIDGE_HOST, + .header.class_code = PCI_CLASS_BRIDGE, + .header.cache_line_sz = 0, + .header.latency_timer = 0, + .header.header_type = PCI_HDR_TYPE_BRIDGE, + .header.BIST = 0, + + .bars[0].raw_data = 0, + .bars[1].raw_data = 0, + + .primary_bus_number = 0, + .secondary_bus_number = 0, + .subordinate_bus_number = 0, + .secondary_latency_timer = 0, + .io_base = 0, + .io_limit = 0, + .secondary_status = 0, + .memory_base = 0, + .memory_limit = 0, + .prefetchable_memory_base = 0, + .prefetchable_memory_limit = 0, + .prefetchable_base_upper_32_bits = 0, + .prefetchable_limit_upper_32_bits = 0, + .io_base_upper_16_bits = 0, + .io_limit_upper_16_bits = 0, + .capability_pointer = 0, + .reserved = 0, + .expansion_rom_base_address = 0, + .interrupt_line = 0, + .interrupt_pin = 0, + .bridge_control = 0 +}; + +void +vpci_regist(struct vpci_config_space *vpci, u32_t sz) +{ + memcpy(&vpci_devs[free_dev++], vpci, sz); +} + +void +set_vpci_comm_hdr(u8_t* raw_data, u8_t reg, u32_t val) +{ + switch (reg) + { + /* TODO: implement necessary pci write emulations */ + case OFFSET_COMMAND: + break; + case OFFSET_CACHE_LINE_SZ: + break; + case OFFSET_LATENCY_TIMER: + break; + case OFFSET_STATUS: + /* Linux writes 0xFFFF to clear errors, thus ignore it */ + break; + default: + printc("trying to write RO reg:0x%x, val:0x%x", reg, val); + assert(0); + } +} + +void +set_vpci_bar(u8_t* raw_data, u8_t reg, u32_t val) +{ + u32_t bar0; + + switch (reg) + { + case OFFSET_BAR0: + bar0 = *(u32_t *)raw_data; + if (bar0 & 0x1) { /* IO bar */ + /* mask all bits that should not be writable */ + val = val & 0xFFFFC000; + val |= 0x1; + *(u32_t *)raw_data = val; + } else { /* Mem bar */ + /* Currently don't support IO bar */ + printc("no vpci bar\n"); + assert(0); + } + + break; + /* Currently only support one bar, other bars are ignored */ + case OFFSET_BAR1: + break; + case OFFSET_BAR2: + break; + case OFFSET_BAR3: + break; + case OFFSET_BAR4: + break; + case OFFSET_BAR5: + break; + default: + printc("trying to write RO reg:0x%x, val:0x%x", reg, val); + assert(0); + } +} + +void +set_vpci_host_bridge_reg(u8_t *raw_data, u8_t reg, u32_t val, u8_t sz) +{ + if (reg < OFFSET_BAR0) { + set_vpci_comm_hdr(raw_data, reg, val); + return; + } + + if (reg < OFFSET_PRIMARY_BUS_NUM) { + /* transparent bridge, ignore the write */ + return; + } + + switch (reg) + { + case OFFSET_PRIMARY_BUS_NUM: + *raw_data = (u8_t) val; + break; + case OFFSET_SECONDARY_BUS_NUMBER: + *raw_data = (u8_t) val; + break; + case OFFSET_SUBORDINATE_BUS_NUMBER: + *raw_data = (u8_t) val; + break; + case OFFSET_SECONDARY_LATENCY_TIMER: + /* Currently ignore this */ + break; + case OFFSET_IO_BASE: + /* this bridge won't support IO base */ + break; + case OFFSET_IO_LIMIT: + /* this bridge won't support IO base */ + assert(0); + break; + case OFFSET_SECONDARY_STATUS: + assert(0); + break; + case OFFSET_MEMORY_BASE: + /* Currently ignore this */ + break; + case OFFSET_MEMORY_LIMIT: + assert(0); + break; + case OFFSET_PREFETCHABLE_MEMORY_BASE: + /* Currently ignore this */ + break; + case OFFSET_PREFETCHABLE_MEMORY_LIMIT: + printc("trying to write RO reg:0x%x, val:0x%x", reg, val); + assert(0); + break; + case OFFSET_PREFETCHABLE_BASE_UPPER_32_BITS: + /* Currently ignore this */ + break; + case OFFSET_PREFETCHABLE_LIMIT_UPPER_32_BITS: + /* Currently ignore this */ + break; + case OFFSET_IO_BASE_UPPER_16_BITS: + /* Currently ignore this */ + break; + case OFFSET_IO_LIMIT_UPPER_16_BITS: + assert(0); + break; + case OFFSET_CAPABILITY_POINTER: + assert(0); + break; + case OFFSET_EXPANSION_ROM_BASE_ADDRESS: + /* Ingore this, we don't support EXP ROM */ + break; + case OFFSET_INTERRUPT_LINE: + assert(0); + break; + case OFFSET_INTERRUPT_PIN: + assert(0); + break; + case OFFSET_BRIDGE_CONTROL: + /* Currently ignore this */ + break; + default: + assert(0); + } +} + +void +set_vpci_dev_reg(u8_t* raw_data, u8_t reg, u32_t val, u8_t sz) +{ + if (reg < OFFSET_BAR0) { + set_vpci_comm_hdr(raw_data, reg, val); + return; + } + + if (reg < OFFSET_CARDBUS_CIS_POINTER) { + set_vpci_bar(raw_data, reg, val); + return; + } + switch (reg) + { + case OFFSET_CARDBUS_CIS_POINTER: + assert(0); + break; + case OFFSET_SUBSYSTEM_VENDOR_ID: + assert(0); + break; + case OFFSET_SUBSYSTEM_ID: + assert(0); + break; + case OFFSET_EXP_ROM_BASE: + /* Currently ignore this */ + break; + case OFFSET_CAP_POINTER: + assert(0); + break; + case OFFSET_RESERVED: + assert(0); + break; + case OFFSET_INTERRUPT_LINE: + assert(0); + break; + case OFFSET_INTERRUPT_PIN: + assert(0); + break; + case OFFSET_MIN_GRANT: + assert(0); + break; + case OFFSET_MAX_LENTENCY: + assert(0); + break; + default: + assert(0); + } +} + +void +set_vpci_reg(u32_t bdf, u32_t val, u8_t idx, u8_t sz) +{ + struct vpci_bdf vbdf; + u8_t index; + struct vpci_config_space *vpci; + u8_t *raw_data; + u8_t reg; + + assert(idx < 4 && sz > 0 && sz < 4); + + memcpy(&vbdf, &bdf, sizeof(vbdf)); + + index = vbdf.bus_num + vbdf.dev_num; + if (vbdf.bus_num > 0 || vbdf.dev_num > 1) return; + + vpci = &vpci_devs[index]; + + raw_data = (u8_t *)(vpci) + vbdf.reg_offset; + + raw_data += idx; + reg = vbdf.reg_offset + idx; + + switch (index) + { + case 0: + /* Process host bridge */ + set_vpci_host_bridge_reg(raw_data, reg, val, sz); + break; + + case 1: + /* Process with device */ + set_vpci_dev_reg(raw_data, reg, val, sz); + break; + default: + assert(0); + } +} + +u32_t +get_vpci_reg(u32_t bdf) +{ + struct vpci_bdf vbdf; + struct vpci_config_space *vpci; + u8_t index; + + memcpy(&vbdf, &bdf, sizeof(vbdf)); + index = vbdf.bus_num + vbdf.dev_num; + + if (vbdf.bus_num > 0 || vbdf.dev_num > 1) return 0XFFFFFFFF; + + vpci = &vpci_devs[index]; + + return *(u32_t *)((char *)(vpci) + vbdf.reg_offset); +} + +extern void virtio_net_dev_init(void); + +static void __attribute__((constructor)) +init(void) +{ + memset(&vpci_devs, 0, sizeof(vpci_devs)); + vpci_regist((struct vpci_config_space *)&vpci_host_bridge, sizeof(vpci_host_bridge)); + virtio_net_dev_init(); +} diff --git a/src/components/implementation/simple_vmm/multi_vmm/devices/vpci/vpci.h b/src/components/implementation/simple_vmm/multi_vmm/devices/vpci/vpci.h new file mode 100644 index 0000000000..6bfcdf004b --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/devices/vpci/vpci.h @@ -0,0 +1,180 @@ +#pragma once + +#include +#include + +#define VPCI_CONFIG_ADDRESS 0xCF8 +#define VPCI_CONFIG_DATA0 0xCFC +#define VPCI_CONFIG_DATA1 0xCFD +#define VPCI_CONFIG_DATA2 0xCFE +#define VPCI_CONFIG_DATA3 0xCFF +#define VPCI_MECHANISM_CONTROL_REG 0xCFB + +#define VPCI_MAX_CONFIG_SPACE_SZ 256 + +#define OFFSET_VENDOR_ID 0x00 +#define OFFSET_DEVICE_ID 0x02 +#define OFFSET_COMMAND 0x04 +#define OFFSET_STATUS 0x06 +#define OFFSET_REVISION_ID 0x08 +#define OFFSET_PROG_IF 0x09 +#define OFFSET_SUBCLASS 0x0A +#define OFFSET_CLASS_CODE 0x0B +#define OFFSET_CACHE_LINE_SZ 0x0C +#define OFFSET_LATENCY_TIMER 0x0D +#define OFFSET_HEADER 0x0E +#define OFFSET_BIST 0x0F + +#define OFFSET_BAR0 0x10 +#define OFFSET_BAR1 0x14 +#define OFFSET_BAR2 0x18 +#define OFFSET_BAR3 0x1C +#define OFFSET_BAR4 0x20 +#define OFFSET_BAR5 0x24 + +#define OFFSET_PRIMARY_BUS_NUM 0x18 +#define OFFSET_SECONDARY_BUS_NUMBER 0x19 +#define OFFSET_SUBORDINATE_BUS_NUMBER 0x1A +#define OFFSET_SECONDARY_LATENCY_TIMER 0x1B +#define OFFSET_IO_BASE 0x1C +#define OFFSET_IO_LIMIT 0x1D +#define OFFSET_SECONDARY_STATUS 0x1E +#define OFFSET_MEMORY_BASE 0x20 +#define OFFSET_MEMORY_LIMIT 0x22 +#define OFFSET_PREFETCHABLE_MEMORY_BASE 0x24 +#define OFFSET_PREFETCHABLE_MEMORY_LIMIT 0x26 +#define OFFSET_PREFETCHABLE_BASE_UPPER_32_BITS 0x28 +#define OFFSET_PREFETCHABLE_LIMIT_UPPER_32_BITS 0x2C +#define OFFSET_IO_BASE_UPPER_16_BITS 0x30 +#define OFFSET_IO_LIMIT_UPPER_16_BITS 0x32 +#define OFFSET_CAPABILITY_POINTER 0x34 +#define OFFSET_EXPANSION_ROM_BASE_ADDRESS 0x38 +#define OFFSET_INTERRUPT_LINE 0x3C +#define OFFSET_INTERRUPT_PIN 0x3D +#define OFFSET_BRIDGE_CONTROL 0x3E + +#define OFFSET_CARDBUS_CIS_POINTER 0x28 +#define OFFSET_SUBSYSTEM_VENDOR_ID 0x2C +#define OFFSET_SUBSYSTEM_ID 0x2E +#define OFFSET_EXP_ROM_BASE 0x30 +#define OFFSET_CAP_POINTER 0x34 +#define OFFSET_RESERVED 0x38 +#define OFFSET_MIN_GRANT 0x3E +#define OFFSET_MAX_LENTENCY 0x3F + +#define PCI_HDR_TYPE_BRIDGE 0x01 +#define PCI_HDR_TYPE_DEV 0x00 + +struct vpci_common_header { + u16_t vendor_id; + u16_t device_id; + u16_t command; + u16_t status; + u8_t revision_id; + u8_t prog_if; + u8_t subclass; + u8_t class_code; + u8_t cache_line_sz; + u8_t latency_timer; + + union + { + u8_t header_type:7; + u8_t MF:1; + u8_t header; + }; + + union + { + u8_t completion_code:4; + u8_t reserved:2; + u8_t Start_BIST:1; + u8_t BIST_capable:1; + u8_t BIST; + }; +} __attribute__((packed)); + +struct mem_bar { + u32_t fixed_bit:1; + u32_t type:2; + u32_t prefetchable:1; + /* Needs to be 16-byte aligned */ + u32_t base_addr:28; +} __attribute__((packed)); + +struct io_bar { + u32_t fixed_bit:1; + u32_t reserved:1; + /* Needs to be 4-byte aligned */ + u32_t base_addr:30; +} __attribute__((packed)); + +struct vpci_bar { + union + { + u32_t raw_data; + struct mem_bar mem_bar; + struct io_bar io_bar; + }; +} __attribute__((packed)); + +#define PCI_TYPE0_BAR_NUM 6 +#define PCI_TYPE1_BAR_NUM 2 + +struct vpci_config_type0 { + struct vpci_common_header header; + struct vpci_bar bars[PCI_TYPE0_BAR_NUM]; + u32_t cardbus_cis_pointer; + u16_t subsystem_vendor_id; + u16_t subsystem_id; + u32_t exp_rom_base; + u32_t cap_pointer; + u32_t reserved; + u8_t interrupt_line; + u8_t interrupt_pin; + u8_t min_grant; + u8_t max_lentency; +} __attribute__((packed)); + +struct vpci_config_type1 { + struct vpci_common_header header; + struct vpci_bar bars[PCI_TYPE1_BAR_NUM]; + u8_t primary_bus_number; + u8_t secondary_bus_number; + u8_t subordinate_bus_number; + u8_t secondary_latency_timer; + u8_t io_base; + u8_t io_limit; + u16_t secondary_status; + u16_t memory_base; + u16_t memory_limit; + u16_t prefetchable_memory_base; + u16_t prefetchable_memory_limit; + u32_t prefetchable_base_upper_32_bits; + u32_t prefetchable_limit_upper_32_bits; + u16_t io_base_upper_16_bits; + u16_t io_limit_upper_16_bits; + u32_t capability_pointer:8; + u32_t reserved:24; + u32_t expansion_rom_base_address; + u8_t interrupt_line; + u8_t interrupt_pin; + u16_t bridge_control; +} __attribute__((packed)); + +struct vpci_config_space { + struct vpci_common_header header; + char data[VPCI_MAX_CONFIG_SPACE_SZ - sizeof(struct vpci_common_header)]; +} __attribute__((packed)); + +struct vpci_bdf { + u8_t reg_offset; + u8_t func_num:3; + u8_t dev_num:5; + u8_t bus_num; + u8_t resverd:7; + u8_t enable_bit:1; +}; + +void vpci_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu); +void vpci_regist(struct vpci_config_space *vpci, u32_t sz); diff --git a/src/components/implementation/simple_vmm/multi_vmm/devices/vpci/vpci_io.c b/src/components/implementation/simple_vmm/multi_vmm/devices/vpci/vpci_io.c new file mode 100644 index 0000000000..98667e1999 --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/devices/vpci/vpci_io.c @@ -0,0 +1,191 @@ +#include +#include +#include +#include "vpci.h" + +static u32_t curr_bdf = 0; + +extern u32_t get_vpci_reg(u32_t bdf); +extern void set_vpci_reg(u32_t bdf, u32_t val, u8_t idx, u8_t sz); + +static void +vpci_outb(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + u8_t val = vcpu->shared_region->ax; + + switch (port_id) + { + case VPCI_MECHANISM_CONTROL_REG: + /* This is the register to configure the PCI access mecanism, we only support type 1 which is commonly used */ + assert(val == 0x1); + break; + case VPCI_CONFIG_DATA0: + set_vpci_reg(curr_bdf, val, 0, 1); + break; + case VPCI_CONFIG_DATA1: + set_vpci_reg(curr_bdf, val, 1, 1); + break; + case VPCI_CONFIG_DATA2: + set_vpci_reg(curr_bdf, val, 2, 1); + break; + case VPCI_CONFIG_DATA3: + set_vpci_reg(curr_bdf, val, 3, 1); + break; + default: + VM_PANIC(vcpu); + break; + } + return; +} + +static void +vpci_inb(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + u32_t bdf = 0; + + switch (port_id) + { + case VPCI_MECHANISM_CONTROL_REG: + vcpu->shared_region->ax = 1; + break; + case VPCI_CONFIG_DATA0: + bdf = get_vpci_reg(curr_bdf); + vcpu->shared_region->ax = (u8_t)bdf; + break; + case VPCI_CONFIG_DATA1: + bdf = get_vpci_reg(curr_bdf); + vcpu->shared_region->ax = (u8_t)(bdf >> 8); + break; + case VPCI_CONFIG_DATA2: + bdf = get_vpci_reg(curr_bdf); + vcpu->shared_region->ax = (u8_t)(bdf >> 16); + break; + case VPCI_CONFIG_DATA3: + bdf = get_vpci_reg(curr_bdf); + vcpu->shared_region->ax = (u8_t)(bdf >> 24); + break; + default: + VM_PANIC(vcpu); + break; + } + + return; +} + +static void +vpci_inw(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + u32_t bdf = 0; + + switch (port_id) + { + case VPCI_CONFIG_DATA0: + bdf = get_vpci_reg(curr_bdf); + vcpu->shared_region->ax = (u16_t)bdf; + break; + case VPCI_CONFIG_DATA2: + bdf = get_vpci_reg(curr_bdf); + vcpu->shared_region->ax = (u16_t)(bdf>>16); + break; + default: + VM_PANIC(vcpu); + break; + } + + return; +} + +static void +vpci_outw(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + u16_t val = vcpu->shared_region->ax; + + switch (port_id) + { + case VPCI_CONFIG_DATA0: + set_vpci_reg(curr_bdf, val, 0, 2); + break; + case VPCI_CONFIG_DATA2: + set_vpci_reg(curr_bdf, val, 2, 2); + break; + default: + VM_PANIC(vcpu); + break; + } + + return; +} + +static void +vpci_outl(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + u32_t val = vcpu->shared_region->ax; + + switch (port_id) + { + case VPCI_CONFIG_ADDRESS: + curr_bdf = val; + break; + case VPCI_CONFIG_DATA0: + set_vpci_reg(curr_bdf, val, 0, 3); + break; + default: + VM_PANIC(vcpu); + break; + } + return; +} + +static u32_t +vpci_inl(u32_t port_id, struct vmrt_vm_vcpu *vcpu) +{ + switch (port_id) + { + case VPCI_CONFIG_DATA0: + vcpu->shared_region->ax = get_vpci_reg(curr_bdf); + break; + case VPCI_CONFIG_ADDRESS: + vcpu->shared_region->ax = curr_bdf; + break; + default: + VM_PANIC(vcpu); + break; + } + return 0; +} + +void +vpci_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu) +{ + if (dir == IO_IN) { + switch (sz) + { + case IO_BYTE: + vpci_inb(port, vcpu); + break; + case IO_WORD: + vpci_inw(port, vcpu); + break; + case IO_LONG: + vpci_inl(port, vcpu); + break; + default: + VM_PANIC(vcpu); + } + } else { + switch (sz) + { + case IO_BYTE: + vpci_outb(port, vcpu); + break; + case IO_WORD: + vpci_outw(port, vcpu); + break; + case IO_LONG: + vpci_outl(port, vcpu); + break; + default: + VM_PANIC(vcpu); + } + } +} diff --git a/src/components/implementation/simple_vmm/multi_vmm/devices/vpic/vpic.c b/src/components/implementation/simple_vmm/multi_vmm/devices/vpic/vpic.c new file mode 100644 index 0000000000..f80471d528 --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/devices/vpic/vpic.c @@ -0,0 +1,109 @@ +#include +#include +#include +#include "vpic.h" + +/* TODO: implement necessary functions needed by VM */ +struct chip_8259 { + u8_t master_cmd; + u8_t master_data; + u8_t is_master_init; + u8_t master_offset; + + u8_t slave_cmd; + u8_t slave_data; + u8_t is_slave_init; + u8_t slave_offset; + + u8_t interrupt_pending; +}; + +static struct chip_8259 chip; + +static u8_t pic_elcr1 = 0, pic_elcr2 = 0; + +void +vpic_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu) +{ + assert(sz == IO_BYTE); + if (dir == IO_IN) { + switch (port) + { + case PIC_MASTER_DATA_PORT: + vcpu->shared_region->ax = chip.master_data; + break; + case PIC_SLAVE_DATA_PORT: + vcpu->shared_region->ax = chip.slave_data; + break; + case PIC_MASTER_CMD_PORT: + vcpu->shared_region->ax = chip.master_cmd; + break; + case PIC_SLAVE_CMD_PORT: + vcpu->shared_region->ax = chip.slave_cmd; + break; + case PIC_ELCR1: + vcpu->shared_region->ax = pic_elcr1; + break; + case PIC_ELCR2: + vcpu->shared_region->ax = pic_elcr2; + break; + default: + printc("vpic_handler: port: 0x%x, dir: %d\n", port, dir); + VM_PANIC(vcpu); + break; + } + } else { + u8_t val = vcpu->shared_region->ax; + switch (port) + { + case PIC_MASTER_CMD_PORT: + chip.master_cmd = val; + if (chip.master_cmd & ICW1_INIT) { + chip.is_master_init = 1; + } + if (chip.master_cmd == PIC_EOI) { + chip.interrupt_pending = 0; + } + break; + case PIC_MASTER_DATA_PORT: + chip.master_data = val; + if (chip.is_master_init) { + chip.master_offset = chip.master_data; + chip.is_master_init = 0; + } + break; + case PIC_SLAVE_CMD_PORT: + chip.slave_cmd = val; + if (chip.slave_cmd & ICW1_INIT) { + chip.is_slave_init = 1; + } + if (chip.slave_cmd == PIC_EOI) { + chip.interrupt_pending = 0; + } + break; + case PIC_SLAVE_DATA_PORT: + chip.slave_data = val; + if (chip.is_slave_init) { + chip.slave_offset = chip.slave_data; + chip.is_slave_init = 0; + } + break; + case PIC_ELCR1: + pic_elcr1 = val; + break; + case PIC_ELCR2: + pic_elcr2 = val; + break; + default: + assert(0); + break; + } + + } +} + +static void __attribute__((constructor)) +init(void) +{ + memset(&chip, 0, sizeof(chip)); +} diff --git a/src/components/implementation/simple_vmm/multi_vmm/devices/vpic/vpic.h b/src/components/implementation/simple_vmm/multi_vmm/devices/vpic/vpic.h new file mode 100644 index 0000000000..a7001a6b52 --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/devices/vpic/vpic.h @@ -0,0 +1,24 @@ +#pragma once + +#define PIC_MASTER_CMD_PORT 0x20 +#define PIC_MASTER_DATA_PORT 0x21 +#define PIC_SLAVE_CMD_PORT 0XA0 +#define PIC_SLAVE_DATA_PORT 0XA1 + +#define ICW1_ICW4 0x01 +#define ICW1_SINGLE 0x02 +#define ICW1_INTERVAL4 0x04 +#define ICW1_LEVEL 0x08 +#define ICW1_INIT 0x10 + +#define ICW4_8086 0x01 +#define ICW4_AUTO 0x02 +#define ICW4_BUF_SLAVE 0x08 +#define ICW4_BUF_MASTER 0x0C +#define ICW4_SFNM 0x10 + +#define PIC_EOI 0x20 +#define PIC_ELCR1 0x4d0 +#define PIC_ELCR2 0x4d1 + +void vpic_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu); diff --git a/src/components/implementation/simple_vmm/multi_vmm/devices/vps2/vps2.c b/src/components/implementation/simple_vmm/multi_vmm/devices/vps2/vps2.c new file mode 100644 index 0000000000..52eb9895b5 --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/devices/vps2/vps2.c @@ -0,0 +1,47 @@ +#include +#include +#include +#include "vps2.h" + +static u8_t ps2_porta_data[0x0F]; +static u8_t ps2_portb_data[0x0F]; + +void +ps2_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu) +{ + assert(port == PS2_CONTROL_PORT_A || port == PS2_CONTROL_PORT_B); + assert(sz == IO_BYTE); + + if (dir == IO_IN) { + switch (port) + { + case PS2_CONTROL_PORT_A: + vcpu->shared_region->ax = ps2_porta_data[port - 0x90]; + break; + default: + VM_PANIC(vcpu); + break; + } + } else if (dir == IO_OUT) { + switch (port) + { + case PS2_CONTROL_PORT_A: + ps2_porta_data[port - 0x90] = (u8_t)vcpu->shared_region->ax; + break; + default: + VM_PANIC(vcpu); + break; + } + } else { + VM_PANIC(vcpu); + } + + return; +} + +static void __attribute__((constructor)) +init(void) +{ + memset(&ps2_porta_data, 0, sizeof(ps2_porta_data)); + memset(&ps2_portb_data, 0, sizeof(ps2_portb_data)); +} diff --git a/src/components/implementation/simple_vmm/multi_vmm/devices/vps2/vps2.h b/src/components/implementation/simple_vmm/multi_vmm/devices/vps2/vps2.h new file mode 100644 index 0000000000..971009a319 --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/devices/vps2/vps2.h @@ -0,0 +1,6 @@ +#pragma once + +/* PS/2 system control port A (port B is at 0061) */ +#define PS2_CONTROL_PORT_A 0x92 +#define PS2_CONTROL_PORT_B 0x61 +void ps2_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu); diff --git a/src/components/implementation/simple_vmm/multi_vmm/devices/vrtc/vrtc.c b/src/components/implementation/simple_vmm/multi_vmm/devices/vrtc/vrtc.c new file mode 100644 index 0000000000..c971cef94e --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/devices/vrtc/vrtc.c @@ -0,0 +1,58 @@ +#include +#include +#include +#include "vrtc.h" + +/* NOTE: this is just to emulate those data indexed by the CMOS data adress, the functionality of rtc is not fully implemented */ +static u8_t rtc_data_address[0x1A]; +static u8_t curr_data_addr; + +void +vrtc_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu) +{ + assert(sz == IO_BYTE); + if (dir == IO_IN) { + switch (port) + { + case CMOS_CMD_PORT: + assert(0); + break;; + case CMOS_DATA_PORT: + vcpu->shared_region->ax = rtc_data_address[curr_data_addr]; + break; + default: + assert(0); + break; + } + } else { + u8_t val = vcpu->shared_region->ax; + switch (port) + { + case CMOS_CMD_PORT: + if (val & 0x80) { + printc("NMI disabled\n"); + } else { + printc("NMI enabled\n"); + } + curr_data_addr = val & 0x7f; + if (curr_data_addr == 0x0f) { + printc("shutdown status byte is set now\n"); + } else { + /* NOTE: do nothing and don't include full functionality */ + } + break; + case CMOS_DATA_PORT: + break; + default: + assert(0); + break; + } + + } +} + +static void __attribute__((constructor)) +init(void) +{ + memset(&rtc_data_address, 0, sizeof(rtc_data_address)); +} diff --git a/src/components/implementation/simple_vmm/multi_vmm/devices/vrtc/vrtc.h b/src/components/implementation/simple_vmm/multi_vmm/devices/vrtc/vrtc.h new file mode 100644 index 0000000000..78074feba9 --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/devices/vrtc/vrtc.h @@ -0,0 +1,7 @@ +#pragma once + +#define CMOS_CMD_PORT 0x70 +#define CMOS_DATA_PORT 0x71 + +void +vrtc_handler(u16_t port, int dir, int sz, struct vmrt_vm_vcpu *vcpu); diff --git a/src/components/implementation/simple_vmm/multi_vmm/fast_memcpy.h b/src/components/implementation/simple_vmm/multi_vmm/fast_memcpy.h new file mode 100644 index 0000000000..ddd282d4ba --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/fast_memcpy.h @@ -0,0 +1,689 @@ +//===================================================================== +// +// FastMemcpy.c - skywind3000@163.com, 2015 +// +// feature: +// 50% speed up in avg. vs standard memcpy (tested in vc2012/gcc5.1) +// +//===================================================================== +#ifndef __FAST_MEMCPY_H__ +#define __FAST_MEMCPY_H__ + +#include +#include +#include + + +//--------------------------------------------------------------------- +// force inline for compilers +//--------------------------------------------------------------------- +#ifndef INLINE +#ifdef __GNUC__ +#if (__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1)) + #define INLINE __inline__ __attribute__((always_inline)) +#else + #define INLINE __inline__ +#endif +#elif defined(_MSC_VER) + #define INLINE __forceinline +#elif (defined(__BORLANDC__) || defined(__WATCOMC__)) + #define INLINE __inline +#else + #define INLINE +#endif +#endif + + + +//--------------------------------------------------------------------- +// fast copy for different sizes +//--------------------------------------------------------------------- +static INLINE void memcpy_sse2_16(void *dst, const void *src) { + __m128i m0 = _mm_loadu_si128(((const __m128i*)src) + 0); + _mm_storeu_si128(((__m128i*)dst) + 0, m0); +} + +static INLINE void memcpy_sse2_32(void *dst, const void *src) { + __m128i m0 = _mm_loadu_si128(((const __m128i*)src) + 0); + __m128i m1 = _mm_loadu_si128(((const __m128i*)src) + 1); + _mm_storeu_si128(((__m128i*)dst) + 0, m0); + _mm_storeu_si128(((__m128i*)dst) + 1, m1); +} + +static INLINE void memcpy_sse2_64(void *dst, const void *src) { + __m128i m0 = _mm_loadu_si128(((const __m128i*)src) + 0); + __m128i m1 = _mm_loadu_si128(((const __m128i*)src) + 1); + __m128i m2 = _mm_loadu_si128(((const __m128i*)src) + 2); + __m128i m3 = _mm_loadu_si128(((const __m128i*)src) + 3); + _mm_storeu_si128(((__m128i*)dst) + 0, m0); + _mm_storeu_si128(((__m128i*)dst) + 1, m1); + _mm_storeu_si128(((__m128i*)dst) + 2, m2); + _mm_storeu_si128(((__m128i*)dst) + 3, m3); +} + +static INLINE void memcpy_sse2_128(void *dst, const void *src) { + __m128i m0 = _mm_loadu_si128(((const __m128i*)src) + 0); + __m128i m1 = _mm_loadu_si128(((const __m128i*)src) + 1); + __m128i m2 = _mm_loadu_si128(((const __m128i*)src) + 2); + __m128i m3 = _mm_loadu_si128(((const __m128i*)src) + 3); + __m128i m4 = _mm_loadu_si128(((const __m128i*)src) + 4); + __m128i m5 = _mm_loadu_si128(((const __m128i*)src) + 5); + __m128i m6 = _mm_loadu_si128(((const __m128i*)src) + 6); + __m128i m7 = _mm_loadu_si128(((const __m128i*)src) + 7); + _mm_storeu_si128(((__m128i*)dst) + 0, m0); + _mm_storeu_si128(((__m128i*)dst) + 1, m1); + _mm_storeu_si128(((__m128i*)dst) + 2, m2); + _mm_storeu_si128(((__m128i*)dst) + 3, m3); + _mm_storeu_si128(((__m128i*)dst) + 4, m4); + _mm_storeu_si128(((__m128i*)dst) + 5, m5); + _mm_storeu_si128(((__m128i*)dst) + 6, m6); + _mm_storeu_si128(((__m128i*)dst) + 7, m7); +} + + +//--------------------------------------------------------------------- +// tiny memory copy with jump table optimized +//--------------------------------------------------------------------- +static INLINE void *memcpy_tiny(void *dst, const void *src, size_t size) { + unsigned char *dd = ((unsigned char*)dst) + size; + const unsigned char *ss = ((const unsigned char*)src) + size; + + switch (size) { + case 64: + memcpy_sse2_64(dd - 64, ss - 64); + case 0: + break; + + case 65: + memcpy_sse2_64(dd - 65, ss - 65); + case 1: + dd[-1] = ss[-1]; + break; + + case 66: + memcpy_sse2_64(dd - 66, ss - 66); + case 2: + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 67: + memcpy_sse2_64(dd - 67, ss - 67); + case 3: + *((uint16_t*)(dd - 3)) = *((uint16_t*)(ss - 3)); + dd[-1] = ss[-1]; + break; + + case 68: + memcpy_sse2_64(dd - 68, ss - 68); + case 4: + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 69: + memcpy_sse2_64(dd - 69, ss - 69); + case 5: + *((uint32_t*)(dd - 5)) = *((uint32_t*)(ss - 5)); + dd[-1] = ss[-1]; + break; + + case 70: + memcpy_sse2_64(dd - 70, ss - 70); + case 6: + *((uint32_t*)(dd - 6)) = *((uint32_t*)(ss - 6)); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 71: + memcpy_sse2_64(dd - 71, ss - 71); + case 7: + *((uint32_t*)(dd - 7)) = *((uint32_t*)(ss - 7)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 72: + memcpy_sse2_64(dd - 72, ss - 72); + case 8: + *((uint64_t*)(dd - 8)) = *((uint64_t*)(ss - 8)); + break; + + case 73: + memcpy_sse2_64(dd - 73, ss - 73); + case 9: + *((uint64_t*)(dd - 9)) = *((uint64_t*)(ss - 9)); + dd[-1] = ss[-1]; + break; + + case 74: + memcpy_sse2_64(dd - 74, ss - 74); + case 10: + *((uint64_t*)(dd - 10)) = *((uint64_t*)(ss - 10)); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 75: + memcpy_sse2_64(dd - 75, ss - 75); + case 11: + *((uint64_t*)(dd - 11)) = *((uint64_t*)(ss - 11)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 76: + memcpy_sse2_64(dd - 76, ss - 76); + case 12: + *((uint64_t*)(dd - 12)) = *((uint64_t*)(ss - 12)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 77: + memcpy_sse2_64(dd - 77, ss - 77); + case 13: + *((uint64_t*)(dd - 13)) = *((uint64_t*)(ss - 13)); + *((uint32_t*)(dd - 5)) = *((uint32_t*)(ss - 5)); + dd[-1] = ss[-1]; + break; + + case 78: + memcpy_sse2_64(dd - 78, ss - 78); + case 14: + *((uint64_t*)(dd - 14)) = *((uint64_t*)(ss - 14)); + *((uint64_t*)(dd - 8)) = *((uint64_t*)(ss - 8)); + break; + + case 79: + memcpy_sse2_64(dd - 79, ss - 79); + case 15: + *((uint64_t*)(dd - 15)) = *((uint64_t*)(ss - 15)); + *((uint64_t*)(dd - 8)) = *((uint64_t*)(ss - 8)); + break; + + case 80: + memcpy_sse2_64(dd - 80, ss - 80); + case 16: + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 81: + memcpy_sse2_64(dd - 81, ss - 81); + case 17: + memcpy_sse2_16(dd - 17, ss - 17); + dd[-1] = ss[-1]; + break; + + case 82: + memcpy_sse2_64(dd - 82, ss - 82); + case 18: + memcpy_sse2_16(dd - 18, ss - 18); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 83: + memcpy_sse2_64(dd - 83, ss - 83); + case 19: + memcpy_sse2_16(dd - 19, ss - 19); + *((uint16_t*)(dd - 3)) = *((uint16_t*)(ss - 3)); + dd[-1] = ss[-1]; + break; + + case 84: + memcpy_sse2_64(dd - 84, ss - 84); + case 20: + memcpy_sse2_16(dd - 20, ss - 20); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 85: + memcpy_sse2_64(dd - 85, ss - 85); + case 21: + memcpy_sse2_16(dd - 21, ss - 21); + *((uint32_t*)(dd - 5)) = *((uint32_t*)(ss - 5)); + dd[-1] = ss[-1]; + break; + + case 86: + memcpy_sse2_64(dd - 86, ss - 86); + case 22: + memcpy_sse2_16(dd - 22, ss - 22); + *((uint32_t*)(dd - 6)) = *((uint32_t*)(ss - 6)); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 87: + memcpy_sse2_64(dd - 87, ss - 87); + case 23: + memcpy_sse2_16(dd - 23, ss - 23); + *((uint32_t*)(dd - 7)) = *((uint32_t*)(ss - 7)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 88: + memcpy_sse2_64(dd - 88, ss - 88); + case 24: + memcpy_sse2_16(dd - 24, ss - 24); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 89: + memcpy_sse2_64(dd - 89, ss - 89); + case 25: + memcpy_sse2_16(dd - 25, ss - 25); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 90: + memcpy_sse2_64(dd - 90, ss - 90); + case 26: + memcpy_sse2_16(dd - 26, ss - 26); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 91: + memcpy_sse2_64(dd - 91, ss - 91); + case 27: + memcpy_sse2_16(dd - 27, ss - 27); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 92: + memcpy_sse2_64(dd - 92, ss - 92); + case 28: + memcpy_sse2_16(dd - 28, ss - 28); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 93: + memcpy_sse2_64(dd - 93, ss - 93); + case 29: + memcpy_sse2_16(dd - 29, ss - 29); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 94: + memcpy_sse2_64(dd - 94, ss - 94); + case 30: + memcpy_sse2_16(dd - 30, ss - 30); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 95: + memcpy_sse2_64(dd - 95, ss - 95); + case 31: + memcpy_sse2_16(dd - 31, ss - 31); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 96: + memcpy_sse2_64(dd - 96, ss - 96); + case 32: + memcpy_sse2_32(dd - 32, ss - 32); + break; + + case 97: + memcpy_sse2_64(dd - 97, ss - 97); + case 33: + memcpy_sse2_32(dd - 33, ss - 33); + dd[-1] = ss[-1]; + break; + + case 98: + memcpy_sse2_64(dd - 98, ss - 98); + case 34: + memcpy_sse2_32(dd - 34, ss - 34); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 99: + memcpy_sse2_64(dd - 99, ss - 99); + case 35: + memcpy_sse2_32(dd - 35, ss - 35); + *((uint16_t*)(dd - 3)) = *((uint16_t*)(ss - 3)); + dd[-1] = ss[-1]; + break; + + case 100: + memcpy_sse2_64(dd - 100, ss - 100); + case 36: + memcpy_sse2_32(dd - 36, ss - 36); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 101: + memcpy_sse2_64(dd - 101, ss - 101); + case 37: + memcpy_sse2_32(dd - 37, ss - 37); + *((uint32_t*)(dd - 5)) = *((uint32_t*)(ss - 5)); + dd[-1] = ss[-1]; + break; + + case 102: + memcpy_sse2_64(dd - 102, ss - 102); + case 38: + memcpy_sse2_32(dd - 38, ss - 38); + *((uint32_t*)(dd - 6)) = *((uint32_t*)(ss - 6)); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 103: + memcpy_sse2_64(dd - 103, ss - 103); + case 39: + memcpy_sse2_32(dd - 39, ss - 39); + *((uint32_t*)(dd - 7)) = *((uint32_t*)(ss - 7)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 104: + memcpy_sse2_64(dd - 104, ss - 104); + case 40: + memcpy_sse2_32(dd - 40, ss - 40); + *((uint64_t*)(dd - 8)) = *((uint64_t*)(ss - 8)); + break; + + case 105: + memcpy_sse2_64(dd - 105, ss - 105); + case 41: + memcpy_sse2_32(dd - 41, ss - 41); + *((uint64_t*)(dd - 9)) = *((uint64_t*)(ss - 9)); + dd[-1] = ss[-1]; + break; + + case 106: + memcpy_sse2_64(dd - 106, ss - 106); + case 42: + memcpy_sse2_32(dd - 42, ss - 42); + *((uint64_t*)(dd - 10)) = *((uint64_t*)(ss - 10)); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 107: + memcpy_sse2_64(dd - 107, ss - 107); + case 43: + memcpy_sse2_32(dd - 43, ss - 43); + *((uint64_t*)(dd - 11)) = *((uint64_t*)(ss - 11)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 108: + memcpy_sse2_64(dd - 108, ss - 108); + case 44: + memcpy_sse2_32(dd - 44, ss - 44); + *((uint64_t*)(dd - 12)) = *((uint64_t*)(ss - 12)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 109: + memcpy_sse2_64(dd - 109, ss - 109); + case 45: + memcpy_sse2_32(dd - 45, ss - 45); + *((uint64_t*)(dd - 13)) = *((uint64_t*)(ss - 13)); + *((uint32_t*)(dd - 5)) = *((uint32_t*)(ss - 5)); + dd[-1] = ss[-1]; + break; + + case 110: + memcpy_sse2_64(dd - 110, ss - 110); + case 46: + memcpy_sse2_32(dd - 46, ss - 46); + *((uint64_t*)(dd - 14)) = *((uint64_t*)(ss - 14)); + *((uint64_t*)(dd - 8)) = *((uint64_t*)(ss - 8)); + break; + + case 111: + memcpy_sse2_64(dd - 111, ss - 111); + case 47: + memcpy_sse2_32(dd - 47, ss - 47); + *((uint64_t*)(dd - 15)) = *((uint64_t*)(ss - 15)); + *((uint64_t*)(dd - 8)) = *((uint64_t*)(ss - 8)); + break; + + case 112: + memcpy_sse2_64(dd - 112, ss - 112); + case 48: + memcpy_sse2_32(dd - 48, ss - 48); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 113: + memcpy_sse2_64(dd - 113, ss - 113); + case 49: + memcpy_sse2_32(dd - 49, ss - 49); + memcpy_sse2_16(dd - 17, ss - 17); + dd[-1] = ss[-1]; + break; + + case 114: + memcpy_sse2_64(dd - 114, ss - 114); + case 50: + memcpy_sse2_32(dd - 50, ss - 50); + memcpy_sse2_16(dd - 18, ss - 18); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 115: + memcpy_sse2_64(dd - 115, ss - 115); + case 51: + memcpy_sse2_32(dd - 51, ss - 51); + memcpy_sse2_16(dd - 19, ss - 19); + *((uint16_t*)(dd - 3)) = *((uint16_t*)(ss - 3)); + dd[-1] = ss[-1]; + break; + + case 116: + memcpy_sse2_64(dd - 116, ss - 116); + case 52: + memcpy_sse2_32(dd - 52, ss - 52); + memcpy_sse2_16(dd - 20, ss - 20); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 117: + memcpy_sse2_64(dd - 117, ss - 117); + case 53: + memcpy_sse2_32(dd - 53, ss - 53); + memcpy_sse2_16(dd - 21, ss - 21); + *((uint32_t*)(dd - 5)) = *((uint32_t*)(ss - 5)); + dd[-1] = ss[-1]; + break; + + case 118: + memcpy_sse2_64(dd - 118, ss - 118); + case 54: + memcpy_sse2_32(dd - 54, ss - 54); + memcpy_sse2_16(dd - 22, ss - 22); + *((uint32_t*)(dd - 6)) = *((uint32_t*)(ss - 6)); + *((uint16_t*)(dd - 2)) = *((uint16_t*)(ss - 2)); + break; + + case 119: + memcpy_sse2_64(dd - 119, ss - 119); + case 55: + memcpy_sse2_32(dd - 55, ss - 55); + memcpy_sse2_16(dd - 23, ss - 23); + *((uint32_t*)(dd - 7)) = *((uint32_t*)(ss - 7)); + *((uint32_t*)(dd - 4)) = *((uint32_t*)(ss - 4)); + break; + + case 120: + memcpy_sse2_64(dd - 120, ss - 120); + case 56: + memcpy_sse2_32(dd - 56, ss - 56); + memcpy_sse2_16(dd - 24, ss - 24); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 121: + memcpy_sse2_64(dd - 121, ss - 121); + case 57: + memcpy_sse2_32(dd - 57, ss - 57); + memcpy_sse2_16(dd - 25, ss - 25); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 122: + memcpy_sse2_64(dd - 122, ss - 122); + case 58: + memcpy_sse2_32(dd - 58, ss - 58); + memcpy_sse2_16(dd - 26, ss - 26); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 123: + memcpy_sse2_64(dd - 123, ss - 123); + case 59: + memcpy_sse2_32(dd - 59, ss - 59); + memcpy_sse2_16(dd - 27, ss - 27); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 124: + memcpy_sse2_64(dd - 124, ss - 124); + case 60: + memcpy_sse2_32(dd - 60, ss - 60); + memcpy_sse2_16(dd - 28, ss - 28); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 125: + memcpy_sse2_64(dd - 125, ss - 125); + case 61: + memcpy_sse2_32(dd - 61, ss - 61); + memcpy_sse2_16(dd - 29, ss - 29); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 126: + memcpy_sse2_64(dd - 126, ss - 126); + case 62: + memcpy_sse2_32(dd - 62, ss - 62); + memcpy_sse2_16(dd - 30, ss - 30); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 127: + memcpy_sse2_64(dd - 127, ss - 127); + case 63: + memcpy_sse2_32(dd - 63, ss - 63); + memcpy_sse2_16(dd - 31, ss - 31); + memcpy_sse2_16(dd - 16, ss - 16); + break; + + case 128: + memcpy_sse2_128(dd - 128, ss - 128); + break; + } + + return dst; +} + + +//--------------------------------------------------------------------- +// main routine +//--------------------------------------------------------------------- +static void* memcpy_fast(void *destination, const void *source, size_t size) +{ + unsigned char *dst = (unsigned char*)destination; + const unsigned char *src = (const unsigned char*)source; + static size_t cachesize = 0x200000; // L2-cache size + size_t padding; + + // small memory copy + if (size <= 128) { + return memcpy_tiny(dst, src, size); + } + + // align destination to 16 bytes boundary + padding = (16 - (((size_t)dst) & 15)) & 15; + + if (padding > 0) { + __m128i head = _mm_loadu_si128((const __m128i*)src); + _mm_storeu_si128((__m128i*)dst, head); + dst += padding; + src += padding; + size -= padding; + } + + // medium size copy + if (size <= cachesize) { + __m128i c0, c1, c2, c3, c4, c5, c6, c7; + + for (; size >= 128; size -= 128) { + c0 = _mm_loadu_si128(((const __m128i*)src) + 0); + c1 = _mm_loadu_si128(((const __m128i*)src) + 1); + c2 = _mm_loadu_si128(((const __m128i*)src) + 2); + c3 = _mm_loadu_si128(((const __m128i*)src) + 3); + c4 = _mm_loadu_si128(((const __m128i*)src) + 4); + c5 = _mm_loadu_si128(((const __m128i*)src) + 5); + c6 = _mm_loadu_si128(((const __m128i*)src) + 6); + c7 = _mm_loadu_si128(((const __m128i*)src) + 7); + _mm_prefetch((const char*)(src + 256), _MM_HINT_NTA); + src += 128; + _mm_store_si128((((__m128i*)dst) + 0), c0); + _mm_store_si128((((__m128i*)dst) + 1), c1); + _mm_store_si128((((__m128i*)dst) + 2), c2); + _mm_store_si128((((__m128i*)dst) + 3), c3); + _mm_store_si128((((__m128i*)dst) + 4), c4); + _mm_store_si128((((__m128i*)dst) + 5), c5); + _mm_store_si128((((__m128i*)dst) + 6), c6); + _mm_store_si128((((__m128i*)dst) + 7), c7); + dst += 128; + } + } + else { // big memory copy + __m128i c0, c1, c2, c3, c4, c5, c6, c7; + + _mm_prefetch((const char*)(src), _MM_HINT_NTA); + + if ((((size_t)src) & 15) == 0) { // source aligned + for (; size >= 128; size -= 128) { + c0 = _mm_load_si128(((const __m128i*)src) + 0); + c1 = _mm_load_si128(((const __m128i*)src) + 1); + c2 = _mm_load_si128(((const __m128i*)src) + 2); + c3 = _mm_load_si128(((const __m128i*)src) + 3); + c4 = _mm_load_si128(((const __m128i*)src) + 4); + c5 = _mm_load_si128(((const __m128i*)src) + 5); + c6 = _mm_load_si128(((const __m128i*)src) + 6); + c7 = _mm_load_si128(((const __m128i*)src) + 7); + _mm_prefetch((const char*)(src + 256), _MM_HINT_NTA); + src += 128; + _mm_stream_si128((((__m128i*)dst) + 0), c0); + _mm_stream_si128((((__m128i*)dst) + 1), c1); + _mm_stream_si128((((__m128i*)dst) + 2), c2); + _mm_stream_si128((((__m128i*)dst) + 3), c3); + _mm_stream_si128((((__m128i*)dst) + 4), c4); + _mm_stream_si128((((__m128i*)dst) + 5), c5); + _mm_stream_si128((((__m128i*)dst) + 6), c6); + _mm_stream_si128((((__m128i*)dst) + 7), c7); + dst += 128; + } + } + else { // source unaligned + for (; size >= 128; size -= 128) { + c0 = _mm_loadu_si128(((const __m128i*)src) + 0); + c1 = _mm_loadu_si128(((const __m128i*)src) + 1); + c2 = _mm_loadu_si128(((const __m128i*)src) + 2); + c3 = _mm_loadu_si128(((const __m128i*)src) + 3); + c4 = _mm_loadu_si128(((const __m128i*)src) + 4); + c5 = _mm_loadu_si128(((const __m128i*)src) + 5); + c6 = _mm_loadu_si128(((const __m128i*)src) + 6); + c7 = _mm_loadu_si128(((const __m128i*)src) + 7); + _mm_prefetch((const char*)(src + 256), _MM_HINT_NTA); + src += 128; + _mm_stream_si128((((__m128i*)dst) + 0), c0); + _mm_stream_si128((((__m128i*)dst) + 1), c1); + _mm_stream_si128((((__m128i*)dst) + 2), c2); + _mm_stream_si128((((__m128i*)dst) + 3), c3); + _mm_stream_si128((((__m128i*)dst) + 4), c4); + _mm_stream_si128((((__m128i*)dst) + 5), c5); + _mm_stream_si128((((__m128i*)dst) + 6), c6); + _mm_stream_si128((((__m128i*)dst) + 7), c7); + dst += 128; + } + } + _mm_sfence(); + } + + memcpy_tiny(dst, src, size); + + return destination; +} + + +#endif diff --git a/src/components/implementation/simple_vmm/multi_vmm/guest/.gitignore b/src/components/implementation/simple_vmm/multi_vmm/guest/.gitignore new file mode 100644 index 0000000000..4a60f24ce6 --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/guest/.gitignore @@ -0,0 +1,2 @@ +*.elf +*.map \ No newline at end of file diff --git a/src/components/implementation/simple_vmm/multi_vmm/guest/Makefile b/src/components/implementation/simple_vmm/multi_vmm/guest/Makefile new file mode 100644 index 0000000000..0228863f04 --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/guest/Makefile @@ -0,0 +1,47 @@ +CC := gcc -m64 +LD := ld -m elf_x86_64 --nmagic +AS := as --64 -g + +CFLAGS := -g -O0 -ffreestanding -Wno-unused-function -Wno-unused-variable -Wno-unused-but-set-variable -nostdinc -nostdlib -fno-pic -mno-red-zone -mcmodel=large -mno-sse -mno-sse2 -mgeneral-regs-only +LDFLAGS := -nostdlib -fno-builtin -nostartfiles -nostdinc -nodefaultlibs + +GUEST_ELF = guest.elf +GUEST_IMG = guest.img +GUEST_MAP = guest.map + +AS_FILES = guest_realmode.S +AS_OBJS = $(patsubst %.S,%.o,$(AS_FILES)) + +WARNINGS += -Wall +WARNINGS += -Wcast-align +WARNINGS += -Wformat=2 +WARNINGS += -Winit-self +WARNINGS += -Wnested-externs +WARNINGS += -Wno-system-headers +WARNINGS += -Wold-style-definition +WARNINGS += -Wredundant-decls +WARNINGS += -Wsign-compare +WARNINGS += -Wstrict-prototypes +WARNINGS += -Wundef +WARNINGS += -Wvolatile-register-var +WARNINGS += -Wwrite-strings +WARNINGS += -Wno-address-of-packed-member + +CFLAGS += $(WARNINGS) + +all: $(GUEST_IMG) + +%.o: %.S + $(CC) $(CFLAGS) -I. -o $@ -c $< + +$(GUEST_IMG):$(GUEST_ELF) + @echo "[CT] $@" + @cp $< $@ + @objcopy $@ -O binary + +$(GUEST_ELF):$(AS_OBJS) + @echo "[LD] $@" + $(LD) $(LDPARAMS) -static -Map=$(GUEST_MAP) -T guest.ld -o $(GUEST_ELF) $(AS_OBJS) + +clean: + @rm -f $(GUEST_ELF) $(GUEST_IMG) $(GUEST_MAP) *.o \ No newline at end of file diff --git a/src/components/implementation/simple_vmm/multi_vmm/guest/guest.ld b/src/components/implementation/simple_vmm/multi_vmm/guest/guest.ld new file mode 100644 index 0000000000..07f9206c1f --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/guest/guest.ld @@ -0,0 +1,34 @@ +ENTRY(guest_real_mode_entry) +OUTPUT_FORMAT(elf64-x86-64) +OUTPUT_ARCH(i386:x86-64) + + +SECTIONS +{ + . = 0x1000; + + .text BLOCK(4K) : ALIGN(4K) + { + *(.guest_kernel_initfn*) + *(.text*) + *(.rodata*) + } + + .data BLOCK(4K) : ALIGN(4K) + { + KEEP(*( .init_array )); + KEEP(*(SORT_BY_INIT_PRIORITY( .init_array.* ))); + *(.data*) + } + + .bss BLOCK(4K) : ALIGN(4K) + { + *(.bss*) + } + + /DISCARD/ : + { + *(.fini_array*) + *(.comment*) + } +} diff --git a/src/components/implementation/simple_vmm/multi_vmm/guest/guest_realmode.S b/src/components/implementation/simple_vmm/multi_vmm/guest/guest_realmode.S new file mode 100644 index 0000000000..ac2e2ec0a7 --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/guest/guest_realmode.S @@ -0,0 +1,60 @@ +#define SEG_NULLASM \ + .word 0, 0; \ + .byte 0, 0, 0, 0 +#define SEG_ASM(type,base,lim) \ + .word (((lim) >> 12) & 0xffff), ((base) & 0xffff); \ + .byte (((base) >> 16) & 0xff), (0x90 | (type)), \ + (0xC0 | (((lim) >> 28) & 0xf)), (((base) >> 24) & 0xff) + +#define STA_X 0x8 // Executable segment +#define STA_E 0x4 // Expand down (non-executable segments) +#define STA_C 0x4 // Conforming code segment (executable only) +#define STA_W 0x2 // Writeable (non-executable segments) +#define STA_R 0x2 // Readable (executable segments) +#define STA_A 0x1 // Accessed + +#define CR0_PE 0x00000001 // Protection Enable +#define CR0_WP 0x00010000 // Write Protect +#define CR0_PG 0x80000000 // Paging + +#define SEL_KCSEG 0x08 /* Kernel code selector. */ +#define SEL_KDSEG 0x10 /* Kernel data selector. */ + +.global guest_real_mode_entry +/* code start entry */ +.section .guest_kernel_initfn +.code16 +guest_real_mode_entry: + ljmp $0x0, $start + +start: + cli + lgdt smpgdtdesc + movl %cr0, %eax + orl $CR0_PE, %eax + movl %eax, %cr0 + ljmpl $(SEL_KCSEG), $smpstart32 +.align 0x10 +.code32 +smpstart32: + movw $(SEL_KDSEG), %ax + movw %ax, %ds + movw %ax, %es + movw %ax, %ss + movw $0, %ax + movw %ax, %fs + movw %ax, %gs + + /* jmp to vmlinux bootloader at the specific address */ + ljmpl $(SEL_KCSEG), $0x100000 + jmp . + +.p2align 2 +smpgdt: + SEG_NULLASM + SEG_ASM(STA_X|STA_R, 0, 0xffffffff) /* code segment for protected mode, mapping 0-4G memory */ + SEG_ASM(STA_W, 0, 0xffffffff) /* data segment for protected mode, mapping 0-4G memory */ + +smpgdtdesc: + .word (smpgdtdesc - smpgdt - 1) + .long smpgdt diff --git a/src/components/implementation/simple_vmm/multi_vmm/instr_emul.c b/src/components/implementation/simple_vmm/multi_vmm/instr_emul.c new file mode 100644 index 0000000000..230a0a9bdf --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/instr_emul.c @@ -0,0 +1,1381 @@ +/*- + * Copyright (c) 2012 Sandvine, Inc. + * Copyright (c) 2012 NetApp, Inc. + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#include +#include + +#include + +#define CPU_REG_FIRST CPU_REG_RAX +#define CPU_REG_LAST CPU_REG_GDTR +#define CPU_REG_GENERAL_FIRST CPU_REG_RAX +#define CPU_REG_GENERAL_LAST CPU_REG_R15 +#define CPU_REG_NONGENERAL_FIRST CPU_REG_CR0 +#define CPU_REG_NONGENERAL_LAST CPU_REG_GDTR +#define CPU_REG_NATURAL_FIRST CPU_REG_CR0 +#define CPU_REG_NATURAL_LAST CPU_REG_RFLAGS +#define CPU_REG_64BIT_FIRST CPU_REG_EFER +#define CPU_REG_64BIT_LAST CPU_REG_PDPTE3 +#define CPU_REG_SEG_FIRST CPU_REG_ES +#define CPU_REG_SEG_LAST CPU_REG_GS + +#define PSL_C 0x00000001U /* carry bit */ +#define PSL_PF 0x00000004U /* parity bit */ +#define PSL_AF 0x00000010U /* bcd carry bit */ +#define PSL_Z 0x00000040U /* zero bit */ +#define PSL_N 0x00000080U /* negative bit */ +#define PSL_D 0x00000400U /* string instruction direction bit */ +#define PSL_V 0x00000800U /* overflow bit */ +#define PSL_AC 0x00040000U /* alignment checking */ + +/* + * Protections are chosen from these bits, or-ed together + */ +#define PROT_READ 0x01U /* pages can be read */ +#define PROT_WRITE 0x02U /* pages can be written */ + +/* struct vie_op.op_type */ +#define VIE_OP_TYPE_NONE 0U +#define VIE_OP_TYPE_MOV 1U +#define VIE_OP_TYPE_MOVSX 2U +#define VIE_OP_TYPE_MOVZX 3U +#define VIE_OP_TYPE_AND 4U +#define VIE_OP_TYPE_OR 5U +#define VIE_OP_TYPE_SUB 6U +#define VIE_OP_TYPE_TWO_BYTE 7U +#define VIE_OP_TYPE_PUSH 8U +#define VIE_OP_TYPE_CMP 9U +#define VIE_OP_TYPE_POP 10U +#define VIE_OP_TYPE_MOVS 11U +#define VIE_OP_TYPE_GROUP1 12U +#define VIE_OP_TYPE_STOS 13U +#define VIE_OP_TYPE_BITTEST 14U +#define VIE_OP_TYPE_TEST 15U +#define VIE_OP_TYPE_XCHG 16U + +/* struct vie_op.op_flags */ +#define VIE_OP_F_IMM (1U << 0U) /* 16/32-bit immediate operand */ +#define VIE_OP_F_IMM8 (1U << 1U) /* 8-bit immediate operand */ +#define VIE_OP_F_MOFFSET (1U << 2U) /* 16/32/64-bit immediate moffset */ +#define VIE_OP_F_NO_MODRM (1U << 3U) +#define VIE_OP_F_CHECK_GVA_DI (1U << 4U) /* for movs, need to check DI */ +/* + * The VIE_OP_F_BYTE_OP only set when the instruction support + * Encoding of Operand Size (w) Bit and the w bit of opcode is 0. + * according B.2 GENERAL-PURPOSE INSTRUCTION FORMATS AND ENCODINGS + * FOR NON-64-BIT MODES, Vol 2, Intel SDM. + */ +#define VIE_OP_F_BYTE_OP (1U << 5U) /* 8-bit operands. */ +#define VIE_OP_F_WORD_OP (1U << 6U) /* 16-bit operands. */ + +static const struct instr_emul_vie_op two_byte_opcodes[256] = { + [0xB6] = { + .op_type = VIE_OP_TYPE_MOVZX, + .op_flags = VIE_OP_F_BYTE_OP, + }, + [0xB7] = { + .op_type = VIE_OP_TYPE_MOVZX, + .op_flags = VIE_OP_F_WORD_OP, + }, + [0xBA] = { + .op_type = VIE_OP_TYPE_BITTEST, + .op_flags = VIE_OP_F_IMM8, + }, + [0xBE] = { + .op_type = VIE_OP_TYPE_MOVSX, + .op_flags = VIE_OP_F_BYTE_OP, + }, +}; + +static const struct instr_emul_vie_op one_byte_opcodes[256] = { + [0x0F] = { + .op_type = VIE_OP_TYPE_TWO_BYTE + }, + [0x2B] = { + .op_type = VIE_OP_TYPE_SUB, + }, + [0x39] = { + .op_type = VIE_OP_TYPE_CMP, + }, + [0x3B] = { + .op_type = VIE_OP_TYPE_CMP, + }, + [0x88] = { + .op_type = VIE_OP_TYPE_MOV, + .op_flags = VIE_OP_F_BYTE_OP, + }, + [0x89] = { + .op_type = VIE_OP_TYPE_MOV, + }, + [0x8A] = { + .op_type = VIE_OP_TYPE_MOV, + .op_flags = VIE_OP_F_BYTE_OP, + }, + [0x8B] = { + .op_type = VIE_OP_TYPE_MOV, + }, + [0xA1] = { + .op_type = VIE_OP_TYPE_MOV, + .op_flags = VIE_OP_F_MOFFSET | VIE_OP_F_NO_MODRM, + }, + [0xA3] = { + .op_type = VIE_OP_TYPE_MOV, + .op_flags = VIE_OP_F_MOFFSET | VIE_OP_F_NO_MODRM, + }, + [0xA4] = { + .op_type = VIE_OP_TYPE_MOVS, + .op_flags = VIE_OP_F_NO_MODRM | VIE_OP_F_CHECK_GVA_DI | VIE_OP_F_BYTE_OP, + }, + [0xA5] = { + .op_type = VIE_OP_TYPE_MOVS, + .op_flags = VIE_OP_F_NO_MODRM | VIE_OP_F_CHECK_GVA_DI, + }, + [0xAA] = { + .op_type = VIE_OP_TYPE_STOS, + .op_flags = VIE_OP_F_NO_MODRM | VIE_OP_F_BYTE_OP, + }, + [0xAB] = { + .op_type = VIE_OP_TYPE_STOS, + .op_flags = VIE_OP_F_NO_MODRM + }, + [0xC6] = { + /* XXX Group 11 extended opcode - not just MOV */ + .op_type = VIE_OP_TYPE_MOV, + .op_flags = VIE_OP_F_IMM8 | VIE_OP_F_BYTE_OP, + }, + [0xC7] = { + .op_type = VIE_OP_TYPE_MOV, + .op_flags = VIE_OP_F_IMM, + }, + [0x23] = { + .op_type = VIE_OP_TYPE_AND, + }, + [0x80] = { + /* Group 1 extended opcode */ + .op_type = VIE_OP_TYPE_GROUP1, + .op_flags = VIE_OP_F_IMM8, + }, + [0x81] = { + /* Group 1 extended opcode */ + .op_type = VIE_OP_TYPE_GROUP1, + .op_flags = VIE_OP_F_IMM, + }, + [0x83] = { + /* Group 1 extended opcode */ + .op_type = VIE_OP_TYPE_GROUP1, + .op_flags = VIE_OP_F_IMM8, + }, + [0x84] = { + .op_type = VIE_OP_TYPE_TEST, + .op_flags = VIE_OP_F_BYTE_OP, + }, + [0x85] = { + .op_type = VIE_OP_TYPE_TEST, + }, + [0x86] = { + .op_type = VIE_OP_TYPE_XCHG, + }, + [0x87] = { + .op_type = VIE_OP_TYPE_XCHG, + }, + [0x08] = { + .op_type = VIE_OP_TYPE_OR, + .op_flags = VIE_OP_F_BYTE_OP, + }, + [0x09] = { + .op_type = VIE_OP_TYPE_OR, + }, +}; + +/* struct vie.mod */ +#define VIE_MOD_INDIRECT 0U +#define VIE_MOD_INDIRECT_DISP8 1U +#define VIE_MOD_INDIRECT_DISP32 2U +#define VIE_MOD_DIRECT 3U + +/* struct vie.rm */ +#define VIE_RM_SIB 4U +#define VIE_RM_DISP32 5U + +static uint64_t size2mask[9] = { + [1] = (1UL << 8U) - 1UL, + [2] = (1UL << 16U) - 1UL, + [4] = (1UL << 32U) - 1UL, + [8] = ~0UL, +}; + +#define VMX_INVALID_VMCS_FIELD 0xffffffffU + +/* + * This struct vmcs_seg_field is defined separately to hold the vmcs field + * address of segment selector. + */ +struct vmcs_seg_field { + uint32_t base_field; + uint32_t limit_field; + uint32_t access_field; +}; + +/* + * The 'access' field has the format specified in Table 21-2 of the Intel + * Architecture Manual vol 3b. + * + * XXX The contents of the 'access' field are architecturally defined except + * bit 16 - Segment Unusable. + */ +struct seg_desc { + uint64_t base; + uint32_t limit; + uint32_t access; +}; + +static inline struct acrn_mmio_request *vcpu_mmio_req(struct vmrt_vm_vcpu *vcpu) +{ + return (struct acrn_mmio_request *)(vcpu->mmio_request); +} + +static inline uint32_t seg_desc_type(uint32_t access) +{ + return (access & 0x001fU); +} + +static uint64_t vm_get_register(struct vmrt_vm_vcpu *vcpu, enum cpu_reg_name reg) +{ + volatile struct vm_vcpu_shared_region *regs = vcpu->shared_region; + uint64_t reg_val = 0UL; + + switch (reg) + { + case CPU_REG_RAX: + reg_val = regs->ax; + break; + case CPU_REG_RCX: + reg_val = regs->cx; + break; + case CPU_REG_RDX: + reg_val = regs->dx; + break; + case CPU_REG_RBX: + reg_val = regs->bx; + break; + case CPU_REG_RSP: + reg_val = regs->sp; + break; + case CPU_REG_RBP: + reg_val = regs->bp; + break; + case CPU_REG_RSI: + reg_val = regs->si; + break; + case CPU_REG_RDI: + reg_val = regs->di; + break; + case CPU_REG_R8: + reg_val = regs->r8; + break; + case CPU_REG_R9: + reg_val = regs->r9; + break; + case CPU_REG_R10: + reg_val = regs->r10; + break; + case CPU_REG_R11: + reg_val = regs->r11; + break; + case CPU_REG_R12: + reg_val = regs->r12; + break; + case CPU_REG_R13: + reg_val = regs->r13; + break; + case CPU_REG_R14: + reg_val = regs->r14; + break; + case CPU_REG_R15: + reg_val = regs->r15; + break; + default: + VM_PANIC(vcpu); + break; + } + + return reg_val; +} + +static void vm_set_register(struct vmrt_vm_vcpu *vcpu, enum cpu_reg_name reg, + uint64_t val) +{ + volatile struct vm_vcpu_shared_region *regs = vcpu->shared_region; + + switch (reg) + { + case CPU_REG_RAX: + regs->ax = val; + break; + case CPU_REG_RCX: + regs->cx = val; + break; + case CPU_REG_RDX: + regs->dx = val; + break; + case CPU_REG_RBX: + regs->bx = val; + break; + case CPU_REG_RSP: + regs->sp = val; + break; + case CPU_REG_RBP: + regs->bp = val; + break; + case CPU_REG_RSI: + regs->si = val; + break; + case CPU_REG_RDI: + regs->di = val; + break; + case CPU_REG_R8: + regs->r8 = val; + break; + case CPU_REG_R9: + regs->r9 = val; + break; + case CPU_REG_R10: + regs->r10 = val; + break; + case CPU_REG_R11: + regs->r11 = val; + break; + case CPU_REG_R12: + regs->r12 = val; + break; + case CPU_REG_R13: + regs->r13 = val; + break; + case CPU_REG_R14: + regs->r14 = val; + break; + case CPU_REG_R15: + regs->r15 = val; + break; + default: + VM_PANIC(vcpu); + break; + } +} + +static int32_t vie_canonical_check(uint64_t gla) +{ + int32_t ret = 0; + uint64_t mask; + + /* + * The value of the bit 47 in the 'gla' should be replicated in the + * most significant 16 bits. + */ + mask = ~((1UL << 48U) - 1UL); + if ((gla & (1UL << 47U)) != 0U) { + ret = ((gla & mask) != mask) ? 1 : 0; + } else { + ret = ((gla & mask) != 0U) ? 1 : 0; + } + + return ret; +} + +/* + * @pre vcpu != NULL + */ +static inline void vie_mmio_read(struct vmrt_vm_vcpu *vcpu, uint64_t *rval) +{ + *rval = vcpu_mmio_req(vcpu)->value; +} + +/* + * @pre vcpu != NULL + */ +static inline void vie_mmio_write(struct vmrt_vm_vcpu *vcpu, uint64_t wval) +{ + vcpu_mmio_req(vcpu)->value = wval; +} + +static void vie_calc_bytereg(const struct instr_emul_vie *vie, + enum cpu_reg_name *reg, int32_t *lhbr) +{ + *lhbr = 0; + *reg = (enum cpu_reg_name)(vie->reg); + + /* + * 64-bit mode imposes limitations on accessing legacy high byte + * registers (lhbr). + * + * The legacy high-byte registers cannot be addressed if the REX + * prefix is present. In this case the values 4, 5, 6 and 7 of the + * 'ModRM:reg' field address %spl, %bpl, %sil and %dil respectively. + * + * If the REX prefix is not present then the values 4, 5, 6 and 7 + * of the 'ModRM:reg' field address the legacy high-byte registers, + * %ah, %ch, %dh and %bh respectively. + */ + if (vie->rex_present == 0U) { + if ((vie->reg & 0x4U) != 0U) { + *lhbr = 1; + *reg = (enum cpu_reg_name)(vie->reg & 0x3U); + } + } +} + +static uint8_t vie_read_bytereg(struct vmrt_vm_vcpu *vcpu, const struct instr_emul_vie *vie) +{ + int32_t lhbr; + uint64_t val; + uint8_t reg_val; + enum cpu_reg_name reg; + + vie_calc_bytereg(vie, ®, &lhbr); + val = vm_get_register(vcpu, reg); + + /* + * To obtain the value of a legacy high byte register shift the + * base register right by 8 bits (%ah = %rax >> 8). + */ + if (lhbr != 0) { + reg_val = (uint8_t)(val >> 8U); + } else { + reg_val = (uint8_t)val; + } + + return reg_val; +} + +static void vie_write_bytereg(struct vmrt_vm_vcpu *vcpu, const struct instr_emul_vie *vie, + uint8_t byte) +{ + uint64_t origval, val, mask; + enum cpu_reg_name reg; + int32_t lhbr; + + vie_calc_bytereg(vie, ®, &lhbr); + origval = vm_get_register(vcpu, reg); + + val = byte; + mask = 0xffU; + if (lhbr != 0) { + /* + * Shift left by 8 to store 'byte' in a legacy high + * byte register. + */ + val <<= 8U; + mask <<= 8U; + } + val |= origval & ~mask; + vm_set_register(vcpu, reg, val); +} + +/** + * @pre vcpu != NULL + * @pre size = 1, 2, 4 or 8 + * @pre ((reg <= CPU_REG_LAST) && (reg >= CPU_REG_FIRST)) + * @pre ((reg != CPU_REG_CR2) && (reg != CPU_REG_IDTR) && (reg != CPU_REG_GDTR)) + */ +static void vie_update_register(struct vmrt_vm_vcpu *vcpu, enum cpu_reg_name reg, + uint64_t val_arg, uint8_t size) +{ + uint64_t origval; + uint64_t val = val_arg; + + switch (size) { + case 1U: + case 2U: + origval = vm_get_register(vcpu, reg); + val &= size2mask[size]; + val |= origval & ~size2mask[size]; + break; + case 4U: + val &= 0xffffffffUL; + break; + default: /* size == 8 */ + break; + } + + vm_set_register(vcpu, reg, val); +} + +#define RFLAGS_STATUS_BITS (PSL_C | PSL_PF | PSL_AF | PSL_Z | PSL_N | PSL_V) + +static void vie_update_rflags(struct vmrt_vm_vcpu *vcpu, uint64_t rflags2, uint64_t psl) +{ + uint8_t size; + uint64_t rflags; + + rflags = vm_get_register(vcpu, CPU_REG_RFLAGS); + + rflags &= ~RFLAGS_STATUS_BITS; + rflags |= rflags2 & psl; + size = 8U; + + vie_update_register(vcpu, CPU_REG_RFLAGS, rflags, size); +} + +/* + * Return the status flags that would result from doing (x - y). + */ +#define build_getcc(name, type) \ +static uint64_t name(type x, type y) \ +{ \ + uint64_t rflags; \ + \ + __asm __volatile("sub %2,%1; pushfq; popq %0" : \ + "=r" (rflags), "+r" (x) : "m" (y)); \ + return rflags; \ +} +build_getcc(getcc8, uint8_t) +build_getcc(getcc16, uint16_t) +build_getcc(getcc32, uint32_t) +build_getcc(getcc64, uint64_t) + +/** + * @pre opsize = 1, 2, 4 or 8 + */ +static uint64_t getcc(uint8_t opsize, uint64_t x, uint64_t y) +{ + uint64_t rflags; + switch (opsize) { + case 1U: + rflags = getcc8((uint8_t) x, (uint8_t) y); + break; + case 2U: + rflags = getcc16((uint16_t) x, (uint16_t) y); + break; + case 4U: + rflags = getcc32((uint32_t) x, (uint32_t) y); + break; + default: /* opsize == 8 */ + rflags = getcc64(x, y); + break; + } + + return rflags; +} + +static int32_t emulate_mov(struct vmrt_vm_vcpu *vcpu, const struct instr_emul_vie *vie) +{ + int32_t error; + uint8_t size; + enum cpu_reg_name reg; + uint8_t byte; + uint64_t val; + + size = vie->opsize; + error = 0; + switch (vie->opcode) { + case 0x88U: + /* + * MOV byte from reg (ModRM:reg) to mem (ModRM:r/m) + * 88/r: mov r/m8, r8 + * REX + 88/r: mov r/m8, r8 (%ah, %ch, %dh, %bh not available) + */ + byte = vie_read_bytereg(vcpu, vie); + vie_mmio_write(vcpu, byte); + break; + case 0x89U: + /* + * MOV from reg (ModRM:reg) to mem (ModRM:r/m) + * 89/r: mov r/m16, r16 + * 89/r: mov r/m32, r32 + * REX.W + 89/r mov r/m64, r64 + */ + + reg = (enum cpu_reg_name)(vie->reg); + val = vm_get_register(vcpu, reg); + val &= size2mask[size]; + vie_mmio_write(vcpu, val); + break; + case 0x8AU: + /* + * MOV byte from mem (ModRM:r/m) to reg (ModRM:reg) + * 8A/r: mov r8, r/m8 + * REX + 8A/r: mov r8, r/m8 + */ + vie_mmio_read(vcpu, &val); + vie_write_bytereg(vcpu, vie, (uint8_t)val); + break; + case 0x8BU: + /* + * MOV from mem (ModRM:r/m) to reg (ModRM:reg) + * 8B/r: mov r16, r/m16 + * 8B/r: mov r32, r/m32 + * REX.W 8B/r: mov r64, r/m64 + */ + vie_mmio_read(vcpu, &val); + reg = (enum cpu_reg_name)(vie->reg); + vie_update_register(vcpu, reg, val, size); + break; + case 0xA1U: + /* + * MOV from seg:moffset to AX/EAX/RAX + * A1: mov AX, moffs16 + * A1: mov EAX, moffs32 + * REX.W + A1: mov RAX, moffs64 + */ + vie_mmio_read(vcpu, &val); + reg = CPU_REG_RAX; + vie_update_register(vcpu, reg, val, size); + break; + case 0xA3U: + /* + * MOV from AX/EAX/RAX to seg:moffset + * A3: mov moffs16, AX + * A3: mov moffs32, EAX + * REX.W + A3: mov moffs64, RAX + */ + val = vm_get_register(vcpu, CPU_REG_RAX); + val &= size2mask[size]; + vie_mmio_write(vcpu, val); + break; + case 0xC6U: + /* + * MOV from imm8 to mem (ModRM:r/m) + * C6/0 mov r/m8, imm8 + * REX + C6/0 mov r/m8, imm8 + */ + vie_mmio_write(vcpu, (uint64_t)vie->immediate); + break; + case 0xC7U: + /* + * MOV from imm16/imm32 to mem (ModRM:r/m) + * C7/0 mov r/m16, imm16 + * C7/0 mov r/m32, imm32 + * REX.W + C7/0 mov r/m64, imm32 + * (sign-extended to 64-bits) + */ + val = (uint64_t)(vie->immediate) & size2mask[size]; + vie_mmio_write(vcpu, val); + break; + default: + /* + * For the opcode that is not handled (an invalid opcode), the + * error code is assigned to a default value (-EINVAL). + * Gracefully return this error code if prior case clauses have + * not been met. + */ + error = -EINVAL; + break; + } + + return error; +} + +static void copy_from_gva(struct vmrt_vm_vcpu *vcpu, void *buf, u64_t gva, u32_t len) +{ + void *src = GPA2HVA(vmrt_vm_gva2gpa(vcpu, gva), vcpu->vm); + memcpy(buf, src, len); +} + +static int32_t vie_init(struct instr_emul_vie *vie, struct vmrt_vm_vcpu *vcpu) +{ + volatile struct vm_vcpu_shared_region *regs = vcpu->shared_region; + u64_t inst_len = regs->inst_length; + int32_t ret; + + if ((inst_len > VIE_INST_SIZE) || (inst_len == 0U)) { + VM_PANIC(vcpu); + } else { + (void)memset(vie, 0U, sizeof(struct instr_emul_vie)); + + /* init register fields in vie. */ + vie->base_register = CPU_REG_LAST; + vie->index_register = CPU_REG_LAST; + vie->segment_register = CPU_REG_LAST; + + copy_from_gva(vcpu, vie->inst, regs->ip, inst_len); + /* + * Use this to print the inst binary to verify if the decodeed inst is correct + * + printc("inst to be decode: "); + for (u64_t i = 0; i < inst_len; i++) { + printc("%x ", vie->inst[i]); + } + printc("\ninst vie init done\n"); + */ + + vie->num_valid = (uint8_t)inst_len; + ret = 0; + } + + return ret; +} + +static int32_t vie_peek(const struct instr_emul_vie *vie, uint8_t *x) +{ + int32_t ret; + if (vie->num_processed < vie->num_valid) { + *x = vie->inst[vie->num_processed]; + ret = 0; + } else { + ret = -1; + } + return ret; +} + +static void vie_advance(struct instr_emul_vie *vie) +{ + + vie->num_processed++; +} + +static bool segment_override(uint8_t x, enum cpu_reg_name *seg) +{ + bool override = true; + switch (x) { + case 0x2EU: + *seg = CPU_REG_CS; + break; + case 0x36U: + *seg = CPU_REG_SS; + break; + case 0x3EU: + *seg = CPU_REG_DS; + break; + case 0x26U: + *seg = CPU_REG_ES; + break; + case 0x64U: + *seg = CPU_REG_FS; + break; + case 0x65U: + *seg = CPU_REG_GS; + break; + default: + override = false; + break; + } + return override; +} + +static void decode_op_and_addr_size(struct instr_emul_vie *vie) +{ + /* + * Section "Operand-Size And Address-Size Attributes", Intel SDM, Vol 1 + */ + + /* + * Default address size is 64-bits and default operand size + * is 32-bits. + */ + vie->addrsize = ((vie->addrsize_override != 0U) ? 4U : 8U); + if (vie->rex_w != 0U) { + vie->opsize = 8U; + } else if (vie->opsize_override != 0U) { + vie->opsize = 2U; + } else { + vie->opsize = 4U; + } +} +static int32_t decode_prefixes(struct instr_emul_vie *vie) +{ + uint8_t x, i; + int32_t ret = 0; + + for (i = 0U; i < VIE_PREFIX_SIZE; i++) { + if (vie_peek(vie, &x) != 0) { + ret = -1; + break; + } else { + if (x == 0x66U) { + vie->opsize_override = 1U; + } else if (x == 0x67U) { + vie->addrsize_override = 1U; + } else if (x == 0xF3U) { + vie->repz_present = 1U; + } else if (x == 0xF2U) { + vie->repnz_present = 1U; + } else if (segment_override(x, &vie->segment_register)) { + vie->seg_override = 1U; + } else { + break; + } + + vie_advance(vie); + } + } + + if (ret == 0) { + /* + * From section 2.2.1, "REX Prefixes", Intel SDM Vol 2: + * - Only one REX prefix is allowed per instruction. + * - The REX prefix must immediately precede the opcode byte or the + * escape opcode byte. + * - If an instruction has a mandatory prefix (0x66, 0xF2 or 0xF3) + * the mandatory prefix must come before the REX prefix. + */ + if ( (x >= 0x40U) && (x <= 0x4FU)) { + vie->rex_present = 1U; + vie->rex_w = (x >> 0x3U) & 1U; + vie->rex_r = (x >> 0x2U) & 1U; + vie->rex_x = (x >> 0x1U) & 1U; + vie->rex_b = (x >> 0x0U) & 1U; + vie_advance(vie); + } + decode_op_and_addr_size(vie); + } + + return ret; +} + +static int32_t decode_two_byte_opcode(struct instr_emul_vie *vie) +{ + int32_t ret = 0; + uint8_t x; + + if (vie_peek(vie, &x) != 0) { + ret = -1; + } else { + vie->opcode = x; + vie->op = two_byte_opcodes[x]; + + if (vie->op.op_type == VIE_OP_TYPE_NONE) { + ret = -1; + } else { + vie_advance(vie); + } + } + + return ret; +} + +static int32_t decode_opcode(struct instr_emul_vie *vie) +{ + int32_t ret = 0; + uint8_t x; + + if (vie_peek(vie, &x) != 0) { + ret = -1; + } else { + vie->opcode = x; + vie->op = one_byte_opcodes[x]; + + if (vie->op.op_type == VIE_OP_TYPE_NONE) { + ret = -1; + } else { + vie_advance(vie); + + if (vie->op.op_type == VIE_OP_TYPE_TWO_BYTE) { + ret = decode_two_byte_opcode(vie); + } + } + } + + return ret; +} + +static int32_t decode_modrm(struct instr_emul_vie *vie) +{ + uint8_t x; + int32_t ret; + + if ((vie->op.op_flags & VIE_OP_F_NO_MODRM) != 0U) { + ret = 0; + } else if (vie_peek(vie, &x) != 0) { + ret = -1; + } else { + vie->mod = (x >> 6U) & 0x3U; + vie->rm = (x >> 0U) & 0x7U; + vie->reg = (x >> 3U) & 0x7U; + + /* + * A direct addressing mode makes no sense in the context of an EPT + * fault. There has to be a memory access involved to cause the + * EPT fault. + */ + if (vie->mod == VIE_MOD_DIRECT) { + ret = -1; + } else { + if (((vie->mod == VIE_MOD_INDIRECT) && (vie->rm == VIE_RM_DISP32)) || + ((vie->mod != VIE_MOD_DIRECT) && (vie->rm == VIE_RM_SIB))) { + /* + * Table 2-5: Special Cases of REX Encodings + * + * mod=0, r/m=5 is used in the compatibility mode to + * indicate a disp32 without a base register. + * + * mod!=3, r/m=4 is used in the compatibility mode to + * indicate that the SIB byte is present. + * + * The 'b' bit in the REX prefix is don't care in + * this case. + */ + } else { + vie->rm |= (vie->rex_b << 3U); + } + + vie->reg |= (vie->rex_r << 3U); + + /* SIB */ + if ((vie->mod != VIE_MOD_DIRECT) && (vie->rm == VIE_RM_SIB)) { + /* done */ + } else { + vie->base_register = (enum cpu_reg_name)vie->rm; + + switch (vie->mod) { + case VIE_MOD_INDIRECT_DISP8: + vie->disp_bytes = 1U; + break; + case VIE_MOD_INDIRECT_DISP32: + vie->disp_bytes = 4U; + break; + case VIE_MOD_INDIRECT: + if (vie->rm == VIE_RM_DISP32) { + vie->disp_bytes = 4U; + /* + * Table 2-7. RIP-Relative Addressing + * + * In 64-bit mode mod=00 r/m=101 implies [rip] + disp32 + * whereas in compatibility mode it just implies disp32. + */ + + vie->base_register = CPU_REG_RIP; + printc("VM exit with RIP as indirect access"); + assert(0); + } + break; + default: + /* VIE_MOD_DIRECT */ + break; + } + + } + vie_advance(vie); + + ret = 0; + } + } + + return ret; +} + +static int32_t decode_sib(struct instr_emul_vie *vie) +{ + uint8_t x; + int32_t ret; + + /* Proceed only if SIB byte is present */ + if ((vie->mod == VIE_MOD_DIRECT) || (vie->rm != VIE_RM_SIB)) { + ret = 0; + } else if (vie_peek(vie, &x) != 0) { + ret = -1; + } else { + + /* De-construct the SIB byte */ + vie->ss = (x >> 6U) & 0x3U; + vie->index = (x >> 3U) & 0x7U; + vie->base = (x >> 0U) & 0x7U; + + /* Apply the REX prefix modifiers */ + vie->index |= vie->rex_x << 3U; + vie->base |= vie->rex_b << 3U; + + switch (vie->mod) { + case VIE_MOD_INDIRECT_DISP8: + vie->disp_bytes = 1U; + break; + case VIE_MOD_INDIRECT_DISP32: + vie->disp_bytes = 4U; + break; + default: + /* + * All possible values of 'vie->mod': + * 1. VIE_MOD_DIRECT + * has been handled at the start of this function + * 2. VIE_MOD_INDIRECT_DISP8 + * has been handled in prior case clauses + * 3. VIE_MOD_INDIRECT_DISP32 + * has been handled in prior case clauses + * 4. VIE_MOD_INDIRECT + * will be handled later after this switch statement + */ + break; + } + + if ((vie->mod == VIE_MOD_INDIRECT) && ((vie->base == 5U) || (vie->base == 13U))) { + /* + * Special case when base register is unused if mod = 0 + * and base = %rbp or %r13. + * + * Documented in: + * Table 2-3: 32-bit Addressing Forms with the SIB Byte + * Table 2-5: Special Cases of REX Encodings + */ + vie->disp_bytes = 4U; + } else { + vie->base_register = (enum cpu_reg_name)vie->base; + } + + /* + * All encodings of 'index' are valid except for %rsp (4). + * + * Documented in: + * Table 2-3: 32-bit Addressing Forms with the SIB Byte + * Table 2-5: Special Cases of REX Encodings + */ + if (vie->index != 4U) { + vie->index_register = (enum cpu_reg_name)vie->index; + } + + /* 'scale' makes sense only in the context of an index register */ + if (vie->index_register < CPU_REG_LAST) { + vie->scale = 1U << vie->ss; + } + + vie_advance(vie); + + ret = 0; + } + + return ret; +} + +static int32_t decode_displacement(struct instr_emul_vie *vie) +{ + uint8_t n, i, x; + int32_t ret = 0; + + union { + uint8_t buf[4]; + int8_t signed8; + int32_t signed32; + } u; + + n = vie->disp_bytes; + if (n != 0U) { + if ((n != 1U) && (n != 4U)) { + printc("%s: decode_displacement: invalid disp_bytes %d", __func__, n); + ret = -EINVAL; + } else { + + for (i = 0U; i < n; i++) { + if (vie_peek(vie, &x) != 0) { + ret = -1; + break; + } + + u.buf[i] = x; + vie_advance(vie); + } + + if (ret == 0) { + if (n == 1U) { + vie->displacement = u.signed8; /* sign-extended */ + } else { + vie->displacement = u.signed32; /* sign-extended */ + } + } + } + } + + return ret; +} + +static int32_t decode_immediate(struct instr_emul_vie *vie) +{ + uint8_t i, n, x; + int32_t ret = 0; + union { + uint8_t buf[4]; + int8_t signed8; + int16_t signed16; + int32_t signed32; + } u; + + /* Figure out immediate operand size (if any) */ + if ((vie->op.op_flags & VIE_OP_F_IMM) != 0U) { + /* + * Section 2.2.1.5 "Immediates", Intel SDM: + * In 64-bit mode the typical size of immediate operands + * remains 32-bits. When the operand size if 64-bits, the + * processor sign-extends all immediates to 64-bits prior + * to their use. + */ + if ((vie->opsize == 4U) || (vie->opsize == 8U)) { + vie->imm_bytes = 4U; + } + else { + vie->imm_bytes = 2U; + } + } else if ((vie->op.op_flags & VIE_OP_F_IMM8) != 0U) { + vie->imm_bytes = 1U; + } else { + /* No op_flag on immediate operand size */ + } + + n = vie->imm_bytes; + if (n != 0U) { + if ((n != 1U) && (n != 2U) && (n != 4U)) { + printc("%s: invalid number of immediate bytes: %d", __func__, n); + ret = -EINVAL; + } else { + for (i = 0U; i < n; i++) { + if (vie_peek(vie, &x) != 0) { + ret = -1; + break; + } + + u.buf[i] = x; + vie_advance(vie); + } + + if (ret == 0) { + /* sign-extend the immediate value before use */ + if (n == 1U) { + vie->immediate = u.signed8; + } else if (n == 2U) { + vie->immediate = u.signed16; + } else { + vie->immediate = u.signed32; + } + } + } + } + + return ret; +} + +static int32_t decode_moffset(struct instr_emul_vie *vie) +{ + uint8_t i, n, x; + int32_t ret = 0; + union { + uint8_t buf[8]; + uint64_t u64; + } u; + + if ((vie->op.op_flags & VIE_OP_F_MOFFSET) != 0U) { + /* + * Section 2.2.1.4, "Direct Memory-Offset MOVs", Intel SDM: + * The memory offset size follows the address-size of the instruction. + */ + n = vie->addrsize; + if ((n != 2U) && (n != 4U) && (n != 8U)) { + printc("%s: invalid moffset bytes: %hhu", __func__, n); + ret = -EINVAL; + } else { + u.u64 = 0UL; + for (i = 0U; i < n; i++) { + if (vie_peek(vie, &x) != 0) { + ret = -1; + break; + } + + u.buf[i] = x; + vie_advance(vie); + } + if (ret == 0) { + vie->displacement = (int64_t)u.u64; + } + } + } + + return ret; +} + +static int32_t local_decode_instruction(struct instr_emul_vie *vie) +{ + int32_t ret; + + if (decode_prefixes(vie) != 0) { + ret = -1; + } else if (decode_opcode(vie) != 0) { + ret = -1; + } else if (decode_modrm(vie) != 0) { + ret = -1; + } else if (decode_sib(vie) != 0) { + ret = -1; + } else if (decode_displacement(vie) != 0) { + ret = -1; + } else if (decode_immediate(vie) != 0) { + ret = -1; + } else if (decode_moffset(vie) != 0) { + ret = -1; + } else { + vie->decoded = 1U; /* success */ + ret = 0; + } + + return ret; +} + +static int32_t instr_check_gva(struct vmrt_vm_vcpu *vcpu) +{ + int32_t ret = 0; + uint64_t base, segbase, idx, gva; + enum cpu_reg_name seg; + struct instr_emul_vie *vie = &((struct instr_emul_ctxt *)vcpu->inst_ctxt)->vie; + + base = 0UL; + if (vie->base_register != CPU_REG_LAST) { + base = vm_get_register(vcpu, vie->base_register); + + /* RIP relative addressing starts from the + * following instruction + */ + if (vie->base_register == CPU_REG_RIP) { + base += vie->num_processed; + } + + } + + idx = 0UL; + if (vie->index_register != CPU_REG_LAST) { + idx = vm_get_register(vcpu, vie->index_register); + } + + /* "Specifying a Segment Selector" of SDM Vol1 3.7.4 + * + * In legacy IA-32 mode, when ESP or EBP register is used as + * base, the SS segment is default segment. + * + * All data references, except when relative to stack or + * string destination, DS is default segment. + * + * segment override could overwrite the default segment + * + * 64bit mode, segmentation is generally disabled. The + * exception are FS and GS. + */ + if (vie->seg_override != 0U) { + seg = vie->segment_register; + } else if ((vie->base_register == CPU_REG_RSP) || + (vie->base_register == CPU_REG_RBP)) { + seg = CPU_REG_SS; + } else { + seg = CPU_REG_DS; + } + + if ((seg != CPU_REG_FS) && + (seg != CPU_REG_GS)) { + segbase = 0UL; + } else { + struct seg_desc desc; + + VM_PANIC(vcpu); + segbase = desc.base; + } + + gva = segbase + base + (uint64_t)vie->scale * idx + (uint64_t)vie->displacement; + + vie->gva = gva; + + if (vie_canonical_check(gva) != 0) { + VM_PANIC(vcpu); + } else { + #define PAGE_FAULT_WR_FLAG 0x00000002U + + vmrt_vm_gva2gpa(vcpu, gva); + ret = 0; + if (ret < 0) { + VM_PANIC(vcpu); + } else { + ret = 0; + } + } + + return ret; +} + +int32_t decode_instruction(struct vmrt_vm_vcpu *vcpu) +{ + struct instr_emul_ctxt *emul_ctxt; + uint32_t csar; + int32_t retval; + + emul_ctxt = vcpu->inst_ctxt; + retval = vie_init(&emul_ctxt->vie, vcpu); + + if (retval < 0) { + VM_PANIC(vcpu); + } else { + retval = local_decode_instruction(&emul_ctxt->vie); + + if (retval != 0) { + VM_PANIC(vcpu); + } else { + /* + * We do operand check in instruction decode phase and + * inject exception accordingly. In late instruction + * emulation, it will always success. + * + * We only need to do dst check for movs. For other instructions, + * they always has one register and one mmio which trigger EPT + * by access mmio. With VMX enabled, the related check is done + * by VMX itself before hit EPT violation. + * + */ + if ((emul_ctxt->vie.op.op_flags & VIE_OP_F_CHECK_GVA_DI) != 0U) { + VM_PANIC(vcpu); + } else { + retval = instr_check_gva(vcpu); + } + + if (retval >= 0) { + /* return the Memory Operand byte size */ + if ((emul_ctxt->vie.op.op_flags & VIE_OP_F_BYTE_OP) != 0U) { + retval = 1; + } else if ((emul_ctxt->vie.op.op_flags & VIE_OP_F_WORD_OP) != 0U) { + retval = 2; + } else { + retval = (int32_t)emul_ctxt->vie.opsize; + } + } + } + } + + return retval; +} + +int32_t emulate_instruction(struct vmrt_vm_vcpu *vcpu) +{ + struct instr_emul_vie *vie = &((struct instr_emul_ctxt *)vcpu->inst_ctxt)->vie; + int32_t error; + + if (vie->decoded != 0U) { + switch (vie->op.op_type) { + case VIE_OP_TYPE_MOV: + error = emulate_mov(vcpu, vie); + break; + default: + VM_PANIC(vcpu); + error = -EINVAL; + break; + } + } else { + VM_PANIC(vcpu); + error = -EINVAL; + } + + return error; +} diff --git a/src/components/implementation/simple_vmm/multi_vmm/instr_emul.h b/src/components/implementation/simple_vmm/multi_vmm/instr_emul.h new file mode 100644 index 0000000000..901428dcb4 --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/instr_emul.h @@ -0,0 +1,95 @@ +/*- + * Copyright (c) 2012 NetApp, Inc. + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef INSTR_EMUL_H +#define INSTR_EMUL_H + +#include +#include + +struct vmrt_vm_vcpu; +struct instr_emul_vie_op { + uint8_t op_type; /* type of operation (e.g. MOV) */ + uint16_t op_flags; +}; + +#define VIE_PREFIX_SIZE 4U +#define VIE_INST_SIZE 15U +struct instr_emul_vie { + uint8_t inst[VIE_INST_SIZE]; /* instruction bytes */ + uint8_t num_valid; /* size of the instruction */ + uint8_t num_processed; + + uint8_t addrsize:4, opsize:4; /* address and operand sizes */ + uint8_t rex_w:1, /* REX prefix */ + rex_r:1, + rex_x:1, + rex_b:1, + rex_present:1, + repz_present:1, /* REP/REPE/REPZ prefix */ + repnz_present:1, /* REPNE/REPNZ prefix */ + opsize_override:1, /* Operand size override */ + addrsize_override:1, /* Address size override */ + seg_override:1; /* Segment override */ + + uint8_t mod:2, /* ModRM byte */ + reg:4, + rm:4; + + uint8_t ss:2, /* SIB byte */ + index:4, + base:4; + + uint8_t disp_bytes; + uint8_t imm_bytes; + + uint8_t scale; + enum cpu_reg_name base_register; /* CPU_REG_xyz */ + enum cpu_reg_name index_register; /* CPU_REG_xyz */ + enum cpu_reg_name segment_register; /* CPU_REG_xyz */ + + int64_t displacement; /* optional addr displacement */ + int64_t immediate; /* optional immediate operand */ + + uint8_t decoded; /* set to 1 if successfully decoded */ + + uint8_t opcode; + struct instr_emul_vie_op op; /* opcode description */ + + uint64_t dst_gpa; /* saved dst operand gpa. Only for movs */ + uint64_t gva; /* saved gva for instruction emulation */ +}; + +struct instr_emul_ctxt { + struct instr_emul_vie vie; +}; + +int32_t emulate_instruction(struct vmrt_vm_vcpu *vcpu); +int32_t decode_instruction(struct vmrt_vm_vcpu *vcpu); + +#endif diff --git a/src/components/implementation/simple_vmm/multi_vmm/ioapic.h b/src/components/implementation/simple_vmm/multi_vmm/ioapic.h new file mode 100644 index 0000000000..55b214a1e4 --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/ioapic.h @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2018-2022 Intel Corporation. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef ARCH_X86_IOAPIC_H +#define ARCH_X86_IOAPIC_H + +#include + +#define NR_LEGACY_IRQ 16U +#define NR_LEGACY_PIN NR_LEGACY_IRQ + +struct ioapic_info { + uint8_t id; /* IOAPIC ID as indicated in ACPI MADT */ + uint32_t addr; /* IOAPIC Register address */ + uint32_t gsi_base; /* Global System Interrupt where this IO-APIC's interrupt input start */ + uint32_t nr_pins; /* Number of Interrupt inputs as determined by Max. Redir Entry Register */ +}; + +void ioapic_setup_irqs(void); + +bool is_ioapic_irq(uint32_t irq); +uint32_t gsi_to_ioapic_pin(uint32_t gsi); +int32_t init_ioapic_id_info(void); +uint8_t ioapic_irq_to_ioapic_id(uint32_t irq); + +uint8_t get_platform_ioapic_info (struct ioapic_info **plat_ioapic_info); + +/** + * @defgroup ioapic_ext_apis IOAPIC External Interfaces + * + * This is a group that includes IOAPIC External Interfaces. + * + * @{ + */ + +/** + * @brief Get irq num from gsi num + * + * @param[in] gsi The gsi number + * + * @return irq number + */ +uint32_t ioapic_gsi_to_irq(uint32_t gsi); +/** + * @brief Set the redirection table entry + * + * Set the redirection table entry of an interrupt + * + * @param[in] irq The number of irq to set + * @param[in] rte Union of ioapic_rte to set + */ +void ioapic_set_rte(uint32_t irq, union ioapic_rte rte); + +/** + * @brief Get the redirection table entry + * + * Get the redirection table entry of an interrupt + * + * @param[in] irq The number of irq to fetch RTE + * @param[inout] rte Pointer to union ioapic_rte to return result RTE + * + * @pre rte != NULL + */ +void ioapic_get_rte(uint32_t irq, union ioapic_rte *rte); + +/** + * @brief Suspend ioapic + * + * Suspend ioapic, mainly save the RTEs. + */ +void suspend_ioapic(void); + +/** + * @brief Resume ioapic + * + * Resume ioapic, mainly restore the RTEs. + */ +void resume_ioapic(void); + +/** + * @} + */ +/* End of ioapic_ext_apis */ + +void ioapic_gsi_mask_irq(uint32_t irq); +void ioapic_gsi_unmask_irq(uint32_t irq); + +void ioapic_get_rte_entry(void *ioapic_base, uint32_t pin, union ioapic_rte *rte); + +void *gsi_to_ioapic_base(uint32_t gsi); +uint32_t get_max_nr_gsi(void); +uint8_t get_gsi_to_ioapic_index(uint32_t gsi); +uint32_t get_pic_pin_from_ioapic_pin(uint32_t pin_index); +bool is_gsi_valid(uint32_t gsi); + +#endif /* ARCH_X86_IOAPIC_H */ diff --git a/src/components/implementation/simple_vmm/multi_vmm/irq.h b/src/components/implementation/simple_vmm/multi_vmm/irq.h new file mode 100644 index 0000000000..06c21c902a --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/irq.h @@ -0,0 +1,136 @@ +/* + * Copyright (C) 2018-2022 Intel Corporation. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef ARCH_X86_IRQ_H +#define ARCH_X86_IRQ_H + +#include + +/** + * @file arch/x86/asm/irq.h + * + * @brief public APIs for x86 IRQ handling + */ + +#define DBG_LEVEL_PTIRQ 6U +#define DBG_LEVEL_IRQ 6U + +#define NR_MAX_VECTOR 0xFFU +#define VECTOR_INVALID (NR_MAX_VECTOR + 1U) + +/* # of NR_STATIC_MAPPINGS_1 entries for timer, vcpu notify, and PMI */ +#define NR_STATIC_MAPPINGS_1 3U + +/* + * The static IRQ/Vector mapping table in irq.c consists of the following entries: + * # of NR_STATIC_MAPPINGS_1 entries for timer, vcpu notify, and PMI + * + * # of CONFIG_MAX_VM_NUM entries for posted interrupt notification, platform + * specific but known at build time: + * Allocate unique Activation Notification Vectors (ANV) for each vCPU that belongs + * to the same pCPU, the ANVs need only be unique within each pCPU, not across all + * vCPUs. The max numbers of vCPUs may be running on top of a pCPU is CONFIG_MAX_VM_NUM, + * since ACRN does not support 2 vCPUs of same VM running on top of same pCPU. + * This reduces # of pre-allocated ANVs for posted interrupts to CONFIG_MAX_VM_NUM, + * and enables ACRN to avoid switching between active and wake-up vector values + * in the posted interrupt descriptor on vCPU scheduling state changes. + */ +#define NR_STATIC_MAPPINGS (NR_STATIC_MAPPINGS_1 + CONFIG_MAX_VM_NUM) + +#define HYPERVISOR_CALLBACK_HSM_VECTOR 0xF3U + +/* vectors range for dynamic allocation, usually for devices */ +#define VECTOR_DYNAMIC_START 0x20U +#define VECTOR_DYNAMIC_END 0xDFU + +/* vectors range for fixed vectors, usually for HV service */ +#define VECTOR_FIXED_START 0xE0U +#define VECTOR_FIXED_END 0xFFU + +#define TIMER_VECTOR (VECTOR_FIXED_START) +#define NOTIFY_VCPU_VECTOR (VECTOR_FIXED_START + 1U) +#define PMI_VECTOR (VECTOR_FIXED_START + 2U) +/* + * Starting vector for posted interrupts + * # of CONFIG_MAX_VM_NUM (POSTED_INTR_VECTOR ~ (POSTED_INTR_VECTOR + CONFIG_MAX_VM_NUM - 1U)) + * consecutive vectors reserved for posted interrupts + */ +#define POSTED_INTR_VECTOR (VECTOR_FIXED_START + NR_STATIC_MAPPINGS_1) + +#define TIMER_IRQ (NR_IRQS - 1U) +#define NOTIFY_VCPU_IRQ (NR_IRQS - 2U) +#define PMI_IRQ (NR_IRQS - 3U) +/* + * Starting IRQ for posted interrupts + * # of CONFIG_MAX_VM_NUM (POSTED_INTR_IRQ ~ (POSTED_INTR_IRQ + CONFIG_MAX_VM_NUM - 1U)) + * consecutive IRQs reserved for posted interrupts + */ +#define POSTED_INTR_IRQ (NR_IRQS - NR_STATIC_MAPPINGS_1 - CONFIG_MAX_VM_NUM) + +/* the maximum number of msi entry is 2048 according to PCI + * local bus specification + */ +#define MAX_MSI_ENTRY 0x800U + +#define INVALID_INTERRUPT_PIN 0xffffffffU + +/* + * x86 irq data + */ +struct x86_irq_data { + uint32_t vector; /**< assigned vector */ +#ifdef PROFILING_ON + uint64_t ctx_rip; + uint64_t ctx_rflags; + uint64_t ctx_cs; +#endif +}; + +struct intr_excp_ctx; + +/** + * @brief Allocate a vectror and bind it to irq + * + * For legacy irq (num < 16) and statically mapped ones, do nothing + * if mapping is correct. + * + * @param[in] irq The irq num to bind + * + * @return valid vector num on susccess, VECTOR_INVALID on failure + */ +uint32_t alloc_irq_vector(uint32_t irq); + +/** + * @brief Get vector number of an interrupt from irq number + * + * @param[in] irq The irq_num to convert + * + * @return vector number + */ +uint32_t irq_to_vector(uint32_t irq); + +/** + * @brief Dispatch interrupt + * + * To dispatch an interrupt, an action callback will be called if registered. + * + * @param ctx Pointer to interrupt exception context + */ +void dispatch_interrupt(const struct intr_excp_ctx *ctx); + +/* Arch specific routines called from generic IRQ handling */ + +struct irq_desc; + +void init_irq_descs_arch(struct irq_desc *descs); +void setup_irqs_arch(void); +void init_interrupt_arch(uint16_t pcpu_id); +void free_irq_arch(uint32_t irq); +bool request_irq_arch(uint32_t irq); +void pre_irq_arch(const struct irq_desc *desc); +void post_irq_arch(const struct irq_desc *desc); + +#endif /* ARCH_X86_IRQ_H */ diff --git a/src/components/implementation/simple_vmm/multi_vmm/netio.c b/src/components/implementation/simple_vmm/multi_vmm/netio.c new file mode 100644 index 0000000000..cc0e4acdbb --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/netio.c @@ -0,0 +1,274 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +shm_bm_objid_t +netio_get_a_packet(u16_t *pkt_len) +{ + struct netshmem_pkt_buf *tx_obj; + shm_bm_t tx_shmemd = 0; + shm_bm_objid_t tx_pktid; + u16_t _pkt_len = 0; + + tx_shmemd = netshmem_get_shm(); + tx_obj = shm_bm_alloc_net_pkt_buf(tx_shmemd, &tx_pktid); + assert(tx_obj); + + virtio_net_send_one_pkt(tx_obj->data, &_pkt_len); + *pkt_len = _pkt_len; + + return tx_pktid; +} + +void pkt_hex_dump(void *_data, u16_t len) +{ + int rowsize = 16; + int i, l, linelen, remaining; + int li = 0; + u8_t *data, ch; + + data = _data; + + printc("Packet hex dump, len:%d\n", len); + remaining = len; + for (i = 0; i < len; i += rowsize) { + printc("%06d\t", li); + + linelen = remaining < rowsize ? remaining : rowsize; + remaining -= rowsize; + + for (l = 0; l < linelen; l++) { + ch = data[l]; + printc( "%02X ", (u32_t) ch); + } + + data += linelen; + li += 10; + + printc( "dump done\n"); + } +} + +#if 0 +shm_bm_objid_t +netio_get_a_packet_batch(u8_t batch_limit) +{ + struct netshmem_pkt_buf *tx_obj; + shm_bm_t tx_shmemd = 0; + shm_bm_objid_t tx_pktid; + u16_t _pkt_len = 0; + shm_bm_objid_t first_objid; + struct netshmem_pkt_buf *first_obj; + struct netshmem_pkt_pri *first_obj_pri; + struct netshmem_meta_tuple *pkt_arr; + u8_t batch_ct = 0; + + tx_shmemd = netshmem_get_shm(); + tx_obj = first_obj = shm_bm_alloc_net_pkt_buf(tx_shmemd, &tx_pktid); + assert(tx_obj); + first_objid = tx_pktid; + first_obj_pri = netshmem_get_pri(tx_obj); + pkt_arr = (struct netshmem_meta_tuple *)&first_obj_pri->pkt_arr; + first_obj_pri->batch_len = 0; + + while (batch_ct < batch_limit) { + assert(tx_obj); + if (likely(batch_ct > 0)) { + tx_obj = shm_bm_alloc_net_pkt_buf(tx_shmemd, &tx_pktid); + assert(tx_obj); + } + + virtio_net_send_one_pkt(netshmem_get_data_buf(tx_obj), &_pkt_len); + + // pkt_hex_dump(netshmem_get_data_buf(tx_obj), _pkt_len); + if (likely(_pkt_len != 0)) { + pkt_arr[batch_ct].obj_id = tx_pktid; + pkt_arr[batch_ct].pkt_len = _pkt_len; + batch_ct++; + } else { + if (batch_ct == 0) { + sched_thd_yield(); + } else { + shm_bm_free_net_pkt_buf(tx_obj); + break; + } + } + } + first_obj_pri->batch_len = batch_ct; + return first_objid; +} +#endif + +struct nf_svc { + int svc_id; + struct vmrt_vm_comp *vm; +}; + +#define MAX_NFS 10 +#define MAX_THD_PER_NF 100 + +static struct nf_svc nf_svc_tbl[MAX_NFS][MAX_THD_PER_NF]; + +void +nf_svc_update(compid_t nf_id, int thd, int svc_id, struct vmrt_vm_comp *vm) +{ + // printc("svc update:%d, %d, %d\n", nf_id, thd, nf_svc_tbl[nf_id][thd].svc_id); + if (nf_svc_tbl[nf_id][thd].svc_id < 0) { + nf_svc_tbl[nf_id][thd].svc_id = svc_id; + nf_svc_tbl[nf_id][thd].vm = vm; + } else { + return; + } +} + +void +nf_svc_init(void) +{ + for (int i = 0; i < MAX_NFS; i++) { + for (int j = 0; j < MAX_THD_PER_NF; j++) { + nf_svc_tbl[i][j].svc_id = -1; + nf_svc_tbl[i][j].vm = NULL; + } + } +} + +shm_bm_objid_t +netio_get_a_packet_batch(u8_t batch_limit) +{ + shm_bm_objid_t first_objid; + struct netshmem_pkt_buf *first_obj; + struct netshmem_pkt_pri *first_obj_pri; + struct netshmem_pkt_buf *tx_obj; + shm_bm_objid_t tx_pktid; + struct netshmem_meta_tuple *pkt_arr; + + struct nf_session *session; + struct nf_pkt_meta_data buf; + u8_t batch_ct = 0; + compid_t vmm_id = cos_compid(); + compid_t nf_id = (compid_t)cos_inv_token(); + if (nf_id == 0) nf_id = vmm_id; + thdid_t nf_thd = cos_thdid(); + + int svc_id = nf_svc_tbl[nf_id][nf_thd].svc_id; + + if (svc_id < 0) { + printc("no svc available for this nf:%d, thd:%d\n", nf_id, nf_thd); + assert(0); + } + + session = get_nf_session(svc_id); + + while (nf_tx_ring_buf_empty(&session->nf_tx_ring_buf)) { + sched_thd_yield(); + } + + assert(nf_tx_ring_buf_dequeue(&session->nf_tx_ring_buf, &buf)); + tx_obj = first_obj = buf.obj; + assert(tx_obj); + tx_pktid = first_objid = buf.objid; + first_obj_pri = netshmem_get_pri(tx_obj); + pkt_arr = (struct netshmem_meta_tuple *)&first_obj_pri->pkt_arr; + first_obj_pri->batch_len = 0; + + pkt_arr[batch_ct].obj_id = tx_pktid; + pkt_arr[batch_ct].pkt_len = buf.pkt_len; + batch_ct++; + + while (batch_ct < batch_limit && nf_tx_ring_buf_dequeue(&session->nf_tx_ring_buf, &buf)) { + // printc("netio out a pkt, batch_ct:%d\n", batch_ct); + pkt_arr[batch_ct].obj_id = buf.objid; + pkt_arr[batch_ct].pkt_len = buf.pkt_len; + batch_ct++; + } + + first_obj_pri->batch_len = batch_ct; + return first_objid; +} + +int +netio_send_packet(shm_bm_objid_t pktid, u16_t pkt_len) +{ + struct netshmem_pkt_buf *rx_obj; + shm_bm_t rx_shmemd = 0; + + rx_shmemd = netshmem_get_shm(); + + rx_obj = shm_bm_transfer_net_pkt_buf(rx_shmemd, pktid); + virtio_net_rcv_one_pkt(rx_obj->data, pkt_len); + shm_bm_free_net_pkt_buf(rx_obj); + + return 0; +} + + +int +netio_send_packet_batch(shm_bm_objid_t pktid) +{ + struct netshmem_pkt_buf *rx_obj; + shm_bm_objid_t first_objid; + struct netshmem_pkt_buf *first_obj; + struct netshmem_pkt_pri *first_obj_pri; + struct netshmem_meta_tuple *pkt_arr; + u16_t pkt_len; + u8_t batch_tc = 0; + shm_bm_t rx_shmemd = 0; + + rx_shmemd = netshmem_get_shm(); + first_objid = pktid; + + + first_obj = shm_bm_transfer_net_pkt_buf(rx_shmemd, first_objid); + + first_obj_pri = netshmem_get_pri(first_obj); + pkt_arr = (struct netshmem_meta_tuple *)&(first_obj_pri->pkt_arr); + batch_tc = first_obj_pri->batch_len; + + pkt_len = pkt_arr[0].pkt_len; + // pkt_hex_dump(netshmem_get_data_buf(first_obj), pkt_len); + virtio_net_rcv_one_pkt(netshmem_get_data_buf(first_obj), pkt_len); + + for (u8_t i = 1; i < batch_tc; i++) { + pkt_len = pkt_arr[i].pkt_len; + pktid = pkt_arr[i].obj_id; + rx_obj = shm_bm_transfer_net_pkt_buf(rx_shmemd, pktid); + virtio_net_rcv_one_pkt(netshmem_get_data_buf(rx_obj), pkt_len); + shm_bm_free_net_pkt_buf(rx_obj); + } + + shm_bm_free_net_pkt_buf(first_obj); + + return 0; +} + +void +netio_shmem_map(cbuf_t shm_id) +{ + netshmem_map_shmem(shm_id); +} + +extern struct vmrt_vm_comp *vm_list[2]; + +void +netio_svc_update(int svc_id, u32_t vm) +{ + compid_t nf_id = cos_inv_token(); + thdid_t thd = cos_thdid(); + assert(vm < 2); + shm_bm_t tx_shm = netshmem_get_shm(); + assert(tx_shm); + + nf_svc_update(nf_id, thd, svc_id, vm_list[vm]); + + struct nf_session *session; + session = get_nf_session(svc_id); + nf_session_tx_update(session, tx_shm, thd); + sync_sem_init(&session->tx_sem, 0); + + nf_tx_ring_buf_init(&session->nf_tx_ring_buf, NF_TX_PKT_RBUF_NUM, NF_TX_PKT_RING_SZ); +} diff --git a/src/components/implementation/simple_vmm/multi_vmm/nf_session.c b/src/components/implementation/simple_vmm/multi_vmm/nf_session.c new file mode 100644 index 0000000000..a5d56bdb82 --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/nf_session.c @@ -0,0 +1,74 @@ +#pragma once + +#include + +CK_RING_PROTOTYPE(nf_tx_ring_buf, nf_pkt_meta_data); + +static char ring_buffers[NF_TX_MAX_RING_NUM][NF_TX_PKT_RING_SZ]; +static struct nf_session nf_sessions[MAX_SVC_NUM]; + +void +nf_sessions_init(void) +{ + for (int i = 0; i < MAX_SVC_NUM; i++) { + nf_sessions[i].rx_shmemd = 0; + nf_sessions[i].rx_thd = 0; + nf_sessions[i].tx_shmemd = 0; + nf_sessions[i].tx_thd = 0; + nf_sessions[i].nf_tx_ring_buf.ring = 0; + nf_sessions[i].nf_tx_ring_buf.ringbuf = 0; + + } +} + +void +nf_tx_ring_buf_init(struct nf_tx_ring_buf *pkt_ring_buf, size_t ringbuf_num, size_t ringbuf_sz) +{ + struct ck_ring *buf_addr; + + /* prevent multiple thread from contending memory */ + assert(cos_thdid() < 30); + buf_addr = (struct ck_ring *)&ring_buffers[cos_thdid()]; + + ck_ring_init(buf_addr, ringbuf_num); + + pkt_ring_buf->ring = buf_addr; + pkt_ring_buf->ringbuf = (struct pkt_buf *)((char *)buf_addr + sizeof(struct ck_ring)); +} + +inline int +nf_tx_ring_buf_enqueue(struct nf_tx_ring_buf *pkt_ring_buf, struct nf_pkt_meta_data *buf) +{ + assert(pkt_ring_buf->ring && pkt_ring_buf->ringbuf); + + return CK_RING_ENQUEUE_SPSC(nf_tx_ring_buf, pkt_ring_buf->ring, pkt_ring_buf->ringbuf, buf); +} + +inline int +nf_tx_ring_buf_dequeue(struct nf_tx_ring_buf *pkt_ring_buf, struct nf_pkt_meta_data *buf) +{ + assert(pkt_ring_buf->ring && pkt_ring_buf->ringbuf); + + return CK_RING_DEQUEUE_SPSC(nf_tx_ring_buf, pkt_ring_buf->ring, pkt_ring_buf->ringbuf, buf); +} + +inline int +nf_tx_ring_buf_empty(struct nf_tx_ring_buf *pkt_ring_buf) +{ + assert(pkt_ring_buf->ring); + + return (!ck_ring_size(pkt_ring_buf->ring)); +} + +struct nf_session *get_nf_session(int svc_id) +{ + if (unlikely(svc_id < 0 || svc_id > 1000)) return &nf_sessions[0]; + else return &nf_sessions[svc_id]; +} + +void +nf_session_tx_update(struct nf_session *session, shm_bm_t tx_shmemd, thdid_t tx_thd) +{ + session->tx_shmemd = tx_shmemd; + session->tx_thd = tx_thd; +} diff --git a/src/components/implementation/simple_vmm/multi_vmm/nf_session.h b/src/components/implementation/simple_vmm/multi_vmm/nf_session.h new file mode 100644 index 0000000000..00f81a0d44 --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/nf_session.h @@ -0,0 +1,49 @@ +#include +#include +#include +#include + +struct nf_pkt_meta_data { + void *obj; + shm_bm_objid_t objid; + u16_t pkt_len; +}; + +struct nf_tx_ring_buf { + struct ck_ring *ring; + struct nf_pkt_meta_data *ringbuf; +}; + +struct nf_session { + shm_bm_t rx_shmemd; + shm_bm_t tx_shmemd; + + thdid_t rx_thd; + thdid_t tx_thd; + + struct sync_sem tx_sem; + + struct nf_tx_ring_buf nf_tx_ring_buf; +}; + +#define NF_TX_PKT_RBUF_NUM 512 +#define NF_TX_PKT_RBUF_SZ (NF_TX_PKT_RBUF_NUM * sizeof(struct nf_tx_ring_buf)) +#define NF_TX_PKT_RING_SZ (sizeof(struct ck_ring) + NF_TX_PKT_RBUF_SZ) +#define NF_TX_PKT_RING_PAGES (round_up_to_page(NF_TX_PKT_RING_SZ)/PAGE_SIZE) + +#define NF_TX_MAX_RING_NUM 30 + +#define MAX_NF_SESSION 10 + +#define MAX_SVC_NUM (20000) + +struct nf_session *get_nf_session(int svc_id); +void nf_session_tx_update(struct nf_session *session, shm_bm_t tx_shmemd, thdid_t tx_thd); +void nf_tx_ring_buf_init(struct nf_tx_ring_buf *pkt_ring_buf, size_t ringbuf_num, size_t ringbuf_sz); +int nf_tx_ring_buf_enqueue(struct nf_tx_ring_buf *pkt_ring_buf, struct nf_pkt_meta_data *buf); +int nf_tx_ring_buf_dequeue(struct nf_tx_ring_buf *pkt_ring_buf, struct nf_pkt_meta_data *buf); +int nf_tx_ring_buf_empty(struct nf_tx_ring_buf *pkt_ring_buf); + +void nf_svc_update(compid_t nf_id, int thd_id, int svc_id, struct vmrt_vm_comp *vm); +void nf_svc_init(void); +void nf_sessions_init(void); diff --git a/src/components/implementation/simple_vmm/multi_vmm/simple_vmm.c b/src/components/implementation/simple_vmm/multi_vmm/simple_vmm.c new file mode 100644 index 0000000000..a05244d9f7 --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/simple_vmm.c @@ -0,0 +1,381 @@ +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#define NF_THD_PRIORITY 31 + +#define NO_NF_TEST 1 + +#define RX_BATCH 1 +#define TX_BATCH 1 + +#define RX_PROCESSING 0 +#define TX_PROCESSING 0 + +thdid_t rx_tid = 0; +thdid_t tx_tid = 0; + +thdid_t virtio_tx_tid = 0; + +char tx_nf_buffer[4096]; +char rx_nf_buffer[4096]; + + +INCBIN(vmlinux, "guest/vmlinux.img") +INCBIN(bios, "guest/guest.img") + +/* Currently only have one VM component globally managed by this VMM */ +static struct vmrt_vm_comp *g_vm; +static struct vmrt_vm_comp *g_vm1; + +struct vmrt_vm_comp *vm_list[2] = {0}; + +#define VM_MAX_COMPS (2) +#define GUEST_MEM_SZ (310*1024*1024) + +SS_STATIC_SLAB(vm_comp, struct vmrt_vm_comp, VM_MAX_COMPS); +SS_STATIC_SLAB(vm_lapic, struct acrn_vlapic, VM_MAX_COMPS * VMRT_VM_MAX_VCPU); +SS_STATIC_SLAB(vcpu_inst_ctxt, struct instr_emul_ctxt, VM_MAX_COMPS * VMRT_VM_MAX_VCPU); +SS_STATIC_SLAB(vm_io_apic, struct acrn_vioapics, VM_MAX_COMPS); +SS_STATIC_SLAB(vcpu_mmio_req, struct acrn_mmio_request, VM_MAX_COMPS * VMRT_VM_MAX_VCPU); + +struct sync_lock vm_boot_lock; + +void +pause_handler(struct vmrt_vm_vcpu *vcpu) +{ + sched_thd_yield(); + GOTO_NEXT_INST(vcpu->shared_region); +} + +void +hlt_handler(struct vmrt_vm_vcpu *vcpu) +{ + sched_thd_yield(); + GOTO_NEXT_INST(vcpu->shared_region); +} + +void +mmio_init(struct vmrt_vm_vcpu *vcpu) +{ + vcpu->mmio_request = ss_vcpu_mmio_req_alloc(); + assert(vcpu->mmio_request); + + ss_vcpu_mmio_req_activate(vcpu->mmio_request); +} + +void +ioapic_init(struct vmrt_vm_comp *vm) +{ + vm->ioapic = ss_vm_io_apic_alloc(); + assert(vm->ioapic); + + vioapic_init(vm); + ss_vm_io_apic_activate(vm->ioapic); +} + +void +iinst_ctxt_init(struct vmrt_vm_vcpu *vcpu) +{ + vcpu->inst_ctxt = ss_vcpu_inst_ctxt_alloc(); + assert(vcpu->inst_ctxt); + + ss_vcpu_inst_ctxt_activate(vcpu->inst_ctxt); +} + +void +lapic_init(struct vmrt_vm_vcpu *vcpu) +{ + struct acrn_vlapic *vlapic = ss_vm_lapic_alloc(); + assert(vlapic); + + /* A vcpu can only have one vlapic */ + assert(vcpu->vlapic == NULL); + + vcpu->vlapic = vlapic; + vlapic->apic_page = vcpu->lapic_page; + vlapic->vcpu = vcpu; + + /* Status: enable APIC and vector be 0xFF */ + vlapic_reset(vlapic); + + ss_vm_lapic_activate(vlapic); + return; +} + +struct vmrt_vm_comp * +vm_comp_create(void) +{ + u64_t guest_mem_sz = GUEST_MEM_SZ; + u64_t num_vcpu = 1; + void *start; + void *end; + cbuf_t shm_id; + void *mem, *vm_mem; + size_t sz; + + struct vmrt_vm_comp *vm = ss_vm_comp_alloc(); + assert(vm); + + vmrt_vm_create(vm, "vmlinux-5.15", num_vcpu, guest_mem_sz); + + /* Allocate memory for the VM */ + shm_id = memmgr_shared_page_allocn_aligned(guest_mem_sz / PAGE_SIZE_4K, PAGE_SIZE_4K, (vaddr_t *)&mem); + /* Make the memory accessible to VM */ + int ret = memmgr_shared_page_map_aligned_in_vm(shm_id, PAGE_SIZE_4K, (vaddr_t *)&vm_mem, vm->comp_id); + vmrt_vm_mem_init(vm, mem); + printc("created VM with %u cpus, memory size: %luMB, at host vaddr: %p\n", vm->num_vcpu, vm->guest_mem_sz/1024/1024, vm->guest_addr); + + ss_vm_comp_activate(vm); + + start = &incbin_bios_start; + end = &incbin_bios_end; + sz = end - start + 1; + + printc("BIOS image start: %p, end: %p, size: %lu(%luKB)\n", start, end, sz, sz/1024); + vmrt_vm_data_copy_to(vm, start, sz, PAGE_SIZE_4K); + + start = &incbin_vmlinux_start; + end = &incbin_vmlinux_end; + sz = end - start + 1; + + printc("Guest Linux image start: %p, end: %p, size: %lu(%luMB)\n", start, end, sz, sz/1024/1024); + #define GUEST_IMAGE_ADDR 0x100000 + vmrt_vm_data_copy_to(vm, start, sz, GUEST_IMAGE_ADDR); + + ioapic_init(vm); + + printc("Guest(%s) image has been loaded into the VM component\n", vm->name); + + return vm; +} + +#if 0 +static void +tx_task(void) +{ + u16_t pkt_len; + shm_bm_objid_t objid; + + // netio_shmem_map(netshmem_get_shm_id()); + nic_shmem_map(netshmem_get_shm_id()); + + shm_bm_objid_t first_objid; + struct netshmem_pkt_buf *first_obj; + struct netshmem_pkt_pri *first_obj_pri; + struct netshmem_meta_tuple *pkt_arr; + u8_t tx_batch_ct = 0; + struct netshmem_pkt_buf *tx_obj; + + nic_bind_port(0, 1); + + shm_bm_t tx_shmemd = 0; + tx_shmemd = netshmem_get_shm(); + + while(1) { +#if !TX_BATCH + objid = netio_get_a_packet(&pkt_len); + nic_send_packet(objid, 0, pkt_len); + +#else + u8_t batch_ct = 32; + + first_objid = objid = netio_get_a_packet_batch(batch_ct); + first_obj = shm_bm_transfer_net_pkt_buf(tx_shmemd, objid); + first_obj_pri = netshmem_get_pri(first_obj); + pkt_arr = (struct netshmem_meta_tuple *)&(first_obj_pri->pkt_arr); + tx_batch_ct = first_obj_pri->batch_len; + +#if TX_PROCESSING + for (u8_t i = 0; i < tx_batch_ct; i++) { + pkt_len = pkt_arr[i].pkt_len; + objid = pkt_arr[i].obj_id; + tx_obj = shm_bm_transfer_net_pkt_buf(tx_shmemd, objid); + memcpy(tx_nf_buffer, netshmem_get_data_buf(tx_obj), pkt_len); + } +#endif + nic_send_packet_batch(first_objid); +#endif + } +} +#endif + +static void +rx_task(void) +{ + /* TODO: port NF applications here */ + shm_bm_objid_t objid; + struct netshmem_pkt_buf *rx_obj; + shm_bm_objid_t first_objid; + struct netshmem_pkt_buf *first_obj; + struct netshmem_pkt_pri *first_obj_pri; + struct netshmem_meta_tuple *pkt_arr; + u16_t pkt_len; + u32_t ip; + + u8_t batch_ct = 50; + + // netio_shmem_map(netshmem_get_shm_id()); + nic_shmem_map(netshmem_get_shm_id()); + ip = inet_addr("10.10.1.3"); + + nic_bind_port(ip, 0); + + int i = 0; + u64_t times = 0; + u64_t overhead = 0; + + shm_bm_t rx_shmemd = 0; + + rx_shmemd = netshmem_get_shm(); + while(1) + { + u8_t rx_batch_ct = 0; +#if !RX_BATCH + objid = nic_get_a_packet(&pkt_len); + netio_send_packet(objid, pkt_len); +#else + first_objid = nic_get_a_packet_batch(batch_ct); + + first_obj = shm_bm_transfer_net_pkt_buf(rx_shmemd, first_objid); + first_obj_pri = netshmem_get_pri(first_obj); + pkt_arr = (struct netshmem_meta_tuple *)&(first_obj_pri->pkt_arr); + rx_batch_ct = first_obj_pri->batch_len; +#if RX_PROCESSING + for (u8_t i = 0; i < rx_batch_ct; i++) { + pkt_len = pkt_arr[i].pkt_len; + objid = pkt_arr[i].obj_id; + rx_obj = shm_bm_transfer_net_pkt_buf(rx_shmemd, objid); + memcpy(rx_nf_buffer, netshmem_get_data_buf(rx_obj), pkt_len); + } +#endif + + netio_send_packet_batch(first_objid); +#endif + } +} + +static void +tx_task(void) +{ + u16_t pkt_len; + shm_bm_objid_t objid; + + nic_shmem_map(netshmem_get_shm_id()); + + shm_bm_objid_t first_objid; + struct netshmem_pkt_buf *first_obj; + struct netshmem_pkt_pri *first_obj_pri; + struct netshmem_meta_tuple *pkt_arr; + u8_t tx_batch_ct = 0; + struct netshmem_pkt_buf *tx_obj; + u32_t ip; + + shm_bm_t tx_shmemd = 0; + tx_shmemd = netshmem_get_shm(); + ip = inet_addr("10.10.1.3"); + + nic_bind_port(ip, 1); + int svc_id = 0; + + nf_svc_update(cos_compid(), cos_thdid(), svc_id, g_vm); + + struct nf_session *session; + session = get_nf_session(svc_id); + nf_session_tx_update(session, tx_shmemd, cos_thdid()); + sync_sem_init(&session->tx_sem, 0); + + nf_tx_ring_buf_init(&session->nf_tx_ring_buf, NF_TX_PKT_RBUF_NUM, NF_TX_PKT_RING_SZ); + + virtio_tx_task(0); +} + +void +cos_init(void) +{ + + nf_svc_init(); + nf_sessions_init(); + + struct vmrt_vm_vcpu *vcpu; + g_vm = vm_comp_create(); + printc("created vm done:%d, %p\n", g_vm->comp_id, g_vm); + g_vm->vm_mac_id = 0; + + vm_list[0] = g_vm; +} + +void +cos_parallel_init(coreid_t cid, int init_core, int ncores) +{ + struct vmrt_vm_vcpu *vcpu; + + if (cid == 0) { + } else { + rx_tid = sched_thd_create((void *)rx_task, NULL); + netshmem_create(rx_tid); + tx_tid = sched_thd_create((void *)tx_task, NULL); + netshmem_create(tx_tid); + printc("NF rx tid:%ld, tx tid:%ld\n", rx_tid, tx_tid); + + vmrt_vm_vcpu_init(g_vm, 0); + vcpu = vmrt_get_vcpu(g_vm, 0); + + lapic_init(vcpu); + iinst_ctxt_init(vcpu); + mmio_init(vcpu); + } + + return; +} + +void +parallel_main(coreid_t cid) +{ + struct vmrt_vm_vcpu *vcpu; + + if (cid == 0) { + } else if(cid == 1) { + sched_thd_block_timeout(0, time_now() + time_usec2cyc(20000000)); + printc("------STARTING SECOND VM------\n"); + vcpu = vmrt_get_vcpu(g_vm, 0); + vmrt_vm_vcpu_start(vcpu); + + sched_thd_param_set(rx_tid, sched_param_pack(SCHEDP_PRIO, NF_THD_PRIORITY)); + sched_thd_param_set(tx_tid, sched_param_pack(SCHEDP_PRIO, NF_THD_PRIORITY)); + + + } + + while (1) + { + sched_thd_block(0); + /* Should not be here, or there is a bug in the scheduler! */ + assert(0); + } + + +} diff --git a/src/components/implementation/simple_vmm/multi_vmm/vcpuid.c b/src/components/implementation/simple_vmm/multi_vmm/vcpuid.c new file mode 100644 index 0000000000..0335ccb596 --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/vcpuid.c @@ -0,0 +1,766 @@ +#include +#include +#include +#include +#include +#include +#include "cpu.h" +#include "cpuid.h" +#include "vcpuid.h" +#include "cpu_caps.h" +#include "apicreg.h" + +/* + * Copyright (C) 2018-2022 Intel Corporation. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +static struct cpuinfo_x86 boot_cpu_data; +static struct vcpuid_entry vcpuid_entries[MAX_VM_VCPUID_ENTRIES]; +static u32_t g_entry_nr = 0, g_vcpuid_level, g_vcpuid_xlevel; +void memcpy_erms(void *d, const void *s, size_t slen) +{ + asm volatile ("rep; movsb" + : "=&D"(d), "=&S"(s) + : "c"(slen), "0" (d), "1" (s) + : "memory"); +} + +static uint64_t get_address_mask(uint8_t limit) +{ + return ((1UL << limit) - 1UL) & PAGE_MASK; +} + +/* + * @brief Copies at most slen bytes from src address to dest address, up to dmax. + * + * INPUTS + * + * @param[in] d pointer to Destination address + * @param[in] dmax maximum length of dest + * @param[in] s pointer to Source address + * @param[in] slen maximum number of bytes of src to copy + * + * @return 0 for success and -1 for runtime-constraint violation. + */ +int32_t memcpy_s(void *d, size_t dmax, const void *s, size_t slen) +{ + int32_t ret = -1; + + if ((d != NULL) && (s != NULL) && (dmax >= slen) && ((d > (s + slen)) || (s > (d + dmax)))) { + if (slen != 0U) { + memcpy_erms(d, s, slen); + } + ret = 0; + } else { + (void)memset(d, 0U, dmax); + } + + return ret; +} + +uint32_t get_tsc_khz(void) +{ + //3100.000 MHz + return 3100000; +} + +struct cpuinfo_x86 *get_pcpu_info(void) +{ + return &boot_cpu_data; +} + +/** + * initialization of virtual CPUID leaf + */ +static void init_vcpuid_entry(uint32_t leaf, uint32_t subleaf, + uint32_t flags, struct vcpuid_entry *entry) +{ + struct cpuinfo_x86 *cpu_info; + + entry->leaf = leaf; + entry->subleaf = subleaf; + entry->flags = flags; + + switch (leaf) { + + case 0x06U: + cpuid_subleaf(leaf, subleaf, &entry->eax, &entry->ebx, &entry->ecx, &entry->edx); + entry->eax &= ~(CPUID_EAX_DTHERM | CPUID_EAX_HWP | CPUID_EAX_HWP_N | CPUID_EAX_HWP_AW | CPUID_EAX_HWP_EPP | CPUID_EAX_HWP_PLR); + entry->ecx &= ~CPUID_ECX_HCFC; + break; + + case 0x07U: + if (subleaf == 0U) { + cpuid_subleaf(leaf, subleaf, &entry->eax, &entry->ebx, &entry->ecx, &entry->edx); + + entry->ebx &= ~(CPUID_EBX_PQM | CPUID_EBX_PQE); + + /* mask LA57 */ + entry->ecx &= ~CPUID_ECX_LA57; + + /* mask CPUID_EDX_IBRS_IBPB */ + entry->edx &= ~CPUID_EDX_IBRS_IBPB; + + /* mask SGX and SGX_LC */ + entry->ebx &= ~CPUID_EBX_SGX; + entry->ecx &= ~CPUID_ECX_SGX_LC; + + /* mask MPX */ + entry->ebx &= ~CPUID_EBX_MPX; + + /* mask Intel Processor Trace, since 14h is disabled */ + entry->ebx &= ~CPUID_EBX_PROC_TRC; + + /* mask CET shadow stack and indirect branch tracking */ + entry->ecx &= ~CPUID_ECX_CET_SS; + entry->edx &= ~CPUID_EDX_CET_IBT; + + // entry->ebx &= ~CPUID_EBX_FSGSBASE; + + entry->ebx &= ~CPUID_EBX_SMEP; + + entry->ebx &= ~CPUID_EBX_SMAP; + + entry->ecx &= ~CPUID_ECX_UMIP; + + entry->ecx &= ~CPUID_ECX_PKE; + + entry->ecx &= ~CPUID_ECX_LA57; + + entry->ecx &= ~CPUID_ECX_PKS; + } else { + entry->eax = 0U; + entry->ebx = 0U; + entry->ecx = 0U; + entry->edx = 0U; + } + break; + + case 0x16U: + cpu_info = get_pcpu_info(); + if (cpu_info->cpuid_level >= 0x16U) { + /* + * call the cpuid when 0x16 is supported, + * but nested vmx will not return correct values, + * thus use the second way here. If you are using + * the real hardware, can test if this will work. + */ + // cpuid_subleaf(leaf, subleaf, &entry->eax, &entry->ebx, &entry->ecx, &entry->edx); + + /* Use the tsc to derive the emulated 0x16U cpuid. */ + entry->eax = (uint32_t) (get_tsc_khz() / 1000U); + entry->ebx = entry->eax; + /* Bus frequency: hard coded to 100M */ + entry->ecx = 100U; + entry->edx = 0U; + + } else { + /* Use the tsc to derive the emulated 0x16U cpuid. */ + entry->eax = (uint32_t) (get_tsc_khz() / 1000U); + entry->ebx = entry->eax; + /* Bus frequency: hard coded to 100M */ + entry->ecx = 100U; + entry->edx = 0U; + } + break; + + /* + * Leaf 0x40000000 + * This leaf returns the CPUID leaf range supported by the + * hypervisor and the hypervisor vendor signature. + * + * EAX: The maximum input value for CPUID supported by the + * hypervisor. + * EBX, ECX, EDX: Hypervisor vendor ID signature. + */ + case 0x40000000U: + { + static const char sig[12] = "ACRNACRNACRN"; + const uint32_t *sigptr = (const uint32_t *)sig; + + entry->eax = 0x40000010U; + entry->ebx = sigptr[0]; + entry->ecx = sigptr[1]; + entry->edx = sigptr[2]; + break; + } + + /* + * Leaf 0x40000001 - ACRN extended information. + * This leaf returns the extended information of ACRN hypervisor. + * + * EAX: Guest capability flags + * EBX, ECX, EDX: RESERVED (reserved fields are set to zero). + */ + case 0x40000001U: + entry->eax = 0U; + entry->ebx = 0U; + entry->ecx = 0U; + entry->edx = 0U; + break; + + /* + * Leaf 0x40000010 - Timing Information. + * This leaf returns the current TSC frequency and + * current Bus frequency in kHz. + * + * EAX: (Virtual) TSC frequency in kHz. + * TSC frequency is calculated from PIT in ACRN + * EBX, ECX, EDX: RESERVED (reserved fields are set to zero). + */ + case 0x40000010U: + entry->eax = get_tsc_khz(); + entry->ebx = 0U; + entry->ecx = 0U; + entry->edx = 0U; + break; + + default: + cpuid_subleaf(leaf, subleaf, &entry->eax, &entry->ebx, &entry->ecx, &entry->edx); + break; + } +} + +static inline int32_t set_vcpuid_entry(struct vcpuid_entry vcpuid_entries[], + const struct vcpuid_entry *entry) +{ + struct vcpuid_entry *tmp; + size_t entry_size = sizeof(struct vcpuid_entry); + int32_t ret; + + if (g_entry_nr == MAX_VM_VCPUID_ENTRIES) { + printc("%s, vcpuid entry over MAX_VM_VCPUID_ENTRIES(%u)\n", __func__, MAX_VM_VCPUID_ENTRIES); + ret = -ENOMEM; + } else { + tmp = &vcpuid_entries[g_entry_nr]; + g_entry_nr++; + (void)memcpy_s(tmp, entry_size, entry, entry_size); + ret = 0; + } + return ret; +} + +static inline bool is_percpu_related(uint32_t leaf) +{ + return ((leaf == 0x1U) || (leaf == 0xbU) || (leaf == 0xdU) || (leaf == 0x19U) || (leaf == 0x80000001U) || (leaf == 0x2U) || (leaf == 0x1aU)); +} + +static int32_t set_vcpuid_extended_function(void) +{ + uint32_t i, limit; + struct vcpuid_entry entry; + int32_t result; + + init_vcpuid_entry(0x40000000U, 0U, 0U, &entry); + result = set_vcpuid_entry(vcpuid_entries, &entry); + if (result == 0) { + init_vcpuid_entry(0x40000001U, 0U, 0U, &entry); + + result = set_vcpuid_entry(vcpuid_entries, &entry); + } + + if (result == 0) { + init_vcpuid_entry(0x40000010U, 0U, 0U, &entry); + result = set_vcpuid_entry(vcpuid_entries, &entry); + } + + if (result == 0) { + init_vcpuid_entry(0x80000000U, 0U, 0U, &entry); + result = set_vcpuid_entry(vcpuid_entries, &entry); + } + + if (result == 0) { + limit = entry.eax; + g_vcpuid_xlevel = limit; + for (i = 0x80000002U; i <= limit; i++) { + init_vcpuid_entry(i, 0U, 0U, &entry); + result = set_vcpuid_entry(vcpuid_entries, &entry); + if (result != 0) { + break; + } + } + } + + return result; +} + +void init_pcpu_capabilities(void) +{ + uint32_t eax, unused; + uint32_t family_id, model_id, displayfamily, displaymodel; + + cpuid_subleaf(CPUID_VENDORSTRING, 0x0U, + &boot_cpu_data.cpuid_level, + &unused, &unused, &unused); + + cpuid_subleaf(CPUID_FEATURES, 0x0U, &eax, &unused, + &boot_cpu_data.cpuid_leaves[FEAT_1_ECX], + &boot_cpu_data.cpuid_leaves[FEAT_1_EDX]); + + /* SDM Vol.2A 3-211 states the algorithm to calculate DisplayFamily and DisplayModel */ + family_id = (eax >> 8U) & 0xfU; + displayfamily = family_id; + if (family_id == 0xFU) { + displayfamily += ((eax >> 20U) & 0xffU); + } + boot_cpu_data.displayfamily = (uint8_t)displayfamily; + + model_id = (eax >> 4U) & 0xfU; + displaymodel = model_id; + if ((family_id == 0x06U) || (family_id == 0xFU)) { + displaymodel += ((eax >> 16U) & 0xfU) << 4U; + } + boot_cpu_data.displaymodel = (uint8_t)displaymodel; + + + cpuid_subleaf(CPUID_EXTEND_FEATURE, 0x0U, &unused, + &boot_cpu_data.cpuid_leaves[FEAT_7_0_EBX], + &boot_cpu_data.cpuid_leaves[FEAT_7_0_ECX], + &boot_cpu_data.cpuid_leaves[FEAT_7_0_EDX]); + + cpuid_subleaf(CPUID_EXTEND_FEATURE, 0x2U, &unused, &unused, &unused, + &boot_cpu_data.cpuid_leaves[FEAT_7_2_EDX]); + + cpuid_subleaf(CPUID_MAX_EXTENDED_FUNCTION, 0x0U, + &boot_cpu_data.extended_cpuid_level, + &unused, &unused, &unused); + + if (boot_cpu_data.extended_cpuid_level >= CPUID_EXTEND_FUNCTION_1) { + cpuid_subleaf(CPUID_EXTEND_FUNCTION_1, 0x0U, &unused, &unused, + &boot_cpu_data.cpuid_leaves[FEAT_8000_0001_ECX], + &boot_cpu_data.cpuid_leaves[FEAT_8000_0001_EDX]); + } + + if (boot_cpu_data.extended_cpuid_level >= CPUID_EXTEND_INVA_TSC) { + cpuid_subleaf(CPUID_EXTEND_INVA_TSC, 0x0U, &eax, &unused, &unused, + &boot_cpu_data.cpuid_leaves[FEAT_8000_0007_EDX]); + } + + if (boot_cpu_data.extended_cpuid_level >= CPUID_EXTEND_ADDRESS_SIZE) { + cpuid_subleaf(CPUID_EXTEND_ADDRESS_SIZE, 0x0U, &eax, + &boot_cpu_data.cpuid_leaves[FEAT_8000_0008_EBX], + &unused, &unused); + + /* EAX bits 07-00: #Physical Address Bits + * bits 15-08: #Linear Address Bits + */ + boot_cpu_data.virt_bits = (uint8_t)((eax >> 8U) & 0xffU); + boot_cpu_data.phys_bits = (uint8_t)(eax & 0xffU); + boot_cpu_data.physical_address_mask = + get_address_mask(boot_cpu_data.phys_bits); + } + + // detect_pcpu_cap(); +} + +int32_t +set_vcpuid_entries(void) +{ + int32_t result; + struct vcpuid_entry entry; + uint32_t limit; + uint32_t i, j; + struct cpuinfo_x86 *cpu_info = get_pcpu_info(); + + init_vcpuid_entry(0U, 0U, 0U, &entry); + + if (cpu_info->cpuid_level < 0x16U) { + /* The cpuid with zero leaf returns the max level. Emulate that the 0x16U is supported */ + entry.eax = 0x16U; + } + result = set_vcpuid_entry(vcpuid_entries, &entry); + if (result == 0) { + limit = entry.eax; + g_vcpuid_level = limit; + + for (i = 1U; i <= limit; i++) { + if (is_percpu_related(i)) { + continue; + } + + switch (i) { + case 0x04U: + for (j = 0U; ; j++) { + init_vcpuid_entry(i, j, CPUID_CHECK_SUBLEAF, &entry); + if (entry.eax == 0U) { + break; + } + + result = set_vcpuid_entry(vcpuid_entries, &entry); + if (result != 0) { + /* wants to break out of switch */ + break; + } + } + break; + /* MONITOR/MWAIT */ + case 0x05U: + break; + case 0x07U: + init_vcpuid_entry(i, 0U, CPUID_CHECK_SUBLEAF, &entry); + if (entry.eax != 0U) { + printc("vcpuid: only support subleaf 0 for cpu leaf 07h\n"); + entry.eax = 0U; + } + /* mask CPUID_EDX_IBRS_IBPB */ + entry.edx &= ~CPUID_EDX_IBRS_IBPB; + + entry.ecx &= ~CPUID_ECX_WAITPKG; + + result = set_vcpuid_entry(vcpuid_entries, &entry); + break; + case 0x12U: + break; + /* These features are disabled */ + /* PMU is not supported except for core partition VM, like RTVM */ + case 0x0aU: + break; + + /* Intel RDT */ + case 0x0fU: + break; + /* Intel RDT */ + case 0x10U: + break; + + /* Intel Processor Trace */ + case 0x14U: + /* PCONFIG */ + case 0x1bU: + /* V2 Extended Topology Enumeration Leaf */ + case 0x1fU: + break; + default: + init_vcpuid_entry(i, 0U, 0U, &entry); + result = set_vcpuid_entry(vcpuid_entries, &entry); + break; + } + + /* WARNING: do nothing between break out of switch and before this check */ + if (result != 0) { + /* break out of for */ + break; + } + } + + if (result == 0) { + result = set_vcpuid_extended_function(); + } + } + + return result; +} + +static inline const struct vcpuid_entry *local_find_vcpuid_entry(uint32_t leaf, uint32_t subleaf) +{ + uint32_t i = 0U, nr, half; + const struct vcpuid_entry *found_entry = NULL; + + nr = g_entry_nr; + half = nr >> 1U; + if (vcpuid_entries[half].leaf < leaf) { + i = half; + } + + for (; i < nr; i++) { + const struct vcpuid_entry *tmp = (const struct vcpuid_entry *)(&vcpuid_entries[i]); + + if (tmp->leaf < leaf) { + continue; + } else if (tmp->leaf == leaf) { + if (((tmp->flags & CPUID_CHECK_SUBLEAF) != 0U) && (tmp->subleaf != subleaf)) { + continue; + } + found_entry = tmp; + break; + } else { + /* tmp->leaf > leaf */ + break; + } + } + + return found_entry; +} + +static inline const struct vcpuid_entry *find_vcpuid_entry(uint32_t leaf_arg, uint32_t subleaf) +{ + const struct vcpuid_entry *entry; + uint32_t leaf = leaf_arg; + + entry = local_find_vcpuid_entry(leaf, subleaf); + if (entry == NULL) { + uint32_t limit; + + if ((leaf & 0x80000000U) != 0U) { + limit = g_vcpuid_xlevel; + } else { + limit = g_vcpuid_level; + } + + if (leaf > limit) { + /* Intel documentation states that invalid EAX input + * will return the same information as EAX=cpuid_level + * (Intel SDM Vol. 2A - Instruction Set Reference - + * CPUID) + */ + leaf = g_vcpuid_level; + entry = local_find_vcpuid_entry(leaf, subleaf); + } + + } + + return entry; +} + +static void guest_cpuid_01h(struct vmrt_vm_vcpu *vcpu, uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) +{ + uint32_t apicid = 1; + + cpuid_subleaf(0x1U, 0x0U, eax, ebx, ecx, edx); + /* Patching initial APIC ID */ + *ebx &= ~APIC_ID_MASK; + *ebx |= (apicid << APIC_ID_SHIFT); + + *edx &= ~CPUID_EDX_MTRR; + + /* mask Safer Mode Extension */ + *ecx &= ~CPUID_ECX_SMX; + + *ecx &= ~CPUID_ECX_EST; + + /* mask SDBG for silicon debug */ + *ecx &= ~CPUID_ECX_SDBG; + + /* mask VMX to guest OS */ + *ecx &= ~CPUID_ECX_VMX; + + /* set Hypervisor Present Bit */ + *ecx |= CPUID_ECX_HV; + + /* Warning: should we support pcid in VM? Let's begin with not setting it first */ + *ecx &= ~CPUID_ECX_PCID; + + /* + * Hide MONITOR/MWAIT. + */ + // *ecx &= ~CPUID_ECX_MONITOR; + + /* Warning: should we support CPUID_ECX_OSXSAVE in VM? Let's begin with not setting it first */ + *ecx &= ~CPUID_ECX_OSXSAVE; + if ((*ecx & CPUID_ECX_XSAVE) != 0U) { + uint64_t cr4; + /*read guest CR4*/ + cr4 = vcpu->shared_region->cr4; + if ((cr4 & CR4_OSXSAVE) != 0UL) { + *ecx |= CPUID_ECX_OSXSAVE; + } + } + + /* disable thermal ctrl*/ + *edx &= ~CPUID_EDX_TM1; + + *edx &= ~CPUID_EDX_VME; + + *edx &= ~CPUID_EDX_DE; + + *edx &= ~CPUID_EDX_PSE; + + /* Warning: it seems that PAE, PGE, FXSR should be supported */ + // *edx &= ~CPUID_EDX_PAE; + + // *edx &= ~CPUID_EDX_PGE; + + // *edx &= ~CPUID_EDX_FXSR; + + /* Don't support complex apic */ + *ecx &= ~CPUID_ECX_x2APIC; + + /* DS/PEBS is not supported except for core partition VM, like RTVM */ + /* mask Debug Store feature */ + *ecx &= ~(CPUID_ECX_DTES64 | CPUID_ECX_DS_CPL); + + /* mask PDCM: Perfmon and Debug Capability */ + *ecx &= ~CPUID_ECX_PDCM; + + /* mask Debug Store feature */ + *edx &= ~CPUID_EDX_DTES; +} + +static void guest_cpuid_0bh(uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) +{ + /* Forward host cpu topology to the guest, guest will know the native platform information such as host cpu topology here */ + cpuid_subleaf(0x0BU, *ecx, eax, ebx, ecx, edx); + + /* Patching X2APIC */ + *edx = 1; +} + +static void guest_cpuid_0dh(uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) +{ + uint32_t subleaf = *ecx; + + cpuid_subleaf(0x0dU, subleaf, eax, ebx, ecx, edx); + switch (subleaf) { + case 0U: + /* SDM Vol.1 17-2, On processors that do not support Intel MPX, + * CPUID.(EAX=0DH,ECX=0):EAX[3] and + * CPUID.(EAX=0DH,ECX=0):EAX[4] will both be 0 */ + *eax &= ~(CPUID_EAX_XCR0_BNDREGS | CPUID_EAX_XCR0_BNDCSR); + break; + case 1U: + *ecx &= ~(CPUID_ECX_CET_U_STATE | CPUID_ECX_CET_S_STATE); + break; + case 11U: + case 12U: + *eax = 0U; + *ebx = 0U; + *ecx = 0U; + *edx = 0U; + break; + default: + /* No emulation for other leaves */ + break; + } +} + +static void guest_cpuid_19h(uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) +{ + *eax = 0U; + *ebx = 0U; + *ecx = 0U; + *edx = 0U; +} + +static void guest_cpuid_80000001h(const struct vmrt_vm_vcpu *vcpu, + uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) +{ + const struct vcpuid_entry *entry_check = find_vcpuid_entry(0x80000000U, 0); + uint64_t guest_ia32_misc_enable = 0x800001; + uint32_t leaf = 0x80000001U; + + if ((entry_check != NULL) && (entry_check->eax >= leaf)) { + cpuid_subleaf(leaf, 0x0U, eax, ebx, ecx, edx); + /* SDM Vol4 2.1, XD Bit Disable of MSR_IA32_MISC_ENABLE + * When set to 1, the Execute Disable Bit feature (XD Bit) is disabled and the XD Bit + * extended feature flag will be clear (CPUID.80000001H: EDX[20]=0) + */ + if ((guest_ia32_misc_enable & MSR_IA32_MISC_ENABLE_XD_DISABLE) != 0UL) { + *edx = *edx & ~CPUID_EDX_XD_BIT_AVIL; + } + } else { + *eax = 0U; + *ebx = 0U; + *ecx = 0U; + *edx = 0U; + } +} + +static void guest_limit_cpuid(const struct vmrt_vm_vcpu *vcpu, uint32_t leaf, + uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) +{ + uint64_t guest_ia32_misc_enable = 0x800001; + + if ((guest_ia32_misc_enable & MSR_IA32_MISC_ENABLE_LIMIT_CPUID) != 0UL) { + /* limit the leaf number to 2 */ + if (leaf == 0U) { + *eax = 2U; + } else if (leaf > 2U) { + *eax = 0U; + *ebx = 0U; + *ecx = 0U; + *edx = 0U; + } else { + /* In this case, leaf is 1U, return the cpuid value get above */ + } + } +} + +void guest_cpuid(struct vmrt_vm_vcpu *vcpu, uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) +{ + uint32_t leaf = *eax; + uint32_t subleaf = *ecx; + + /* vm related */ + if (!is_percpu_related(leaf)) { + const struct vcpuid_entry *entry = find_vcpuid_entry(leaf, subleaf); + + if (entry != NULL) { + *eax = entry->eax; + *ebx = entry->ebx; + *ecx = entry->ecx; + *edx = entry->edx; + } else { + *eax = 0U; + *ebx = 0U; + *ecx = 0U; + *edx = 0U; + } + } else { + /* percpu related */ + switch (leaf) { + case 0x01U: + guest_cpuid_01h(vcpu, eax, ebx, ecx, edx); + break; + + case 0x0bU: + guest_cpuid_0bh(eax, ebx, ecx, edx); + break; + + case 0x0dU: + guest_cpuid_0dh(eax, ebx, ecx, edx); + break; + + case 0x19U: + guest_cpuid_19h(eax, ebx, ecx, edx); + break; + + case 0x80000001U: + guest_cpuid_80000001h(vcpu, eax, ebx, ecx, edx); + break; + + default: + /* + * In this switch statement, leaf 0x01/0x0b/0x0d/0x19/0x80000001 + * shall be handled specifically. All the other cases + * just return physical value. + */ + cpuid_subleaf(leaf, *ecx, eax, ebx, ecx, edx); + break; + } + } + + guest_limit_cpuid(vcpu, leaf, eax, ebx, ecx, edx); +} + +void +cpuid_handler(struct vmrt_vm_vcpu *vcpu) +{ + uint64_t rax, rbx, rcx, rdx; + volatile struct vm_vcpu_shared_region *regs = vcpu->shared_region; + int test = 0; + + rax = regs->ax; + rbx = regs->bx; + rcx = regs->cx; + rdx = regs->dx; + + guest_cpuid(vcpu, (uint32_t *)&rax, (uint32_t *)&rbx, (uint32_t *)&rcx, (uint32_t *)&rdx); + + regs->ax = rax; + regs->bx = rbx; + regs->cx = rcx; + regs->dx = rdx; + + GOTO_NEXT_INST(regs); + + return; +} + +static void __attribute__((constructor)) +init(void) +{ + init_pcpu_capabilities(); + set_vcpuid_entries(); +} diff --git a/src/components/implementation/simple_vmm/multi_vmm/vcpuid.h b/src/components/implementation/simple_vmm/multi_vmm/vcpuid.h new file mode 100644 index 0000000000..9124eedb0e --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/vcpuid.h @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2018-2022 Intel Corporation. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef VCPUID_H_ +#define VCPUID_H_ +#include + +#define CPUID_CHECK_SUBLEAF (1U << 0U) +#define MAX_VM_VCPUID_ENTRIES 64U + +/* Guest capability flags reported by CPUID */ +#define GUEST_CAPS_PRIVILEGE_VM (1U << 0U) + +struct vcpuid_entry { + uint32_t eax; + uint32_t ebx; + uint32_t ecx; + uint32_t edx; + uint32_t leaf; + uint32_t subleaf; + uint32_t flags; + uint32_t padding; +}; + +#define FEATURE_WORDS 16U + +int32_t set_vcpuid_entries(void); +void guest_cpuid(struct vmrt_vm_vcpu *vcpu, + uint32_t *eax, uint32_t *ebx, + uint32_t *ecx, uint32_t *edx); + +#endif /* VCPUID_H_ */ diff --git a/src/components/implementation/simple_vmm/multi_vmm/vio.c b/src/components/implementation/simple_vmm/multi_vmm/vio.c new file mode 100644 index 0000000000..b63253b7b1 --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/vio.c @@ -0,0 +1,106 @@ +#include +#include "devices/serial/serial.h" +#include "devices/vpci/vpci.h" +#include "devices/vpic/vpic.h" +#include "devices/vrtc/vrtc.h" +#include "devices/vps2/vps2.h" +#include "devices/vpci/virtio_net_io.h" + +void +io_handler(struct vmrt_vm_vcpu *vcpu) +{ + volatile struct vm_vcpu_shared_region *regs = vcpu->shared_region; + u64_t qualification = regs->qualification; + + u16_t port_id = (qualification >> 16) & 0XFFFF; + u8_t access_sz = qualification & 7; + u8_t access_dir = (qualification >> 3) & 1; + + assert(!((qualification >> 4) & 1)); + assert(!((qualification >> 5) & 1)); + + switch (access_sz) + { + case 0: + access_sz = IO_BYTE; + break; + case 1: + access_sz = IO_WORD; + break; + case 3: + access_sz = IO_LONG; + break; + default: + VM_PANIC(vcpu); + + } + if (port_id == 0x3ff || port_id == 0x2f9 || port_id == 0x2fc || port_id == 0x2fb || port_id == 0x2fa || port_id == 0x2ff || port_id == 0x2f8 || port_id == 0x3e9 || port_id == 0x3ec || port_id == 0x3eb || port_id == 0x3ea || port_id == 0x3ef || port_id == 0x3e8 + || port_id == 0x2e9 || port_id == 0x2ec || port_id == 0x2eb || port_id == 0x2ee) { + /* TODO: fix these io ports emulcation */ + goto done; + } + if (port_id <= SERIAL_PORT_MAX && port_id >= SERIAL_PORT_MIN) { + serial_handler(port_id, access_dir, access_sz, vcpu); + goto done; + } + + /* Fast path for virtio-net processing */ + switch (port_id) + { + case VIRTIO_NET_DEV_FEATURES: + case VIRTIO_NET_GUEST_FEATURES: + case VIRTIO_NET_QUEUE_ADDR: + case VIRTIO_NET_QUEUE_SIZE: + case VIRTIO_NET_QUEUE_SELECT: + case VIRTIO_NET_QUEUE_NOTIFY: + case VIRTIO_NET_DEV_STATUS: + case VIRTIO_NET_ISR: + case VIRTIO_NET_MAC: + case VIRTIO_NET_MAC1: + case VIRTIO_NET_MAC2: + case VIRTIO_NET_MAC3: + case VIRTIO_NET_MAC4: + case VIRTIO_NET_MAC5: + case VIRTIO_NET_STATUS: + case VIRTIO_NET_STATUS_H: + virtio_net_handler(port_id, access_dir, access_sz, vcpu); + goto done; + default: + break; + } + + switch (port_id) + { + case CMOS_CMD_PORT: + case CMOS_DATA_PORT: + vrtc_handler(port_id, access_dir, access_sz, vcpu); + goto done; + case PIC_MASTER_CMD_PORT: + case PIC_MASTER_DATA_PORT: + case PIC_SLAVE_CMD_PORT: + case PIC_SLAVE_DATA_PORT: + case PIC_ELCR1: + case PIC_ELCR2: + vpic_handler(port_id, access_dir, access_sz, vcpu); + goto done; + case PS2_CONTROL_PORT_A: + case PS2_CONTROL_PORT_B: + ps2_handler(port_id, access_dir, access_sz, vcpu); + goto done; + case VPCI_CONFIG_ADDRESS: + case VPCI_CONFIG_DATA0: + case VPCI_CONFIG_DATA1: + case VPCI_CONFIG_DATA2: + case VPCI_CONFIG_DATA3: + case VPCI_MECHANISM_CONTROL_REG: + vpci_handler(port_id, access_dir, access_sz, vcpu); + goto done; + } + + printc("port id:%x, sz:%d, dir:%d\n", port_id, access_sz, access_dir); + VM_PANIC(vcpu); +done: + GOTO_NEXT_INST(regs); + + return; +} \ No newline at end of file diff --git a/src/components/implementation/simple_vmm/multi_vmm/vioapic.c b/src/components/implementation/simple_vmm/multi_vmm/vioapic.c new file mode 100644 index 0000000000..1dfcdbdc43 --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/vioapic.c @@ -0,0 +1,564 @@ +/*- + * Copyright (c) 2013 Tycho Nightingale + * Copyright (c) 2013 Neel Natu + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#define pr_prefix "vioapic: " + +#include +#include +#include +#include +#include +#include +#include +#include + + +#define RTBL_RO_BITS ((uint32_t)0x00004000U | (uint32_t)0x00001000U) /*Remote IRR and Delivery Status bits*/ + +#define DBG_LEVEL_VIOAPIC 6U +#define ACRN_IOAPIC_VERSION 0x11U + +#define MASK_ALL_INTERRUPTS 0x0001000000010000UL + +static inline struct acrn_vioapics *vm_ioapics(const struct vmrt_vm_comp *vm) +{ + return (struct acrn_vioapics *)(vm->ioapic); +} + +/** + * @pre pin < vioapic->chipinfo.nr_pins + */ +static void +vioapic_generate_intr(struct acrn_single_vioapic *vioapic, uint32_t pin) +{ + uint32_t vector, dest, delmode; + union ioapic_rte rte; + bool level, phys; + + rte = vioapic->rtbl[pin]; + + if (rte.bits.intr_mask == IOAPIC_RTE_MASK_SET) { + printc("ioapic pin%hhu: masked\n", pin); + } else { + phys = (rte.bits.dest_mode == IOAPIC_RTE_DESTMODE_PHY); + delmode = rte.bits.delivery_mode; + level = (rte.bits.trigger_mode == IOAPIC_RTE_TRGRMODE_LEVEL); + + /* For level trigger irq, avoid send intr if + * previous one hasn't received EOI + */ + if (!level || (vioapic->rtbl[pin].bits.remote_irr == 0UL)) { + if (level) { + vioapic->rtbl[pin].bits.remote_irr = IOAPIC_RTE_REM_IRR; + } + vector = rte.bits.vector; + dest = rte.bits.dest_field; + vlapic_receive_intr(vioapic->vm, level, dest, phys, delmode, vector, false); + } + } +} + +/** + * @pre pin < vioapic->chipinfo.nr_pins + */ +static void +vioapic_set_pinstate(struct acrn_single_vioapic *vioapic, uint32_t pin, uint32_t level) +{ + uint32_t old_lvl; + union ioapic_rte rte; + + if (pin < vioapic->chipinfo.nr_pins) { + rte = vioapic->rtbl[pin]; + old_lvl = (uint32_t)bitmap_test((uint16_t)(pin & 0x3FU), &vioapic->pin_state[pin >> 6U]); + if (level == 0U) { + /* clear pin_state and deliver interrupt according to polarity */ + bitmap_clear_nolock((uint16_t)(pin & 0x3FU), &vioapic->pin_state[pin >> 6U]); + if ((rte.bits.intr_polarity == IOAPIC_RTE_INTPOL_ALO) + && (old_lvl != level)) { + vioapic_generate_intr(vioapic, pin); + } + } else { + /* set pin_state and deliver intrrupt according to polarity */ + bitmap_set_nolock((uint16_t)(pin & 0x3FU), &vioapic->pin_state[pin >> 6U]); + if ((rte.bits.intr_polarity == IOAPIC_RTE_INTPOL_AHI) + && (old_lvl != level)) { + vioapic_generate_intr(vioapic, pin); + } + } + } +} + + +struct acrn_single_vioapic * +vgsi_to_vioapic_and_vpin(const struct vmrt_vm_comp *vm, uint32_t vgsi, uint32_t *vpin) +{ + struct acrn_single_vioapic *vioapic; + uint8_t vioapic_index = 0U; + + if (vpin != NULL) { + *vpin = vgsi; + } + + vioapic = (struct acrn_single_vioapic *)&(vm_ioapics(vm)->vioapic_array[vioapic_index]); + + return vioapic; +} + +/** + * @brief Set vIOAPIC IRQ line status. + * + * Similar with vioapic_set_irqline_lock(),but would not make sure + * operation be done with ioapic lock. + * + * @param[in] vm Pointer to target VM + * @param[in] vgsi Target GSI number + * @param[in] operation Action options: GSI_SET_HIGH/GSI_SET_LOW/ + * GSI_RAISING_PULSE/GSI_FALLING_PULSE + * + * @pre vgsi < get_vm_gsicount(vm) + * @pre vm != NULL + * @return None + */ +void +vioapic_set_irqline_nolock(const struct vmrt_vm_comp *vm, uint32_t vgsi, uint32_t operation) +{ + struct acrn_single_vioapic *vioapic; + uint32_t pin; + + vioapic = vgsi_to_vioapic_and_vpin(vm, vgsi, &pin); + + switch (operation) { + case GSI_SET_HIGH: + vioapic_set_pinstate(vioapic, pin, 1U); + break; + case GSI_SET_LOW: + vioapic_set_pinstate(vioapic, pin, 0U); + break; + case GSI_RAISING_PULSE: + vioapic_set_pinstate(vioapic, pin, 1U); + vioapic_set_pinstate(vioapic, pin, 0U); + break; + case GSI_FALLING_PULSE: + vioapic_set_pinstate(vioapic, pin, 0U); + vioapic_set_pinstate(vioapic, pin, 1U); + break; + default: + /* + * The function caller could guarantee the pre condition. + */ + break; + } +} + +/** + * @brief Set vIOAPIC IRQ line status. + * + * @param[in] vm Pointer to target VM + * @param[in] vgsi Target GSI number + * @param[in] operation Action options: GSI_SET_HIGH/GSI_SET_LOW/ + * GSI_RAISING_PULSE/GSI_FALLING_PULSE + * + * @pre vgsi < get_vm_gsicount(vm) + * @pre vm != NULL + * + * @return None + */ +void +vioapic_set_irqline_lock(const struct vmrt_vm_comp *vm, uint32_t vgsi, uint32_t operation) +{ + uint64_t rflags; + + vioapic_set_irqline_nolock(vm, vgsi, operation); +} + +static uint32_t +vioapic_indirect_read(struct acrn_single_vioapic *vioapic, uint32_t addr) +{ + uint32_t regnum, ret = 0U; + uint32_t pin, pincount = vioapic->chipinfo.nr_pins; + + regnum = addr & 0xffU; + switch (regnum) { + case IOAPIC_ID: + ret = (uint32_t)vioapic->chipinfo.id << IOAPIC_ID_SHIFT; + break; + case IOAPIC_VER: + ret = ((pincount - 1U) << MAX_RTE_SHIFT) | ACRN_IOAPIC_VERSION; + break; + case IOAPIC_ARB: + ret = (uint32_t)vioapic->chipinfo.id << IOAPIC_ID_SHIFT; + break; + default: + /* + * In this switch statement, regnum shall either be IOAPIC_ID or + * IOAPIC_VER or IOAPIC_ARB. + * All the other cases will be handled properly later after this + * switch statement. + */ + break; + } + + /* redirection table entries */ + if ((regnum >= IOAPIC_REDTBL) && + (regnum < (IOAPIC_REDTBL + (pincount * 2U)))) { + uint32_t addr_offset = regnum - IOAPIC_REDTBL; + uint32_t rte_offset = addr_offset >> 1U; + pin = rte_offset; + if ((addr_offset & 0x1U) != 0U) { + ret = vioapic->rtbl[pin].u.hi_32; + } else { + ret = vioapic->rtbl[pin].u.lo_32; + } + } + + return ret; +} + +static inline bool vioapic_need_intr(const struct acrn_single_vioapic *vioapic, uint16_t pin) +{ + uint32_t lvl; + union ioapic_rte rte; + bool ret = false; + + if ((uint32_t)pin < vioapic->chipinfo.nr_pins) { + rte = vioapic->rtbl[pin]; + lvl = (uint32_t)bitmap_test(pin & 0x3FU, &vioapic->pin_state[pin >> 6U]); + ret = !!(((rte.bits.intr_polarity == IOAPIC_RTE_INTPOL_ALO) && (lvl == 0U)) || + ((rte.bits.intr_polarity == IOAPIC_RTE_INTPOL_AHI) && (lvl != 0U))); + } + + return ret; +} + +/* + * Due to the race between vcpus and vioapic->lock could be accessed from softirq, ensure to do + * spinlock_irqsave_obtain(&(vioapic->lock), &rflags) & spinlock_irqrestore_release(&(vioapic->lock), rflags) + * by caller. + */ +static void vioapic_indirect_write(struct acrn_single_vioapic *vioapic, uint32_t addr, uint32_t data) +{ + union ioapic_rte last, new, changed; + uint32_t regnum; + uint32_t pin, pincount = vioapic->chipinfo.nr_pins; + + regnum = addr & 0xffUL; + switch (regnum) { + case IOAPIC_ID: + vioapic->chipinfo.id = (uint8_t)((data & IOAPIC_ID_MASK) >> IOAPIC_ID_SHIFT); + break; + case IOAPIC_VER: + case IOAPIC_ARB: + /* readonly */ + break; + default: + /* + * In this switch statement, regnum shall either be IOAPIC_ID or + * IOAPIC_VER or IOAPIC_ARB. + * All the other cases will be handled properly later after this + * switch statement. + */ + break; + } + + /* redirection table entries */ + if ((regnum >= IOAPIC_REDTBL) && (regnum < (IOAPIC_REDTBL + (pincount * 2U)))) { + bool wire_mode_valid = true; + uint32_t addr_offset = regnum - IOAPIC_REDTBL; + uint32_t rte_offset = addr_offset >> 1U; + pin = rte_offset; + + last = vioapic->rtbl[pin]; + new = last; + if ((addr_offset & 1U) != 0U) { + new.u.hi_32 = data; + } else { + new.u.lo_32 &= RTBL_RO_BITS; + new.u.lo_32 |= (data & ~RTBL_RO_BITS); + } + + /* In some special scenarios, the LAPIC somehow hasn't send + * EOI to IOAPIC which cause the Remote IRR bit can't be clear. + * To clear it, some OSes will use EOI Register to clear it for + * 0x20 version IOAPIC, otherwise use switch Trigger Mode to + * Edge Sensitive to clear it. + */ + if (new.bits.trigger_mode == IOAPIC_RTE_TRGRMODE_EDGE) { + new.bits.remote_irr = 0U; + } + + changed.full = last.full ^ new.full; + /* pin0 from vpic mask/unmask */ + if ((pin == 0U) && (changed.bits.intr_mask != 0UL)) { + /* mask -> umask */ + if (last.bits.intr_mask == IOAPIC_RTE_MASK_SET) { + if ((vioapic->vm->wire_mode == VPIC_WIRE_NULL) || + (vioapic->vm->wire_mode == VPIC_WIRE_INTR)) { + vioapic->vm->wire_mode = VPIC_WIRE_IOAPIC; + printc("vpic wire mode -> IOAPIC\n"); + } else { + printc("WARNING: invalid vpic wire mode change\n"); + wire_mode_valid = false; + } + /* unmask -> mask */ + } else { + if (vioapic->vm->wire_mode == VPIC_WIRE_IOAPIC) { + vioapic->vm->wire_mode = VPIC_WIRE_INTR; + printc("vpic wire mode -> INTR\n"); + } + } + } + + if (wire_mode_valid) { + vioapic->rtbl[pin] = new; + + /* remap for ptdev */ + if ((new.bits.intr_mask == IOAPIC_RTE_MASK_CLR) || (last.bits.intr_mask == IOAPIC_RTE_MASK_CLR)) { + /* TODO: set pin remap*/ + } + + /* + * Generate an interrupt if the following conditions are met: + * - pin is not masked + * - previous interrupt has been EOIed + * - pin level is asserted + */ + if ((vioapic->rtbl[pin].bits.intr_mask == IOAPIC_RTE_MASK_CLR) && + (vioapic->rtbl[pin].bits.remote_irr == 0UL) && + vioapic_need_intr(vioapic, (uint16_t)pin)) { + vioapic_generate_intr(vioapic, pin); + } + } + } +} + +static void +vioapic_mmio_rw(struct acrn_single_vioapic *vioapic, uint64_t gpa, + uint32_t *data, bool do_read) +{ + uint32_t offset; + uint64_t rflags; + + offset = (uint32_t)(gpa - vioapic->chipinfo.addr); + + /* The IOAPIC specification allows 32-bit wide accesses to the + * IOAPIC_REGSEL (offset 0) and IOAPIC_WINDOW (offset 16) registers. + */ + switch (offset) { + case IOAPIC_REGSEL: + if (do_read) { + *data = vioapic->ioregsel; + } else { + vioapic->ioregsel = *data & 0xFFU; + } + break; + case IOAPIC_WINDOW: + if (do_read) { + *data = vioapic_indirect_read(vioapic, + vioapic->ioregsel); + } else { + vioapic_indirect_write(vioapic, + vioapic->ioregsel, *data); + } + break; + default: + assert(0); + if (do_read) { + *data = 0xFFFFFFFFU; + } + break; + } +} + +/* + * @pre vm != NULL + */ +static void +vioapic_process_eoi(struct acrn_single_vioapic *vioapic, uint32_t vector) +{ + uint32_t pin, pincount = vioapic->chipinfo.nr_pins; + union ioapic_rte rte; + uint64_t rflags; + + if ((vector < VECTOR_DYNAMIC_START) || (vector > NR_MAX_VECTOR)) { + printc("vioapic_process_eoi: invalid vector %u", vector); + } + + printc("ioapic processing eoi for vector %u\n", vector); + + /* notify device to ack if assigned pin */ + for (pin = 0U; pin < pincount; pin++) { + rte = vioapic->rtbl[pin]; + if ((rte.bits.vector != vector) || + (rte.bits.remote_irr == 0U)) { + continue; + } + } + + /* + * XXX keep track of the pins associated with this vector instead + * of iterating on every single pin each time. + */ + for (pin = 0U; pin < pincount; pin++) { + rte = vioapic->rtbl[pin]; + if ((rte.bits.vector != vector) || + (rte.bits.remote_irr == 0U)) { + continue; + } + + vioapic->rtbl[pin].bits.remote_irr = 0U; + if (vioapic_need_intr(vioapic, (uint16_t)pin)) { + printc("ioapic pin%hhu: asserted at eoi\n", pin); + vioapic_generate_intr(vioapic, pin); + } + } +} + +void vioapic_broadcast_eoi(const struct vmrt_vm_comp *vm, uint32_t vector) +{ + struct acrn_single_vioapic *vioapic; + uint8_t vioapic_index; + + /* + * For platforms with multiple IO-APICs, EOI message from LAPIC is + * broadcast to all IO-APICs. Emulating the same behavior here. + */ + + for (vioapic_index = 0U; vioapic_index < vm_ioapics(vm)->ioapic_num; vioapic_index++) { + vioapic = &(vm_ioapics(vm)->vioapic_array[vioapic_index]); + vioapic_process_eoi(vioapic, vector); + } +} + +static void reset_one_vioapic(struct acrn_single_vioapic *vioapic) +{ + uint32_t pin, pincount; + + /* Initialize all redirection entries to mask all interrupts */ + pincount = vioapic->chipinfo.nr_pins; + for (pin = 0U; pin < pincount; pin++) { + vioapic->rtbl[pin].full = MASK_ALL_INTERRUPTS; + } + vioapic->chipinfo.id = 0U; + vioapic->ioregsel = 0U; +} + +void reset_vioapics(const struct vmrt_vm_comp *vm) +{ + struct acrn_vioapics *vioapics = vm_ioapics(vm); + uint8_t vioapic_index; + + for (vioapic_index = 0U; vioapic_index < vioapics->ioapic_num; vioapic_index++) { + reset_one_vioapic(&vioapics->vioapic_array[vioapic_index]); + } +} + +void +vioapic_init(struct vmrt_vm_comp *vm) +{ + static struct ioapic_info virt_ioapic_info = { + .nr_pins = VIOAPIC_RTE_NUM, + .addr = VIOAPIC_BASE + }; + + struct ioapic_info *vioapic_info; + uint8_t vioapic_index; + struct acrn_single_vioapic *vioapic = NULL; + struct acrn_vioapics *vioapics = vm_ioapics(vm); + + /* only set one io apic */ + vioapics->ioapic_num = 1U; + vioapic_info = &virt_ioapic_info; + + for (vioapic_index = 0U; vioapic_index < vioapics->ioapic_num; vioapic_index++) { + vioapic = &vioapics->vioapic_array[vioapic_index]; + vioapic->chipinfo = vioapic_info[vioapic_index]; + + vioapic->vm = vm; + reset_one_vioapic(vioapic); + } + + /* + * Maximum number of GSI is computed as GSI base of the IOAPIC i.e. enumerated last in ACPI MADT + * plus the number of interrupt pins of that IOAPIC. + */ + if (vioapic != NULL) { + vioapics->nr_gsi = vioapic->chipinfo.gsi_base + vioapic->chipinfo.nr_pins; + } +} + +uint32_t +get_vm_gsicount(const struct vmrt_vm_comp *vm) +{ + struct acrn_vioapics *vioapics = vm_ioapics(vm); + return vioapics->nr_gsi; +} + +/* + * @pre handler_private_data != NULL + */ +int32_t vioapic_mmio_access_handler(struct vmrt_vm_vcpu *vcpu) +{ + struct acrn_mmio_request *mmio = vcpu->mmio_request; + struct acrn_single_vioapic *vioapic = &vm_ioapics(vcpu->vm)->vioapic_array[0]; + uint64_t gpa = mmio->address; + int32_t ret = 0; + + /* Note all RW to IOAPIC are 32-Bit in size */ + if (mmio->size == 4UL) { + uint32_t data = (uint32_t)mmio->value; + + if (mmio->direction == ACRN_IOREQ_DIR_READ) { + vioapic_mmio_rw(vioapic, gpa, &data, true); + mmio->value = (uint64_t)data; + } else if (mmio->direction == ACRN_IOREQ_DIR_WRITE) { + vioapic_mmio_rw(vioapic, gpa, &data, false); + } else { + ret = -EINVAL; + } + } else { + printc("All RW to IOAPIC must be 32-bits in size\n"); + assert(0); + } + + return ret; +} + +/** + * @pre vm->arch_vm.vioapics != NULL + * @pre vgsi < get_vm_gsicount(vm) + * @pre rte != NULL + */ +void vioapic_get_rte(const struct vmrt_vm_comp *vm, uint32_t vgsi, union ioapic_rte *rte) +{ + struct acrn_single_vioapic *vioapic; + uint32_t pin; + vioapic = vgsi_to_vioapic_and_vpin(vm, vgsi, &pin); + + *rte = vioapic->rtbl[pin]; +} diff --git a/src/components/implementation/simple_vmm/multi_vmm/vioapic.h b/src/components/implementation/simple_vmm/multi_vmm/vioapic.h new file mode 100644 index 0000000000..73794a091e --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/vioapic.h @@ -0,0 +1,128 @@ +/*- + * Copyright (c) 2013 Tycho Nightingale + * Copyright (c) 2013 Neel Natu + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef VIOAPIC_H +#define VIOAPIC_H + +/** + * @file vioapic.h + * + * @brief public APIs for virtual I/O APIC + */ + +#include +#include +#include + +#define VIOAPIC_BASE 0xFEC00000UL +#define VIOAPIC_SIZE 4096UL +#define MAX_IOAPIC_NUM 1 + +#define REDIR_ENTRIES_HW 120U /* Service VM align with native ioapic */ +#define STATE_BITMAP_SIZE INT_DIV_ROUNDUP(REDIR_ENTRIES_HW, 64U) + +#define IOAPIC_RTE_LOW_INTVEC ((uint32_t)IOAPIC_RTE_INTVEC) + +/* + * id field is used to emulate the IOAPIC_ID register of vIOAPIC + */ + +struct acrn_single_vioapic { + // spinlock_t lock; + struct vmrt_vm_comp *vm; + struct ioapic_info chipinfo; + uint32_t ioregsel; + union ioapic_rte rtbl[REDIR_ENTRIES_HW]; + /* pin_state status bitmap: 1 - high, 0 - low */ + uint64_t pin_state[STATE_BITMAP_SIZE]; +}; + +/* + * ioapic_num represents the number of IO-APICs emulated for the VM. + * nr_gsi represents the maximum number of GSI emulated for the VM. + */ +struct acrn_vioapics { + uint8_t ioapic_num; + uint32_t nr_gsi; + struct acrn_single_vioapic vioapic_array[MAX_IOAPIC_NUM]; +}; + +void dump_vioapic(struct vmrt_vm_comp *vm); +void vioapic_init(struct vmrt_vm_comp *vm); +void reset_vioapics(const struct vmrt_vm_comp *vm); + + +/** + * @brief virtual I/O APIC + * + * @addtogroup acrn_vioapic ACRN vIOAPIC + * @{ + */ + +/** + * @brief Set vIOAPIC IRQ line status. + * + * @param[in] vm Pointer to target VM + * @param[in] vgsi GSI for the virtual interrupt + * @param[in] operation Action options: GSI_SET_HIGH/GSI_SET_LOW/ + * GSI_RAISING_PULSE/GSI_FALLING_PULSE + * + * @pre irqline < vioapic_pincount(vm) + * + * @return None + */ +void vioapic_set_irqline_lock(const struct vmrt_vm_comp *vm, uint32_t vgsi, uint32_t operation); + +/** + * @brief Set vIOAPIC IRQ line status. + * + * Similar with vioapic_set_irqline_lock(),but would not make sure + * operation be done with ioapic lock. + * + * @param[in] vm Pointer to target VM + * @param[in] vgsi GSI for the virtual interrupt + * @param[in] operation Action options: GSI_SET_HIGH/GSI_SET_LOW/ + * GSI_RAISING_PULSE/GSI_FALLING_PULSE + * + * @pre irqline < vioapic_pincount(vm) + * @return None + */ +void vioapic_set_irqline_nolock(const struct vmrt_vm_comp *vm, uint32_t vgsi, uint32_t operation); + +uint32_t get_vm_gsicount(const struct vmrt_vm_comp *vm); +void vioapic_broadcast_eoi(const struct vmrt_vm_comp *vm, uint32_t vector); +void vioapic_get_rte(const struct vmrt_vm_comp *vm, uint32_t vgsi, union ioapic_rte *rte); +int32_t vioapic_mmio_access_handler(struct vmrt_vm_vcpu *vcpu); +struct acrn_single_vioapic *vgsi_to_vioapic_and_vpin(const struct vmrt_vm_comp *vm, uint32_t vgsi, uint32_t *vpin); + +/** + * @} + */ +/* End of acrn_vioapic */ +#endif /* VIOAPIC_H */ diff --git a/src/components/implementation/simple_vmm/multi_vmm/vlapic.c b/src/components/implementation/simple_vmm/multi_vmm/vlapic.c new file mode 100644 index 0000000000..155eed10e3 --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/vlapic.c @@ -0,0 +1,1554 @@ +/*- + * Copyright (c) 2011 NetApp, Inc. + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#define pr_prefix "vlapic: " + +#include +#include +#include +#include +#include +#include +#include "vpic.h" +#include "bits.h" +#include "atomic.h" + +#include + +#pragma GCC diagnostic ignored "-Wunused-but-set-variable" +#define VLAPIC_VERBOS 0 + +#define VLAPIC_VERSION (16U) +#define APICBASE_BSP 0x00000100UL +#define APICBASE_X2APIC 0x00000400UL +#define APICBASE_XAPIC 0x00000800UL +#define APICBASE_LAPIC_MODE (APICBASE_XAPIC | APICBASE_X2APIC) +#define APICBASE_ENABLED 0x00000800UL +#define LOGICAL_ID_MASK 0xFU +#define CLUSTER_ID_MASK 0xFFFF0U + +#define DBG_LEVEL_VLAPIC 6U + +int g_vlapi_enabled = 0; + +static inline struct vmrt_vm_vcpu *vlapic2vcpu(const struct acrn_vlapic *vlapic) +{ + return vlapic->vcpu; +} +static inline struct acrn_vlapic *vcpu_vlapic(struct vmrt_vm_vcpu *vcpu) +{ + return vcpu->vlapic; +} +static inline bool is_lapic_pt_configured(void) +{ + return false; +} + +static inline void vlapic_dump_irr(__unused const struct acrn_vlapic *vlapic, __unused const char *msg) {} +static inline void vlapic_dump_isr(__unused const struct acrn_vlapic *vlapic, __unused const char *msg) {} + +const struct acrn_apicv_ops *apicv_ops; + +static bool apicv_set_intr_ready(struct acrn_vlapic *vlapic, uint32_t vector); + +static void apicv_trigger_pi_anv(uint16_t dest_pcpu_id, uint32_t anv); + +static void vlapic_x2apic_self_ipi_handler(struct acrn_vlapic *vlapic); + +/* + * Post an interrupt to the vcpu running on 'hostcpu'. This will use a + * hardware assist if available (e.g. Posted Interrupt) or fall back to + * sending an 'ipinum' to interrupt the 'hostcpu'. + */ +static void vlapic_set_error(struct acrn_vlapic *vlapic, uint32_t mask); + +void vlapic_timer_expired(struct vmrt_vm_vcpu *vcpu); +static struct pi_desc *get_pi_desc(struct vmrt_vm_vcpu *vcpu); + +static inline bool vlapic_enabled(const struct acrn_vlapic *vlapic) +{ + const struct lapic_regs *lapic = vlapic->apic_page; + + return (((vlapic->msr_apicbase & APICBASE_ENABLED) != 0UL) && + ((lapic->svr.v & APIC_SVR_ENABLE) != 0U)); +} + +static inline void vlapic_build_x2apic_id(struct acrn_vlapic *vlapic) +{ + struct lapic_regs *lapic; + uint32_t logical_id, cluster_id; + + lapic = vlapic->apic_page; + lapic->id.v = vlapic->vapic_id; + logical_id = lapic->id.v & LOGICAL_ID_MASK; + cluster_id = (lapic->id.v & CLUSTER_ID_MASK) >> 4U; + lapic->ldr.v = (cluster_id << 16U) | (1U << logical_id); +} + +static inline uint32_t vlapic_find_isrv(const struct acrn_vlapic *vlapic) +{ + const struct lapic_regs *lapic = vlapic->apic_page; + uint32_t i, val, bitpos, isrv = 0U; + const struct lapic_reg *isrptr; + + isrptr = &lapic->isr[0]; + + /* i ranges effectively from 7 to 1 */ + for (i = 7U; i > 0U; i--) { + val = isrptr[i].v; + if (val != 0U) { + bitpos = (uint32_t)fls32(val); + isrv = (i << 5U) | bitpos; + break; + } + } + + return isrv; +} + +static void +vlapic_write_dfr(struct acrn_vlapic *vlapic) +{ + struct lapic_regs *lapic; + + lapic = vlapic->apic_page; + lapic->dfr.v &= APIC_DFR_MODEL_MASK; + lapic->dfr.v |= APIC_DFR_RESERVED; + + if ((lapic->dfr.v & APIC_DFR_MODEL_MASK) == APIC_DFR_MODEL_FLAT) { + printc("vlapic DFR in Flat Model\n"); + } else if ((lapic->dfr.v & APIC_DFR_MODEL_MASK) + == APIC_DFR_MODEL_CLUSTER) { + printc("vlapic DFR in Cluster Model\n"); + } else { + assert(0); + } +} + +static void +vlapic_write_ldr(struct acrn_vlapic *vlapic) +{ + struct lapic_regs *lapic; + + lapic = vlapic->apic_page; + lapic->ldr.v &= ~APIC_LDR_RESERVED; +} + +static inline uint32_t +vlapic_timer_divisor_shift(uint32_t dcr) +{ + uint32_t val; + + val = ((dcr & 0x3U) | ((dcr & 0x8U) >> 1U)); + return ((val + 1U) & 0x7U); +} + +__unused static inline bool +vlapic_lvtt_oneshot(const struct acrn_vlapic *vlapic) +{ + return (((vlapic->apic_page->lvt[APIC_LVT_TIMER].v) & APIC_LVTT_TM) + == APIC_LVTT_TM_ONE_SHOT); +} + +static inline bool +vlapic_lvtt_period(const struct acrn_vlapic *vlapic) +{ + return (((vlapic->apic_page->lvt[APIC_LVT_TIMER].v) & APIC_LVTT_TM) + == APIC_LVTT_TM_PERIODIC); +} + +static inline bool +vlapic_lvtt_tsc_deadline(const struct acrn_vlapic *vlapic) +{ + return (((vlapic->apic_page->lvt[APIC_LVT_TIMER].v) & APIC_LVTT_TM) + == APIC_LVTT_TM_TSCDLT); +} + +static inline bool +vlapic_lvtt_masked(const struct acrn_vlapic *vlapic) +{ + return (((vlapic->apic_page->lvt[APIC_LVT_TIMER].v) & APIC_LVTT_M) != 0U); +} + +static bool +set_expiration(struct acrn_vlapic *vlapic) +{ + struct vlapic_timer *vtimer; + uint32_t tmicr, divisor_shift; + bool ret; + + vtimer = &vlapic->vtimer; + tmicr = vtimer->tmicr; + divisor_shift = vtimer->divisor_shift; + + if ((tmicr == 0U) || (divisor_shift > 8U)) { + ret = false; + } else { + uint64_t delta = (uint64_t)tmicr << divisor_shift; + assert(0); + + ret = true; + } + return ret; +} + +static void vlapic_update_lvtt(struct acrn_vlapic *vlapic, + uint32_t val) +{ + uint32_t timer_mode = val & APIC_LVTT_TM; + struct vlapic_timer *vtimer = &vlapic->vtimer; + + if (vtimer->mode != timer_mode) { + struct hv_timer *timer = &vtimer->timer; + + /* + * A write to the LVT Timer Register that changes + * the timer mode disarms the local APIC timer. + */ + /* TODO: reset timer */ + vtimer->mode = timer_mode; + } +} + +static uint32_t vlapic_get_ccr(const struct acrn_vlapic *vlapic) +{ + uint32_t remain_count = 0U; + const struct vlapic_timer *vtimer = &vlapic->vtimer; + + if ((vtimer->tmicr != 0U) && (!vlapic_lvtt_tsc_deadline(vlapic))) { + uint64_t remains; + assert(0); + } + + return remain_count; +} + +static void vlapic_write_dcr(struct acrn_vlapic *vlapic) +{ + uint32_t divisor_shift; + struct vlapic_timer *vtimer; + struct lapic_regs *lapic = vlapic->apic_page; + + vtimer = &vlapic->vtimer; + divisor_shift = vlapic_timer_divisor_shift(lapic->dcr_timer.v); + + vtimer->divisor_shift = divisor_shift; +} + +static void vlapic_write_icrtmr(struct acrn_vlapic *vlapic) +{ + struct lapic_regs *lapic; + struct vlapic_timer *vtimer; + + if (!vlapic_lvtt_tsc_deadline(vlapic)) { + lapic = vlapic->apic_page; + vtimer = &vlapic->vtimer; + vtimer->tmicr = lapic->icr_timer.v; + } +} + +static void +vlapic_write_esr(struct acrn_vlapic *vlapic) +{ + struct lapic_regs *lapic; + + lapic = vlapic->apic_page; + lapic->esr.v = vlapic->esr_pending; + vlapic->esr_pending = 0U; +} + +static void +vlapic_set_tmr(struct acrn_vlapic *vlapic, uint32_t vector, bool level) +{ + struct lapic_reg *tmrptr = &(vlapic->apic_page->tmr[0]); + if (level) { + if (!bitmap32_test_and_set_lock((uint16_t)(vector & 0x1fU), &tmrptr[(vector & 0xffU) >> 5U].v)) { + assert(0); + } + } else { + if (bitmap32_test_and_clear_lock((uint16_t)(vector & 0x1fU), &tmrptr[(vector & 0xffU) >> 5U].v)) { + assert(0); + } + } +} + +static void apicv_basic_accept_intr(struct acrn_vlapic *vlapic, uint32_t vector, bool level) +{ + struct lapic_regs *lapic; + struct lapic_reg *irrptr; + uint32_t idx; + + lapic = vlapic->apic_page; + idx = vector >> 5U; + irrptr = &lapic->irr[0]; + + /* If the interrupt is set, don't try to do it again */ + if (!bitmap32_test_and_set_lock((uint16_t)(vector & 0x1fU), &irrptr[idx].v)) { + /* update TMR if interrupt trigger mode has changed */ + vlapic_set_tmr(vlapic, vector, level); + assert(0); + } +} + +static void apicv_advanced_accept_intr(struct acrn_vlapic *vlapic, uint32_t vector, bool level) +{ + /* update TMR if interrupt trigger mode has changed */ + vlapic_set_tmr(vlapic, vector, level); + + if (apicv_set_intr_ready(vlapic, vector)) { + /* + * Send interrupt to vCPU via posted interrupt way: + * 1. If target vCPU is in root mode(isn't running), + * record this request as ACRN_REQUEST_EVENT,then + * will pick up the interrupt from PIR and inject + * it to vCPU in next vmentry. + * 2. If target vCPU is in non-root mode(running), + * send PI notification to vCPU and hardware will + * sync PIR to vIRR automatically. + */ + + /* TODO: handle cross-core virtual interrupt notification */ + } +} + +/* + * @pre vector >= 16 + */ +static void vlapic_accept_intr(struct acrn_vlapic *vlapic, uint32_t vector, bool level) +{ + struct lapic_regs *lapic; + assert(vector <= 255); + + lapic = vlapic->apic_page; + if ((lapic->svr.v & APIC_SVR_ENABLE) == 0U) { + printc("vlapic is software disabled, ignoring interrupt %u", vector); + assert(0); + } else { + apicv_advanced_accept_intr(vlapic, vector, level); + } +} + +/** + * @brief Send notification vector to target pCPU. + * + * If APICv Posted-Interrupt is enabled and target pCPU is in non-root mode, + * pCPU will sync pending virtual interrupts from PIR to vIRR automatically, + * without VM exit. + * If pCPU in root-mode, virtual interrupt will be injected in next VM entry. + * + * @param[in] dest_pcpu_id Target CPU ID. + * @param[in] anv Activation Notification Vectors (ANV) + * + * @return None + */ +static void apicv_trigger_pi_anv(uint16_t dest_pcpu_id, uint32_t anv) +{ + /* TODO: support pi in the future */ + assert(0); +} + +/** + * @pre offset value shall be one of the folllowing values: + * APIC_OFFSET_CMCI_LVT + * APIC_OFFSET_TIMER_LVT + * APIC_OFFSET_THERM_LVT + * APIC_OFFSET_PERF_LVT + * APIC_OFFSET_LINT0_LVT + * APIC_OFFSET_LINT1_LVT + * APIC_OFFSET_ERROR_LVT + */ +static inline uint32_t +lvt_off_to_idx(uint32_t offset) +{ + uint32_t index; + + switch (offset) { + case APIC_OFFSET_CMCI_LVT: + index = APIC_LVT_CMCI; + break; + case APIC_OFFSET_TIMER_LVT: + index = APIC_LVT_TIMER; + break; + case APIC_OFFSET_THERM_LVT: + index = APIC_LVT_THERMAL; + break; + case APIC_OFFSET_PERF_LVT: + index = APIC_LVT_PMC; + break; + case APIC_OFFSET_LINT0_LVT: + index = APIC_LVT_LINT0; + break; + case APIC_OFFSET_LINT1_LVT: + index = APIC_LVT_LINT1; + break; + case APIC_OFFSET_ERROR_LVT: + default: + /* + * The function caller could guarantee the pre condition. + * So, all of the possible 'offset' other than + * APIC_OFFSET_ERROR_LVT has been handled in prior cases. + */ + index = APIC_LVT_ERROR; + break; + } + + return index; +} + +/** + * @pre offset value shall be one of the folllowing values: + * APIC_OFFSET_CMCI_LVT + * APIC_OFFSET_TIMER_LVT + * APIC_OFFSET_THERM_LVT + * APIC_OFFSET_PERF_LVT + * APIC_OFFSET_LINT0_LVT + * APIC_OFFSET_LINT1_LVT + * APIC_OFFSET_ERROR_LVT + */ +static inline uint32_t * +vlapic_get_lvtptr(struct acrn_vlapic *vlapic, uint32_t offset) +{ + struct lapic_regs *lapic = vlapic->apic_page; + uint32_t i; + uint32_t *lvt_ptr; + + switch (offset) { + case APIC_OFFSET_CMCI_LVT: + lvt_ptr = &lapic->lvt_cmci.v; + break; + default: + /* + * The function caller could guarantee the pre condition. + * All the possible 'offset' other than APIC_OFFSET_CMCI_LVT + * could be handled here. + */ + i = lvt_off_to_idx(offset); + lvt_ptr = &(lapic->lvt[i].v); + break; + } + return lvt_ptr; +} + +static inline uint32_t +vlapic_get_lvt(const struct acrn_vlapic *vlapic, uint32_t offset) +{ + uint32_t idx; + + idx = lvt_off_to_idx(offset); + return vlapic->lvt_last[idx]; +} + +static void +vlapic_write_lvt(struct acrn_vlapic *vlapic, uint32_t offset) +{ + uint32_t *lvtptr, mask, val, idx; + struct lapic_regs *lapic; + bool error = false; + + lapic = vlapic->apic_page; + lvtptr = vlapic_get_lvtptr(vlapic, offset); + val = *lvtptr; + + if ((lapic->svr.v & APIC_SVR_ENABLE) == 0U) { + val |= APIC_LVT_M; + } + mask = APIC_LVT_M | APIC_LVT_DS | APIC_LVT_VECTOR; + switch (offset) { + case APIC_OFFSET_TIMER_LVT: + mask |= APIC_LVTT_TM; + break; + case APIC_OFFSET_ERROR_LVT: + break; + case APIC_OFFSET_LINT0_LVT: + case APIC_OFFSET_LINT1_LVT: + mask |= APIC_LVT_TM | APIC_LVT_RIRR | APIC_LVT_IIPP; + /* FALLTHROUGH */ + default: + mask |= APIC_LVT_DM; + break; + } + val &= mask; + + /* vlapic mask/unmask LINT0 for ExtINT? */ + if ((offset == APIC_OFFSET_LINT0_LVT) && + ((val & APIC_LVT_DM) == APIC_LVT_DM_EXTINT)) { + uint32_t last = vlapic_get_lvt(vlapic, offset); + struct vmrt_vm_comp *vm = vlapic2vcpu(vlapic)->vm; + + /* mask -> unmask: may from every vlapic in the vm */ + if (((last & APIC_LVT_M) != 0U) && ((val & APIC_LVT_M) == 0U)) { + if ((vm->wire_mode == VPIC_WIRE_INTR) || + (vm->wire_mode == VPIC_WIRE_NULL)) { + vm->wire_mode = VPIC_WIRE_LAPIC; + printc("vpic wire mode -> LAPIC\n"); + } else { + printc("WARNING:invalid vpic wire mode change\n"); + assert(0); + } + /* unmask -> mask: only from the vlapic LINT0-ExtINT enabled */ + } else if (((last & APIC_LVT_M) == 0U) && ((val & APIC_LVT_M) != 0U)) { + if (vm->wire_mode == VPIC_WIRE_LAPIC) { + vm->wire_mode = VPIC_WIRE_NULL; + printc("vpic wire mode -> NULL\n"); + } + } else { + /* APIC_LVT_M unchanged. No action required. */ + } + } else if (offset == APIC_OFFSET_TIMER_LVT) { + vlapic_update_lvtt(vlapic, val); + } else { + /* No action required. */ + } + + if (!error) { + *lvtptr = val; + idx = lvt_off_to_idx(offset); + vlapic->lvt_last[idx] = val; + } +} + +static void +vlapic_mask_lvts(struct acrn_vlapic *vlapic) +{ + struct lapic_regs *lapic = vlapic->apic_page; + + lapic->lvt_cmci.v |= APIC_LVT_M; + vlapic_write_lvt(vlapic, APIC_OFFSET_CMCI_LVT); + + lapic->lvt[APIC_LVT_TIMER].v |= APIC_LVT_M; + vlapic_write_lvt(vlapic, APIC_OFFSET_TIMER_LVT); + + lapic->lvt[APIC_LVT_THERMAL].v |= APIC_LVT_M; + vlapic_write_lvt(vlapic, APIC_OFFSET_THERM_LVT); + + lapic->lvt[APIC_LVT_PMC].v |= APIC_LVT_M; + vlapic_write_lvt(vlapic, APIC_OFFSET_PERF_LVT); + + lapic->lvt[APIC_LVT_LINT0].v |= APIC_LVT_M; + vlapic_write_lvt(vlapic, APIC_OFFSET_LINT0_LVT); + + lapic->lvt[APIC_LVT_LINT1].v |= APIC_LVT_M; + vlapic_write_lvt(vlapic, APIC_OFFSET_LINT1_LVT); + + lapic->lvt[APIC_LVT_ERROR].v |= APIC_LVT_M; + vlapic_write_lvt(vlapic, APIC_OFFSET_ERROR_LVT); +} + +/* + * Algorithm adopted from section "Interrupt, Task and Processor Priority" + * in Intel Architecture Manual Vol 3a. + */ +static void +vlapic_update_ppr(struct acrn_vlapic *vlapic) +{ + uint32_t isrv, tpr, ppr; + + isrv = vlapic->isrv; + tpr = vlapic->apic_page->tpr.v; + + if (prio(tpr) >= prio(isrv)) { + ppr = tpr; + } else { + ppr = isrv & 0xf0U; + } + + vlapic->apic_page->ppr.v = ppr; +} + +static void +vlapic_process_eoi(struct acrn_vlapic *vlapic) +{ + struct lapic_regs *lapic = vlapic->apic_page; + struct lapic_reg *isrptr, *tmrptr; + uint32_t i, vector, bitpos; + + isrptr = &lapic->isr[0]; + tmrptr = &lapic->tmr[0]; + + if (vlapic->isrv != 0U) { + vector = vlapic->isrv; + i = (vector >> 5U); + bitpos = (vector & 0x1fU); + bitmap32_clear_nolock((uint16_t)bitpos, &isrptr[i].v); + + vlapic_dump_isr(vlapic, "vlapic_process_eoi"); + + vlapic->isrv = vlapic_find_isrv(vlapic); + vlapic_update_ppr(vlapic); + } +} + +static void +vlapic_set_error(struct acrn_vlapic *vlapic, uint32_t mask) +{ + uint32_t lvt, vec; + + vlapic->esr_pending |= mask; + if (vlapic->esr_firing == 0) { + vlapic->esr_firing = 1; + + /* The error LVT always uses the fixed delivery mode. */ + lvt = vlapic_get_lvt(vlapic, APIC_OFFSET_ERROR_LVT); + if ((lvt & APIC_LVT_M) == 0U) { + vec = lvt & APIC_LVT_VECTOR; + if (vec >= 16U) { + vlapic_accept_intr(vlapic, vec, LAPIC_TRIG_EDGE); + } + } + vlapic->esr_firing = 0; + } +} + +static void vlapic_write_icrlo(struct acrn_vlapic *vlapic) +{ + uint16_t vcpu_id; + bool phys = false, is_broadcast = false; + uint64_t dmask; + uint32_t icr_low, icr_high, dest; + uint32_t vec, mode, shorthand; + struct lapic_regs *lapic; + struct vmrt_vm_vcpu *target_vcpu; + + lapic = vlapic->apic_page; + lapic->icr_lo.v &= ~APIC_DELSTAT_PEND; + + icr_low = lapic->icr_lo.v; + icr_high = lapic->icr_hi.v; + if (is_x2apic_enabled(vlapic)) { + dest = icr_high; + is_broadcast = (dest == 0xffffffffU); + } else { + dest = icr_high >> APIC_ID_SHIFT; + is_broadcast = (dest == 0xffU); + } + vec = icr_low & APIC_VECTOR_MASK; + mode = icr_low & APIC_DELMODE_MASK; + phys = ((icr_low & APIC_DESTMODE_LOG) == 0UL); + shorthand = icr_low & APIC_DEST_MASK; + + if ((mode == APIC_DELMODE_FIXED) && (vec < 16U)) { + vlapic_set_error(vlapic, APIC_ESR_SEND_ILLEGAL_VECTOR); + printc("Ignoring invalid IPI %u", vec); + assert(0); + } else if (((shorthand == APIC_DEST_SELF) || (shorthand == APIC_DEST_ALLISELF)) + && ((mode == APIC_DELMODE_NMI) || (mode == APIC_DELMODE_INIT) + || (mode == APIC_DELMODE_STARTUP))) { + printc("unsupported ICR command, ignore it\n"); + } else { + struct vmrt_vm_vcpu *vcpu = vlapic2vcpu(vlapic); + + printc( + "icrlo 0x%08x icrhi 0x%08x triggered ipi %u", + icr_low, icr_high, vec); + + assert(0); + } +} + +static inline uint32_t vlapic_find_highest_irr(const struct acrn_vlapic *vlapic) +{ + const struct lapic_regs *lapic = vlapic->apic_page; + uint32_t i, val, bitpos, vec = 0U; + const struct lapic_reg *irrptr; + + irrptr = &lapic->irr[0]; + + /* i ranges effectively from 7 to 1 */ + for (i = 7U; i > 0U; i--) { + val = irrptr[i].v; + if (val != 0U) { + bitpos = (uint32_t)fls32(val); + vec = (i * 32U) + bitpos; + break; + } + } + + return vec; +} + +/** + * @brief Find a deliverable virtual interrupts for vLAPIC in irr. + * + * @param[in] vlapic Pointer to target vLAPIC data structure + * @param[inout] vecptr Pointer to vector buffer and will be filled + * with eligible vector if any. + * + * @retval false There is no deliverable pending vector. + * @retval true There is deliverable vector. + * + * @remark The vector does not automatically transition to the ISR as a + * result of calling this function. + * This function is only for case that APICv/VID is NOT supported. + */ +static bool vlapic_find_deliverable_intr(const struct acrn_vlapic *vlapic, uint32_t *vecptr) +{ + const struct lapic_regs *lapic = vlapic->apic_page; + uint32_t vec; + bool ret = false; + + vec = vlapic_find_highest_irr(vlapic); + if (prio(vec) > prio(lapic->ppr.v)) { + ret = true; + if (vecptr != NULL) { + *vecptr = vec; + } + } + + return ret; +} + +/** + * @brief Get a deliverable virtual interrupt from irr to isr. + * + * Transition 'vector' from IRR to ISR. This function is called with the + * vector returned by 'vlapic_find_deliverable_intr()' when the guest is able to + * accept this interrupt (i.e. RFLAGS.IF = 1 and no conditions exist that + * block interrupt delivery). + * + * @param[in] vlapic Pointer to target vLAPIC data structure + * @param[in] vector Target virtual interrupt vector + * + * @return None + * + * @pre vlapic != NULL + */ +static void vlapic_get_deliverable_intr(struct acrn_vlapic *vlapic, uint32_t vector) +{ + struct lapic_regs *lapic = vlapic->apic_page; + struct lapic_reg *irrptr, *isrptr; + uint32_t idx; + + /* + * clear the ready bit for vector being accepted in irr + * and set the vector as in service in isr. + */ + idx = vector >> 5U; + + irrptr = &lapic->irr[0]; + bitmap32_clear_lock((uint16_t)(vector & 0x1fU), &irrptr[idx].v); + + vlapic_dump_irr(vlapic, "vlapic_get_deliverable_intr"); + + isrptr = &lapic->isr[0]; + bitmap32_set_nolock((uint16_t)(vector & 0x1fU), &isrptr[idx].v); + vlapic_dump_isr(vlapic, "vlapic_get_deliverable_intr"); + + vlapic->isrv = vector; + + /* + * Update the PPR + */ + vlapic_update_ppr(vlapic); +} + +static void +vlapic_write_svr(struct acrn_vlapic *vlapic) +{ + struct lapic_regs *lapic; + uint32_t old, new, changed; + + lapic = vlapic->apic_page; + + new = lapic->svr.v; + old = vlapic->svr_last; + vlapic->svr_last = new; + + changed = old ^ new; + + if ((changed & APIC_SVR_ENABLE) != 0U) { + if ((new & APIC_SVR_ENABLE) == 0U) { + struct vmrt_vm_comp *vm = vlapic2vcpu(vlapic)->vm; + /* + * The apic is now disabled so stop the apic timer + * and mask all the LVT entries. + */ + printc("vlapic is software-disabled\n"); + + vlapic_mask_lvts(vlapic); + /* the only one enabled LINT0-ExtINT vlapic disabled */ + if (vm->wire_mode == VPIC_WIRE_NULL) { + vm->wire_mode = VPIC_WIRE_INTR; + printc("vpic wire mode -> INTR\n"); + } + } else { + /* + * The apic is now enabled so restart the apic timer + * if it is configured in periodic mode. + */ + printc("vlapic is software-enabled\n"); + g_vlapi_enabled = 1; + if (vlapic_lvtt_period(vlapic)) { + /* TODO: set timer logic */ + assert(0); + } + } + } +} + +static int32_t vlapic_read(struct acrn_vlapic *vlapic, uint32_t offset_arg, uint64_t *data) +{ + int32_t ret = 0; + struct lapic_regs *lapic = vlapic->apic_page; + uint32_t i; + uint32_t offset = offset_arg; + *data = 0UL; + + if (offset > sizeof(*lapic)) { + ret = -EACCES; + } else { + + offset &= ~0x3UL; + switch (offset) { + case APIC_OFFSET_ID: + *data = lapic->id.v; + break; + case APIC_OFFSET_VER: + *data = lapic->version.v; + break; + case APIC_OFFSET_PPR: + *data = lapic->ppr.v; + break; + case APIC_OFFSET_EOI: + *data = lapic->eoi.v; + break; + case APIC_OFFSET_LDR: + *data = lapic->ldr.v; + break; + case APIC_OFFSET_DFR: + *data = lapic->dfr.v; + break; + case APIC_OFFSET_SVR: + *data = lapic->svr.v; + break; + case APIC_OFFSET_ISR0: + case APIC_OFFSET_ISR1: + case APIC_OFFSET_ISR2: + case APIC_OFFSET_ISR3: + case APIC_OFFSET_ISR4: + case APIC_OFFSET_ISR5: + case APIC_OFFSET_ISR6: + case APIC_OFFSET_ISR7: + i = (offset - APIC_OFFSET_ISR0) >> 4U; + *data = lapic->isr[i].v; + break; + case APIC_OFFSET_TMR0: + case APIC_OFFSET_TMR1: + case APIC_OFFSET_TMR2: + case APIC_OFFSET_TMR3: + case APIC_OFFSET_TMR4: + case APIC_OFFSET_TMR5: + case APIC_OFFSET_TMR6: + case APIC_OFFSET_TMR7: + i = (offset - APIC_OFFSET_TMR0) >> 4U; + *data = lapic->tmr[i].v; + break; + case APIC_OFFSET_IRR0: + case APIC_OFFSET_IRR1: + case APIC_OFFSET_IRR2: + case APIC_OFFSET_IRR3: + case APIC_OFFSET_IRR4: + case APIC_OFFSET_IRR5: + case APIC_OFFSET_IRR6: + case APIC_OFFSET_IRR7: + i = (offset - APIC_OFFSET_IRR0) >> 4U; + *data = lapic->irr[i].v; + break; + case APIC_OFFSET_ESR: + *data = lapic->esr.v; + break; + case APIC_OFFSET_ICR_LOW: + *data = lapic->icr_lo.v; + if (is_x2apic_enabled(vlapic)) { + *data |= ((uint64_t)lapic->icr_hi.v) << 32U; + } + break; + case APIC_OFFSET_ICR_HI: + *data = lapic->icr_hi.v; + break; + case APIC_OFFSET_CMCI_LVT: + case APIC_OFFSET_TIMER_LVT: + case APIC_OFFSET_THERM_LVT: + case APIC_OFFSET_PERF_LVT: + case APIC_OFFSET_LINT0_LVT: + case APIC_OFFSET_LINT1_LVT: + case APIC_OFFSET_ERROR_LVT: + *data = vlapic_get_lvt(vlapic, offset); +#ifdef INVARIANTS + reg = vlapic_get_lvtptr(vlapic, offset); + assert(*data == *reg, "inconsistent lvt value at offset %#x: %#lx/%#x", offset, *data, *reg); +#endif + break; + case APIC_OFFSET_TIMER_ICR: + /* if TSCDEADLINE mode always return 0*/ + if (vlapic_lvtt_tsc_deadline(vlapic)) { + *data = 0UL; + } else { + *data = lapic->icr_timer.v; + } + break; + case APIC_OFFSET_TIMER_CCR: + *data = vlapic_get_ccr(vlapic); + break; + case APIC_OFFSET_TIMER_DCR: + *data = lapic->dcr_timer.v; + break; + default: + ret = -EACCES; + break; + } + } + + return ret; +} + + + +/* + * @pre vcpu != NULL + * @pre vector <= 255U + */ +void +vlapic_set_intr(struct vmrt_vm_vcpu *vcpu, uint32_t vector, bool level) +{ + struct acrn_vlapic *vlapic; + + vlapic = vcpu_vlapic(vcpu); + if (vector < 16U) { + vlapic_set_error(vlapic, APIC_ESR_RECEIVE_ILLEGAL_VECTOR); + assert(0); + } else { + vlapic_accept_intr(vlapic, vector, level); + } +} + +void vlapic_timer_expired(struct vmrt_vm_vcpu *vcpu) +{ + struct acrn_vlapic *vlapic; + struct lapic_regs *lapic; + + vlapic = vcpu_vlapic(vcpu); + lapic = vlapic->apic_page; + + /* inject vcpu timer interrupt if not masked */ + if (!vlapic_lvtt_masked(vlapic)) { + vlapic_set_intr(vcpu, lapic->lvt[APIC_LVT_TIMER].v & APIC_LVTT_VECTOR, LAPIC_TRIG_EDGE); + } +} + +/* + * @pre vm != NULL + */ +bool is_x2apic_enabled(const struct acrn_vlapic *vlapic) +{ + bool ret = false; + + return ret; +} + +bool is_xapic_enabled(const struct acrn_vlapic *vlapic) +{ + bool ret = true; + + return ret; +} + + +static bool apicv_basic_x2apic_read_msr_may_valid(uint32_t offset) +{ + return (offset != APIC_OFFSET_DFR) && (offset != APIC_OFFSET_ICR_HI); +} + +static bool apicv_advanced_x2apic_read_msr_may_valid(uint32_t offset) +{ + return (offset == APIC_OFFSET_TIMER_CCR); +} + +static bool apicv_basic_x2apic_write_msr_may_valid(uint32_t offset) +{ + return (offset != APIC_OFFSET_DFR) && (offset != APIC_OFFSET_ICR_HI); +} + +static bool apicv_advanced_x2apic_write_msr_may_valid(uint32_t offset) +{ + return (offset != APIC_OFFSET_DFR) && (offset != APIC_OFFSET_ICR_HI) && + (offset != APIC_OFFSET_EOI) && (offset != APIC_OFFSET_SELF_IPI); +} + + +/** + * APIC-v functions + * @pre get_pi_desc(vlapic2vcpu(vlapic)) != NULL + */ +static bool +apicv_set_intr_ready(struct acrn_vlapic *vlapic, uint32_t vector) +{ + struct pi_desc *pid; + uint32_t idx; + bool notify = false; + + pid = get_pi_desc(vlapic2vcpu(vlapic)); + idx = vector >> 6U; + if (!bitmap_test_and_set_lock((uint16_t)(vector & 0x3fU), &pid->pir[idx])) { + notify = !bitmap_test_and_set_lock(POSTED_INTR_ON, &pid->control.value); + } + return notify; +} + + +static void apicv_basic_inject_intr(struct acrn_vlapic *vlapic, + bool guest_irq_enabled, bool injected) +{ + uint32_t vector = 0U; + + if (guest_irq_enabled && (!injected)) { + vlapic_update_ppr(vlapic); + if (vlapic_find_deliverable_intr(vlapic, &vector)) { + assert(0); + vlapic_get_deliverable_intr(vlapic, vector); + } + } + + vlapic_update_tpr_threshold(vlapic); +} + +/* + * @brief Send a Posted Interrupt to itself. + * + * Interrupts are disabled on pCPU at this point of time. + * Upon the next VMEnter the self-IPI is serviced by the logical processor. + * Since the IPI vector is Posted Interrupt vector, logical processor syncs + * PIR to vIRR and updates RVI. + * + * @pre get_pi_desc(vlapic->vcpu) != NULL + */ +static inline struct pi_desc *get_pi_desc(struct vmrt_vm_vcpu *vcpu) +{ + return (struct pi_desc *)&(vcpu->shared_region->pi_desc); +} + +static void apicv_advanced_inject_intr(struct acrn_vlapic *vlapic, + __unused bool guest_irq_enabled, __unused bool injected) +{ + struct vmrt_vm_vcpu *vcpu = vlapic2vcpu(vlapic); + struct pi_desc *pid = get_pi_desc(vcpu); + + if (bitmap_test(POSTED_INTR_ON, &(pid->control.value))) { + vcpu->shared_region->inject_evt = 1; + } +} + +void vlapic_inject_intr(struct vmrt_vm_vcpu *vcpu) +{ + struct acrn_vlapic *vlapic = vcpu_vlapic(vcpu); + apicv_advanced_inject_intr(vlapic, 0, 0); +} + +static bool apicv_basic_has_pending_delivery_intr(struct vmrt_vm_vcpu *vcpu) +{ + uint32_t vector; + struct acrn_vlapic *vlapic = vcpu_vlapic(vcpu); + + vlapic_update_ppr(vlapic); + + /* check and raise request if we have a deliverable irq in LAPIC IRR */ + if (vlapic_find_deliverable_intr(vlapic, &vector)) { + /* we have pending IRR */ + assert(0); + } + + return vcpu->pending_req != 0UL; +} + +static bool apicv_advanced_has_pending_delivery_intr(__unused struct vmrt_vm_vcpu *vcpu) +{ + return false; +} + +bool vlapic_has_pending_delivery_intr(struct vmrt_vm_vcpu *vcpu) +{ + struct acrn_vlapic *vlapic = vcpu_vlapic(vcpu); + return vlapic->ops->has_pending_delivery_intr(vcpu); +} + +uint32_t vlapic_get_next_pending_intr(struct vmrt_vm_vcpu *vcpu) +{ + struct acrn_vlapic *vlapic = vcpu_vlapic(vcpu); + uint32_t vector; + + vector = vlapic_find_highest_irr(vlapic); + + return vector; +} + +static bool apicv_basic_has_pending_intr(struct vmrt_vm_vcpu *vcpu) +{ + return vlapic_get_next_pending_intr(vcpu) != 0UL; +} + +static bool apicv_advanced_has_pending_intr(struct vmrt_vm_vcpu *vcpu) +{ + return apicv_basic_has_pending_intr(vcpu); +} + +bool vlapic_clear_pending_intr(struct vmrt_vm_vcpu *vcpu, uint32_t vector) +{ + struct acrn_vlapic *vlapic = vcpu_vlapic(vcpu); + struct lapic_reg *irrptr = &(vlapic->apic_page->irr[0]); + uint32_t idx = vector >> 5U; + return bitmap32_test_and_clear_lock((uint16_t)(vector & 0x1fU), &irrptr[idx].v); +} + +bool vlapic_has_pending_intr(struct vmrt_vm_vcpu *vcpu) +{ + struct acrn_vlapic *vlapic = vcpu_vlapic(vcpu); + return vlapic->ops->has_pending_intr(vcpu); +} + +static bool apicv_basic_apic_read_access_may_valid(__unused uint32_t offset) +{ + return true; +} + +static bool apicv_advanced_apic_read_access_may_valid(uint32_t offset) +{ + return ((offset == APIC_OFFSET_CMCI_LVT) || (offset == APIC_OFFSET_TIMER_CCR)); +} + +static bool apicv_basic_apic_write_access_may_valid(uint32_t offset) +{ + return (offset != APIC_OFFSET_SELF_IPI); +} + +static bool apicv_advanced_apic_write_access_may_valid(uint32_t offset) +{ + return (offset == APIC_OFFSET_CMCI_LVT); +} + +int32_t veoi_vmexit_handler(struct vmrt_vm_vcpu *vcpu) +{ + struct acrn_vlapic *vlapic = NULL; + + uint32_t vector; + struct lapic_regs *lapic; + struct lapic_reg *tmrptr; + uint32_t idx; + + /* TODO: fix veoi if necessary */ + assert(0); + + return 0; +} + +static void vlapic_x2apic_self_ipi_handler(struct acrn_vlapic *vlapic) +{ + /* TODO: fix x2apic virtualization if necessary */ + struct lapic_regs *lapic; + uint32_t vector; + + lapic = vlapic->apic_page; + vector = lapic->self_ipi.v & APIC_VECTOR_MASK; + assert(0); +} + + +/* + * TPR threshold (32 bits). Bits 3:0 of this field determine the threshold + * below which bits 7:4 of VTPR (see Section 29.1.1) cannot fall. + */ +void vlapic_update_tpr_threshold(const struct acrn_vlapic *vlapic) +{ + /* TODO: fix trp virtualization if necessary */ + uint32_t irr, tpr, threshold; + assert(0); +} + +int32_t tpr_below_threshold_vmexit_handler(struct vmrt_vm_vcpu *vcpu) +{ + /* TODO: fix trp virtualization if necessary */ + assert(0); + + return 0; +} + +static const struct acrn_apicv_ops apicv_basic_ops = { + .accept_intr = apicv_basic_accept_intr, + .inject_intr = apicv_basic_inject_intr, + .has_pending_delivery_intr = apicv_basic_has_pending_delivery_intr, + .has_pending_intr = apicv_basic_has_pending_intr, + .apic_read_access_may_valid = apicv_basic_apic_read_access_may_valid, + .apic_write_access_may_valid = apicv_basic_apic_write_access_may_valid, + .x2apic_read_msr_may_valid = apicv_basic_x2apic_read_msr_may_valid, + .x2apic_write_msr_may_valid = apicv_basic_x2apic_write_msr_may_valid, +}; + +static const struct acrn_apicv_ops apicv_advanced_ops = { + .accept_intr = apicv_advanced_accept_intr, + .inject_intr = apicv_advanced_inject_intr, + .has_pending_delivery_intr = apicv_advanced_has_pending_delivery_intr, + .has_pending_intr = apicv_advanced_has_pending_intr, + .apic_read_access_may_valid = apicv_advanced_apic_read_access_may_valid, + .apic_write_access_may_valid = apicv_advanced_apic_write_access_may_valid, + .x2apic_read_msr_may_valid = apicv_advanced_x2apic_read_msr_may_valid, + .x2apic_write_msr_may_valid = apicv_advanced_x2apic_write_msr_may_valid, +}; + +/* + * set apicv ops for apicv basic mode or apicv advenced mode. + */ +void vlapic_set_apicv_ops(void) +{ + if (is_apicv_advanced_feature_supported()) { + apicv_ops = &apicv_advanced_ops; + } else { + apicv_ops = &apicv_basic_ops; + } +} + +static uint16_t vm_apicid2vcpu_id(struct vmrt_vm_comp *vm, uint32_t lapicid) +{ + uint16_t i; + struct vmrt_vm_vcpu *vcpu = NULL; + uint16_t cpu_id = INVALID_CPU_ID; + + for (int i = 0; i < vm->num_vcpu; i++) { + vcpu = &vm->vcpus[i]; + if (vcpu_vlapic(vcpu)->vapic_id == lapicid) { + cpu_id = vcpu->cpuid; + break; + } + } + + if (cpu_id == INVALID_CPU_ID) { + printc("%s: bad lapicid %u", __func__, lapicid); + assert(0); + } + + return cpu_id; + +} + +static inline void set_dest_mask_phys(struct vmrt_vm_comp *vm, uint64_t *dmask, uint32_t dest) +{ + uint16_t vcpu_id; + + vcpu_id = vm_apicid2vcpu_id(vm, dest); + if (vcpu_id < vm->num_vcpu) { + bitmap_set_nolock(vcpu_id, dmask); + } +} + +/* + * This function tells if a vlapic belongs to the destination. + * If yes, return true, else reture false. + * + * @pre vlapic != NULL + */ +static inline bool is_dest_field_matched(const struct acrn_vlapic *vlapic, uint32_t dest) +{ + uint32_t logical_id, cluster_id, dest_logical_id, dest_cluster_id; + uint32_t ldr = vlapic->apic_page->ldr.v; + bool ret = false; + + if (is_x2apic_enabled(vlapic)) { + logical_id = ldr & 0xFFFFU; + cluster_id = (ldr >> 16U) & 0xFFFFU; + dest_logical_id = dest & 0xFFFFU; + dest_cluster_id = (dest >> 16U) & 0xFFFFU; + if ((cluster_id == dest_cluster_id) && ((logical_id & dest_logical_id) != 0U)) { + ret = true; + } + } else { + uint32_t dfr = vlapic->apic_page->dfr.v; + if ((dfr & APIC_DFR_MODEL_MASK) == APIC_DFR_MODEL_FLAT) { + /* + * In the "Flat Model" the MDA is interpreted as an 8-bit wide + * bitmask. This model is available in the xAPIC mode only. + */ + logical_id = ldr >> 24U; + dest_logical_id = dest & 0xffU; + if ((logical_id & dest_logical_id) != 0U) { + ret = true; + } + } else if ((dfr & APIC_DFR_MODEL_MASK) == APIC_DFR_MODEL_CLUSTER) { + /* + * In the "Cluster Model" the MDA is used to identify a + * specific cluster and a set of APICs in that cluster. + */ + logical_id = (ldr >> 24U) & 0xfU; + cluster_id = ldr >> 28U; + dest_logical_id = dest & 0xfU; + dest_cluster_id = (dest >> 4U) & 0xfU; + if ((cluster_id == dest_cluster_id) && ((logical_id & dest_logical_id) != 0U)) { + ret = true; + } + } else { + /* Guest has configured a bad logical model for this vcpu. */ + printc("vlapic has bad logical model %x", dfr); + assert(0); + } + } + + return ret; +} + +/* + * This function populates 'dmask' with the set of vcpus that match the + * addressing specified by the (dest, phys, lowprio) tuple. + */ +uint64_t +vlapic_calc_dest_noshort(struct vmrt_vm_comp *vm, bool is_broadcast, + uint32_t dest, bool phys, bool lowprio) +{ + uint64_t dmask = 0UL; + struct acrn_vlapic *vlapic, *lowprio_dest = NULL; + struct vmrt_vm_vcpu *vcpu; + uint16_t vcpu_id; + + if (is_broadcast) { + /* Broadcast in both logical and physical modes. */ + printc("Broadcast is not supported now\n"); + assert(0); + } else if (phys) { + /* Physical mode: "dest" is local APIC ID. */ + printc("vlapic phy dst mode to find cpu\n"); + set_dest_mask_phys(vm, &dmask, dest); + } else { + /* + * Logical mode: "dest" is message destination addr + * to be compared with the logical APIC ID in LDR. + */ + for (int i = 0; i < vm->num_vcpu; i++) { + vcpu = &vm->vcpus[i]; + vcpu_id = i; + vlapic = vcpu_vlapic(vcpu); + if (!is_dest_field_matched(vlapic, dest)) { + continue; + } + + if (lowprio) { + /* + * for lowprio delivery mode, the lowest-priority one + * among all "dest" matched processors accepts the intr. + */ + if (lowprio_dest == NULL) { + lowprio_dest = vlapic; + } else if (lowprio_dest->apic_page->ppr.v > vlapic->apic_page->ppr.v) { + lowprio_dest = vlapic; + } else { + /* No other state currently, do nothing */ + } + } else { + bitmap_set_nolock(vcpu_id, &dmask); + } + } + + if (lowprio && (lowprio_dest != NULL)) { + bitmap_set_nolock(vlapic2vcpu(lowprio_dest)->cpuid, &dmask); + } + } + + return dmask; +} + +void +vlapic_receive_intr(struct vmrt_vm_comp *vm, bool level, uint32_t dest, bool phys, + uint32_t delmode, uint32_t vec, bool rh) +{ + bool lowprio; + uint16_t vcpu_id; + uint64_t dmask; + struct vmrt_vm_vcpu *target_vcpu; + + if ((delmode != IOAPIC_RTE_DELMODE_FIXED) && + (delmode != IOAPIC_RTE_DELMODE_LOPRI) && + (delmode != IOAPIC_RTE_DELMODE_EXINT)) { + printc("vlapic intr invalid delmode %#x", delmode); + assert(0); + } else { + lowprio = (delmode == IOAPIC_RTE_DELMODE_LOPRI) || rh; + + /* + * We don't provide any virtual interrupt redirection hardware so + * all interrupts originating from the ioapic or MSI specify the + * 'dest' in the legacy xAPIC format. + */ + dmask = vlapic_calc_dest_noshort(vm, false, dest, phys, lowprio); + + for (vcpu_id = 0U; vcpu_id < vm->num_vcpu; vcpu_id++) { + struct acrn_vlapic *vlapic; + if ((dmask & (1UL << vcpu_id)) != 0UL) { + target_vcpu = vmrt_get_vcpu(vm, vcpu_id); + + /* only make request when vlapic enabled */ + vlapic = vcpu_vlapic(target_vcpu); + if (vlapic_enabled(vlapic)) { + if (delmode == IOAPIC_RTE_DELMODE_EXINT) { + assert(0); + } else { + vlapic_set_intr(target_vcpu, vec, level); + } + } else {assert(0);} + } + } + } +} + +void +vlapic_reset(struct acrn_vlapic *vlapic) +{ + struct lapic_regs *lapic; + + vlapic->msr_apicbase = DEFAULT_APIC_BASE; + + if (vlapic2vcpu(vlapic)->cpuid == BSP_CPU_ID) { + vlapic->msr_apicbase |= APICBASE_BSP; + } + vlapic->vapic_id = vlapic2vcpu(vlapic)->cpuid; + + /* Upon reset, vlapic is set to xAPIC mode. */ + vlapic->msr_apicbase |= APICBASE_XAPIC; + + lapic = vlapic->apic_page; + (void)memset((void *)lapic, 0U, sizeof(struct lapic_regs)); + + lapic->id.v = vlapic->vapic_id; + if (!is_x2apic_enabled(vlapic)) { + lapic->id.v <<= APIC_ID_SHIFT; + } + + lapic->version.v = VLAPIC_VERSION; + lapic->version.v |= (VLAPIC_MAXLVT_INDEX << MAXLVTSHIFT); + lapic->dfr.v = 0xffffffffU; + lapic->svr.v = APIC_SVR_VECTOR; + vlapic_mask_lvts(vlapic); + + lapic->icr_timer.v = 0U; + lapic->dcr_timer.v = 0U; + vlapic_write_dcr(vlapic); + + vlapic->svr_last = lapic->svr.v; + + vlapic->isrv = 0U; +} + + +int32_t apic_write_vmexit_handler(struct vmrt_vm_vcpu *vcpu) +{ + uint64_t qual; + int32_t err = 0; + uint32_t offset; + struct acrn_vlapic *vlapic = NULL; + + qual = vcpu->shared_region->qualification; + offset = (uint32_t)(qual & 0xFFFUL); + + vlapic = vcpu->vlapic; + + switch (offset) { + case APIC_OFFSET_ID: + /* Force APIC ID as read only */ + break; + case APIC_OFFSET_LDR: + vlapic_write_ldr(vlapic); + break; + case APIC_OFFSET_DFR: + vlapic_write_dfr(vlapic); + break; + case APIC_OFFSET_SVR: + vlapic_write_svr(vlapic); + break; + case APIC_OFFSET_ESR: + vlapic_write_esr(vlapic); + break; + case APIC_OFFSET_ICR_LOW: + vlapic_write_icrlo(vlapic); + break; + case APIC_OFFSET_CMCI_LVT: + case APIC_OFFSET_TIMER_LVT: + case APIC_OFFSET_THERM_LVT: + case APIC_OFFSET_PERF_LVT: + case APIC_OFFSET_LINT0_LVT: + case APIC_OFFSET_LINT1_LVT: + case APIC_OFFSET_ERROR_LVT: + vlapic_write_lvt(vlapic, offset); + break; + case APIC_OFFSET_TIMER_ICR: + vlapic_write_icrtmr(vlapic); + break; + case APIC_OFFSET_TIMER_DCR: + vlapic_write_dcr(vlapic); + break; + case APIC_OFFSET_SELF_IPI: + if (is_x2apic_enabled(vlapic)) { + /* Don't support x2apic */ + assert(0); + break; + } + /* falls through */ + default: + err = -EACCES; + printc("Unhandled APIC-Write, offset:0x%x", offset); + VM_PANIC(vcpu); + break; + } + + return err; +} + +void +lapic_write_handler(struct vmrt_vm_vcpu *vcpu) +{ + apic_write_vmexit_handler(vcpu); +} + +void +lapic_intr_inject(struct vmrt_vm_vcpu *vcpu, u8_t vector, int autoeoi) +{ + struct vm_vcpu_shared_region *shared_region = vcpu->shared_region; + struct acrn_vlapic *vlapic = vcpu_vlapic(vcpu); + struct lapic_regs *lapic = vlapic->apic_page; + u8_t offset = vector / 32; + u8_t bit = vector % 32; + + u8_t svi = (u8_t)(shared_region->interrupt_status >> 8); + u8_t rvi = (u8_t)shared_region->interrupt_status; + + if (svi == vector && autoeoi) { + /* TODO: svi should be the second highest priority bit in isr */ + svi = 0; + lapic->isr[offset].v &= ~(1U << bit); + } + if (rvi < vector) { + rvi = vector; + } + + /* Accept the interrupt */ + lapic->irr[offset].v |= (1U << bit); + + shared_region->interrupt_status = svi << 8 | rvi; +} diff --git a/src/components/implementation/simple_vmm/multi_vmm/vlapic.h b/src/components/implementation/simple_vmm/multi_vmm/vlapic.h new file mode 100644 index 0000000000..d4e8645661 --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/vlapic.h @@ -0,0 +1,260 @@ +/*- + * Copyright (c) 2011 NetApp, Inc. + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef VLAPIC_H +#define VLAPIC_H + +#include +#include + +/** + * @file vlapic.h + * + * @brief public APIs for virtual LAPIC + */ + + +#define VLAPIC_MAXLVT_INDEX APIC_LVT_CMCI + +struct hv_timer { + // struct list_head node; /**< link all timers */ + int mode; /**< timer mode: one-shot or periodic */ + uint64_t timeout; /**< tsc deadline to interrupt */ + uint64_t period_in_cycle; /**< period of the periodic timer in CPU ticks */ + // timer_handle_t func; /**< callback if time reached */ + void *priv_data; /**< func private data */ +}; + +struct vlapic_timer { + struct hv_timer timer; + uint32_t mode; + uint32_t tmicr; + uint32_t divisor_shift; +}; + +struct acrn_vlapic { + /* + * Please keep 'apic_page' as the first field in + * current structure, as below alignment restrictions are mandatory + * to support APICv features: + * - 'apic_page' MUST be 4KB aligned. + * IRR, TMR and PIR could be accessed by other vCPUs when deliver + * an interrupt to vLAPIC. + */ + struct lapic_regs *apic_page; + + struct vmrt_vm_vcpu *vcpu; + + uint32_t vapic_id; + uint32_t esr_pending; + int32_t esr_firing; + + struct vlapic_timer vtimer; + + /* + * isrv: vector number for the highest priority bit that is set in the ISR + */ + uint32_t isrv; + + uint64_t msr_apicbase; + + const struct acrn_apicv_ops *ops; + + /* + * Copies of some registers in the virtual APIC page. We do this for + * a couple of different reasons: + * - to be able to detect what changed (e.g. svr_last) + * - to maintain a coherent snapshot of the register (e.g. lvt_last) + */ + uint32_t svr_last; + uint32_t lvt_last[VLAPIC_MAXLVT_INDEX + 1]; +} __attribute__((aligned(PAGE_SIZE_4K))); + + +struct vmrt_vm_vcpu; +struct acrn_apicv_ops { + void (*accept_intr)(struct acrn_vlapic *vlapic, uint32_t vector, bool level); + void (*inject_intr)(struct acrn_vlapic *vlapic, bool guest_irq_enabled, bool injected); + bool (*has_pending_delivery_intr)(struct vmrt_vm_vcpu *vcpu); + bool (*has_pending_intr)(struct vmrt_vm_vcpu *vcpu); + bool (*apic_read_access_may_valid)(uint32_t offset); + bool (*apic_write_access_may_valid)(uint32_t offset); + bool (*x2apic_read_msr_may_valid)(uint32_t offset); + bool (*x2apic_write_msr_may_valid)(uint32_t offset); +}; + +enum reset_mode; +extern const struct acrn_apicv_ops *apicv_ops; +void vlapic_set_apicv_ops(void); + +/** + * @brief virtual LAPIC + * + * @addtogroup acrn_vlapic ACRN vLAPIC + * @{ + */ + +void vlapic_inject_intr(struct vmrt_vm_vcpu *vcpu); +bool vlapic_has_pending_delivery_intr(struct vmrt_vm_vcpu *vcpu); +bool vlapic_has_pending_intr(struct vmrt_vm_vcpu *vcpu); + +/** + * Returns the highest priority pending vector on vLAPIC, or + * 0 if there is no pending vector. + */ +uint32_t vlapic_get_next_pending_intr(struct vmrt_vm_vcpu *vcpu); + +/** + * Clears a pending vector from vIRR. Returns true if + * the bit was previously present, false otherwise. + */ +bool vlapic_clear_pending_intr(struct vmrt_vm_vcpu *vcpu, uint32_t vector); + +uint64_t vlapic_get_tsc_deadline_msr(const struct acrn_vlapic *vlapic); +void vlapic_set_tsc_deadline_msr(struct acrn_vlapic *vlapic, uint64_t val_arg); +uint64_t vlapic_get_apicbase(const struct acrn_vlapic *vlapic); +int32_t vlapic_set_apicbase(struct acrn_vlapic *vlapic, uint64_t new); +int32_t vlapic_x2apic_read(struct vmrt_vm_vcpu *vcpu, uint32_t msr, uint64_t *val); +int32_t vlapic_x2apic_write(struct vmrt_vm_vcpu *vcpu, uint32_t msr, uint64_t val); + +/* + * Signals to the LAPIC that an interrupt at 'vector' needs to be generated + * to the 'cpu', the state is recorded in IRR. + * @pre vcpu != NULL + * @pre vector <= 255U + */ +void vlapic_set_intr(struct vmrt_vm_vcpu *vcpu, uint32_t vector, bool level); + +#define LAPIC_TRIG_LEVEL true +#define LAPIC_TRIG_EDGE false + +static inline uint32_t prio(uint32_t x) +{ + return (x >> 4U); +} + +/** + * @brief Triggers LAPIC local interrupt(LVT). + * + * @param[in] vm Pointer to VM data structure + * @param[in] vcpu_id_arg ID of vCPU, BROADCAST_CPU_ID means triggering + * interrupt to all vCPUs. + * @param[in] lvt_index The index which LVT would to be fired. + * + * @retval 0 on success. + * @retval -EINVAL on error that vcpu_id_arg or vector of the LVT is invalid. + * + * @pre vm != NULL + */ +int32_t vlapic_set_local_intr(struct vmrt_vm_comp *vm, uint16_t vcpu_id_arg, uint32_t lvt_index); + +/** + * @brief Inject MSI to target VM. + * + * @param[in] vm Pointer to VM data structure + * @param[in] addr MSI address. + * @param[in] data MSI data. + * + * @retval 0 on success. + * @retval -1 on error that addr is invalid. + * + * @pre vm != NULL + */ +int32_t vlapic_inject_msi(struct vmrt_vm_comp *vm, uint64_t addr, uint64_t data); + + +void vlapic_receive_intr(struct vmrt_vm_comp *vm, bool level, uint32_t dest, + bool phys, uint32_t delmode, uint32_t vec, bool rh); + +/** + * @pre vlapic != NULL + */ +static inline uint32_t vlapic_get_apicid(const struct acrn_vlapic *vlapic) +{ + return vlapic->vapic_id; +} + +void vlapic_create(struct vmrt_vm_vcpu *vcpu, uint16_t pcpu_id); +/* + * @pre vcpu != NULL + */ +void vlapic_free(struct vmrt_vm_vcpu *vcpu); + +void vlapic_reset(struct acrn_vlapic *vlapic); +void vlapic_restore(struct acrn_vlapic *vlapic, const struct lapic_regs *regs); +uint64_t vlapic_apicv_get_apic_access_addr(void); +uint64_t vlapic_apicv_get_apic_page_addr(struct acrn_vlapic *vlapic); +int32_t apic_access_vmexit_handler(struct vmrt_vm_vcpu *vcpu); +int32_t apic_write_vmexit_handler(struct vmrt_vm_vcpu *vcpu); +int32_t veoi_vmexit_handler(struct vmrt_vm_vcpu *vcpu); +void vlapic_update_tpr_threshold(const struct acrn_vlapic *vlapic); +int32_t tpr_below_threshold_vmexit_handler(struct vmrt_vm_vcpu *vcpu); +uint64_t vlapic_calc_dest_noshort(struct vmrt_vm_comp *vm, bool is_broadcast, + uint32_t dest, bool phys, bool lowprio); +bool is_x2apic_enabled(const struct acrn_vlapic *vlapic); +bool is_xapic_enabled(const struct acrn_vlapic *vlapic); + +static inline bool is_apicv_advanced_feature_supported(void) +{ + return false; +} +#define POSTED_INTR_ON 0U +/* Posted Interrupt Descriptor (PID) in VT-d spec */ +struct pi_desc { + /* Posted Interrupt Requests, one bit per requested vector */ + uint64_t pir[4]; + + union { + struct { + /* Outstanding Notification */ + uint16_t on:1; + + /* Suppress Notification, of non-urgent interrupts */ + uint16_t sn:1; + + uint16_t rsvd_1:14; + + /* Notification Vector */ + uint8_t nv; + + uint8_t rsvd_2; + + /* Notification destination, a physical LAPIC ID */ + uint32_t ndst; + } bits; + + uint64_t value; + } control; + + uint32_t rsvd[6]; +} __attribute__((aligned(64)));; +/** + * @} + */ +/* End of acrn_vlapic */ +#endif /* VLAPIC_H */ diff --git a/src/components/implementation/simple_vmm/multi_vmm/vlapic_priv.h b/src/components/implementation/simple_vmm/multi_vmm/vlapic_priv.h new file mode 100644 index 0000000000..6c66f6c84e --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/vlapic_priv.h @@ -0,0 +1,84 @@ +/*- + * Copyright (c) 2013 Neel Natu + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef VLAPIC_PRIV_H +#define VLAPIC_PRIV_H + +/* + * APIC Register: Offset Description + */ +#define APIC_OFFSET_ID 0x20U /* Local APIC ID */ +#define APIC_OFFSET_VER 0x30U /* Local APIC Version */ +#define APIC_OFFSET_TPR 0x80U /* Task Priority Register */ +#define APIC_OFFSET_APR 0x90U /* Arbitration Priority */ +#define APIC_OFFSET_PPR 0xA0U /* Processor Priority Register */ +#define APIC_OFFSET_EOI 0xB0U /* EOI Register */ +#define APIC_OFFSET_RRR 0xC0U /* Remote read */ +#define APIC_OFFSET_LDR 0xD0U /* Logical Destination */ +#define APIC_OFFSET_DFR 0xE0U /* Destination Format Register */ +#define APIC_OFFSET_SVR 0xF0U /* Spurious Vector Register */ +#define APIC_OFFSET_ISR0 0x100U /* In Service Register */ +#define APIC_OFFSET_ISR1 0x110U +#define APIC_OFFSET_ISR2 0x120U +#define APIC_OFFSET_ISR3 0x130U +#define APIC_OFFSET_ISR4 0x140U +#define APIC_OFFSET_ISR5 0x150U +#define APIC_OFFSET_ISR6 0x160U +#define APIC_OFFSET_ISR7 0x170U +#define APIC_OFFSET_TMR0 0x180U /* Trigger Mode Register */ +#define APIC_OFFSET_TMR1 0x190U +#define APIC_OFFSET_TMR2 0x1A0U +#define APIC_OFFSET_TMR3 0x1B0U +#define APIC_OFFSET_TMR4 0x1C0U +#define APIC_OFFSET_TMR5 0x1D0U +#define APIC_OFFSET_TMR6 0x1E0U +#define APIC_OFFSET_TMR7 0x1F0U +#define APIC_OFFSET_IRR0 0x200U /* Interrupt Request Register */ +#define APIC_OFFSET_IRR1 0x210U +#define APIC_OFFSET_IRR2 0x220U +#define APIC_OFFSET_IRR3 0x230U +#define APIC_OFFSET_IRR4 0x240U +#define APIC_OFFSET_IRR5 0x250U +#define APIC_OFFSET_IRR6 0x260U +#define APIC_OFFSET_IRR7 0x270U +#define APIC_OFFSET_ESR 0x280U /* Error Status Register */ +#define APIC_OFFSET_CMCI_LVT 0x2F0U /* Local Vector Table (CMCI) */ +#define APIC_OFFSET_ICR_LOW 0x300U /* Interrupt Command Register */ +#define APIC_OFFSET_ICR_HI 0x310U +#define APIC_OFFSET_TIMER_LVT 0x320U /* Local Vector Table (Timer) */ +#define APIC_OFFSET_THERM_LVT 0x330U /* Local Vector Table (Thermal) */ +#define APIC_OFFSET_PERF_LVT 0x340U /* Local Vector Table (PMC) */ +#define APIC_OFFSET_LINT0_LVT 0x350U /* Local Vector Table (LINT0) */ +#define APIC_OFFSET_LINT1_LVT 0x360U /* Local Vector Table (LINT1) */ +#define APIC_OFFSET_ERROR_LVT 0x370U /* Local Vector Table (ERROR) */ +#define APIC_OFFSET_TIMER_ICR 0x380U /* Timer's Initial Count */ +#define APIC_OFFSET_TIMER_CCR 0x390U /* Timer's Current Count */ +#define APIC_OFFSET_TIMER_DCR 0x3E0U /* Timer's Divide Configuration */ +#define APIC_OFFSET_SELF_IPI 0x3F0U /* Self IPI Register */ + +#endif /* VLAPIC_PRIV_H */ diff --git a/src/components/implementation/simple_vmm/multi_vmm/vmmio.c b/src/components/implementation/simple_vmm/multi_vmm/vmmio.c new file mode 100644 index 0000000000..1efb26ee1b --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/vmmio.c @@ -0,0 +1,53 @@ +#include +#include +#include +#include + +void +ept_violation_handler(struct vmrt_vm_vcpu *vcpu) +{ + volatile struct vm_vcpu_shared_region *regs = vcpu->shared_region; + u64_t qualification = regs->qualification; + u64_t gpa; + struct acrn_mmio_request *mmio_req = vcpu->mmio_request; + + gpa = regs->gpa; + + /* Specify if read or write operation */ + if ((qualification & 0x2UL) != 0UL) { + /* Write operation */ + mmio_req->direction = ACRN_IOREQ_DIR_WRITE; + mmio_req->value = 0UL; + } else { + /* Read operation */ + mmio_req->direction = ACRN_IOREQ_DIR_READ; + } + + mmio_req->address = gpa; + + if (gpa >= IOAPIC_BASE_ADDR && gpa < IOAPIC_BASE_ADDR + PAGE_SIZE_4K) { + int ret = decode_instruction(vcpu); + + if (ret > 0) { + mmio_req->size = (uint64_t)ret; + } else { + VM_PANIC(vcpu); + } + + if (mmio_req->direction == ACRN_IOREQ_DIR_WRITE) { + if (emulate_instruction(vcpu) != 0) { + VM_PANIC(vcpu); + } + } + + vioapic_mmio_access_handler(vcpu); + + if (mmio_req->direction == ACRN_IOREQ_DIR_READ) { + /* Emulate instruction and update vcpu register set */ + (void)emulate_instruction(vcpu); + } + GOTO_NEXT_INST(regs); + } else { + VM_PANIC(vcpu); + } +} diff --git a/src/components/implementation/simple_vmm/multi_vmm/vmsr.c b/src/components/implementation/simple_vmm/multi_vmm/vmsr.c new file mode 100644 index 0000000000..1f45f13692 --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/vmsr.c @@ -0,0 +1,249 @@ +#include +#include + +void +rdmsr_handler(struct vmrt_vm_vcpu *vcpu) +{ + volatile struct vm_vcpu_shared_region *regs = vcpu->shared_region; + + switch (regs->cx) { + case MSR_IA32_EFER: + { + u64_t guest_efer = regs->efer; + regs->ax = (u32_t)guest_efer; + regs->dx = (u32_t)(guest_efer >> 32); + goto done; + } + case MSR_IA32_MISC_ENABLE: + { + /* Note: read only MSR, and its value can be fixed for all cores */ + u64_t misc = 0x800001; + regs->ax = (u32_t)misc; + regs->dx = (u32_t)(misc >> 32); + goto done; + } + case MSR_IA32_BIOS_SIGN_ID: + { + /* Note: microcode is pre-set in the kernel */ + u64_t v = regs->microcode_version; + regs->ax = (u32_t)v; + regs->dx = (u32_t)(v >> 32); + goto done; + } + case MSR_IA32_TSC_ADJUST: + { + /* TODO: need to handle tsc adjustment in VM */ + u32_t ax, dx; + regs->ax = 0; + regs->dx = 0; + goto done; + } + + /* MTRRs can be ingored in Linux and Linux knows it is a virtual environment */ + case MSR_IA32_MTRR_CAP: + case MSR_IA32_MTRR_DEF_TYPE: + case MSR_IA32_MTRR_PHYSBASE_0: + case MSR_IA32_MTRR_PHYSMASK_0: + case MSR_IA32_MTRR_PHYSBASE_1: + case MSR_IA32_MTRR_PHYSMASK_1: + case MSR_IA32_MTRR_PHYSBASE_2: + case MSR_IA32_MTRR_PHYSMASK_2: + case MSR_IA32_MTRR_PHYSBASE_3: + case MSR_IA32_MTRR_PHYSMASK_3: + case MSR_IA32_MTRR_PHYSBASE_4: + case MSR_IA32_MTRR_PHYSMASK_4: + case MSR_IA32_MTRR_PHYSBASE_5: + case MSR_IA32_MTRR_PHYSMASK_5: + case MSR_IA32_MTRR_PHYSBASE_6: + case MSR_IA32_MTRR_PHYSMASK_6: + case MSR_IA32_MTRR_PHYSBASE_7: + case MSR_IA32_MTRR_PHYSMASK_7: + case MSR_IA32_MTRR_PHYSBASE_8: + case MSR_IA32_MTRR_PHYSMASK_8: + case MSR_IA32_MTRR_PHYSBASE_9: + case MSR_IA32_MTRR_PHYSMASK_9: + case MSR_IA32_MTRR_FIX64K_00000: + case MSR_IA32_MTRR_FIX16K_80000: + case MSR_IA32_MTRR_FIX16K_A0000: + case MSR_IA32_MTRR_FIX4K_C0000: + case MSR_IA32_MTRR_FIX4K_C8000: + case MSR_IA32_MTRR_FIX4K_D0000: + case MSR_IA32_MTRR_FIX4K_D8000: + case MSR_IA32_MTRR_FIX4K_E0000: + case MSR_IA32_MTRR_FIX4K_E8000: + case MSR_IA32_MTRR_FIX4K_F0000: + case MSR_IA32_MTRR_FIX4K_F8000: + case MSR_IA32_PAT: + { + regs->ax = 0; + regs->dx = 0; + goto done; + } + case MSR_PPERF: + { + /* FIXME: should inject #GP to guest, thus guest knows this MSR is not present */ + regs->ax = 0; + regs->dx = 0; + goto done; + } + case MSR_SMI_COUNT: + { + /* FIXME: should inject #GP to guest, thus guest knows this MSR is not present */ + regs->ax = 0; + regs->dx = 0; + goto done; + } + case MSR_IA32_APIC_BASE: + { + /* TODO: for non-BSP, the BSP flag should be cleared */ + /* 0x900 : enable xapic and this is BSP */ + regs->ax = 0XFEE00000 | 0x900; + regs->dx = 0; + goto done; + } + case MSR_IA32_FEATURE_CONTROL: + { + /* Lock the feature control in VM */ + regs->ax = 1; + regs->dx = 0; + goto done; + } + case MSR_MISC_FEATURE_ENABLES: + { + /* This MSR can be reserved to 0 */ + regs->ax = 0; + regs->dx = 0; + goto done; + } + case MSR_PLATFORM_INFO: + { + /* Contains power management stuff and can be ignored */ + regs->ax = 0; + regs->dx = 0; + goto done; + } + case MSR_IA32_SPEC_CTRL: + { + /* This MSR has a value of 0 after reset, thus just keep it ad default, don't modify */ + regs->ax = 0; + regs->dx = 0; + goto done; + } + default: + VM_PANIC(vcpu); + } +done: + GOTO_NEXT_INST(regs); + return; +} + +void +wrmsr_handler(struct vmrt_vm_vcpu *vcpu) +{ + volatile struct vm_vcpu_shared_region *regs = vcpu->shared_region; + + switch (regs->cx) { + case MSR_IA32_EFER: + { + u64_t guest_efer; + guest_efer = regs->ax & 0XFFFFFFFF; + guest_efer |= ((regs->dx & 0XFFFFFFFF) << 32); + regs->efer = guest_efer; + + goto done; + } + case MSR_IA32_BIOS_SIGN_ID: + { + /* Microcode has been retrived in the kernel, thus don't need to process here */ + goto done; + } + case MSR_IA32_XSS: + { + u64_t guest_xss; + guest_xss = regs->ax & 0XFFFFFFFF; + guest_xss |= ((regs->dx & 0XFFFFFFFF) << 32); + if ((guest_xss & ~(MSR_IA32_XSS_PT | MSR_IA32_XSS_HDC)) != 0UL) { + /* Assuming other features are not supported */ + VM_PANIC(vcpu); + } else { + /* TODO: only enable the xss pt and hdx, but currently just ignore them */ + } + goto done; + } + case MSR_IA32_MTRR_CAP: + case MSR_IA32_MTRR_DEF_TYPE: + case MSR_IA32_MTRR_PHYSBASE_0: + case MSR_IA32_MTRR_PHYSMASK_0: + case MSR_IA32_MTRR_PHYSBASE_1: + case MSR_IA32_MTRR_PHYSMASK_1: + case MSR_IA32_MTRR_PHYSBASE_2: + case MSR_IA32_MTRR_PHYSMASK_2: + case MSR_IA32_MTRR_PHYSBASE_3: + case MSR_IA32_MTRR_PHYSMASK_3: + case MSR_IA32_MTRR_PHYSBASE_4: + case MSR_IA32_MTRR_PHYSMASK_4: + case MSR_IA32_MTRR_PHYSBASE_5: + case MSR_IA32_MTRR_PHYSMASK_5: + case MSR_IA32_MTRR_PHYSBASE_6: + case MSR_IA32_MTRR_PHYSMASK_6: + case MSR_IA32_MTRR_PHYSBASE_7: + case MSR_IA32_MTRR_PHYSMASK_7: + case MSR_IA32_MTRR_PHYSBASE_8: + case MSR_IA32_MTRR_PHYSMASK_8: + case MSR_IA32_MTRR_PHYSBASE_9: + case MSR_IA32_MTRR_PHYSMASK_9: + case MSR_IA32_MTRR_FIX64K_00000: + case MSR_IA32_MTRR_FIX16K_80000: + case MSR_IA32_MTRR_FIX16K_A0000: + case MSR_IA32_MTRR_FIX4K_C0000: + case MSR_IA32_MTRR_FIX4K_C8000: + case MSR_IA32_MTRR_FIX4K_D0000: + case MSR_IA32_MTRR_FIX4K_D8000: + case MSR_IA32_MTRR_FIX4K_E0000: + case MSR_IA32_MTRR_FIX4K_E8000: + case MSR_IA32_MTRR_FIX4K_F0000: + case MSR_IA32_MTRR_FIX4K_F8000: + case MSR_IA32_PAT: + { + /* MTRRs can be ingored in Linux and Linux knows it is a virtual environment */ + goto done; + } + case MSR_IA32_TSC_DEADLINE: { + u64_t tsc_future, curr_tsc; + rdtscll(curr_tsc); + tsc_future = regs->ax & 0xffffffff; + tsc_future |= ((regs->dx & 0xffffffff) << 32); + vcpu->next_timer = tsc_future; + + goto done; + } + case MSR_MISC_FEATURE_ENABLES: + { + /* Write to this MSR will be all 0 since we ignored this, doesn't matter */ + goto done; + } + case MSR_IA32_SYSENTER_CS: + case MSR_IA32_SYSENTER_ESP: + case MSR_IA32_SYSENTER_EIP: + { + /* 64-bit system doesn't require these MSRs, its fine to ignore them */ + goto done; + } + case MSR_IA32_SPEC_CTRL: + { + /* This MSR has a value of 0 after reset, thus just keep it ad default, don't modify */ + goto done; + } + case MSR_IA32_APIC_BASE: + { + VM_PANIC(vcpu); + goto done; + } + default: + VM_PANIC(vcpu);; + } + +done: + GOTO_NEXT_INST(regs); + return; +} diff --git a/src/components/implementation/simple_vmm/multi_vmm/vpic.h b/src/components/implementation/simple_vmm/multi_vmm/vpic.h new file mode 100644 index 0000000000..b9cab609cb --- /dev/null +++ b/src/components/implementation/simple_vmm/multi_vmm/vpic.h @@ -0,0 +1,191 @@ +/*- + * Copyright (c) 2014 Tycho Nightingale + * Copyright (c) 2017-2022 Intel Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef VPIC_H +#define VPIC_H + +#include +/** + * @file vpic.h + * + * @brief public APIs for virtual PIC + */ + + +#define ICU_IMR_OFFSET 1U + +/* Initialization control word 1. Written to even address. */ +#define ICW1_IC4 0x01U /* ICW4 present */ +#define ICW1_SNGL 0x02U /* 1 = single, 0 = cascaded */ +#define ICW1_ADI 0x04U /* 1 = 4, 0 = 8 byte vectors */ +#define ICW1_LTIM 0x08U /* 1 = level trigger, 0 = edge */ +#define ICW1_RESET 0x10U /* must be 1 */ +/* 0x20 - 0x80 - in 8080/8085 mode only */ + +/* Initialization control word 2. Written to the odd address. */ +/* No definitions, it is the base vector of the IDT for 8086 mode */ + +/* Initialization control word 3. Written to the odd address. */ +/* For a primary PIC, bitfield indicating a secondary PIC on given input */ +/* For a secondary PIC, lower 3 bits are the PIC's ID binary id on primary PIC */ + +/* Initialization control word 4. Written to the odd address. */ +#define ICW4_8086 0x01U /* 1 = 8086, 0 = 8080 */ +#define ICW4_AEOI 0x02U /* 1 = Auto EOI */ +#define ICW4_MS 0x04U /* 1 = buffered primary PIC, 0 = secondary PIC*/ +#define ICW4_BUF 0x08U /* 1 = enable buffer mode */ +#define ICW4_SFNM 0x10U /* 1 = special fully nested mode */ + +/* Operation control words. Written after initialization. */ + +/* Operation control word type 1 */ +/* + * No definitions. Written to the odd address. Bitmask for interrupts. + * 1 = disabled. + */ + +/* Operation control word type 2. Bit 3 (0x08) must be zero. Even address. */ +#define OCW2_L0 0x01U /* Level */ +#define OCW2_L1 0x02U +#define OCW2_L2 0x04U +/* 0x08 must be 0 to select OCW2 vs OCW3 */ +/* 0x10 must be 0 to select OCW2 vs ICW1 */ +#define OCW2_EOI 0x20U /* 1 = EOI */ +#define OCW2_SL 0x40U /* EOI mode */ +#define OCW2_R 0x80U /* EOI mode */ + +/* Operation control word type 3. Bit 3 (0x08) must be set. Even address. */ +#define OCW3_RIS 0x01U /* 1 = read IS, 0 = read IR */ +#define OCW3_RR 0x02U /* register read */ +#define OCW3_P 0x04U /* poll mode command */ +/* 0x08 must be 1 to select OCW3 vs OCW2 */ +#define OCW3_SEL 0x08U /* must be 1 */ +/* 0x10 must be 0 to select OCW3 vs ICW1 */ +#define OCW3_SMM 0x20U /* special mode mask */ +#define OCW3_ESMM 0x40U /* enable SMM */ + +#define IO_ELCR1 0x4d0U +#define IO_ELCR2 0x4d1U + +#define NR_VPIC_PINS_PER_CHIP 8U +#define NR_VPIC_PINS_TOTAL 16U + +enum vpic_wire_mode { + VPIC_WIRE_INTR = 0, + VPIC_WIRE_LAPIC, + VPIC_WIRE_IOAPIC, + VPIC_WIRE_NULL +}; + +enum vpic_trigger { + EDGE_TRIGGER, + LEVEL_TRIGGER +}; + +struct i8259_reg_state { + bool ready; + uint8_t icw_num; + uint8_t rd_cmd_reg; + + bool aeoi; + bool poll; + bool rotate; + bool sfn; /* special fully-nested mode */ + + uint32_t irq_base; + uint8_t request; /* Interrupt Request Register (IIR) */ + uint8_t service; /* Interrupt Service (ISR) */ + uint8_t mask; /* Interrupt Mask Register (IMR) */ + uint8_t smm; /* special mask mode */ + + uint8_t pin_state[8]; /* pin state for level */ + uint32_t lowprio; /* lowest priority irq */ + + bool intr_raised; + uint8_t elc; +}; + +struct acrn_vpic { + // spinlock_t lock; + struct i8259_reg_state i8259[2]; +}; + +struct acrn_vm; +void vpic_init(struct acrn_vm *vm); + +/** + * @brief virtual PIC + * + * @addtogroup acrn_vpic ACRN vPIC + * @{ + */ + +/** + * @brief Set vPIC IRQ line status. + * + * @param[in] vpic Pointer to target VM's vpic table + * @param[in] vgsi GSI for the virtual interrupt + * @param[in] operation action options:GSI_SET_HIGH/GSI_SET_LOW/ + * GSI_RAISING_PULSE/GSI_FALLING_PULSE + * + * @return None + */ +void vpic_set_irqline(struct acrn_vpic *vpic, uint32_t vgsi, uint32_t operation); + +/** + * @brief Get pending virtual interrupts for vPIC. + * + * @param[in] vpic Pointer to target VM's vpic table + * @param[inout] vecptr Pointer to vector buffer and will be filled + * with eligible vector if any. + * + * @return None + */ +void vpic_pending_intr(struct acrn_vpic *vpic, uint32_t *vecptr); + +/** + * @brief Accept virtual interrupt for vPIC. + * + * @param[in] vpic Pointer to target VM's vpic table + * @param[in] vector Target virtual interrupt vector + * + * @return None + * + * @pre vm != NULL + */ +void vpic_intr_accepted(struct acrn_vpic *vpic, uint32_t vector); +void vpic_get_irqline_trigger_mode(const struct acrn_vpic *vpic, uint32_t vgsi, enum vpic_trigger *trigger); +uint32_t vpic_pincount(void); +struct acrn_vpic *vm_pic(const struct acrn_vm *vm); + +/** + * @} + */ +/* End of acrn_vpic */ + +#endif /* VPIC_H */ From e3cec5a102fb7bdcfa0bb65d5be8a939e0cf7fc5 Mon Sep 17 00:00:00 2001 From: betahxy Date: Tue, 26 Mar 2024 00:29:01 -0400 Subject: [PATCH 10/60] Integration Testing --- composition_scripts/vmm_ndpi_nf.toml | 48 + .../sched/pfprr_quantum_static/init.c | 4 +- .../implementation/simple_nf/ndpi/Makefile | 19 + .../simple_nf/ndpi/MurmurHash3.h | 10 + .../simple_nf/ndpi/activision.c | 112 + .../implementation/simple_nf/ndpi/afp.c | 100 + .../simple_nf/ndpi/ahocorasick.c | 1285 + .../simple_nf/ndpi/ahocorasick.h | 284 + .../implementation/simple_nf/ndpi/ajp.c | 132 + .../implementation/simple_nf/ndpi/alicloud.c | 82 + .../simple_nf/ndpi/amazon_video.c | 78 + .../implementation/simple_nf/ndpi/among_us.c | 57 + .../implementation/simple_nf/ndpi/amqp.c | 85 + .../simple_nf/ndpi/apple_push.c | 108 + .../simple_nf/ndpi/armagetron.c | 109 + .../implementation/simple_nf/ndpi/avast.c | 66 + .../simple_nf/ndpi/avast_securedns.c | 67 + .../implementation/simple_nf/ndpi/bgp.c | 67 + .../simple_nf/ndpi/bittorrent.c | 576 + .../implementation/simple_nf/ndpi/bjnp.c | 57 + .../implementation/simple_nf/ndpi/bpf.h | 934 + .../implementation/simple_nf/ndpi/btlib.c | 472 + .../implementation/simple_nf/ndpi/btlib.h | 181 + .../implementation/simple_nf/ndpi/capwap.c | 144 + .../implementation/simple_nf/ndpi/cassandra.c | 152 + .../implementation/simple_nf/ndpi/checkmk.c | 82 + .../implementation/simple_nf/ndpi/ciscovpn.c | 82 + .../implementation/simple_nf/ndpi/citrix.c | 79 + .../implementation/simple_nf/ndpi/coap.c | 159 + .../implementation/simple_nf/ndpi/collectd.c | 209 + .../implementation/simple_nf/ndpi/corba.c | 58 + .../implementation/simple_nf/ndpi/cpha.c | 63 + .../implementation/simple_nf/ndpi/cpuid.h | 340 + .../implementation/simple_nf/ndpi/crossfire.c | 88 + .../implementation/simple_nf/ndpi/crynet.c | 81 + .../implementation/simple_nf/ndpi/csgo.c | 143 + .../implementation/simple_nf/ndpi/dcerpc.c | 105 + .../implementation/simple_nf/ndpi/dhcp.c | 202 + .../implementation/simple_nf/ndpi/dhcpv6.c | 68 + .../implementation/simple_nf/ndpi/diameter.c | 116 + .../implementation/simple_nf/ndpi/discord.c | 89 + .../implementation/simple_nf/ndpi/dnp3.c | 67 + .../implementation/simple_nf/ndpi/dns.c | 838 + .../implementation/simple_nf/ndpi/dnscrypt.c | 77 + .../implementation/simple_nf/ndpi/dofus.c | 152 + .../implementation/simple_nf/ndpi/drda.c | 102 + .../implementation/simple_nf/ndpi/dropbox.c | 93 + .../implementation/simple_nf/ndpi/eaq.c | 92 + .../implementation/simple_nf/ndpi/edonkey.c | 222 + .../simple_nf/ndpi/elastic_search.c | 85 + .../simple_nf/ndpi/ethernet_ip.c | 71 + .../implementation/simple_nf/ndpi/fastcgi.c | 257 + .../implementation/simple_nf/ndpi/fix.c | 74 + .../simple_nf/ndpi/ftp_control.c | 693 + .../implementation/simple_nf/ndpi/ftp_data.c | 268 + .../simple_nf/ndpi/gcrypt/aes.c | 508 + .../simple_nf/ndpi/gcrypt/aes.h | 271 + .../simple_nf/ndpi/gcrypt/aesni.c | 523 + .../simple_nf/ndpi/gcrypt/aesni.h | 130 + .../simple_nf/ndpi/gcrypt/cipher.c | 591 + .../simple_nf/ndpi/gcrypt/cipher.h | 934 + .../simple_nf/ndpi/gcrypt/cipher_wrap.c | 234 + .../simple_nf/ndpi/gcrypt/cipher_wrap.h | 92 + .../simple_nf/ndpi/gcrypt/common.h | 368 + .../simple_nf/ndpi/gcrypt/digest.c | 321 + .../simple_nf/ndpi/gcrypt/digest.h | 26 + .../simple_nf/ndpi/gcrypt/error.h | 201 + .../simple_nf/ndpi/gcrypt/gcm.c | 671 + .../simple_nf/ndpi/gcrypt/gcm.h | 364 + .../simple_nf/ndpi/gcrypt_light.c | 375 + .../simple_nf/ndpi/gcrypt_light.h | 87 + .../simple_nf/ndpi/genshin_impact.c | 86 + .../implementation/simple_nf/ndpi/git.c | 86 + .../implementation/simple_nf/ndpi/gnutella.c | 328 + .../implementation/simple_nf/ndpi/gtp.c | 141 + .../implementation/simple_nf/ndpi/guildwars.c | 78 + .../implementation/simple_nf/ndpi/h323.c | 130 + .../simple_nf/ndpi/halflife2_and_mods.c | 77 + .../implementation/simple_nf/ndpi/hangout.c | 107 + .../implementation/simple_nf/ndpi/hll.h | 31 + .../implementation/simple_nf/ndpi/hpvirtgrp.c | 70 + .../implementation/simple_nf/ndpi/hsrp.c | 93 + .../implementation/simple_nf/ndpi/http.c | 1533 + .../implementation/simple_nf/ndpi/i3d.c | 89 + .../implementation/simple_nf/ndpi/iax.c | 108 + .../implementation/simple_nf/ndpi/icecast.c | 100 + .../simple_nf/ndpi/iec60870-5-104.c | 83 + .../implementation/simple_nf/ndpi/imo.c | 80 + .../inc_generated/ndpi_amazon_aws_match.c | 7056 +++ .../ndpi/inc_generated/ndpi_asn_alibaba.c | 72 + .../ndpi/inc_generated/ndpi_asn_apple.c | 37 + .../ndpi/inc_generated/ndpi_asn_avast.c | 63 + .../ndpi/inc_generated/ndpi_asn_bloomberg.c | 70 + .../ndpi/inc_generated/ndpi_asn_citrix.c | 90 + .../ndpi/inc_generated/ndpi_asn_discord.c | 94 + .../ndpi/inc_generated/ndpi_asn_dropbox.c | 34 + .../ndpi/inc_generated/ndpi_asn_edgecast.c | 200 + .../ndpi/inc_generated/ndpi_asn_facebook.c | 78 + .../ndpi/inc_generated/ndpi_asn_github.c | 30 + .../ndpi/inc_generated/ndpi_asn_goto.c | 90 + .../inc_generated/ndpi_asn_hotspotshield.c | 27 + .../ndpi/inc_generated/ndpi_asn_line.c | 40 + .../ndpi/inc_generated/ndpi_asn_netflix.c | 41 + .../ndpi/inc_generated/ndpi_asn_opendns.c | 147 + .../ndpi/inc_generated/ndpi_asn_riotgames.c | 43 + .../ndpi/inc_generated/ndpi_asn_starcraft.c | 61 + .../ndpi/inc_generated/ndpi_asn_steam.c | 48 + .../ndpi/inc_generated/ndpi_asn_teamviewer.c | 34 + .../ndpi/inc_generated/ndpi_asn_telegram.c | 35 + .../ndpi/inc_generated/ndpi_asn_tencent.c | 210 + .../ndpi/inc_generated/ndpi_asn_threema.c | 36 + .../ndpi/inc_generated/ndpi_asn_twitch.c | 38 + .../ndpi/inc_generated/ndpi_asn_twitter.c | 60 + .../ndpi/inc_generated/ndpi_asn_ubuntuone.c | 34 + .../ndpi/inc_generated/ndpi_asn_webex.c | 54 + .../ndpi/inc_generated/ndpi_azure_match.c | 48005 ++++++++++++++++ .../ndpi/inc_generated/ndpi_cachefly_match.c | 36 + .../inc_generated/ndpi_cloudflare_match.c | 42 + .../ndpi/inc_generated/ndpi_content_match.h | 1940 + .../ndpi/inc_generated/ndpi_dga_match.h | 115 + .../ndpi/inc_generated/ndpi_ethereum_match.c | 51 + .../inc_generated/ndpi_google_cloud_match.c | 558 + .../ndpi/inc_generated/ndpi_google_match.c | 198 + .../ndpi_icloud_private_relay_match.c | 3147 + .../inc_generated/ndpi_ms_office365_match.c | 34 + .../inc_generated/ndpi_ms_onedrive_match.c | 32 + .../inc_generated/ndpi_ms_outlook_match.c | 43 + .../inc_generated/ndpi_ms_skype_teams_match.c | 32 + .../ndpi/inc_generated/ndpi_tor_match.c | 1314 + .../ndpi/inc_generated/ndpi_whatsapp_match.c | 256 + .../ndpi/inc_generated/ndpi_zoom_match.c | 337 + .../implementation/simple_nf/ndpi/ipp.c | 68 + .../implementation/simple_nf/ndpi/ipsec.c | 198 + .../implementation/simple_nf/ndpi/irc.c | 630 + .../implementation/simple_nf/ndpi/jabber.c | 154 + .../simple_nf/ndpi/kakaotalk_voice.c | 78 + .../implementation/simple_nf/ndpi/kerberos.c | 709 + .../implementation/simple_nf/ndpi/kismet.c | 72 + .../implementation/simple_nf/ndpi/kontiki.c | 79 + .../implementation/simple_nf/ndpi/ldap.c | 83 + .../implementation/simple_nf/ndpi/libcache.c | 329 + .../implementation/simple_nf/ndpi/libcache.h | 117 + .../simple_nf/ndpi/libinjection.h | 65 + .../simple_nf/ndpi/libinjection_html5.c | 850 + .../simple_nf/ndpi/libinjection_html5.h | 54 + .../simple_nf/ndpi/libinjection_sqli.c | 2325 + .../simple_nf/ndpi/libinjection_sqli.h | 294 + .../simple_nf/ndpi/libinjection_sqli_data.h | 9652 ++++ .../simple_nf/ndpi/libinjection_xss.c | 532 + .../simple_nf/ndpi/libinjection_xss.h | 21 + .../implementation/simple_nf/ndpi/line.c | 96 + .../implementation/simple_nf/ndpi/lisp.c | 98 + .../simple_nf/ndpi/lotus_notes.c | 73 + .../implementation/simple_nf/ndpi/mail_imap.c | 372 + .../implementation/simple_nf/ndpi/mail_pop.c | 282 + .../implementation/simple_nf/ndpi/mail_smtp.c | 484 + .../implementation/simple_nf/ndpi/main.c | 155 + .../simple_nf/ndpi/maplestory.c | 94 + .../implementation/simple_nf/ndpi/megaco.c | 63 + .../implementation/simple_nf/ndpi/memcached.c | 188 + .../simple_nf/ndpi/merakicloud.c | 62 + .../implementation/simple_nf/ndpi/mgcp.c | 112 + .../implementation/simple_nf/ndpi/mining.c | 199 + .../implementation/simple_nf/ndpi/modbus.c | 71 + .../implementation/simple_nf/ndpi/mongodb.c | 149 + .../implementation/simple_nf/ndpi/mpegdash.c | 99 + .../implementation/simple_nf/ndpi/mpegts.c | 65 + .../implementation/simple_nf/ndpi/mqtt.c | 273 + .../implementation/simple_nf/ndpi/mssql_tds.c | 88 + .../implementation/simple_nf/ndpi/munin.c | 93 + .../implementation/simple_nf/ndpi/mysql.c | 92 + .../implementation/simple_nf/ndpi/natpmp.c | 202 + .../implementation/simple_nf/ndpi/nats.c | 81 + .../implementation/simple_nf/ndpi/ndpi.c | 9096 +++ .../implementation/simple_nf/ndpi/ndpi.h | 0 .../simple_nf/ndpi/ndpi_analyze.c | 1588 + .../implementation/simple_nf/ndpi/ndpi_api.h | 1902 + .../simple_nf/ndpi/ndpi_config.h | 3 + .../simple_nf/ndpi/ndpi_define.h | 458 + .../simple_nf/ndpi/ndpi_encryption.h | 408 + .../simple_nf/ndpi/ndpi_geoip.c | 163 + .../simple_nf/ndpi/ndpi_includes.h | 72 + .../implementation/simple_nf/ndpi/ndpi_main.h | 182 + .../implementation/simple_nf/ndpi/ndpi_md5.c | 204 + .../implementation/simple_nf/ndpi/ndpi_md5.h | 18 + .../simple_nf/ndpi/ndpi_patricia.c | 1103 + .../simple_nf/ndpi/ndpi_patricia.h | 256 + .../simple_nf/ndpi/ndpi_patricia_typedefs.h | 115 + .../simple_nf/ndpi/ndpi_protocol_ids.h | 385 + .../simple_nf/ndpi/ndpi_protocols.h | 245 + .../simple_nf/ndpi/ndpi_serializer.c | 3091 + .../implementation/simple_nf/ndpi/ndpi_sha1.c | 284 + .../implementation/simple_nf/ndpi/ndpi_sha1.h | 17 + .../simple_nf/ndpi/ndpi_typedefs.h | 1883 + .../implementation/simple_nf/ndpi/ndpi_util.h | 331 + .../simple_nf/ndpi/ndpi_utils.c | 3165 + .../simple_nf/ndpi/ndpi_utils.h | 55 + .../simple_nf/ndpi/nest_log_sink.c | 78 + .../implementation/simple_nf/ndpi/netbios.c | 427 + .../implementation/simple_nf/ndpi/netflow.c | 195 + .../implementation/simple_nf/ndpi/nfs.c | 101 + .../implementation/simple_nf/ndpi/nintendo.c | 67 + .../implementation/simple_nf/ndpi/noe.c | 84 + .../simple_nf/ndpi/non_tcp_udp.c | 189 + .../implementation/simple_nf/ndpi/ntp.c | 77 + .../implementation/simple_nf/ndpi/ookla.c | 146 + .../implementation/simple_nf/ndpi/openvpn.c | 189 + .../implementation/simple_nf/ndpi/oracle.c | 73 + .../implementation/simple_nf/ndpi/postgres.c | 136 + .../implementation/simple_nf/ndpi/ppstream.c | 239 + .../implementation/simple_nf/ndpi/pptp.c | 69 + .../implementation/simple_nf/ndpi/qq.c | 71 + .../implementation/simple_nf/ndpi/quic.c | 1822 + .../implementation/simple_nf/ndpi/radius.c | 89 + .../implementation/simple_nf/ndpi/raknet.c | 352 + .../simple_nf/ndpi/rce_injection.h | 618 + .../implementation/simple_nf/ndpi/rdp.c | 110 + .../implementation/simple_nf/ndpi/redis_net.c | 96 + .../implementation/simple_nf/ndpi/riotgames.c | 81 + .../implementation/simple_nf/ndpi/rsh.c | 162 + .../implementation/simple_nf/ndpi/rsync.c | 67 + .../implementation/simple_nf/ndpi/rtcp.c | 81 + .../implementation/simple_nf/ndpi/rtmp.c | 101 + .../implementation/simple_nf/ndpi/rtp.c | 296 + .../implementation/simple_nf/ndpi/rtsp.c | 116 + .../implementation/simple_nf/ndpi/rx.c | 226 + .../implementation/simple_nf/ndpi/s7comm.c | 58 + .../implementation/simple_nf/ndpi/sd_rtn.c | 97 + .../simple_nf/ndpi/secure_memzero.h | 194 + .../implementation/simple_nf/ndpi/sflow.c | 68 + .../implementation/simple_nf/ndpi/sip.c | 214 + .../implementation/simple_nf/ndpi/skinny.c | 103 + .../implementation/simple_nf/ndpi/skype.c | 128 + .../implementation/simple_nf/ndpi/smb.c | 81 + .../implementation/simple_nf/ndpi/smpp.c | 323 + .../simple_nf/ndpi/snmp_proto.c | 157 + .../implementation/simple_nf/ndpi/soap.c | 90 + .../implementation/simple_nf/ndpi/socks45.c | 144 + .../implementation/simple_nf/ndpi/softether.c | 354 + .../implementation/simple_nf/ndpi/someip.c | 206 + .../implementation/simple_nf/ndpi/spotify.c | 93 + .../simple_nf/ndpi/src/MurmurHash3.c | 67 + .../implementation/simple_nf/ndpi/src/hll.c | 174 + .../implementation/simple_nf/ndpi/ssdp.c | 105 + .../implementation/simple_nf/ndpi/ssh.c | 543 + .../implementation/simple_nf/ndpi/starcraft.c | 158 + .../implementation/simple_nf/ndpi/steam.c | 308 + .../implementation/simple_nf/ndpi/stun.c | 514 + .../implementation/simple_nf/ndpi/syncthing.c | 74 + .../implementation/simple_nf/ndpi/syslog.c | 116 + .../implementation/simple_nf/ndpi/tailscale.c | 59 + .../implementation/simple_nf/ndpi/tcp_udp.c | 77 + .../implementation/simple_nf/ndpi/teamspeak.c | 110 + .../simple_nf/ndpi/teamviewer.c | 117 + .../implementation/simple_nf/ndpi/telegram.c | 117 + .../implementation/simple_nf/ndpi/telnet.c | 228 + .../implementation/simple_nf/ndpi/teredo.c | 58 + .../implementation/simple_nf/ndpi/tftp.c | 170 + .../implementation/simple_nf/ndpi/threema.c | 102 + .../implementation/simple_nf/ndpi/tinc.c | 154 + .../simple_nf/ndpi/tivoconnect.c | 147 + .../implementation/simple_nf/ndpi/tls.c | 2669 + .../implementation/simple_nf/ndpi/tocaboca.c | 90 + .../simple_nf/ndpi/tplink_shp.c | 95 + .../implementation/simple_nf/ndpi/tuya_lp.c | 94 + .../implementation/simple_nf/ndpi/tvuplayer.c | 160 + .../implementation/simple_nf/ndpi/ubntac2.c | 94 + .../implementation/simple_nf/ndpi/ultrasurf.c | 72 + .../implementation/simple_nf/ndpi/usenet.c | 108 + .../implementation/simple_nf/ndpi/uthash.h | 1138 + .../implementation/simple_nf/ndpi/vhua.c | 74 + .../implementation/simple_nf/ndpi/viber.c | 100 + .../implementation/simple_nf/ndpi/vmware.c | 56 + .../implementation/simple_nf/ndpi/vnc.c | 73 + .../implementation/simple_nf/ndpi/vxlan.c | 79 + .../implementation/simple_nf/ndpi/warcraft3.c | 106 + .../implementation/simple_nf/ndpi/websocket.c | 120 + .../implementation/simple_nf/ndpi/whatsapp.c | 134 + .../implementation/simple_nf/ndpi/whoisdas.c | 65 + .../implementation/simple_nf/ndpi/wireguard.c | 176 + .../simple_nf/ndpi/world_of_kung_fu.c | 65 + .../simple_nf/ndpi/world_of_warcraft.c | 209 + .../implementation/simple_nf/ndpi/wsd.c | 64 + .../implementation/simple_nf/ndpi/xbox.c | 115 + .../implementation/simple_nf/ndpi/xdmcp.c | 77 + .../implementation/simple_nf/ndpi/xiaomi.c | 121 + .../implementation/simple_nf/ndpi/z3950.c | 132 + .../implementation/simple_nf/ndpi/zabbix.c | 63 + .../implementation/simple_nf/ndpi/zattoo.c | 231 + .../implementation/simple_nf/ndpi/zeromq.c | 104 + src/components/lib/posix_cap/posix_cap.c | 3 +- 291 files changed, 147737 insertions(+), 3 deletions(-) create mode 100644 composition_scripts/vmm_ndpi_nf.toml create mode 100644 src/components/implementation/simple_nf/ndpi/Makefile create mode 100644 src/components/implementation/simple_nf/ndpi/MurmurHash3.h create mode 100644 src/components/implementation/simple_nf/ndpi/activision.c create mode 100644 src/components/implementation/simple_nf/ndpi/afp.c create mode 100644 src/components/implementation/simple_nf/ndpi/ahocorasick.c create mode 100644 src/components/implementation/simple_nf/ndpi/ahocorasick.h create mode 100644 src/components/implementation/simple_nf/ndpi/ajp.c create mode 100644 src/components/implementation/simple_nf/ndpi/alicloud.c create mode 100644 src/components/implementation/simple_nf/ndpi/amazon_video.c create mode 100644 src/components/implementation/simple_nf/ndpi/among_us.c create mode 100644 src/components/implementation/simple_nf/ndpi/amqp.c create mode 100644 src/components/implementation/simple_nf/ndpi/apple_push.c create mode 100644 src/components/implementation/simple_nf/ndpi/armagetron.c create mode 100644 src/components/implementation/simple_nf/ndpi/avast.c create mode 100644 src/components/implementation/simple_nf/ndpi/avast_securedns.c create mode 100644 src/components/implementation/simple_nf/ndpi/bgp.c create mode 100644 src/components/implementation/simple_nf/ndpi/bittorrent.c create mode 100644 src/components/implementation/simple_nf/ndpi/bjnp.c create mode 100644 src/components/implementation/simple_nf/ndpi/bpf.h create mode 100644 src/components/implementation/simple_nf/ndpi/btlib.c create mode 100644 src/components/implementation/simple_nf/ndpi/btlib.h create mode 100644 src/components/implementation/simple_nf/ndpi/capwap.c create mode 100644 src/components/implementation/simple_nf/ndpi/cassandra.c create mode 100644 src/components/implementation/simple_nf/ndpi/checkmk.c create mode 100644 src/components/implementation/simple_nf/ndpi/ciscovpn.c create mode 100644 src/components/implementation/simple_nf/ndpi/citrix.c create mode 100644 src/components/implementation/simple_nf/ndpi/coap.c create mode 100644 src/components/implementation/simple_nf/ndpi/collectd.c create mode 100644 src/components/implementation/simple_nf/ndpi/corba.c create mode 100644 src/components/implementation/simple_nf/ndpi/cpha.c create mode 100644 src/components/implementation/simple_nf/ndpi/cpuid.h create mode 100644 src/components/implementation/simple_nf/ndpi/crossfire.c create mode 100644 src/components/implementation/simple_nf/ndpi/crynet.c create mode 100644 src/components/implementation/simple_nf/ndpi/csgo.c create mode 100644 src/components/implementation/simple_nf/ndpi/dcerpc.c create mode 100644 src/components/implementation/simple_nf/ndpi/dhcp.c create mode 100644 src/components/implementation/simple_nf/ndpi/dhcpv6.c create mode 100644 src/components/implementation/simple_nf/ndpi/diameter.c create mode 100644 src/components/implementation/simple_nf/ndpi/discord.c create mode 100644 src/components/implementation/simple_nf/ndpi/dnp3.c create mode 100644 src/components/implementation/simple_nf/ndpi/dns.c create mode 100644 src/components/implementation/simple_nf/ndpi/dnscrypt.c create mode 100644 src/components/implementation/simple_nf/ndpi/dofus.c create mode 100644 src/components/implementation/simple_nf/ndpi/drda.c create mode 100644 src/components/implementation/simple_nf/ndpi/dropbox.c create mode 100644 src/components/implementation/simple_nf/ndpi/eaq.c create mode 100644 src/components/implementation/simple_nf/ndpi/edonkey.c create mode 100644 src/components/implementation/simple_nf/ndpi/elastic_search.c create mode 100644 src/components/implementation/simple_nf/ndpi/ethernet_ip.c create mode 100644 src/components/implementation/simple_nf/ndpi/fastcgi.c create mode 100644 src/components/implementation/simple_nf/ndpi/fix.c create mode 100644 src/components/implementation/simple_nf/ndpi/ftp_control.c create mode 100644 src/components/implementation/simple_nf/ndpi/ftp_data.c create mode 100644 src/components/implementation/simple_nf/ndpi/gcrypt/aes.c create mode 100644 src/components/implementation/simple_nf/ndpi/gcrypt/aes.h create mode 100644 src/components/implementation/simple_nf/ndpi/gcrypt/aesni.c create mode 100644 src/components/implementation/simple_nf/ndpi/gcrypt/aesni.h create mode 100644 src/components/implementation/simple_nf/ndpi/gcrypt/cipher.c create mode 100644 src/components/implementation/simple_nf/ndpi/gcrypt/cipher.h create mode 100644 src/components/implementation/simple_nf/ndpi/gcrypt/cipher_wrap.c create mode 100644 src/components/implementation/simple_nf/ndpi/gcrypt/cipher_wrap.h create mode 100644 src/components/implementation/simple_nf/ndpi/gcrypt/common.h create mode 100644 src/components/implementation/simple_nf/ndpi/gcrypt/digest.c create mode 100644 src/components/implementation/simple_nf/ndpi/gcrypt/digest.h create mode 100644 src/components/implementation/simple_nf/ndpi/gcrypt/error.h create mode 100644 src/components/implementation/simple_nf/ndpi/gcrypt/gcm.c create mode 100644 src/components/implementation/simple_nf/ndpi/gcrypt/gcm.h create mode 100644 src/components/implementation/simple_nf/ndpi/gcrypt_light.c create mode 100644 src/components/implementation/simple_nf/ndpi/gcrypt_light.h create mode 100644 src/components/implementation/simple_nf/ndpi/genshin_impact.c create mode 100644 src/components/implementation/simple_nf/ndpi/git.c create mode 100644 src/components/implementation/simple_nf/ndpi/gnutella.c create mode 100644 src/components/implementation/simple_nf/ndpi/gtp.c create mode 100644 src/components/implementation/simple_nf/ndpi/guildwars.c create mode 100644 src/components/implementation/simple_nf/ndpi/h323.c create mode 100644 src/components/implementation/simple_nf/ndpi/halflife2_and_mods.c create mode 100644 src/components/implementation/simple_nf/ndpi/hangout.c create mode 100644 src/components/implementation/simple_nf/ndpi/hll.h create mode 100644 src/components/implementation/simple_nf/ndpi/hpvirtgrp.c create mode 100644 src/components/implementation/simple_nf/ndpi/hsrp.c create mode 100644 src/components/implementation/simple_nf/ndpi/http.c create mode 100644 src/components/implementation/simple_nf/ndpi/i3d.c create mode 100644 src/components/implementation/simple_nf/ndpi/iax.c create mode 100644 src/components/implementation/simple_nf/ndpi/icecast.c create mode 100644 src/components/implementation/simple_nf/ndpi/iec60870-5-104.c create mode 100644 src/components/implementation/simple_nf/ndpi/imo.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_amazon_aws_match.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_alibaba.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_apple.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_avast.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_bloomberg.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_citrix.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_discord.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_dropbox.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_edgecast.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_facebook.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_github.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_goto.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_hotspotshield.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_line.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_netflix.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_opendns.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_riotgames.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_starcraft.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_steam.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_teamviewer.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_telegram.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_tencent.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_threema.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_twitch.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_twitter.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_ubuntuone.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_webex.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_azure_match.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_cachefly_match.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_cloudflare_match.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_content_match.h create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_dga_match.h create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_ethereum_match.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_google_cloud_match.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_google_match.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_icloud_private_relay_match.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_ms_office365_match.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_ms_onedrive_match.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_ms_outlook_match.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_ms_skype_teams_match.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_tor_match.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_whatsapp_match.c create mode 100644 src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_zoom_match.c create mode 100644 src/components/implementation/simple_nf/ndpi/ipp.c create mode 100644 src/components/implementation/simple_nf/ndpi/ipsec.c create mode 100644 src/components/implementation/simple_nf/ndpi/irc.c create mode 100644 src/components/implementation/simple_nf/ndpi/jabber.c create mode 100644 src/components/implementation/simple_nf/ndpi/kakaotalk_voice.c create mode 100644 src/components/implementation/simple_nf/ndpi/kerberos.c create mode 100644 src/components/implementation/simple_nf/ndpi/kismet.c create mode 100644 src/components/implementation/simple_nf/ndpi/kontiki.c create mode 100644 src/components/implementation/simple_nf/ndpi/ldap.c create mode 100644 src/components/implementation/simple_nf/ndpi/libcache.c create mode 100644 src/components/implementation/simple_nf/ndpi/libcache.h create mode 100644 src/components/implementation/simple_nf/ndpi/libinjection.h create mode 100644 src/components/implementation/simple_nf/ndpi/libinjection_html5.c create mode 100644 src/components/implementation/simple_nf/ndpi/libinjection_html5.h create mode 100644 src/components/implementation/simple_nf/ndpi/libinjection_sqli.c create mode 100644 src/components/implementation/simple_nf/ndpi/libinjection_sqli.h create mode 100644 src/components/implementation/simple_nf/ndpi/libinjection_sqli_data.h create mode 100644 src/components/implementation/simple_nf/ndpi/libinjection_xss.c create mode 100644 src/components/implementation/simple_nf/ndpi/libinjection_xss.h create mode 100644 src/components/implementation/simple_nf/ndpi/line.c create mode 100644 src/components/implementation/simple_nf/ndpi/lisp.c create mode 100644 src/components/implementation/simple_nf/ndpi/lotus_notes.c create mode 100644 src/components/implementation/simple_nf/ndpi/mail_imap.c create mode 100644 src/components/implementation/simple_nf/ndpi/mail_pop.c create mode 100644 src/components/implementation/simple_nf/ndpi/mail_smtp.c create mode 100644 src/components/implementation/simple_nf/ndpi/main.c create mode 100644 src/components/implementation/simple_nf/ndpi/maplestory.c create mode 100644 src/components/implementation/simple_nf/ndpi/megaco.c create mode 100644 src/components/implementation/simple_nf/ndpi/memcached.c create mode 100644 src/components/implementation/simple_nf/ndpi/merakicloud.c create mode 100644 src/components/implementation/simple_nf/ndpi/mgcp.c create mode 100644 src/components/implementation/simple_nf/ndpi/mining.c create mode 100644 src/components/implementation/simple_nf/ndpi/modbus.c create mode 100644 src/components/implementation/simple_nf/ndpi/mongodb.c create mode 100644 src/components/implementation/simple_nf/ndpi/mpegdash.c create mode 100644 src/components/implementation/simple_nf/ndpi/mpegts.c create mode 100644 src/components/implementation/simple_nf/ndpi/mqtt.c create mode 100644 src/components/implementation/simple_nf/ndpi/mssql_tds.c create mode 100644 src/components/implementation/simple_nf/ndpi/munin.c create mode 100644 src/components/implementation/simple_nf/ndpi/mysql.c create mode 100644 src/components/implementation/simple_nf/ndpi/natpmp.c create mode 100644 src/components/implementation/simple_nf/ndpi/nats.c create mode 100644 src/components/implementation/simple_nf/ndpi/ndpi.c create mode 100644 src/components/implementation/simple_nf/ndpi/ndpi.h create mode 100644 src/components/implementation/simple_nf/ndpi/ndpi_analyze.c create mode 100644 src/components/implementation/simple_nf/ndpi/ndpi_api.h create mode 100644 src/components/implementation/simple_nf/ndpi/ndpi_config.h create mode 100644 src/components/implementation/simple_nf/ndpi/ndpi_define.h create mode 100644 src/components/implementation/simple_nf/ndpi/ndpi_encryption.h create mode 100644 src/components/implementation/simple_nf/ndpi/ndpi_geoip.c create mode 100644 src/components/implementation/simple_nf/ndpi/ndpi_includes.h create mode 100644 src/components/implementation/simple_nf/ndpi/ndpi_main.h create mode 100644 src/components/implementation/simple_nf/ndpi/ndpi_md5.c create mode 100644 src/components/implementation/simple_nf/ndpi/ndpi_md5.h create mode 100644 src/components/implementation/simple_nf/ndpi/ndpi_patricia.c create mode 100644 src/components/implementation/simple_nf/ndpi/ndpi_patricia.h create mode 100644 src/components/implementation/simple_nf/ndpi/ndpi_patricia_typedefs.h create mode 100644 src/components/implementation/simple_nf/ndpi/ndpi_protocol_ids.h create mode 100644 src/components/implementation/simple_nf/ndpi/ndpi_protocols.h create mode 100644 src/components/implementation/simple_nf/ndpi/ndpi_serializer.c create mode 100644 src/components/implementation/simple_nf/ndpi/ndpi_sha1.c create mode 100644 src/components/implementation/simple_nf/ndpi/ndpi_sha1.h create mode 100644 src/components/implementation/simple_nf/ndpi/ndpi_typedefs.h create mode 100644 src/components/implementation/simple_nf/ndpi/ndpi_util.h create mode 100644 src/components/implementation/simple_nf/ndpi/ndpi_utils.c create mode 100644 src/components/implementation/simple_nf/ndpi/ndpi_utils.h create mode 100644 src/components/implementation/simple_nf/ndpi/nest_log_sink.c create mode 100644 src/components/implementation/simple_nf/ndpi/netbios.c create mode 100644 src/components/implementation/simple_nf/ndpi/netflow.c create mode 100644 src/components/implementation/simple_nf/ndpi/nfs.c create mode 100644 src/components/implementation/simple_nf/ndpi/nintendo.c create mode 100644 src/components/implementation/simple_nf/ndpi/noe.c create mode 100644 src/components/implementation/simple_nf/ndpi/non_tcp_udp.c create mode 100644 src/components/implementation/simple_nf/ndpi/ntp.c create mode 100644 src/components/implementation/simple_nf/ndpi/ookla.c create mode 100644 src/components/implementation/simple_nf/ndpi/openvpn.c create mode 100644 src/components/implementation/simple_nf/ndpi/oracle.c create mode 100644 src/components/implementation/simple_nf/ndpi/postgres.c create mode 100644 src/components/implementation/simple_nf/ndpi/ppstream.c create mode 100644 src/components/implementation/simple_nf/ndpi/pptp.c create mode 100644 src/components/implementation/simple_nf/ndpi/qq.c create mode 100644 src/components/implementation/simple_nf/ndpi/quic.c create mode 100644 src/components/implementation/simple_nf/ndpi/radius.c create mode 100644 src/components/implementation/simple_nf/ndpi/raknet.c create mode 100644 src/components/implementation/simple_nf/ndpi/rce_injection.h create mode 100644 src/components/implementation/simple_nf/ndpi/rdp.c create mode 100644 src/components/implementation/simple_nf/ndpi/redis_net.c create mode 100644 src/components/implementation/simple_nf/ndpi/riotgames.c create mode 100644 src/components/implementation/simple_nf/ndpi/rsh.c create mode 100644 src/components/implementation/simple_nf/ndpi/rsync.c create mode 100644 src/components/implementation/simple_nf/ndpi/rtcp.c create mode 100644 src/components/implementation/simple_nf/ndpi/rtmp.c create mode 100644 src/components/implementation/simple_nf/ndpi/rtp.c create mode 100644 src/components/implementation/simple_nf/ndpi/rtsp.c create mode 100644 src/components/implementation/simple_nf/ndpi/rx.c create mode 100644 src/components/implementation/simple_nf/ndpi/s7comm.c create mode 100644 src/components/implementation/simple_nf/ndpi/sd_rtn.c create mode 100644 src/components/implementation/simple_nf/ndpi/secure_memzero.h create mode 100644 src/components/implementation/simple_nf/ndpi/sflow.c create mode 100644 src/components/implementation/simple_nf/ndpi/sip.c create mode 100644 src/components/implementation/simple_nf/ndpi/skinny.c create mode 100644 src/components/implementation/simple_nf/ndpi/skype.c create mode 100644 src/components/implementation/simple_nf/ndpi/smb.c create mode 100644 src/components/implementation/simple_nf/ndpi/smpp.c create mode 100644 src/components/implementation/simple_nf/ndpi/snmp_proto.c create mode 100644 src/components/implementation/simple_nf/ndpi/soap.c create mode 100644 src/components/implementation/simple_nf/ndpi/socks45.c create mode 100644 src/components/implementation/simple_nf/ndpi/softether.c create mode 100644 src/components/implementation/simple_nf/ndpi/someip.c create mode 100644 src/components/implementation/simple_nf/ndpi/spotify.c create mode 100644 src/components/implementation/simple_nf/ndpi/src/MurmurHash3.c create mode 100644 src/components/implementation/simple_nf/ndpi/src/hll.c create mode 100644 src/components/implementation/simple_nf/ndpi/ssdp.c create mode 100644 src/components/implementation/simple_nf/ndpi/ssh.c create mode 100644 src/components/implementation/simple_nf/ndpi/starcraft.c create mode 100644 src/components/implementation/simple_nf/ndpi/steam.c create mode 100644 src/components/implementation/simple_nf/ndpi/stun.c create mode 100644 src/components/implementation/simple_nf/ndpi/syncthing.c create mode 100644 src/components/implementation/simple_nf/ndpi/syslog.c create mode 100644 src/components/implementation/simple_nf/ndpi/tailscale.c create mode 100644 src/components/implementation/simple_nf/ndpi/tcp_udp.c create mode 100644 src/components/implementation/simple_nf/ndpi/teamspeak.c create mode 100644 src/components/implementation/simple_nf/ndpi/teamviewer.c create mode 100644 src/components/implementation/simple_nf/ndpi/telegram.c create mode 100644 src/components/implementation/simple_nf/ndpi/telnet.c create mode 100644 src/components/implementation/simple_nf/ndpi/teredo.c create mode 100644 src/components/implementation/simple_nf/ndpi/tftp.c create mode 100644 src/components/implementation/simple_nf/ndpi/threema.c create mode 100644 src/components/implementation/simple_nf/ndpi/tinc.c create mode 100644 src/components/implementation/simple_nf/ndpi/tivoconnect.c create mode 100644 src/components/implementation/simple_nf/ndpi/tls.c create mode 100644 src/components/implementation/simple_nf/ndpi/tocaboca.c create mode 100644 src/components/implementation/simple_nf/ndpi/tplink_shp.c create mode 100644 src/components/implementation/simple_nf/ndpi/tuya_lp.c create mode 100644 src/components/implementation/simple_nf/ndpi/tvuplayer.c create mode 100644 src/components/implementation/simple_nf/ndpi/ubntac2.c create mode 100644 src/components/implementation/simple_nf/ndpi/ultrasurf.c create mode 100644 src/components/implementation/simple_nf/ndpi/usenet.c create mode 100644 src/components/implementation/simple_nf/ndpi/uthash.h create mode 100644 src/components/implementation/simple_nf/ndpi/vhua.c create mode 100644 src/components/implementation/simple_nf/ndpi/viber.c create mode 100644 src/components/implementation/simple_nf/ndpi/vmware.c create mode 100644 src/components/implementation/simple_nf/ndpi/vnc.c create mode 100644 src/components/implementation/simple_nf/ndpi/vxlan.c create mode 100644 src/components/implementation/simple_nf/ndpi/warcraft3.c create mode 100644 src/components/implementation/simple_nf/ndpi/websocket.c create mode 100644 src/components/implementation/simple_nf/ndpi/whatsapp.c create mode 100644 src/components/implementation/simple_nf/ndpi/whoisdas.c create mode 100644 src/components/implementation/simple_nf/ndpi/wireguard.c create mode 100644 src/components/implementation/simple_nf/ndpi/world_of_kung_fu.c create mode 100644 src/components/implementation/simple_nf/ndpi/world_of_warcraft.c create mode 100644 src/components/implementation/simple_nf/ndpi/wsd.c create mode 100644 src/components/implementation/simple_nf/ndpi/xbox.c create mode 100644 src/components/implementation/simple_nf/ndpi/xdmcp.c create mode 100644 src/components/implementation/simple_nf/ndpi/xiaomi.c create mode 100644 src/components/implementation/simple_nf/ndpi/z3950.c create mode 100644 src/components/implementation/simple_nf/ndpi/zabbix.c create mode 100644 src/components/implementation/simple_nf/ndpi/zattoo.c create mode 100644 src/components/implementation/simple_nf/ndpi/zeromq.c diff --git a/composition_scripts/vmm_ndpi_nf.toml b/composition_scripts/vmm_ndpi_nf.toml new file mode 100644 index 0000000000..3439f1065b --- /dev/null +++ b/composition_scripts/vmm_ndpi_nf.toml @@ -0,0 +1,48 @@ +[system] +description = "Simple VMM" + +[[components]] +name = "booter" +img = "no_interface.llbooter" +implements = [{interface = "init"}, {interface = "addr"}] +deps = [{srv = "kernel", interface = "init", variant = "kernel"}] +constructor = "kernel" + +[[components]] +name = "capmgr" +img = "capmgr.simple" +deps = [{srv = "booter", interface = "init"}, {srv = "booter", interface = "addr"}] +implements = [{interface = "capmgr"}, {interface = "init"}, {interface = "memmgr"}, {interface = "capmgr_create"}, {interface = "contigmem"}] +constructor = "booter" +baseaddr = "0x1000000" + +[[components]] +name = "sched" +img = "sched.pfprr_quantum_static" +deps = [{srv = "capmgr", interface = "init"}, {srv = "capmgr", interface = "capmgr"}, {srv = "capmgr", interface = "memmgr"}] +implements = [{interface = "sched"}, {interface = "syncipc"}, {interface = "init"}] +constructor = "booter" +baseaddr = "0x1600000" + +[[components]] +name = "nicmgr" +img = "nicmgr.dpdk" +deps = [{srv = "sched", interface = "sched"}, {srv = "sched", interface = "init"}, {srv = "capmgr", interface = "capmgr_create"}, {srv = "capmgr", interface = "memmgr"}, {srv = "capmgr", interface = "contigmem"}] +implements = [{interface = "nic"}] +constructor = "booter" +baseaddr = "0x6000000" + +[[components]] +name = "vmm" +img = "simple_vmm.noop_nf" +deps = [{srv = "sched", interface = "sched"}, {srv = "sched", interface = "init"},{srv = "capmgr", interface = "capmgr"}, {srv = "capmgr", interface = "memmgr"}, {srv = "capmgr", interface = "contigmem"}, {srv = "nicmgr", interface = "nic"}] +implements = [{interface = "netio"}] +constructor = "booter" +baseaddr = "0x2000000" + +[[components]] +name = "nf_ndpi" +img = "simple_nf.ndpi" +deps = [{srv = "sched", interface = "sched"}, {srv = "sched", interface = "init"},{srv = "capmgr", interface = "capmgr_create"}, {srv = "capmgr", interface = "memmgr"}, {srv = "capmgr", interface = "contigmem"}, {srv = "nicmgr", interface = "nic"}, {srv = "vmm", interface = "netio"}] +constructor = "booter" +baseaddr = "0x9000000" diff --git a/src/components/implementation/sched/pfprr_quantum_static/init.c b/src/components/implementation/sched/pfprr_quantum_static/init.c index 21b9bd9c36..9c1988de3b 100644 --- a/src/components/implementation/sched/pfprr_quantum_static/init.c +++ b/src/components/implementation/sched/pfprr_quantum_static/init.c @@ -245,7 +245,7 @@ slm_comp_init_loop(void) n = &initialization_state[client]; init_schedule_current++; - if (cos_coreid() == 0) printc("\tScheduler %ld: initializing component %ld with thread %ld.\n", cos_compid(), client, t->tid); + // if (cos_coreid() == 0) printc("\tScheduler %ld: initializing component %ld with thread %ld.\n", cos_compid(), client, t->tid); /* * This waits till init_done effective runs before * moving on. We need to be highest-priority, so that @@ -260,7 +260,7 @@ slm_comp_init_loop(void) while (ps_load(&n->initialization_thds[cos_coreid()]) == NULL) ; } - if (cos_coreid() == 0) printc("Scheduler %ld, initialization completed.\n", cos_compid()); + // if (cos_coreid() == 0) printc("Scheduler %ld, initialization completed.\n", cos_compid()); /* * We want to *atomically* awaken all of the threads that will diff --git a/src/components/implementation/simple_nf/ndpi/Makefile b/src/components/implementation/simple_nf/ndpi/Makefile new file mode 100644 index 0000000000..0363b16d1b --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/Makefile @@ -0,0 +1,19 @@ +# Required variables used to drive the compilation process. It is OK +# for many of these to be empty. +# +# The set of interfaces that this component exports for use by other +# components. This is a list of the interface names. +INTERFACE_EXPORTS = +# The interfaces this component is dependent on for compilation (this +# is a list of directory names in interface/) +INTERFACE_DEPENDENCIES = memmgr contigmem netshmem sched nic netio +# The library dependencies this component is reliant on for +# compilation/linking (this is a list of directory names in lib/) +LIBRARY_DEPENDENCIES = component shm_bm netdefs posix_cap +# Note: Both the interface and library dependencies should be +# *minimal*. That is to say that removing a dependency should cause +# the build to fail. The build system does not validate this +# minimality; that's on you! + +COMP_FLAGS= -DNDPI_LIB_COMPILATION +include Makefile.subsubdir diff --git a/src/components/implementation/simple_nf/ndpi/MurmurHash3.h b/src/components/implementation/simple_nf/ndpi/MurmurHash3.h new file mode 100644 index 0000000000..b5ffa6400c --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/MurmurHash3.h @@ -0,0 +1,10 @@ +#ifndef _MURMURHASH3_H_ +#define _MURMURHASH3_H_ + +#include +#include +#include + +uint32_t MurmurHash3_x86_32(const void * key, uint32_t len, uint32_t seed); + +#endif diff --git a/src/components/implementation/simple_nf/ndpi/activision.c b/src/components/implementation/simple_nf/ndpi/activision.c new file mode 100644 index 0000000000..22acd4694c --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/activision.c @@ -0,0 +1,112 @@ +/* + * activision.c + * + * Copyright (C) 2022-23 - ntop.org + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_ACTIVISION + +#include "ndpi_api.h" + +static void ndpi_int_activision_add_connection(struct ndpi_detection_module_struct * const ndpi_struct, + struct ndpi_flow_struct * const flow) +{ + NDPI_LOG_INFO(ndpi_struct, "found activision\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, + NDPI_PROTOCOL_ACTIVISION, + NDPI_PROTOCOL_UNKNOWN, + NDPI_CONFIDENCE_DPI); +} + +static void ndpi_search_activision(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct const * const packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search activision\n"); + + if (packet->payload_packet_len < 18) + { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + if (flow->packet_direction_counter[packet->packet_direction] == 1) + { + if (packet->packet_direction == 0) + { + if (ntohs(get_u_int16_t(packet->payload, 0)) != 0x0c02) + { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + } else { + if (ntohs(get_u_int16_t(packet->payload, 0)) != 0x0d02) + { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + } + + if (packet->payload_packet_len < 29) + { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + if (ntohs(get_u_int16_t(packet->payload, 17)) == 0xc0a8 && + ntohl(get_u_int32_t(packet->payload, 19)) == 0x0015020c) + { + ndpi_int_activision_add_connection(ndpi_struct, flow); + return; + } + } else if (packet->packet_direction == 0) { + if (packet->payload[0] != 0x29) + { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + } else if (packet->packet_direction == 1) { + if (packet->payload[0] != 0x28) + { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + } + + if (flow->packet_counter > 4) + { + ndpi_int_activision_add_connection(ndpi_struct, flow); + } +} + +void init_activision_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("Activision", ndpi_struct, *id, + NDPI_PROTOCOL_ACTIVISION, + ndpi_search_activision, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK + ); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/afp.c b/src/components/implementation/simple_nf/ndpi/afp.c new file mode 100644 index 0000000000..b55c4d4c70 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/afp.c @@ -0,0 +1,100 @@ +/* + * afp.c + * + * Copyright (C) 2009-11 by ipoque GmbH + * Copyright (C) 2011-22 - ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_AFP + +#include "ndpi_api.h" + +struct afpHeader { + u_int8_t flags, command; + u_int16_t requestId; + u_int32_t dataOffset, length, reserved; +}; + +static void ndpi_int_afp_add_connection(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_AFP, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + + +static void ndpi_search_afp(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search AFP\n"); + + if (packet->payload_packet_len >= sizeof(struct afpHeader)) { + struct afpHeader *h = (struct afpHeader*)packet->payload; + + if(packet->payload_packet_len > 128) { + /* + When we transfer a large data chunk, unless we have observed + the initial connection, we need to discard these packets + as they are not an indication that this flow is not AFP + */ + return; + } + + /* + * this will detect the OpenSession command of the Data Stream Interface (DSI) protocol + * which is exclusively used by the Apple Filing Protocol (AFP) on TCP/IP networks + */ + if (packet->payload_packet_len >= 22 && get_u_int16_t(packet->payload, 0) == htons(0x0004) && + get_u_int16_t(packet->payload, 2) == htons(0x0001) && get_u_int32_t(packet->payload, 4) == 0 && + get_u_int32_t(packet->payload, 8) == htonl(packet->payload_packet_len - 16) && + get_u_int32_t(packet->payload, 12) == 0 && get_u_int16_t(packet->payload, 16) == htons(0x0104)) { + + NDPI_LOG_INFO(ndpi_struct, "found AFP: DSI OpenSession\n"); + ndpi_int_afp_add_connection(ndpi_struct, flow); + return; + } + + if((h->flags <= 1) + && ((h->command >= 1) && (h->command <= 8)) + && (h->reserved == 0) + && (packet->payload_packet_len >= (sizeof(struct afpHeader)+ntohl(h->length)))) { + NDPI_LOG_INFO(ndpi_struct, "found AFP: DSI\n"); + ndpi_int_afp_add_connection(ndpi_struct, flow); + return; + } + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + + +void init_afp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("AFP", ndpi_struct, *id, + NDPI_PROTOCOL_AFP, + ndpi_search_afp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + *id += 1; +} + diff --git a/src/components/implementation/simple_nf/ndpi/ahocorasick.c b/src/components/implementation/simple_nf/ndpi/ahocorasick.c new file mode 100644 index 0000000000..cade82bab4 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/ahocorasick.c @@ -0,0 +1,1285 @@ +/* + * ahocorasick.c: implementation of ahocorasick library's functions + * This file is part of multifast. + * + Copyright 2010-2012 Kamiar Kanani + Copyright 2012-21 ntop.org (Incremental improvements) + + multifast is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + multifast is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with multifast. If not, see . +*/ + +#ifndef __KERNEL__ +#include +#include +#include +#include +#if !defined(WIN32) && !defined(_MSC_VER) +#include +#else +#define __SIZEOF_LONG__ 4 +#endif +#include +#include +#else +#include +#include +#include +typedef __kernel_size_t size_t; +#include +#include +#endif + +#include "ndpi_api.h" +#include "ahocorasick.h" + +/* TODO: For different depth of node, number of outgoing edges differs + considerably, It is efficient to use different chunk size for + different depths */ + +/* Private function prototype */ +static int node_edge_compare (struct edge * e, int a, int b); +static int node_has_matchstr (AC_NODE_t * thiz, AC_PATTERN_t * newstr); + +static AC_NODE_t * node_create (void); +static AC_NODE_t * node_create_next (AC_NODE_t * thiz, AC_ALPHABET_t alpha); +static int node_register_matchstr (AC_NODE_t * thiz, AC_PATTERN_t * str, int is_existing); +static int node_register_outgoing (AC_NODE_t * thiz, AC_NODE_t * next, AC_ALPHABET_t alpha); +static AC_NODE_t * node_find_next (AC_NODE_t * thiz, AC_ALPHABET_t alpha); +static AC_NODE_t * node_findbs_next (AC_NODE_t * thiz, uint8_t alpha); +static AC_NODE_t * node_findbs_next_ac (AC_NODE_t * thiz, uint8_t alpha,int icase); +static void node_release (AC_NODE_t * thiz, int free_pattern); +static void node_release_pattern (AC_NODE_t * thiz); +static int node_range_edges (AC_AUTOMATA_t *thiz, AC_NODE_t * node); +static inline void node_sort_edges (AC_NODE_t * thiz); + +#ifndef __KERNEL__ +struct aho_dump_info { + size_t memcnt,node_oc,node_8c,node_xc,node_xr; + int buf_pos,ip; + char *bufstr; + size_t bufstr_len; + FILE *file; +}; + +static void dump_node_header(AC_NODE_t * n, struct aho_dump_info *); +static int ac_automata_global_debug = 0; +#endif + +/* Private function prototype */ +static int ac_automata_union_matchstrs (AC_NODE_t * node); +static void ac_automata_set_failure + (AC_AUTOMATA_t * thiz, AC_NODE_t * node, AC_NODE_t * next, int idx, void *); +static void ac_automata_traverse_setfailure + (AC_AUTOMATA_t * thiz); + +static inline AC_ALPHABET_t *edge_get_alpha(struct edge *e) { + return (AC_ALPHABET_t *)(&e->next[e->max]); +} +static inline size_t edge_data_size(int num) { + return sizeof(void *)*num + ((num + sizeof(void *) - 1) & ~(sizeof(void *)-1)); +} + +#ifdef __KERNEL__ +static inline void *acho_calloc(size_t nmemb, size_t size) { + return kcalloc(nmemb, size, GFP_ATOMIC); +} +static inline void *acho_malloc(size_t size) { + return kmalloc(size, GFP_ATOMIC); +} +static inline void acho_free(void *old) { + return kfree(old); +} +#else + +#define acho_calloc(a,b) ndpi_calloc(a,b) +#define acho_malloc(a) ndpi_malloc(a) +#define acho_free(a) ndpi_free(a) +#endif + +static void acho_sort(struct edge *e, size_t num, + int (*cmp_func)(struct edge *e, int a, int b), + void (*swap_func)(struct edge *e, int a, int b)); + +/* tolower() from glibc */ +static uint8_t aho_lc[256] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', +'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, +112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, +128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, +144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, +160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, +176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, +192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, +208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, +224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, +240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255 +}; + +/* toupper() from glibc */ +static uint8_t aho_xc[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, + 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +/****************************************************************************** + * FUNCTION: ac_automata_init + * Initialize automata; allocate memories and set initial values + * PARAMS: + * MATCH_CALLBACK mc: call-back function + * the call-back function will be used to reach the caller on match occurrence + ******************************************************************************/ +AC_AUTOMATA_t * ac_automata_init (MATCH_CALLBACK_f mc) +{ + AC_AUTOMATA_t * thiz; +// if(!mc) return NULL; + thiz = (AC_AUTOMATA_t *)acho_calloc(1,sizeof(AC_AUTOMATA_t)); + if(!thiz) return NULL; + thiz->root = node_create (); + if(!thiz->root) { + acho_free(thiz); + return NULL; + } + thiz->root->id = 1; + thiz->root->root = 1; + thiz->total_patterns = 0; + thiz->automata_open = 1; + thiz->match_handler = mc; + thiz->to_lc = 0; + thiz->no_root_range = 0; + thiz->add_to_range = REALLOC_CHUNK_OUTGOING*2; + return thiz; +} +/****************************************************************************** + * FUNCTION: ac_automata_casecmp + * Case-insensitive comparison mode + * PARAMS: + * AC_AUTOMATA_t * thiz: the pointer to the automata + * lc: 1 for case-insensitive comparison mode + * RETUERN VALUE: AC_ERROR_t + * the return value indicates the success or failure of changes + ******************************************************************************/ +AC_ERROR_t ac_automata_feature (AC_AUTOMATA_t * thiz, unsigned int feature) +{ + if(!thiz) return ACERR_ERROR; + if(thiz->all_nodes_num || thiz->total_patterns) return ACERR_ERROR; + thiz->to_lc = (feature & AC_FEATURE_LC) != 0; + thiz->no_root_range = (feature & AC_FEATURE_NO_ROOT_RANGE) != 0; + return ACERR_SUCCESS; +} + +AC_ERROR_t ac_automata_name (AC_AUTOMATA_t * thiz, char *name, int debug) +{ + if(!thiz) return ACERR_ERROR; + strncpy(thiz->name,name,sizeof(thiz->name)-1); + thiz->debug = debug != 0; + return ACERR_SUCCESS; +} + +#ifndef __KERNEL__ +void ac_automata_enable_debug (int debug) { + ac_automata_global_debug = debug != 0; +} +#endif + +/****************************************************************************** + * FUNCTION: ac_automata_add + * Adds pattern to the automata. + * PARAMS: + * AC_AUTOMATA_t * thiz: the pointer to the automata + * AC_PATTERN_t * patt: the pointer to added pattern + * RETUERN VALUE: AC_ERROR_t + * the return value indicates the success or failure of adding action + ******************************************************************************/ +AC_ERROR_t ac_automata_add (AC_AUTOMATA_t * thiz, AC_PATTERN_t * patt) +{ + unsigned int i; + AC_NODE_t * n; + AC_NODE_t * next; + AC_ALPHABET_t alpha; + + if(!thiz || !patt || !patt->astring) + return ACERR_ERROR; + + n = thiz->root; + + if(!thiz->automata_open) + return ACERR_AUTOMATA_CLOSED; + + if (!patt->length) + return ACERR_ZERO_PATTERN; + + if (patt->length > AC_PATTRN_MAX_LENGTH) + return ACERR_LONG_PATTERN; + + for (i=0; ilength; i++) { + alpha = patt->astring[i]; + if(thiz->to_lc) + alpha = (AC_ALPHABET_t)aho_lc[(uint8_t)alpha]; + + if((next = node_find_next(n, alpha)) != 0) { + n = next; + continue; + } + if(!(next = node_create_next(n, alpha))) + return ACERR_ERROR; + next->id = ++thiz->id; + thiz->all_nodes_num++; + n = next; + } + if(thiz->max_str_len < patt->length) + thiz->max_str_len = patt->length; + + if(n->final && n->matched_patterns) { + patt->rep.number = n->matched_patterns->patterns[0].rep.number; + return ACERR_DUPLICATE_PATTERN; + } + + if(node_register_matchstr(n, patt, 0)) + return ACERR_ERROR; + + thiz->total_patterns++; + + return ACERR_SUCCESS; +} + +AC_ERROR_t ac_automata_walk(AC_AUTOMATA_t * thiz, + NODE_CALLBACK_f node_cb, ALPHA_CALLBACK_f alpha_cb, void *data) +{ + unsigned int ip; + AC_NODE_t *next, *n; + struct ac_path * path = thiz->ac_path; + AC_ERROR_t r; + + ip = 1; + path[1].n = thiz->root; + path[1].idx = 0; + + while(ip) { + unsigned int i,last; + n = path[ip].n; + i = path[ip].idx; + last = !n->outgoing || (n->one && i > 0) || (!n->one && i >= n->outgoing->degree); + if(node_cb && (!i || last)) { + r = node_cb(thiz, n, i, data); + if(r != ACERR_SUCCESS) return r; + } + if(last) { + ip--; continue; + } + next = NULL; + if(n->one) { + next = (AC_NODE_t *)n->outgoing; + } else { + while(i < n->outgoing->degree) { + next = n->outgoing->next[i]; + if(next) break; + i++; + } + } + if(!next) { + if(!n->range || i >= n->outgoing->degree) { + r = node_cb ? node_cb(thiz, n, i, data):ACERR_SUCCESS; + if(r != ACERR_SUCCESS) return r; + } + ip--; continue; + } + + if(n->depth < AC_PATTRN_MAX_LENGTH) { + path[n->depth].l = n->one ? n->one_alpha: + edge_get_alpha(n->outgoing)[i]; + if(alpha_cb) + alpha_cb(thiz, n, next, i, data); + } + + path[ip].idx = i+1; + if(ip >= AC_PATTRN_MAX_LENGTH) + continue; + + ip++; + + path[ip].n = next; + path[ip].idx = 0; + + } + return ACERR_SUCCESS; +} + + +static AC_ERROR_t ac_finalize_node(AC_AUTOMATA_t * thiz,AC_NODE_t * n, int idx, void *data) { + if(!n->ff) { + n->id = ++(thiz->id); + n->ff = 1; + if(ac_automata_union_matchstrs (n)) + return ACERR_ERROR; + if(n->use) { + if(!n->one) { + if(node_range_edges (thiz,n)) { + node_sort_edges (n); + thiz->n_range++; + } else + thiz->n_find++; + } else + thiz->n_oc++; + } + } + if(!n->a_ptr && n->outgoing && !n->one) { + n->a_ptr = (unsigned char *)edge_get_alpha(n->outgoing); + } + return ACERR_SUCCESS; +} + + +/****************************************************************************** + * FUNCTION: ac_automata_finalize + * Locate the failure node for all nodes and collect all matched pattern for + * every node. it also sorts outgoing edges of node, so binary search could be + * performed on them. after calling this function the automate literally will + * be finalized and you can not add new patterns to the automate. + * PARAMS: + * AC_AUTOMATA_t * thiz: the pointer to the automata + ******************************************************************************/ + +AC_ERROR_t ac_automata_finalize (AC_AUTOMATA_t * thiz) { + + AC_ERROR_t r = ACERR_SUCCESS; + if(!thiz || !thiz->automata_open) return r; + + ac_automata_traverse_setfailure (thiz); + thiz->id=0; + thiz->n_oc = 0; + thiz->n_range = 0; + thiz->n_find = 0; + r = ac_automata_walk(thiz,ac_finalize_node,NULL,NULL); + if(r == ACERR_SUCCESS) + thiz->automata_open = 0; + return r; +} + +int ac_automata_exact_match(AC_PATTERNS_t *mp,int pos, AC_TEXT_t *txt) { + AC_PATTERN_t *patterns = mp->patterns; + AC_PATTERN_t **matched = txt->match.matched; + unsigned int i; + int match_map = 0; + for(i=0; i < mp->num && i < ((sizeof(int)*8)-1); i++,patterns++) { + do { + if(patterns->rep.from_start && patterns->rep.at_end) { + if(pos == txt->length && patterns->length == pos) + matched[0] = patterns, match_map |= 1 << i; + break; + } + if(patterns->rep.from_start) { + if(patterns->length == pos) + matched[1] = patterns, match_map |= 1 << i; + break; + } + if(patterns->rep.at_end) { + if(pos == txt->length) + matched[2] = patterns, match_map |= 1 << i; + break; + } + matched[3] = patterns, match_map |= 1 << i; + } while(0); + } + return match_map; +} + +/****************************************************************************** + * FUNCTION: ac_automata_search + * Search in the input text using the given automata. on match event it will + * call the call-back function. and the call-back function in turn after doing + * its job, will return an integer value to ac_automata_search(). 0 value means + * continue search, and non-0 value means stop search and return to the caller. + * PARAMS: + * AC_AUTOMATA_t * thiz: the pointer to the automata + * AC_TEXT_t * txt: the input text that must be searched + * void * param: this parameter will be send to call-back function. it is + * useful for sending parameter to call-back function from caller function. + * RETURN VALUE: + * -1: failed call; automata is not finalized + * 0: success; continue searching; call-back sent me a 0 value + * 1: success; stop searching; call-back sent me a non-0 value + ******************************************************************************/ +int ac_automata_search (AC_AUTOMATA_t * thiz, + AC_TEXT_t * txt, AC_REP_t * param) +{ + unsigned long position; + int icase = 0,i,debug=0; + AC_MATCH_t *match; + AC_NODE_t *curr; + AC_NODE_t *next; + AC_ALPHABET_t *apos; + + if(!thiz || !txt) return -1; + + thiz->stats.n_search++; + + if(thiz->automata_open) + /* you must call ac_automata_locate_failure() first */ + return -1; + position = 0; + curr = thiz->root; + apos = txt->astring; +#ifndef __KERNEL__ + if(thiz->debug && ac_automata_global_debug) debug = 1; + if(debug) { + txt->option = debug; /* for callback */ + printf("aho %s: search %.*s\n", thiz->name[0] ? thiz->name:"unknown", txt->length, apos); + } +#endif + match = &txt->match; + memset((char*)match,0,sizeof(*match)); + + /* The 'txt->ignore_case' option is checked + * separately otherwise clang will detect + * uninitialized memory usage much later. */ + if(txt->option & AC_FEATURE_LC) icase = 1; + /* This is the main search loop. + * it must be keep as lightweight as possible. */ + while (position < txt->length) { + uint8_t alpha = (uint8_t)apos[position]; + if(thiz->to_lc) alpha = aho_lc[alpha]; + if(!(next = node_findbs_next_ac(curr, (uint8_t)alpha, icase))) { + if(curr->failure_node) /* we are not in the root node */ + curr = curr->failure_node; + else + position++; + } else { + curr = next; + position++; + if(curr->final && curr->matched_patterns) { + /* select best match */ + match->match_map = ac_automata_exact_match(curr->matched_patterns,position,txt); + if(match->match_map) { + match->match_counter++; /* we have a matching */ +#ifndef __KERNEL__ + if(debug) { + int i; + AC_PATTERN_t *patterns = curr->matched_patterns->patterns; + for(i=0; i < curr->matched_patterns->num; i++) { + if(!(match->match_map & (1 << i))) continue; + printf(" match%d: %c%.*s%c [%u]\n",i+1, + patterns[i].rep.from_start ? '^':' ', + patterns[i].length,patterns[i].astring, + patterns[i].rep.at_end ? '$':' ', + patterns[i].rep.number); + } + } +#endif + if(thiz->match_handler) { + /* We check 'next' to find out if we came here after a alphabet + * transition or due to a fail. in second case we should not report + * matching because it was reported in previous node */ + match->position = position; + match->match_num = curr->matched_patterns->num; + match->patterns = curr->matched_patterns->patterns; + if (thiz->match_handler(match, txt, param)) { + thiz->stats.n_found++; + return 1; + } + } + } /* match->match_map */ + } + } + } + if(thiz->match_handler) { + if(match->match_counter > 0) + thiz->stats.n_found++; + return match->match_counter > 0 ? 1:0; + } + + for(i = 0; i < 4; i++) + if(txt->match.matched[i]) { + *param = (txt->match.matched[i])->rep; +#ifndef __KERNEL__ + if(debug) { + AC_PATTERN_t *pattern = txt->match.matched[i]; + printf("best match: %c%.*s%c [%u]\n", + pattern->rep.from_start ? '^':' ', + pattern->length,pattern->astring, + pattern->rep.at_end ? '$':' ', + pattern->rep.number); + } +#endif + thiz->stats.n_found++; + return 1; + } + return 0; +} + +/****************************************************************************** + * FUNCTION: ac_automata_release + * Release all allocated memories to the automata + * PARAMS: + * AC_AUTOMATA_t * thiz: the pointer to the automata + * free_pattern: + * 0 - free all struct w/o free pattern + * 1 - free all struct and pattern + * 2 - clean struct w/o free pattern + ******************************************************************************/ + +static AC_ERROR_t ac_automata_release_node(AC_AUTOMATA_t * thiz, + AC_NODE_t *n, int idx, void *data) { + + if(!n->outgoing || idx) { + if(n->outgoing) { + if(n->one) thiz->n_oc--; + else if(n->range) thiz->n_range--; + else thiz->n_find--; + } + node_release(n,data != NULL); + } + + return ACERR_SUCCESS; +} +void ac_automata_release (AC_AUTOMATA_t * thiz, uint8_t free_pattern) { + + if(!thiz) + return; + + ac_automata_walk(thiz,ac_automata_release_node,NULL,free_pattern ? (void *)1:NULL); + + if(free_pattern <= 1) { + node_release(thiz->root,free_pattern | 0x4); + thiz->root = NULL; + acho_free(thiz); + } else { + AC_NODE_t *n; + thiz->all_nodes_num = 0; + thiz->total_patterns = 0; + thiz->max_str_len = 0; + thiz->automata_open = 1; + + n = thiz->root; + n->failure_node = NULL; + n->id = 0; + n->final = 0; + n->depth = 0; + if(n->outgoing) { + acho_free(n->outgoing); + n->outgoing = NULL; + } + if(n->matched_patterns) { + acho_free(n->matched_patterns); + n->matched_patterns=NULL; + } + n->use = 0; + n->one = 0; + } +} + +#ifndef __KERNEL__ + +static void dump_node_header(AC_NODE_t * n, struct aho_dump_info *ai) { + char *c; + int i; + fprintf(ai->file,"%04d: ",n->id); + if(n->failure_node) fprintf(ai->file," failure %04d:",n->failure_node->id); + fprintf(ai->file," d:%d %c",n->depth, n->use ? '+':'-'); + ai->memcnt += sizeof(*n); + if(n->matched_patterns) { + ai->memcnt += sizeof(n->matched_patterns) + + n->matched_patterns->max*sizeof(n->matched_patterns->patterns[0]); + } + if(!n->use) { fprintf(ai->file,"\n"); return; } + if(n->one) { + (ai->node_oc)++; + fprintf(ai->file," '%c' next->%d\n",n->one_alpha, + n->outgoing ? ((AC_NODE_t *)n->outgoing)->id : -1); + return; + } + if(!n->outgoing) { + fprintf(ai->file," BUG! !outgoing\n"); + return; + } + fprintf(ai->file,"%s\n",n->range ? " RANGE":""); + c = (char *)edge_get_alpha(n->outgoing); + if(n->outgoing->degree <= 8) + (ai->node_8c)++; + else + (ai->node_xc)++; + if(n->range) + (ai->node_xr)++; + for(i=0; i < n->outgoing->degree; i++) { + fprintf(ai->file," %d: \"%c\" -> %d\n",i,c[i], + n->outgoing->next[i] ? n->outgoing->next[i]->id:-1); + } + ai->memcnt += sizeof(n->outgoing) + edge_data_size(n->outgoing->max); +} + +static AC_ERROR_t dump_node_common(AC_AUTOMATA_t * thiz, + AC_NODE_t * n, int idx, void *data) { + struct aho_dump_info *ai = (struct aho_dump_info *)data; + char *rstr = ai->bufstr; + + if(idx) return ACERR_SUCCESS; + dump_node_header(n,ai); + if (n->matched_patterns && n->matched_patterns->num && n->final) { + char lbuf[512]; + int nl = 0,j,ret; + + nl = ndpi_snprintf(lbuf,sizeof(lbuf),"'%.100s' N:%d{",rstr,n->matched_patterns->num); + for (j=0; jmatched_patterns->num; j++) { + AC_PATTERN_t *sid = &n->matched_patterns->patterns[j]; + if(j) { + ret = ndpi_snprintf(&lbuf[nl],sizeof(lbuf)-nl-1,", "); + if (ret < 0 || (unsigned int)ret >= sizeof(lbuf)-nl-1) + break; + nl += (unsigned int)ret; + } + ret = ndpi_snprintf(&lbuf[nl],sizeof(lbuf)-nl-1,"%d %c%.100s%c", + sid->rep.number & 0x3fff, + sid->rep.number & 0x8000 ? '^':' ', + sid->astring, + sid->rep.number & 0x4000 ? '$':' '); + if (ret < 0 || (unsigned int)ret >= sizeof(lbuf)-nl-1) + break; + nl += (unsigned int)ret; + } + fprintf(ai->file,"%s}\n",lbuf); + } + return ACERR_SUCCESS; +} +static void dump_node_str(AC_AUTOMATA_t * thiz, AC_NODE_t * node, + AC_NODE_t * next, int idx, void *data) { + struct aho_dump_info *ai = (struct aho_dump_info *)data; + ai->bufstr[node->depth] = thiz->ac_path[node->depth].l; + ai->bufstr[node->depth+1] = 0; +} + +/****************************************************************************** + * FUNCTION: ac_automata_dump + * Prints the automata to output in human readable form. it is useful for + * debugging purpose. + * PARAMS: + * AC_AUTOMATA_t * thiz: the pointer to the automata + * rstr: char[] buffer + * rstr_size: size of rstr buffser + * char repcast: 'n': print AC_REP_t as number, 's': print AC_REP_t as string + ******************************************************************************/ + +void ac_automata_dump(AC_AUTOMATA_t * thiz, FILE *file) { + struct aho_dump_info ai; + + if(!thiz) return; + + memset((char *)&ai,0,sizeof(ai)); + ai.file = file ? file : stdout; + fprintf(ai.file,"---DUMP- all nodes %u - max strlen %u -%s---\n", + (unsigned int)thiz->all_nodes_num, + (unsigned int)thiz->max_str_len, + thiz->automata_open ? "open":"ready"); + + ai.bufstr = acho_malloc(AC_PATTRN_MAX_LENGTH+1); + ai.bufstr_len = AC_PATTRN_MAX_LENGTH; + if(!ai.bufstr) return; + ai.bufstr[0] = '\0'; + + ac_automata_walk(thiz,dump_node_common,dump_node_str,(void *)&ai); +#ifdef WIN32 + fprintf(ai.file,"---\n mem size %lu avg node size %d, node one char %d, <=8c %d, >8c %d, range %d\n---DUMP-END-\n", + (long unsigned int)ai.memcnt,(int)ai.memcnt/(thiz->all_nodes_num+1),(int)ai.node_oc,(int)ai.node_8c,(int)ai.node_xc,(int)ai.node_xr); +#else + fprintf(ai.file,"---\n mem size %zu avg node size %d, node one char %d, <=8c %d, >8c %d, range %d\n---DUMP-END-\n", + ai.memcnt,(int)ai.memcnt/(thiz->all_nodes_num+1),(int)ai.node_oc,(int)ai.node_8c,(int)ai.node_xc,(int)ai.node_xr); +#endif + acho_free(ai.bufstr); +} +#endif + +/****************************************************************************** + * FUNCTION: ac_automata_union_matchstrs + * Collect accepted patterns of the node. the accepted patterns consist of the + * node's own accepted pattern plus accepted patterns of its failure node. + ******************************************************************************/ +static int ac_automata_union_matchstrs (AC_NODE_t * node) +{ + unsigned int i; + AC_NODE_t * m; + + for (m = node; m; m = m->failure_node) { + if(!m->matched_patterns) continue; + + for (i=0; i < m->matched_patterns->num; i++) + if(node_register_matchstr(node, &(m->matched_patterns->patterns[i]), 1)) + return 1; + + if (m->final) + node->final = 1; + } + return 0; +} + +/****************************************************************************** + * FUNCTION: ac_automata_set_failure + * find failure node for the given node. + ******************************************************************************/ +static void ac_automata_set_failure +(AC_AUTOMATA_t * thiz, AC_NODE_t * node, AC_NODE_t * next, int idx, void *data) +{ + unsigned int i, j; + AC_NODE_t * m; + struct ac_path * path = thiz->ac_path; + + for (i=1; i < next->depth; i++) { + m = thiz->root; + for (j=i; j < next->depth && m; j++) { + m = node_find_next (m, path[j].l); + } + if (m) { + next->failure_node = m; + break; + } + } + if (!next->failure_node) + next->failure_node = thiz->root; +} + +/****************************************************************************** + * FUNCTION: ac_automata_traverse_setfailure + * Traverse all automata nodes using DFS (Depth First Search), meanwhile it set + * the failure node for every node it passes through. this function must be + * called after adding last pattern to automata. i.e. after calling this you + * can not add further pattern to automata. + ******************************************************************************/ +static inline void ac_automata_traverse_setfailure (AC_AUTOMATA_t * thiz) +{ + ac_automata_walk(thiz,NULL,ac_automata_set_failure,NULL); +} + +/****************************************************************************** + * FUNCTION: node_create + * Create the node + ******************************************************************************/ +static inline AC_NODE_t * node_create(void) +{ + return (AC_NODE_t *) acho_calloc (1,sizeof(AC_NODE_t)); +} + + +static void node_release_pattern(AC_NODE_t * thiz) +{ + int i; + AC_PATTERN_t * str; + + if(!thiz->matched_patterns) return; + str = thiz->matched_patterns->patterns; + + for (i=0; i < thiz->matched_patterns->num; str++,i++) + { + if(!str->is_existing && str->astring) { + acho_free(str->astring); + str->astring = NULL; + } + } +} + + +/****************************************************************************** + * FUNCTION: node_release + * Release node + ******************************************************************************/ +static void node_release(AC_NODE_t * thiz, int free_pattern) +{ + if(thiz->root && (free_pattern & 0x4) == 0) return; + + if(free_pattern & 1) node_release_pattern(thiz); + + if(thiz->matched_patterns) { + acho_free(thiz->matched_patterns); + thiz->matched_patterns = NULL; + } + if(!thiz->one && thiz->outgoing) { + acho_free(thiz->outgoing); + } + thiz->outgoing = NULL; + acho_free(thiz); +} + +/* Nonzero if X is not aligned on a "long" boundary. */ +#undef UNALIGNED /* Windows defined it but differently from what Aho expects */ +#define UNALIGNED(X) ((intptr_t)X & (__SIZEOF_LONG__ - 1)) + +#define LBLOCKSIZE __SIZEOF_LONG__ + +#if __SIZEOF_LONG__ == 4 +#define DETECTNULL(X) (((X) - 0x01010101UL) & ~(X) & 0x80808080UL) +#define DUPC 0x01010101UL + +static inline size_t bsf(uint32_t bits) +{ +#ifdef __GNUC__ + return __builtin_ctz(bits); +#else + size_t i=0; + if(!bits) return i; + if((bits & 0xffff) == 0) { i+=16; bits >>=16; } + if((bits & 0xff) == 0) i+=8; + return i; +#endif +} + +#else +#define DETECTNULL(X) (((X) - 0x0101010101010101ULL) & ~(X) & 0x8080808080808080ULL) +#define DUPC 0x0101010101010101UL + +static inline size_t bsf(uint64_t bits) +{ +#ifdef __GNUC__ + return __builtin_ctzll(bits); +#else + size_t i=0; + if(!bits) return i; + if((bits & 0xffffffff) == 0) { i+=32; bits >>=32; } + if((bits & 0xffff) == 0) { i+=16; bits >>=16; } + if((bits & 0xff) == 0) i+=8; + return i; +#endif +} +#endif + +static inline unsigned char * +xmemchr(unsigned char *s, unsigned char c,int n) +{ + while(n > 0) { + if (n >= LBLOCKSIZE && !UNALIGNED (s)) { + unsigned long int mask = c * DUPC; + + while (n >= LBLOCKSIZE) { +#if __SIZEOF_LONG__ == 4 + unsigned long int nc = DETECTNULL(le32toh(*(unsigned long int *)s) ^ mask); +#else + unsigned long int nc = DETECTNULL(le64toh(*(unsigned long int *)s) ^ mask); +#endif + if(nc) + return s + (bsf(nc) >> 3); + s += LBLOCKSIZE; + n -= LBLOCKSIZE; + } + if(!n) return NULL; + } + if (*s == c) return s; + s++; + n--; + } + return NULL; +} + + +/****************************************************************************** + * FUNCTION: node_find_next + * Find out the next node for a given Alpha to move. this function is used in + * the pre-processing stage in which edge array is not sorted. so it uses + * linear search. + ******************************************************************************/ +static AC_NODE_t * node_find_next(AC_NODE_t * thiz, AC_ALPHABET_t alpha) +{ + unsigned char *alphas, *fc; + + if(thiz->one) return alpha == thiz->one_alpha ? (AC_NODE_t *)thiz->outgoing:NULL; + if(!thiz->outgoing) return NULL; + + alphas = (unsigned char *)edge_get_alpha(thiz->outgoing); + fc = xmemchr(alphas,(unsigned char)alpha,thiz->outgoing->degree); + return fc ? thiz->outgoing->next[fc-alphas] : NULL; +} + + +/****************************************************************************** + * FUNCTION: node_findbs_next + * Find out the next node for a given Alpha. this function is used after the + * pre-processing stage in which we sort edges. so it uses Binary Search. + ******************************************************************************/ + +static inline AC_NODE_t *node_findbs_next (AC_NODE_t * thiz, uint8_t alpha) +{ + + if(thiz->one) + return alpha == thiz->one_alpha ? (AC_NODE_t *)thiz->outgoing:NULL; + + if(!(thiz->outgoing->cmap[(uint8_t)alpha >> 5] & (1u << (alpha & 0x1f)))) + return NULL; + + if(thiz->range) + return thiz->outgoing->next[alpha - (uint8_t)thiz->one_alpha]; + + return thiz->outgoing->next[ + xmemchr(thiz->a_ptr,alpha,thiz->outgoing->degree) - thiz->a_ptr]; +} + +static AC_NODE_t *node_findbs_next_ac (AC_NODE_t * thiz, uint8_t alpha,int icase) { + AC_NODE_t *next; + uint8_t alpha_c; + + if(!thiz->outgoing) return NULL; + + next = node_findbs_next(thiz,alpha); + if(next || !icase) return next; + + alpha_c = aho_xc[alpha]; + if(!alpha_c) return NULL; + return node_findbs_next(thiz, alpha ^ alpha_c); +} + +/****************************************************************************** + * FUNCTION: node_has_matchstr + * Determine if a final node contains a pattern in its accepted pattern list + * or not. return values: 1 = it has, 0 = it hasn't + ******************************************************************************/ +static int node_has_matchstr (AC_NODE_t * thiz, AC_PATTERN_t * newstr) +{ + int i; + + if(!thiz->matched_patterns) return 0; + + for (i=0; i < thiz->matched_patterns->num; i++) + { + AC_PATTERN_t *str = &(thiz->matched_patterns->patterns[i]); + + if (str->length != newstr->length) + continue; + + if(!memcmp(str->astring,newstr->astring,str->length)) + return 1; + } + + return 0; +} + +/****************************************************************************** + * FUNCTION: node_create_next + * Create the next node for the given alpha. + ******************************************************************************/ +static AC_NODE_t * node_create_next (AC_NODE_t * thiz, AC_ALPHABET_t alpha) +{ + AC_NODE_t * next; + next = node_find_next (thiz, alpha); + if (next) + /* The edge already exists */ + return NULL; + /* Otherwise register new edge */ + next = node_create (); + if(next) { + if(node_register_outgoing(thiz, next, alpha)) { + node_release(next,0); + return NULL; + } + next->depth = thiz->depth+1; + } + + return next; +} + +static inline size_t mp_data_size(int n) { + return sizeof(AC_PATTERNS_t) + n*sizeof(AC_PATTERN_t); +} + +static AC_PATTERNS_t * node_resize_mp(AC_PATTERNS_t *m) { +AC_PATTERNS_t *new_m; + + if(!m) { + m = acho_calloc(1,mp_data_size(REALLOC_CHUNK_MATCHSTR)); + if(!m) return m; + m->max = REALLOC_CHUNK_MATCHSTR; + return m; + } + new_m = acho_malloc(mp_data_size(m->max+REALLOC_CHUNK_MATCHSTR)); + if(!new_m) return new_m; + memcpy((char *)new_m,(char *)m,mp_data_size(m->max)); + new_m->max += REALLOC_CHUNK_MATCHSTR; + acho_free(m); + return new_m; +} + +/****************************************************************************** + * FUNCTION: node_register_matchstr + * Adds the pattern to the list of accepted pattern. + ******************************************************************************/ +static int node_register_matchstr (AC_NODE_t * thiz, AC_PATTERN_t * str,int is_existing) +{ + AC_PATTERN_t *l; + + if(!is_existing) + thiz->final = 1; + /* Check if the new pattern already exists in the node list */ + if (thiz->matched_patterns && node_has_matchstr(thiz, str)) + return 0; + + if(!thiz->matched_patterns) { + thiz->matched_patterns = node_resize_mp(thiz->matched_patterns); + if(!thiz->matched_patterns) + return 1; + } + + /* Manage memory */ + if (thiz->matched_patterns->num >= thiz->matched_patterns->max) { + AC_PATTERNS_t *new_mp = node_resize_mp(thiz->matched_patterns); + if(!new_mp) return 1; + thiz->matched_patterns = new_mp; + } + l = &thiz->matched_patterns->patterns[thiz->matched_patterns->num]; + l->astring = str->astring; + l->length = str->length; + l->is_existing = is_existing; + l->rep = str->rep; + thiz->matched_patterns->num++; + return 0; +} + +static struct edge *node_resize_outgoing(struct edge * e,size_t added) { +struct edge *new_e; +int ds; + + if(!added) added = REALLOC_CHUNK_OUTGOING; + if(!e) { + e = acho_calloc(1,sizeof(struct edge) + edge_data_size(REALLOC_CHUNK_OUTGOING)); + if(!e) return e; + e->max = REALLOC_CHUNK_OUTGOING; + return e; + } + ds = edge_data_size(e->max + added); + new_e = acho_calloc(1,sizeof(struct edge) + ds); + if(!new_e) return new_e; + memcpy(new_e,e,sizeof(struct edge) + sizeof(AC_NODE_t *)*e->max); + new_e->max += added; + + if(e->degree) + memcpy(edge_get_alpha(new_e),edge_get_alpha(e),e->degree); + + acho_free(e); + return new_e; +} + +/****************************************************************************** + * FUNCTION: node_register_outgoing + * Establish an edge between two nodes + ******************************************************************************/ +static int node_register_outgoing +(AC_NODE_t * thiz, AC_NODE_t * next, AC_ALPHABET_t alpha) +{ + struct edge *o; + if(!thiz->use) { + thiz->use = 1; + thiz->one = 1; + thiz->one_alpha = alpha; + thiz->outgoing = (struct edge *)next; + return 0; + } + if(thiz->one) { + o = node_resize_outgoing(NULL,0); + if(!o) return 1; + o->next[0] = (AC_NODE_t *)thiz->outgoing; + *edge_get_alpha(o) = thiz->one_alpha; + o->degree = 1; + thiz->one = 0; + thiz->one_alpha = 0; + thiz->outgoing = o; + } else + o = thiz->outgoing; + + if(!o) return 1; + + if(o->degree >= o->max) + { + struct edge *new_o = node_resize_outgoing(thiz->outgoing,0); + if(!new_o) return 1; + + thiz->outgoing = new_o; + o = new_o; + } + edge_get_alpha(o)[o->degree] = alpha; + o->next[o->degree] = next; + o->degree++; + return 0; +} + +/****************************************************************************** + * FUNCTION: node_edge_compare + * Comparison function for qsort. see man qsort. + ******************************************************************************/ +static int node_edge_compare (struct edge * e, int a, int b) { + unsigned char *c = (unsigned char *)edge_get_alpha(e); + return c[a] >= c[b] ? 1:0; +} + +static void node_edge_swap (struct edge * e, int a, int b) +{ +AC_ALPHABET_t *c,tc; +AC_NODE_t *tn; + c = edge_get_alpha(e); + tc = c[a]; c[a] = c[b]; c[b] = tc; + tn = e->next[a]; e->next[a] = e->next[b]; e->next[b] = tn; +} + +/****************************************************************************** + * FUNCTION: acho_2range + * Adds missing characters in the range low - high + ******************************************************************************/ +static void acho_2range(AC_NODE_t * thiz,uint8_t low, uint8_t high) { + struct edge *e; + int i; + uint8_t *c = (uint8_t *)edge_get_alpha(thiz->outgoing); + + thiz->range = 1; + thiz->one_alpha = (AC_ALPHABET_t)low; + e = thiz->outgoing; + for (i=0; low <= high && i < e->max; i++,low++) { + if(e->cmap[(low >> 5) & 0x7] & (1u << (low & 0x1f))) continue; + c[e->degree] = low; + e->next[e->degree] = NULL; + e->degree++; + } +} + +/****************************************************************************** + * FUNCTION: node_range_edges + * Converts to a range if possible. + ******************************************************************************/ +static int node_range_edges (AC_AUTOMATA_t *thiz, AC_NODE_t * node) +{ + struct edge *e = node->outgoing; + uint8_t *c = (uint8_t *)edge_get_alpha(node->outgoing); + uint8_t low = 0xff,high = 0; + int i; + + memset((char *)&e->cmap,0,sizeof(e->cmap)); + for(i = 0; i < e->degree; i++) { + uint8_t cc = c[i]; + if(cc < low) low = cc; + if(cc > high) high = cc; + e->cmap[(cc >> 5) & 0x7] |= 1u << (cc & 0x1f); + } + if(high - low + 1 == e->degree) { + node->range = 1; + node->one_alpha = (AC_ALPHABET_t)low; + return 1; + } + if(high - low + 1 < e->max) { + acho_2range(node,low,high); + return 1; + } + + i = (high - low)/8; + if (i < thiz->add_to_range) i = thiz->add_to_range; + i += REALLOC_CHUNK_OUTGOING-1; + i -= i % REALLOC_CHUNK_OUTGOING; + + if(high - low + 1 < e->max + i || (node->root && !thiz->no_root_range)) { + int added = (high - low + 1) - e->max; + struct edge *new_o = node_resize_outgoing(node->outgoing,added); + if(new_o) { + node->outgoing = new_o; + acho_2range(node,low,high); + return 1; + } + return 0; + } + + return 0; +} +/****************************************************************************** + * FUNCTION: node_sort_edges + * sorts edges alphabets. + ******************************************************************************/ +static inline void node_sort_edges (AC_NODE_t * thiz) +{ + + acho_sort (thiz->outgoing, thiz->outgoing->degree, + node_edge_compare, node_edge_swap); +} + +/** + * sort - sort an array of elements + * @base: pointer to data to sort + * @num: number of elements + * @size: size of each element + * @cmp_func: pointer to comparison function + * @swap_func: pointer to swap function or NULL + * + * This function does a heapsort on the given array. You may provide a + * swap_func function optimized to your element type. + * + * Sorting time is O(n log n) both on average and worst-case. While + * qsort is about 20% faster on average, it suffers from exploitable + * O(n*n) worst-case behavior and extra memory requirements that make + * it less suitable for kernel use. + */ + + void acho_sort(struct edge *e, size_t num, + int (*cmp_func)(struct edge *e, int a, int b), + void (*swap_func)(struct edge *e, int a, int b)) +{ + /* pre-scale counters for performance */ + int i = (num/2 - 1) , n = num, c, r; + + if (!swap_func) return; + if (!cmp_func) return; + + /* heapify */ + for ( ; i >= 0; i -= 1) { + for (r = i; r * 2 + 1 < n; r = c) { + c = r * 2 + 1; + if (c < n - 1 && cmp_func(e, c, c + 1) == 0) + c += 1; + if (cmp_func(e, r, c) != 0) + break; + swap_func(e, r, c); + } + } + + /* sort */ + for (i = n - 1; i > 0; i -= 1) { + swap_func(e,0,i); + for (r = 0; r * 2 + 1 < i; r = c) { + c = r * 2 + 1; + if (c < i - 1 && cmp_func(e, c, c + 1) == 0) + c += 1; + if (cmp_func(e, r, c) != 0) + break; + swap_func(e, r, c); + } + } +} + +void ac_automata_get_stats(AC_AUTOMATA_t * thiz, struct ac_stats *stats) +{ + if (thiz) { + stats->n_search = thiz->stats.n_search; + stats->n_found = thiz->stats.n_found; + } else { + stats->n_search = 0; + stats->n_found = 0; + } +} + +/* vim: set ts=4 sw=4 et : */ + diff --git a/src/components/implementation/simple_nf/ndpi/ahocorasick.h b/src/components/implementation/simple_nf/ndpi/ahocorasick.h new file mode 100644 index 0000000000..37d13b0f07 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/ahocorasick.h @@ -0,0 +1,284 @@ +/* + * ahocorasick.h: Includes all types of ahocorasick library + * This file is part of multifast. + * + Copyright 2010-2012 Kamiar Kanani + + multifast is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + multifast is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with multifast. If not, see . +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _AC_TYPES_H_ +#define _AC_TYPES_H_ + +#define AC_AHOCORASICK_NEW +#define AC_PATTRN_MAX_LENGTH 256 + +/* reallocation step for AC_NODE_t.matched_patterns */ +#define REALLOC_CHUNK_MATCHSTR 8 + +/* reallocation step for AC_NODE_t.outgoing array */ +/* Must be a multiple of __SIZEOF_LONG__ ! */ +#define REALLOC_CHUNK_OUTGOING 8 + +/* AC_ALPHABET_t: + * defines the alphabet type. + * Actually defining AC_ALPHABET_t as a char will work, but sometimes we deal + * with streams of other (bigger) types e.g. integers, specific enum, objects. + * Although they consists of string of bytes (chars), but using their specific + * types for AC_ALPHABET_t will lead to a better performance. so instead of + * dealing with strings of chars, we assume dealing with strings of + * AC_ALPHABET_t and leave it optional for other developers to define their + * own alphabets. + **/ +typedef char AC_ALPHABET_t; + +/* AC_REP_t: + * Provides a more readable representative for a pattern. + * because patterns themselves are not always suitable for displaying + * (e.g. for hex patterns), we offer this type to improve intelligibility + * of output. furthermore, sometimes it is useful, for example while + * retrieving patterns from a database, to maintain their identifiers in the + * automata for further reference. we provisioned two possible types as a + * union for this purpose. you can add your desired type in it. + **/ +typedef struct { + uint32_t number; /* Often used to store procotolId */ + uint64_t number64; + uint16_t breed, category; + uint16_t level, /* Domain level for comparison */ + from_start:1, /* match from start of string */ + at_end:1, /* match at end of string */ + dot:1; /* is domain name */ +} AC_REP_t; + +/* AC_PATTERN_t: + * This is the pattern type that must be fed into AC automata. + * the 'astring' field is not null-terminated, due to it can contain zero + * value bytes. the 'length' field determines the number of AC_ALPHABET_t it + * carries. the 'representative' field is described in AC_REP_t. despite + * 'astring', 'representative' can have duplicate values for different given + * AC_PATTERN_t. it is an optional field and you can just fill it with 0. + * CAUTION: + * Not always the 'astring' points to the correct position in memory. + * it is the responsibility of your program to maintain a permanent allocation + * for astring field of the added pattern to automata. + **/ + +typedef struct +{ + AC_ALPHABET_t * astring; /* String of alphabets */ + uint16_t length, /* Length of pattern */ + is_existing; /* not union_matchstr */ + AC_REP_t rep; /* Representative string (optional) */ +} AC_PATTERN_t; + +typedef struct { + unsigned short num; /* Number of matched patterns at this node */ + unsigned short max; /* Max capacity of allocated memory for matched_patterns */ + AC_PATTERN_t patterns[]; +} AC_PATTERNS_t; + + +/* AC_MATCH_t: + * Provides the structure for reporting a match event. + * a match event occurs when the automata reaches a final node. any final + * node can match one or more pattern at a position in a text. the + * 'patterns' field holds these matched patterns. obviously these + * matched patterns have same end-position in the text. there is a relationship + * between matched patterns: the shorter one is a factor (tail) of the longer + * one. the 'position' maintains the end position of matched patterns. the + * start position of patterns could be found by knowing their 'length' in + * AC_PATTERN_t. e.g. suppose "recent" and "cent" are matched at + * position 40 in the text, then the start position of them are 34 and 36 + * respectively. finally the field 'match_num' maintains the number of + * matched patterns. + **/ + +typedef struct +{ + AC_PATTERN_t *matched[4], /* for ac_automata_exact_match() */ + *last; /* for callback */ + AC_PATTERN_t *patterns; /* Array of matched pattern */ + unsigned int match_map; /* Matched patterns (bitmap) */ + unsigned int position; /* The end position of matching pattern(s) in the text */ + unsigned short int match_num; /* Number of matched patterns */ + unsigned short int match_counter; /* Counter of found matches */ +} AC_MATCH_t; + +/* AC_TEXT_t: + * The input text type that is fed to ac_automata_search() to be searched. + * it is similar to AC_PATTERN_t. actually we could use AC_PATTERN_t as input + * text, but for the purpose of being more readable, we defined this new type. + **/ +typedef struct +{ + AC_MATCH_t match; + AC_ALPHABET_t * astring; /* String of alphabets */ + unsigned short int length, /* Length of string */ + option; /* AC_FEATURE_LC | AC_FEATURE_DEBUG */ +} AC_TEXT_t; + + +/* AC_ERROR_t: + * Error that may occur while adding a pattern to the automata. + * it is returned by ac_automata_add(). + **/ +typedef enum + { + ACERR_SUCCESS = 0, /* No error occurred */ + ACERR_DUPLICATE_PATTERN, /* Duplicate patterns */ + ACERR_LONG_PATTERN, /* Pattern length is longer than AC_PATTRN_MAX_LENGTH */ + ACERR_ZERO_PATTERN, /* Empty pattern (zero length) */ + ACERR_AUTOMATA_CLOSED, /* Automata is closed. after calling + ac_automata_finalize() you can not add new patterns to the automata. */ + ACERR_ERROR, /* common error */ + } AC_ERROR_t; + +/* MATCH_CALLBACK_t: + * This is the call-back function type that must be given to automata at + * initialization to report match occurrence to the caller. + * at a match event, the automata will reach you using this function and sends + * you a pointer to AC_MATCH_t. using that pointer you can handle + * matches. you can send parameters to the call-back function when you call + * ac_automata_search(). at call-back, the automata will sent you those + * parameters as the second parameter (void *) of MATCH_CALLBACK_t. inside + * the call-back function you can cast it to whatever you want. + * If you return 0 from MATCH_CALLBACK_t function to the automata, it will + * continue searching, otherwise it will return from ac_automata_search() + * to your calling function. + **/ +typedef int (*MATCH_CALLBACK_f)(AC_MATCH_t *, AC_TEXT_t *, AC_REP_t *); + +/* AC_PATTRN_MAX_LENGTH: + * Maximum acceptable pattern length in AC_PATTERN_t.length + **/ + +/* Forward Declaration */ +struct edge; + +/* + * automata node + * 4 pointers + 8 bytes : 40/24 bytes for 64/32 bit + */ +typedef struct ac_node +{ + int id; /* Node ID : set after finalize(), only for ac_automata_dump */ + AC_ALPHABET_t one_alpha; + unsigned char one:1, /* one_char: yes/no */ + range:1, /* range symbols start from one_alpha */ + root:1, /* is root node */ + final:1, /* 0: no ; 1: yes, it is a final node */ + use:1, /* use: yes/no */ + ff:1; /* finalized node */ + unsigned short depth; /* depth: distance between this node and the root */ + + AC_PATTERNS_t *matched_patterns; /* Array of matched patterns */ + struct edge *outgoing; /* Array of outgoing edges */ + + struct ac_node *failure_node; /* The failure node of this node */ + unsigned char *a_ptr; +} AC_NODE_t; + +struct edge { + unsigned short degree; /* Number of outgoing edges */ + unsigned short max; /* Max capacity of allocated memory for outgoing */ + uint32_t cmap[8]; /* 256 bit */ + AC_NODE_t *next[]; + /* + * first N elements used for 'next' pointers + + * M elements used for symbols storage + * M = (max + sizeof(void*)-1) & ( ~(sizeof(void*)-1)) + * + * if sizeof(void*)==8 + * for max = 8 we must alloc next[9]; + * for max = 16 we must alloc next[18]; + * + */ +}; + +struct ac_path { + AC_NODE_t * n; + unsigned short int idx,l; +}; + +struct ac_stats { + uint64_t n_search; + uint64_t n_found; +}; + +typedef struct +{ + /* The root of the Aho-Corasick trie */ + AC_NODE_t * root; + MATCH_CALLBACK_f match_handler; + unsigned int all_nodes_num; /* Number of all nodes in the automata */ + + /* this flag indicates that if automata is finalized by + * ac_automata_finalize() or not. 1 means finalized and 0 + * means not finalized (is open). after finalizing automata you can not + * add pattern to automata anymore. */ + unsigned short automata_open, + to_lc:1, no_root_range:1,debug:1; /* lowercase match */ + + /* Statistic Variables */ + unsigned long total_patterns; /* Total patterns in the automata */ + + unsigned long max_str_len; /* largest pattern length. Update by ac_automata_finalize() */ + + struct ac_path ac_path[AC_PATTRN_MAX_LENGTH+4]; /* for ac_automata_walk */ + int id; /* node id */ + int add_to_range; /* for convert to range */ + int n_oc,n_range,n_find; /* statistics */ + char name[32]; /* if debug != 0 */ + struct ac_stats stats; +} AC_AUTOMATA_t; + +typedef AC_ERROR_t (*NODE_CALLBACK_f)(AC_AUTOMATA_t *, AC_NODE_t *,int idx, void *); + +typedef void (*ALPHA_CALLBACK_f)(AC_AUTOMATA_t *, AC_NODE_t *,AC_NODE_t *,int ,void *); + +#define AC_FEATURE_DEBUG 1 +#define AC_FEATURE_LC 2 +#define AC_FEATURE_NO_ROOT_RANGE 4 + +AC_AUTOMATA_t * ac_automata_init (MATCH_CALLBACK_f mc); +AC_ERROR_t ac_automata_feature (AC_AUTOMATA_t * thiz, unsigned int feature); +AC_ERROR_t ac_automata_name (AC_AUTOMATA_t * thiz, char *name, int debug); +AC_ERROR_t ac_automata_add (AC_AUTOMATA_t * thiz, AC_PATTERN_t * str); +AC_ERROR_t ac_automata_finalize (AC_AUTOMATA_t * thiz); +AC_ERROR_t ac_automata_walk (AC_AUTOMATA_t * thiz, NODE_CALLBACK_f node_cb, + ALPHA_CALLBACK_f alpha_cb, void *); + +int ac_automata_search (AC_AUTOMATA_t * thiz, + AC_TEXT_t * str, + AC_REP_t * param); +int ac_automata_exact_match(AC_PATTERNS_t *mp,int pos, AC_TEXT_t *); +void ac_automata_clean (AC_AUTOMATA_t * thiz); +void ac_automata_release (AC_AUTOMATA_t * thiz, uint8_t free_pattern); +#ifndef __KERNEL__ +/* Global debug control. */ +void ac_automata_enable_debug (int debug); +/* See man open_memstream() for get result as string */ +void ac_automata_dump (AC_AUTOMATA_t * thiz, FILE *); +#endif +void ac_automata_get_stats(AC_AUTOMATA_t * thiz, struct ac_stats *stats); +#endif + +#ifdef __cplusplus +} +#endif diff --git a/src/components/implementation/simple_nf/ndpi/ajp.c b/src/components/implementation/simple_nf/ndpi/ajp.c new file mode 100644 index 0000000000..c25b958033 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/ajp.c @@ -0,0 +1,132 @@ +/* + * ajp.c + * + * Copyright (C) 2018 by Leonn Paiva + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_AJP + +#include "ndpi_api.h" + +enum ajp_direction { + AJP_SERVER_TO_CONTAINER = 0x1234, + AJP_CONTAINER_TO_SERVER = 0x4142 +}; + +enum ajp_packet_type { + AJP_UNKNOWN = 0, + + /* packet types */ + AJP_FORWARD_REQUEST = 2, + AJP_SEND_BODY_CHUNK = 3, + AJP_SEND_HEADERS = 4, + AJP_END_RESPONSE = 5, + AJP_GET_BODY_CHUNK = 6, + AJP_SHUTDOWN = 7, + AJP_PING = 8, + AJP_CPONG = 9, + AJP_CPING = 10, + AJP_BODY = 11 +}; + +PACK_ON +struct ajp_header { + uint16_t magic; + uint16_t len; + uint8_t code; +} PACK_OFF; + +static void set_ajp_detected(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + + if(flow->detected_protocol_stack[0] == NDPI_PROTOCOL_UNKNOWN) { + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_AJP, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + } +} + + +/*************************************************************************************************/ + +static void ndpi_check_ajp(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + struct ajp_header ajp_hdr; + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + if (packet->payload_packet_len < sizeof(ajp_hdr)) { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + memcpy(&ajp_hdr, packet->payload, sizeof(struct ajp_header)); + + ajp_hdr.magic = ntohs(ajp_hdr.magic); + ajp_hdr.len = ntohs(ajp_hdr.len); + + if (ajp_hdr.len > 0 && ajp_hdr.magic == AJP_SERVER_TO_CONTAINER) { + if (ajp_hdr.code == AJP_FORWARD_REQUEST || ajp_hdr.code == AJP_SHUTDOWN + || ajp_hdr.code == AJP_PING || ajp_hdr.code == AJP_CPING) { + + set_ajp_detected(ndpi_struct, flow); + + } else { + NDPI_LOG_DBG(ndpi_struct, "Invalid AJP request type"); + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + } + } else if (ajp_hdr.len > 0 && ajp_hdr.magic == AJP_CONTAINER_TO_SERVER) { + if (ajp_hdr.code == AJP_SEND_BODY_CHUNK || ajp_hdr.code == AJP_SEND_HEADERS + || ajp_hdr.code == AJP_END_RESPONSE || ajp_hdr.code == AJP_GET_BODY_CHUNK + || ajp_hdr.code == AJP_CPONG) { + + set_ajp_detected(ndpi_struct, flow); + + } else { + NDPI_LOG_DBG(ndpi_struct, "Invalid AJP response type"); + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + } + } else { + NDPI_LOG_DBG(ndpi_struct,"Invalid AJP packet\n"); + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + } +} + +static void ndpi_search_ajp(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + NDPI_LOG_DBG(ndpi_struct, "search AJP\n"); + ndpi_check_ajp(ndpi_struct, flow); + + return; +} + +/* ********************************* */ + + +void init_ajp_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("AJP", ndpi_struct, + *id, NDPI_PROTOCOL_AJP, ndpi_search_ajp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/alicloud.c b/src/components/implementation/simple_nf/ndpi/alicloud.c new file mode 100644 index 0000000000..3966e75879 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/alicloud.c @@ -0,0 +1,82 @@ +/* + * alicloud.c + * + * Copyright (C) 2022-23 - ntop.org + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_ALICLOUD + +#include "ndpi_api.h" + +static void ndpi_int_alicloud_add_connection(struct ndpi_detection_module_struct * const ndpi_struct, + struct ndpi_flow_struct * const flow) +{ + NDPI_LOG_INFO(ndpi_struct, "found alicloud\n"); + + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_ALICLOUD, NDPI_PROTOCOL_UNKNOWN, + NDPI_CONFIDENCE_DPI); +} + +static void ndpi_search_alicloud(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct const * const packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search alicloud\n"); + + if (packet->payload_packet_len < 8) + { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + if (ntohl(get_u_int32_t(packet->payload, 0)) == 0xcefabeba) + { + u_int32_t pdu_len = ntohl(get_u_int32_t(packet->payload, 4)); + + if (packet->payload_packet_len == 8 && pdu_len > 0) + { + ndpi_int_alicloud_add_connection(ndpi_struct, flow); + return; + } else if (pdu_len == (u_int32_t)packet->payload_packet_len - 8) { + ndpi_int_alicloud_add_connection(ndpi_struct, flow); + return; + } + } + + if (flow->packet_counter > 3) + { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + } +} + +void init_alicloud_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("AliCloud", ndpi_struct, *id, + NDPI_PROTOCOL_ALICLOUD, + ndpi_search_alicloud, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK + ); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/amazon_video.c b/src/components/implementation/simple_nf/ndpi/amazon_video.c new file mode 100644 index 0000000000..49e1cf2efa --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/amazon_video.c @@ -0,0 +1,78 @@ +/* + * amazon_video.c + * + * Copyright (C) 2018-22 - ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_AMAZON_VIDEO + +#include "ndpi_api.h" + +static void ndpi_check_amazon_video(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search Amazon Prime\n"); + + if(packet->payload_packet_len > 4) { + if((packet->tcp != NULL) && + (packet->payload[0] == 0xFE && + packet->payload[1] == 0xED && + packet->payload[2] == 0xFA && + packet->payload[3] == 0xCE)) { + NDPI_LOG_INFO(ndpi_struct, "found Amazon Video on TCP\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_AMAZON_VIDEO, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } else if((packet->udp != NULL) && + (packet->payload[0] == 0xDE && + packet->payload[1] == 0xAD && + packet->payload[2] == 0xBE && + packet->payload[3] == 0xEF)) { + NDPI_LOG_INFO(ndpi_struct, "found Amazon Video on UDP\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_AMAZON_VIDEO, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + +static void ndpi_search_amazon_video(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + NDPI_LOG_DBG(ndpi_struct, "search amazon_video\n"); + + /* skip marked packets */ + if(flow->detected_protocol_stack[0] != NDPI_PROTOCOL_AMAZON_VIDEO) + ndpi_check_amazon_video(ndpi_struct, flow); +} + + +void init_amazon_video_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id) { + ndpi_set_bitmask_protocol_detection("AMAZON_VIDEO", ndpi_struct, *id, + NDPI_PROTOCOL_AMAZON_VIDEO, + ndpi_search_amazon_video, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/among_us.c b/src/components/implementation/simple_nf/ndpi/among_us.c new file mode 100644 index 0000000000..f1e143e813 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/among_us.c @@ -0,0 +1,57 @@ +/* + * among_us.c + * + * Copyright (C) 2020 - ntop.org + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_AMONG_US + +#include "ndpi_api.h" + +static void ndpi_int_among_us_add_connection(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_AMONG_US, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + +static void ndpi_search_among_us(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct * const packet = &ndpi_struct->packet; + + /* handshake packet */ + if (packet->payload_packet_len > 9 && + ntohl(*(u_int32_t*)&packet->payload[0]) == 0x08000100 && + ntohl(*(u_int32_t*)&packet->payload[4]) == 0x80d90203) + { + ndpi_int_among_us_add_connection(ndpi_struct, flow); + } else { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + } +} + +void init_among_us_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection( + "AmongUs", ndpi_struct, *id, + NDPI_PROTOCOL_AMONG_US, ndpi_search_among_us, NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, ADD_TO_DETECTION_BITMASK); + *id += 1; +} + diff --git a/src/components/implementation/simple_nf/ndpi/amqp.c b/src/components/implementation/simple_nf/ndpi/amqp.c new file mode 100644 index 0000000000..42afb122a8 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/amqp.c @@ -0,0 +1,85 @@ +/* + * amqp.c + * + * Copyright (C) 2011-22 - ntop.org + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_AMQP + +#include "ndpi_api.h" + + +PACK_ON +struct amqp_header { + u_int8_t ptype; + u_int16_t channel; + u_int32_t length; + u_int16_t class_id, method; +} PACK_OFF; + +static void ndpi_int_amqp_add_connection(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow/* , */ + /* ndpi_protocol_type_t protocol_type */) { + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_AMQP, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + +static void ndpi_search_amqp(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search amqp\n"); + + if (packet->tcp != NULL) { + if(packet->payload_packet_len > sizeof(struct amqp_header)) { + struct amqp_header *h = (struct amqp_header*)packet->payload; + + if(h->ptype <= 3) { + u_int32_t length = htonl(h->length); + + if(((length+8) >= packet->payload_packet_len) + && (length < 32768) /* Upper bound */) { + u_int16_t class_id = htons(h->class_id); + + if((class_id >= 10) /* Connection */ + && (class_id <= 110) /* Tunnel */) { + u_int16_t method = htons(h->method); + + if(method <= 120 /* Method basic NACK */) { + NDPI_LOG_INFO(ndpi_struct, "found amqp over tcp\n"); + ndpi_int_amqp_add_connection(ndpi_struct, flow); + return; + } + } + } + } + } + } +} + + +void init_amqp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) { + ndpi_set_bitmask_protocol_detection("AMQP", ndpi_struct, *id, + NDPI_PROTOCOL_AMQP, + ndpi_search_amqp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} + diff --git a/src/components/implementation/simple_nf/ndpi/apple_push.c b/src/components/implementation/simple_nf/ndpi/apple_push.c new file mode 100644 index 0000000000..7f19162514 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/apple_push.c @@ -0,0 +1,108 @@ +/* + * apple_push.c + * + * Copyright (C) 2018 by ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_APPLE_PUSH + +#include "ndpi_api.h" + +static int is_apple_push_addr(const struct ndpi_packet_struct *packet) +{ + if(packet->iph) { + /* 17.0.0.0/8 */ + if(((ntohl(packet->iph->saddr) & 0xFF000000 /* 255.0.0.0 */) == 0x11000000) || + ((ntohl(packet->iph->daddr) & 0xFF000000 /* 255.0.0.0 */) == 0x11000000)) + return 1; + } else if(packet->iphv6) { + /* 2620:149:a44::/48 */ + if(((packet->iphv6->ip6_src.u6_addr.u6_addr32[0] == ntohl(0x26200149)) && + ((packet->iphv6->ip6_src.u6_addr.u6_addr32[1] & htonl (0xffff0000)) == ntohl(0x0a440000))) || + ((packet->iphv6->ip6_dst.u6_addr.u6_addr32[0] == ntohl(0x26200149)) && + ((packet->iphv6->ip6_dst.u6_addr.u6_addr32[1] & htonl (0xffff0000)) == ntohl(0x0a440000)))) + return 1; + /* 2403:300:a42::/48 */ + if(((packet->iphv6->ip6_src.u6_addr.u6_addr32[0] == ntohl(0x24030300)) && + ((packet->iphv6->ip6_src.u6_addr.u6_addr32[1] & htonl (0xffff0000)) == ntohl(0x0a420000))) || + ((packet->iphv6->ip6_dst.u6_addr.u6_addr32[0] == ntohl(0x24030300)) && + ((packet->iphv6->ip6_dst.u6_addr.u6_addr32[1] & htonl (0xffff0000)) == ntohl(0x0a420000)))) + return 1; + /* 2403:300:a51::/48 */ + if(((packet->iphv6->ip6_src.u6_addr.u6_addr32[0] == ntohl(0x24030300)) && + ((packet->iphv6->ip6_src.u6_addr.u6_addr32[1] & htonl (0xffff0000)) == ntohl(0x0a510000))) || + ((packet->iphv6->ip6_dst.u6_addr.u6_addr32[0] == ntohl(0x24030300)) && + ((packet->iphv6->ip6_dst.u6_addr.u6_addr32[1] & htonl (0xffff0000)) == ntohl(0x0a510000)))) + return 1; + /* 2a01:b740:a42::/48 */ + if(((packet->iphv6->ip6_src.u6_addr.u6_addr32[0] == ntohl(0x2a0ab740)) && + ((packet->iphv6->ip6_src.u6_addr.u6_addr32[1] & htonl (0xffff0000)) == ntohl(0x0a420000))) || + ((packet->iphv6->ip6_dst.u6_addr.u6_addr32[0] == ntohl(0x2a0ab740)) && + ((packet->iphv6->ip6_dst.u6_addr.u6_addr32[1] & htonl (0xffff0000)) == ntohl(0x0a420000)))) + return 1; + + } + return 0; +} + + +static void ndpi_check_apple_push(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + /* https://support.apple.com/en-us/HT203609 */ + if(is_apple_push_addr(packet)) { + u_int16_t apple_push_port = ntohs(5223); + u_int16_t notification_apn_port = ntohs(2197); + + if((packet->tcp->source == apple_push_port) || (packet->tcp->dest == apple_push_port) || + (packet->tcp->source == notification_apn_port) || (packet->tcp->dest == notification_apn_port)) { + NDPI_LOG_INFO(ndpi_struct, "found apple_push\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_APPLE_PUSH, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + +static void ndpi_search_apple_push(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + NDPI_LOG_DBG(ndpi_struct, "search apple_push\n"); + + /* skip marked packets */ + if(flow->detected_protocol_stack[0] != NDPI_PROTOCOL_APPLE_PUSH) + ndpi_check_apple_push(ndpi_struct, flow); +} + + +void init_apple_push_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("APPLE_PUSH", ndpi_struct, *id, + NDPI_PROTOCOL_APPLE_PUSH, + ndpi_search_apple_push, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + *id += 1; +} + diff --git a/src/components/implementation/simple_nf/ndpi/armagetron.c b/src/components/implementation/simple_nf/ndpi/armagetron.c new file mode 100644 index 0000000000..b021862bc4 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/armagetron.c @@ -0,0 +1,109 @@ +/* + * armagetron.c + * + * Copyright (C) 2009-11 - ipoque GmbH + * Copyright (C) 2011-22 - ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_ARMAGETRON + +#include "ndpi_api.h" + + +static void ndpi_int_armagetron_add_connection(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_ARMAGETRON, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + +static void ndpi_search_armagetron_udp(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search armagetron\n"); + + if (packet->payload_packet_len > 10) { + /* login request */ + if (get_u_int32_t(packet->payload, 0) == htonl(0x000b0000)) { + const u_int16_t dataLength = ntohs(get_u_int16_t(packet->payload, 4)); + if (dataLength == 0 || dataLength * 2 + 8 != packet->payload_packet_len) + goto exclude; + if (get_u_int16_t(packet->payload, 6) == htons(0x0008) + && get_u_int16_t(packet->payload, packet->payload_packet_len - 2) == 0) { + NDPI_LOG_INFO(ndpi_struct, "found armagetron\n"); + ndpi_int_armagetron_add_connection(ndpi_struct, flow); + return; + } + } + /* sync_msg */ + if (packet->payload_packet_len == 16 && get_u_int16_t(packet->payload, 0) == htons(0x001c) + && get_u_int16_t(packet->payload, 2) != 0) { + const u_int16_t dataLength = ntohs(get_u_int16_t(packet->payload, 4)); + if (dataLength != 4) + goto exclude; + if (get_u_int32_t(packet->payload, 6) == htonl(0x00000500) && get_u_int32_t(packet->payload, 6 + 4) == htonl(0x00010000) + && get_u_int16_t(packet->payload, packet->payload_packet_len - 2) == 0) { + NDPI_LOG_INFO(ndpi_struct, "found armagetron\n"); + ndpi_int_armagetron_add_connection(ndpi_struct, flow); + return; + } + } + + /* net_sync combination */ + if (packet->payload_packet_len > 50 && get_u_int16_t(packet->payload, 0) == htons(0x0018) + && get_u_int16_t(packet->payload, 2) != 0) { + u_int16_t val; + const u_int16_t dataLength = ntohs(get_u_int16_t(packet->payload, 4)); + if (dataLength == 0 || dataLength * 2 + 8 > packet->payload_packet_len) + goto exclude; + val = get_u_int16_t(packet->payload, 6 + 2); + if (val == get_u_int16_t(packet->payload, 6 + 6)) { + val = ntohs(get_u_int16_t(packet->payload, 6 + 8)); + if ((6 + 10 + val + 4) < packet->payload_packet_len + && (get_u_int32_t(packet->payload, 6 + 10 + val) == htonl(0x00010000) + || get_u_int32_t(packet->payload, 6 + 10 + val) == htonl(0x00000001)) + && get_u_int16_t(packet->payload, packet->payload_packet_len - 2) == 0) { + NDPI_LOG_INFO(ndpi_struct, "found armagetron\n"); + ndpi_int_armagetron_add_connection(ndpi_struct, flow); + return; + } + } + } + } + + exclude: + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + + + +void init_armagetron_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("Armagetron", ndpi_struct, *id, + NDPI_PROTOCOL_ARMAGETRON, + ndpi_search_armagetron_udp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/avast.c b/src/components/implementation/simple_nf/ndpi/avast.c new file mode 100644 index 0000000000..e133f8cf22 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/avast.c @@ -0,0 +1,66 @@ +/* + * avast.c + * + * Copyright (C) 2012-22 - ntop.org + * + * This module is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This module is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License. + * If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_AVAST + +#include +#include "ndpi_api.h" + +static void ndpi_int_avast_add_connection(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_AVAST, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + +static void ndpi_search_avast(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct * packet = &ndpi_struct->packet; + + if (packet->payload_packet_len < 6) + { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + if (strncmp((char *)&packet->payload[0], "NOSA", NDPI_STATICSTRING_LEN("NOSA")) == 0 && + ntohs(*(uint16_t *)&packet->payload[4]) == packet->payload_packet_len) + { + ndpi_int_avast_add_connection(ndpi_struct, flow); + return; + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + +void init_avast_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("AVAST", + ndpi_struct, *id, + NDPI_PROTOCOL_AVAST, + ndpi_search_avast, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/avast_securedns.c b/src/components/implementation/simple_nf/ndpi/avast_securedns.c new file mode 100644 index 0000000000..5eb9a430f3 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/avast_securedns.c @@ -0,0 +1,67 @@ +/* + * avast_securedns.c + * + * Copyright (C) 2012-22 - ntop.org + * + * This module is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This module is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License. + * If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_AVAST_SECUREDNS + +#include +#include "ndpi_api.h" + +static void ndpi_int_avast_securedns_add_connection(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_AVAST_SECUREDNS, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + +static void ndpi_search_avast_securedns(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct * packet = &ndpi_struct->packet; + + if (packet->payload_packet_len < 34 || + ntohl(get_u_int32_t(packet->payload, 11)) != 0x00013209 || + flow->packet_counter > 1) + { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + if (strncasecmp((char *)&packet->payload[15], "securedns", NDPI_STATICSTRING_LEN("securedns")) == 0) + { + ndpi_int_avast_securedns_add_connection(ndpi_struct, flow); + return; + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + +void init_avast_securedns_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("AVAST SecureDNS", + ndpi_struct, *id, + NDPI_PROTOCOL_AVAST_SECUREDNS, + ndpi_search_avast_securedns, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/bgp.c b/src/components/implementation/simple_nf/ndpi/bgp.c new file mode 100644 index 0000000000..dbc8e5fcc8 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/bgp.c @@ -0,0 +1,67 @@ +/* + * bgp.c + * + * Copyright (C) 2016-22 - ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_BGP + +#include "ndpi_api.h" + + +/* this detection also works asymmetrically */ +static void ndpi_search_bgp(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + u_int16_t bgp_port = htons(179); + + NDPI_LOG_DBG(ndpi_struct, "search BGP\n"); + + if(packet->tcp) { + if(packet->payload_packet_len > 18 + && packet->payload[18] < 5 + && ((packet->tcp->dest == bgp_port) || (packet->tcp->source == bgp_port)) + && (get_u_int64_t(packet->payload, 0) == 0xffffffffffffffffULL) + && (get_u_int64_t(packet->payload, 8) == 0xffffffffffffffffULL) + && (ntohs(get_u_int16_t(packet->payload, 16)) <= packet->payload_packet_len)) { + + NDPI_LOG_INFO(ndpi_struct, "found BGP\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_BGP, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + + +void init_bgp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("BGP", ndpi_struct, *id, + NDPI_PROTOCOL_BGP, + ndpi_search_bgp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + *id += 1; +} + diff --git a/src/components/implementation/simple_nf/ndpi/bittorrent.c b/src/components/implementation/simple_nf/ndpi/bittorrent.c new file mode 100644 index 0000000000..40268cb901 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/bittorrent.c @@ -0,0 +1,576 @@ +/* + * bittorrent.c + * + * Copyright (C) 2009-11 - ipoque GmbH + * Copyright (C) 2011-22 - ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_BITTORRENT + +#include "ndpi_api.h" + +#define BITTORRENT_PROTO_STRING "BitTorrent protocol" + +// #define BITTORRENT_CACHE_DEBUG 1 + +struct ndpi_utp_hdr { + u_int8_t h_version:4, h_type:4, next_extension; + u_int16_t connection_id; + u_int32_t ts_usec, tdiff_usec, window_size; + u_int16_t sequence_nr, ack_nr; +}; + +/* Forward declaration */ +static void ndpi_search_bittorrent(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow); +static void ndpi_search_bittorrent_hash(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, int bt_offset); + +/* *********************************************** */ + +static int search_bittorrent_again(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + ndpi_search_bittorrent(ndpi_struct, flow); + ndpi_search_bittorrent_hash(ndpi_struct, flow, -1); + + /* Possibly more processing */ + return flow->extra_packets_func != NULL; +} + +/* *********************************************** */ + +static u_int8_t is_utpv1_pkt(const u_int8_t *payload, u_int payload_len) { + struct ndpi_utp_hdr *h = (struct ndpi_utp_hdr*)payload; + + if(payload_len < sizeof(struct ndpi_utp_hdr)) return(0); + if(h->h_version != 1) return(0); + if(h->h_type > 4) return(0); + if(h->next_extension > 2) return(0); + if(ntohl(h->window_size) > 65565) return(0); + + if((h->window_size == 0) && (payload_len != sizeof(struct ndpi_utp_hdr))) + return(0); + + return(1); +} + +/* *********************************************** */ + +static void ndpi_search_bittorrent_hash(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, int bt_offset) { + const char *bt_hash = NULL; /* 20 bytes long */ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + if(bt_offset == -1) { + const char *bt_magic = ndpi_strnstr((const char *)packet->payload, + BITTORRENT_PROTO_STRING, packet->payload_packet_len); + + if(bt_magic) { + if(bt_magic == (const char*)&packet->payload[1]) + bt_hash = (const char*)&packet->payload[28]; + else + bt_hash = &bt_magic[19]; + } + } else + bt_hash = (const char*)&packet->payload[28]; + + if(bt_hash && (packet->payload_packet_len >= (20 + (bt_hash-(const char*)packet->payload)))) + memcpy(flow->protos.bittorrent.hash, bt_hash, 20); +} + +/* *********************************************** */ + +static void ndpi_add_connection_as_bittorrent(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, + int bt_offset, int check_hash, + ndpi_confidence_t confidence) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + if(check_hash) + ndpi_search_bittorrent_hash(ndpi_struct, flow, bt_offset); + + ndpi_set_detected_protocol_keeping_master(ndpi_struct, flow, NDPI_PROTOCOL_BITTORRENT, + confidence); + + if(flow->protos.bittorrent.hash[0] == '\0') { + /* Don't use just 1 as in TCP DNS more packets could be returned (e.g. ACK). */ + flow->max_extra_packets_to_check = 3; + flow->extra_packets_func = search_bittorrent_again; + } + + if(ndpi_struct->bittorrent_cache && packet->iph) { + u_int32_t key1, key2, i; + + key1 = ndpi_ip_port_hash_funct(flow->c_address.v4, flow->c_port), key2 = ndpi_ip_port_hash_funct(flow->s_address.v4, flow->s_port); + + ndpi_lru_add_to_cache(ndpi_struct->bittorrent_cache, key1, NDPI_PROTOCOL_BITTORRENT, ndpi_get_current_time(flow)); + ndpi_lru_add_to_cache(ndpi_struct->bittorrent_cache, key2, NDPI_PROTOCOL_BITTORRENT, ndpi_get_current_time(flow)); + + /* Now add hosts as twins */ + ndpi_lru_add_to_cache(ndpi_struct->bittorrent_cache, + flow->c_address.v4 + flow->s_address.v4, + NDPI_PROTOCOL_BITTORRENT, + ndpi_get_current_time(flow)); + + /* Also add +2 ports of the sender in order to catch additional sockets open by the same client */ + for(i=0; i<2; i++) { + key1 = ndpi_ip_port_hash_funct(flow->c_address.v4, htons(ntohs(flow->c_port)+1+i)); + + ndpi_lru_add_to_cache(ndpi_struct->bittorrent_cache, key1, NDPI_PROTOCOL_BITTORRENT, ndpi_get_current_time(flow)); + } + +#ifdef BITTORRENT_CACHE_DEBUG + printf("[BitTorrent] [%s] *** ADDED ports %u / %u [%u][%u]\n", flow->l4_proto == IPPROTO_TCP ? "TCP" : "UDP", ntohs(flow->c_port), ntohs(flow->s_port), key1, key2); +#endif + } +} + +/* ************************************* */ + +static u_int8_t ndpi_int_search_bittorrent_tcp_zero(struct ndpi_detection_module_struct + *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + u_int16_t a = 0; + + if(packet->payload_packet_len == 1 && packet->payload[0] == 0x13) { + return 0; + } + + if(flow->packet_counter == 2 && packet->payload_packet_len > 20) { + if(memcmp(&packet->payload[0], BITTORRENT_PROTO_STRING, 19) == 0) { + NDPI_LOG_INFO(ndpi_struct, "found BT: plain\n"); + ndpi_add_connection_as_bittorrent(ndpi_struct, flow, 19, 1, NDPI_CONFIDENCE_DPI); + return 1; + } + } + + if(packet->payload_packet_len > 20) { + /* test for match 0x13+BITTORRENT_PROTO_STRING */ + if(packet->payload[0] == 0x13) { + if(memcmp(&packet->payload[1], BITTORRENT_PROTO_STRING, 19) == 0) { + NDPI_LOG_INFO(ndpi_struct, "found BT: plain\n"); + ndpi_add_connection_as_bittorrent(ndpi_struct, flow, 20, 1, NDPI_CONFIDENCE_DPI); + return 1; + } + } + } + + if(packet->payload_packet_len > 23 && memcmp(packet->payload, "GET /webseed?info_hash=", 23) == 0) { + NDPI_LOG_INFO(ndpi_struct, "found BT: plain webseed\n"); + ndpi_add_connection_as_bittorrent(ndpi_struct, flow, -1, 1, NDPI_CONFIDENCE_DPI); + return 1; + } + /* seen Azureus as server for webseed, possibly other servers existing, to implement */ + /* is Server: hypertracker Bittorrent? */ + /* no asymmetric detection possible for answer of pattern "GET /data?fid=". */ + if(packet->payload_packet_len > 60 + && memcmp(packet->payload, "GET /data?fid=", 14) == 0 && memcmp(&packet->payload[54], "&size=", 6) == 0) { + NDPI_LOG_INFO(ndpi_struct, "found BT: plain Bitcomet persistent seed\n"); + ndpi_add_connection_as_bittorrent(ndpi_struct, flow, -1, 1, NDPI_CONFIDENCE_DPI); + return 1; + } + + + if(packet->payload_packet_len > 90 && (memcmp(packet->payload, "GET ", 4) == 0 + || memcmp(packet->payload, "POST ", 5) == 0)) { + const u_int8_t *ptr = &packet->payload[4]; + u_int16_t len = packet->payload_packet_len - 4; + + /* parse complete get packet here into line structure elements */ + ndpi_parse_packet_line_info(ndpi_struct, flow); + /* answer to this pattern is HTTP....Server: hypertracker */ + if(packet->user_agent_line.ptr != NULL + && ((packet->user_agent_line.len > 8 && memcmp(packet->user_agent_line.ptr, "Azureus ", 8) == 0) + || (packet->user_agent_line.len >= 10 && memcmp(packet->user_agent_line.ptr, "BitTorrent", 10) == 0) + || (packet->user_agent_line.len >= 11 && memcmp(packet->user_agent_line.ptr, "BTWebClient", 11) == 0))) { + NDPI_LOG_INFO(ndpi_struct, "found BT: Azureus /Bittorrent user agent\n"); + ndpi_add_connection_as_bittorrent(ndpi_struct, flow, -1, 1, NDPI_CONFIDENCE_DPI); + return 1; + } + + if(packet->user_agent_line.ptr != NULL + && (packet->user_agent_line.len >= 9 && memcmp(packet->user_agent_line.ptr, "Shareaza ", 9) == 0) + && (packet->parsed_lines > 8 && packet->line[8].ptr != 0 + && packet->line[8].len >= 9 && memcmp(packet->line[8].ptr, "X-Queue: ", 9) == 0)) { + NDPI_LOG_INFO(ndpi_struct, "found BT: Shareaza detected\n"); + ndpi_add_connection_as_bittorrent(ndpi_struct, flow, -1, 1, NDPI_CONFIDENCE_DPI); + return 1; + } + + /* this is a self built client, not possible to catch asymmetrically */ + if((packet->parsed_lines == 10 || (packet->parsed_lines == 11 && packet->line[10].len == 0)) + && packet->user_agent_line.ptr != NULL + && packet->user_agent_line.len > 12 + && memcmp(packet->user_agent_line.ptr, "Mozilla/4.0 ", + 12) == 0 + && packet->host_line.ptr != NULL + && packet->host_line.len >= 7 + && packet->line[2].ptr != NULL + && packet->line[2].len > 14 + && memcmp(packet->line[2].ptr, "Keep-Alive: 300", 15) == 0 + && packet->line[3].ptr != NULL + && packet->line[3].len > 21 + && memcmp(packet->line[3].ptr, "Connection: Keep-alive", 22) == 0 + && packet->line[4].ptr != NULL + && packet->line[4].len > 10 + && (memcmp(packet->line[4].ptr, "Accpet: */*", 11) == 0 + || memcmp(packet->line[4].ptr, "Accept: */*", 11) == 0) + + && packet->line[5].ptr != NULL + && packet->line[5].len > 12 + && memcmp(packet->line[5].ptr, "Range: bytes=", 13) == 0 + && packet->line[7].ptr != NULL + && packet->line[7].len > 15 + && memcmp(packet->line[7].ptr, "Pragma: no-cache", 16) == 0 + && packet->line[8].ptr != NULL + && packet->line[8].len > 22 && memcmp(packet->line[8].ptr, "Cache-Control: no-cache", 23) == 0) { + + NDPI_LOG_INFO(ndpi_struct, "found BT: Bitcomet LTS\n"); + ndpi_add_connection_as_bittorrent(ndpi_struct, flow, -1, 1, NDPI_CONFIDENCE_DPI); + return 1; + } + + /* FlashGet pattern */ + if(packet->parsed_lines == 8 + && packet->user_agent_line.ptr != NULL + && packet->user_agent_line.len > (sizeof("Mozilla/4.0 (compatible; MSIE 6.0;") - 1) + && memcmp(packet->user_agent_line.ptr, "Mozilla/4.0 (compatible; MSIE 6.0;", + sizeof("Mozilla/4.0 (compatible; MSIE 6.0;") - 1) == 0 + && packet->host_line.ptr != NULL + && packet->host_line.len >= 7 + && packet->line[2].ptr != NULL + && packet->line[2].len == 11 + && memcmp(packet->line[2].ptr, "Accept: */*", 11) == 0 + && packet->line[3].ptr != NULL && packet->line[3].len >= (sizeof("Referer: ") - 1) + && memcmp(packet->line[3].ptr, "Referer: ", sizeof("Referer: ") - 1) == 0 + && packet->line[5].ptr != NULL + && packet->line[5].len > 13 + && memcmp(packet->line[5].ptr, "Range: bytes=", 13) == 0 + && packet->line[6].ptr != NULL + && packet->line[6].len > 21 && memcmp(packet->line[6].ptr, "Connection: Keep-Alive", 22) == 0) { + + NDPI_LOG_INFO(ndpi_struct, "found BT: FlashGet\n"); + ndpi_add_connection_as_bittorrent(ndpi_struct, flow, -1, 1, NDPI_CONFIDENCE_DPI); + return 1; + } + + if(packet->parsed_lines == 7 + && packet->user_agent_line.ptr != NULL + && packet->user_agent_line.len > (sizeof("Mozilla/4.0 (compatible; MSIE 6.0;") - 1) + && memcmp(packet->user_agent_line.ptr, "Mozilla/4.0 (compatible; MSIE 6.0;", + sizeof("Mozilla/4.0 (compatible; MSIE 6.0;") - 1) == 0 + && packet->host_line.ptr != NULL + && packet->host_line.len >= 7 + && packet->line[2].ptr != NULL + && packet->line[2].len == 11 + && memcmp(packet->line[2].ptr, "Accept: */*", 11) == 0 + && packet->line[3].ptr != NULL && packet->line[3].len >= (sizeof("Referer: ") - 1) + && memcmp(packet->line[3].ptr, "Referer: ", sizeof("Referer: ") - 1) == 0 + && packet->line[5].ptr != NULL + && packet->line[5].len > 21 && memcmp(packet->line[5].ptr, "Connection: Keep-Alive", 22) == 0) { + + NDPI_LOG_INFO(ndpi_struct, "found BT: FlashGet\n"); + ndpi_add_connection_as_bittorrent(ndpi_struct, flow, -1, 1, NDPI_CONFIDENCE_DPI); + return 1; + } + + /* answer to this pattern is not possible to implement asymmetrically */ + while (1) { + if(len < 50 || ptr[0] == 0x0d) { + goto ndpi_end_bt_tracker_check; + } + if(memcmp(ptr, "info_hash=", 10) == 0) { + break; + } + len--; + ptr++; + } + + NDPI_LOG_DBG2(ndpi_struct, " BT stat: tracker info hash found\n"); + + /* len is > 50, so save operation here */ + len -= 10; + ptr += 10; + + /* parse bt hash */ + for (a = 0; a < 20; a++) { + if(len < 3) { + goto ndpi_end_bt_tracker_check; + } + if(*ptr == '%') { + u_int8_t x1 = 0xFF; + u_int8_t x2 = 0xFF; + + + if(ptr[1] >= '0' && ptr[1] <= '9') { + x1 = ptr[1] - '0'; + } + if(ptr[1] >= 'a' && ptr[1] <= 'f') { + x1 = 10 + ptr[1] - 'a'; + } + if(ptr[1] >= 'A' && ptr[1] <= 'F') { + x1 = 10 + ptr[1] - 'A'; + } + + if(ptr[2] >= '0' && ptr[2] <= '9') { + x2 = ptr[2] - '0'; + } + if(ptr[2] >= 'a' && ptr[2] <= 'f') { + x2 = 10 + ptr[2] - 'a'; + } + if(ptr[2] >= 'A' && ptr[2] <= 'F') { + x2 = 10 + ptr[2] - 'A'; + } + + if(x1 == 0xFF || x2 == 0xFF) { + goto ndpi_end_bt_tracker_check; + } + ptr += 3; + len -= 3; + } else if(*ptr >= 32 && *ptr < 127) { + ptr++; + len--; + } else { + goto ndpi_end_bt_tracker_check; + } + } + + NDPI_LOG_INFO(ndpi_struct, "found BT: tracker info hash parsed\n"); + ndpi_add_connection_as_bittorrent(ndpi_struct, flow, -1, 1, NDPI_CONFIDENCE_DPI); + return 1; + } + + ndpi_end_bt_tracker_check: + + if(packet->payload_packet_len == 80) { + /* Warez 80 Bytes Packet + * +----------------+---------------+-----------------+-----------------+ + * |20 BytesPattern | 32 Bytes Value| 12 BytesPattern | 16 Bytes Data | + * +----------------+---------------+-----------------+-----------------+ + * 20 BytesPattern : 4c 00 00 00 ff ff ff ff 57 00 00 00 00 00 00 00 20 00 00 00 + * 12 BytesPattern : 28 23 00 00 01 00 00 00 10 00 00 00 + * */ + static const char pattern_20_bytes[20] = { 0x4c, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xff, 0xff, 0x57, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00 + }; + static const char pattern_12_bytes[12] = { 0x28, 0x23, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x10, 0x00, + 0x00, 0x00 + }; + + /* did not see this pattern anywhere */ + if((memcmp(&packet->payload[0], pattern_20_bytes, 20) == 0) + && (memcmp(&packet->payload[52], pattern_12_bytes, 12) == 0)) { + NDPI_LOG_INFO(ndpi_struct, "found BT: Warez - Plain\n"); + ndpi_add_connection_as_bittorrent(ndpi_struct, flow, -1, 1, NDPI_CONFIDENCE_DPI); + return 1; + } + } + + else if(packet->payload_packet_len > 50) { + if(memcmp(packet->payload, "GET", 3) == 0) { + + ndpi_parse_packet_line_info(ndpi_struct, flow); + /* haven't fount this pattern anywhere */ + if(packet->host_line.ptr != NULL + && packet->host_line.len >= 9 && memcmp(packet->host_line.ptr, "ip2p.com:", 9) == 0) { + NDPI_LOG_INFO(ndpi_struct, "found BT: Warez - Plain Host: ip2p.com: pattern\n"); + ndpi_add_connection_as_bittorrent(ndpi_struct, flow, -1, 1, NDPI_CONFIDENCE_DPI); + return 1; + } + } + } + return 0; +} + +/* ************************************* */ + +/* Search for BitTorrent commands */ +static void ndpi_int_search_bittorrent_tcp(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + if(packet->payload_packet_len == 0) { + return; + } + + ndpi_int_search_bittorrent_tcp_zero(ndpi_struct, flow); +} + +/* ************************************* */ + +static u_int8_t is_port(u_int16_t a, u_int16_t b, u_int16_t what) { + return(((what == a) || (what == b)) ? 1 : 0); +} + +/* ************************************* */ + +static void ndpi_skip_bittorrent(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, + struct ndpi_packet_struct *packet) { + if(packet->iph && ndpi_search_into_bittorrent_cache(ndpi_struct, flow, flow->c_address.v4, flow->c_port, flow->s_address.v4, flow->s_port)) + ndpi_add_connection_as_bittorrent(ndpi_struct, flow, -1, 0, NDPI_CONFIDENCE_DPI_CACHE); + else + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + +/* ************************************* */ + +static void ndpi_search_bittorrent(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + char *bt_proto = NULL; + + NDPI_LOG_DBG(ndpi_struct, "Search bittorrent\n"); + + /* This is broadcast */ + if(packet->iph) { + if((packet->iph->saddr == 0xFFFFFFFF) || (packet->iph->daddr == 0xFFFFFFFF)) + goto exclude_bt; + + if(packet->udp) { + u_int16_t sport = ntohs(packet->udp->source), dport = ntohs(packet->udp->dest); + + if(is_port(sport, dport, 3544) /* teredo */ + || is_port(sport, dport, 5246) || is_port(sport, dport, 5247) /* CAPWAP */) { + exclude_bt: + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + } + } + + if(flow->detected_protocol_stack[0] != NDPI_PROTOCOL_BITTORRENT) { + if(packet->tcp != NULL) { + ndpi_int_search_bittorrent_tcp(ndpi_struct, flow); + } else if(packet->udp != NULL) { + /* UDP */ + const char *bt_search = "BT-SEARCH * HTTP/1.1\r\n"; + const char *bt_search1 = "d1:ad2:id20:"; + + if((ntohs(packet->udp->source) < 1024) + || (ntohs(packet->udp->dest) < 1024) /* High ports only */) { + ndpi_skip_bittorrent(ndpi_struct, flow, packet); + return; + } + + /* + Check for uTP http://www.bittorrent.org/beps/bep_0029.html + + wireshark/epan/dissectors/packet-bt-utp.c + */ + + if( + (packet->payload_packet_len > 22 && strncmp((const char*)packet->payload, bt_search, strlen(bt_search)) == 0) || + (packet->payload_packet_len > 12 && strncmp((const char*)packet->payload, bt_search1, strlen(bt_search1)) == 0) + ) { + ndpi_add_connection_as_bittorrent(ndpi_struct, flow, -1, 1, NDPI_CONFIDENCE_DPI); + return; + } else if(packet->payload_packet_len >= 20) { + /* Check if this is protocol v0 */ + u_int8_t v0_extension = packet->payload[17]; + u_int8_t v0_flags = packet->payload[18]; + + if(is_utpv1_pkt(packet->payload, packet->payload_packet_len)) { + bt_proto = ndpi_strnstr((const char *)&packet->payload[20], BITTORRENT_PROTO_STRING, packet->payload_packet_len-20); + goto bittorrent_found; + } else if((packet->payload[0]== 0x60) + && (packet->payload[1]== 0x0) + && (packet->payload[2]== 0x0) + && (packet->payload[3]== 0x0) + && (packet->payload[4]== 0x0)) { + /* Heuristic */ + bt_proto = ndpi_strnstr((const char *)&packet->payload[20], BITTORRENT_PROTO_STRING, packet->payload_packet_len-20); + goto bittorrent_found; + /* CSGO/DOTA conflict */ + } else if((v0_flags < 6 /* ST_NUM_STATES */) && (v0_extension < 3 /* EXT_NUM_EXT */)) { + u_int32_t ts = ntohl(*((u_int32_t*)&(packet->payload[4]))); + u_int32_t now; + + now = (u_int32_t)(packet->current_time_ms / 1000); + + if((ts < (now+86400)) && (ts > (now-86400))) { + bt_proto = ndpi_strnstr((const char *)&packet->payload[20], BITTORRENT_PROTO_STRING, packet->payload_packet_len-20); + goto bittorrent_found; + } + } else if(ndpi_strnstr((const char *)&packet->payload[20], BITTORRENT_PROTO_STRING, packet->payload_packet_len-20) + ) { + goto bittorrent_found; + } + + } + + flow->bittorrent_stage++; + + if(flow->bittorrent_stage < 5) { + /* We have detected bittorrent but we need to wait until we get a hash */ + + if(packet->payload_packet_len > 19 /* min size */) { + if(ndpi_strnstr((const char *)packet->payload, ":target20:", packet->payload_packet_len) + || ndpi_strnstr((const char *)packet->payload, ":find_node1:", packet->payload_packet_len) + || ndpi_strnstr((const char *)packet->payload, "d1:ad2:id20:", packet->payload_packet_len) + || ndpi_strnstr((const char *)packet->payload, ":info_hash20:", packet->payload_packet_len) + || ndpi_strnstr((const char *)packet->payload, ":filter64", packet->payload_packet_len) + || ndpi_strnstr((const char *)packet->payload, "d1:rd2:id20:", packet->payload_packet_len) + || (bt_proto = ndpi_strnstr((const char *)packet->payload, BITTORRENT_PROTO_STRING, packet->payload_packet_len)) + ) { + bittorrent_found: + if(bt_proto != NULL && ((u_int8_t *)&bt_proto[27] - packet->payload + + sizeof(flow->protos.bittorrent.hash)) < packet->payload_packet_len) { + memcpy(flow->protos.bittorrent.hash, &bt_proto[27], sizeof(flow->protos.bittorrent.hash)); + flow->extra_packets_func = NULL; /* Nothing else to do */ + } + + NDPI_LOG_INFO(ndpi_struct, "found BT: plain\n"); + ndpi_add_connection_as_bittorrent(ndpi_struct, flow, -1, 0, NDPI_CONFIDENCE_DPI); + return; + } + } + + return; + } + + ndpi_skip_bittorrent(ndpi_struct, flow, packet); + } + } + + if(flow->packet_counter > 8) { + ndpi_skip_bittorrent(ndpi_struct, flow, packet); + } +} + +/* ************************************* */ + +void init_bittorrent_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("BitTorrent", ndpi_struct, *id, + NDPI_PROTOCOL_BITTORRENT, + ndpi_search_bittorrent, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/bjnp.c b/src/components/implementation/simple_nf/ndpi/bjnp.c new file mode 100644 index 0000000000..66cd2fdd60 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/bjnp.c @@ -0,0 +1,57 @@ +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_BJNP + +#include "ndpi_api.h" + +static void ndpi_int_bjnp_add_connection(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, + u_int8_t due_to_correlation) { + ndpi_set_detected_protocol(ndpi_struct, flow, + NDPI_PROTOCOL_BJNP, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + + +static void ndpi_check_bjnp(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + u_int32_t payload_len = packet->payload_packet_len; + + if(packet->udp != NULL) { + if(payload_len > 4) { + if((memcmp((const char *)packet->payload, "BJNP", 4) == 0) + || (memcmp((const char *)packet->payload, "BNJB", 4) == 0) + || (memcmp((const char *)packet->payload, "BJNB", 4) == 0) + || (memcmp((const char *)packet->payload, "MFNP", 4) == 0) + ) { + NDPI_LOG_INFO(ndpi_struct, "found bjnp\n"); + ndpi_int_bjnp_add_connection(ndpi_struct, flow, 0); + return; + } + } + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + +static void ndpi_search_bjnp(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + NDPI_LOG_DBG(ndpi_struct, "search bjnp\n"); + + /* skip marked packets */ + if (flow->detected_protocol_stack[0] != NDPI_PROTOCOL_BJNP) { + ndpi_check_bjnp(ndpi_struct, flow); + } +} + + +void init_bjnp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("BJNP", ndpi_struct, *id, + NDPI_PROTOCOL_BJNP, + ndpi_search_bjnp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/bpf.h b/src/components/implementation/simple_nf/ndpi/bpf.h new file mode 100644 index 0000000000..9f4ca33e35 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/bpf.h @@ -0,0 +1,934 @@ +/*- + * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from the Stanford/CMU enet packet filter, + * (net/enet.c) distributed as part of 4.3BSD, and code contributed + * to Berkeley by Steven McCanne and Van Jacobson both of Lawrence + * Berkeley Laboratory. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)bpf.h 7.1 (Berkeley) 5/7/91 + * + * @(#) $Header: /tcpdump/master/libpcap/pcap/bpf.h,v 1.19.2.8 2008-09-22 20:16:01 guy Exp $ (LBL) + */ + +/* + * This is libpcap's cut-down version of bpf.h; it includes only + * the stuff needed for the code generator and the userland BPF + * interpreter, and the libpcap APIs for setting filters, etc.. + * + * "pcap-bpf.c" will include the native OS version, as it deals with + * the OS's BPF implementation. + * + * XXX - should this all just be moved to "pcap.h"? + */ + +#ifndef BPF_MAJOR_VERSION + +#ifdef __cplusplus +extern "C" { +#endif + +/* BSD style release date */ +#define BPF_RELEASE 199606 + +#ifdef MSDOS /* must be 32-bit */ +typedef long bpf_int32; +typedef unsigned long bpf_u_int32; +#else +typedef int bpf_int32; +typedef u_int bpf_u_int32; +#endif + +/* + * Alignment macros. BPF_WORDALIGN rounds up to the next + * even multiple of BPF_ALIGNMENT. + */ +#ifndef __NetBSD__ +#define BPF_ALIGNMENT sizeof(bpf_int32) +#else +#define BPF_ALIGNMENT sizeof(long) +#endif +#define BPF_WORDALIGN(x) (((x)+(BPF_ALIGNMENT-1))&~(BPF_ALIGNMENT-1)) + +#define BPF_MAXBUFSIZE 0x8000 +#define BPF_MINBUFSIZE 32 + +/* + * Structure for "pcap_compile()", "pcap_setfilter()", etc.. + */ +struct bpf_program { + u_int bf_len; + struct bpf_insn *bf_insns; +}; + +/* + * Struct return by BIOCVERSION. This represents the version number of + * the filter language described by the instruction encodings below. + * bpf understands a program iff kernel_major == filter_major && + * kernel_minor >= filter_minor, that is, if the value returned by the + * running kernel has the same major number and a minor number equal + * equal to or less than the filter being downloaded. Otherwise, the + * results are undefined, meaning an error may be returned or packets + * may be accepted haphazardly. + * It has nothing to do with the source code version. + */ +struct bpf_version { + u_short bv_major; + u_short bv_minor; +}; +/* Current version number of filter architecture. */ +#define BPF_MAJOR_VERSION 1 +#define BPF_MINOR_VERSION 1 + +/* + * Data-link level type codes. + * + * Do *NOT* add new values to this list without asking + * "tcpdump-workers@lists.tcpdump.org" for a value. Otherwise, you run + * the risk of using a value that's already being used for some other + * purpose, and of having tools that read libpcap-format captures not + * being able to handle captures with your new DLT_ value, with no hope + * that they will ever be changed to do so (as that would destroy their + * ability to read captures using that value for that other purpose). + */ + +/* + * These are the types that are the same on all platforms, and that + * have been defined by for ages. + */ +#define DLT_NULL 0 /* BSD loopback encapsulation */ +#define DLT_EN10MB 1 /* Ethernet (10Mb) */ +#define DLT_EN3MB 2 /* Experimental Ethernet (3Mb) */ +#define DLT_AX25 3 /* Amateur Radio AX.25 */ +#define DLT_PRONET 4 /* Proteon ProNET Token Ring */ +#define DLT_CHAOS 5 /* Chaos */ +#define DLT_IEEE802 6 /* 802.5 Token Ring */ +#define DLT_ARCNET 7 /* ARCNET, with BSD-style header */ +#define DLT_SLIP 8 /* Serial Line IP */ +#define DLT_PPP 9 /* Point-to-point Protocol */ +#define DLT_FDDI 10 /* FDDI */ + +/* + * These are types that are different on some platforms, and that + * have been defined by for ages. We use #ifdefs to + * detect the BSDs that define them differently from the traditional + * libpcap + * + * XXX - DLT_ATM_RFC1483 is 13 in BSD/OS, and DLT_RAW is 14 in BSD/OS, + * but I don't know what the right #define is for BSD/OS. + */ +#define DLT_ATM_RFC1483 11 /* LLC-encapsulated ATM */ + +#ifdef __OpenBSD__ +#define DLT_RAW 14 /* raw IP */ +#else +#define DLT_RAW 12 /* raw IP */ +#endif + +/* + * Given that the only OS that currently generates BSD/OS SLIP or PPP + * is, well, BSD/OS, arguably everybody should have chosen its values + * for DLT_SLIP_BSDOS and DLT_PPP_BSDOS, which are 15 and 16, but they + * didn't. So it goes. + */ +#if defined(__NetBSD__) || defined(__FreeBSD__) +#ifndef DLT_SLIP_BSDOS +#define DLT_SLIP_BSDOS 13 /* BSD/OS Serial Line IP */ +#define DLT_PPP_BSDOS 14 /* BSD/OS Point-to-point Protocol */ +#endif +#else +#define DLT_SLIP_BSDOS 15 /* BSD/OS Serial Line IP */ +#define DLT_PPP_BSDOS 16 /* BSD/OS Point-to-point Protocol */ +#endif + +/* + * 17 is used for DLT_OLD_PFLOG in OpenBSD; + * OBSOLETE: DLT_PFLOG is 117 in OpenBSD now as well. See below. + * 18 is used for DLT_PFSYNC in OpenBSD; don't use it for anything else. + */ + +#define DLT_ATM_CLIP 19 /* Linux Classical-IP over ATM */ + +/* + * Apparently Redback uses this for its SmartEdge 400/800. I hope + * nobody else decided to use it, too. + */ +#define DLT_REDBACK_SMARTEDGE 32 + +/* + * These values are defined by NetBSD; other platforms should refrain from + * using them for other purposes, so that NetBSD savefiles with link + * types of 50 or 51 can be read as this type on all platforms. + */ +#define DLT_PPP_SERIAL 50 /* PPP over serial with HDLC encapsulation */ +#define DLT_PPP_ETHER 51 /* PPP over Ethernet */ + +/* + * The Axent Raptor firewall - now the Symantec Enterprise Firewall - uses + * a link-layer type of 99 for the tcpdump it supplies. The link-layer + * header has 6 bytes of unknown data, something that appears to be an + * Ethernet type, and 36 bytes that appear to be 0 in at least one capture + * I've seen. + */ +#define DLT_SYMANTEC_FIREWALL 99 + +/* + * Values between 100 and 103 are used in capture file headers as + * link-layer types corresponding to DLT_ types that differ + * between platforms; don't use those values for new DLT_ new types. + */ + +/* + * This value was defined by libpcap 0.5; platforms that have defined + * it with a different value should define it here with that value - + * a link type of 104 in a save file will be mapped to DLT_C_HDLC, + * whatever value that happens to be, so programs will correctly + * handle files with that link type regardless of the value of + * DLT_C_HDLC. + * + * The name DLT_C_HDLC was used by BSD/OS; we use that name for source + * compatibility with programs written for BSD/OS. + * + * libpcap 0.5 defined it as DLT_CHDLC; we define DLT_CHDLC as well, + * for source compatibility with programs written for libpcap 0.5. + */ +#define DLT_C_HDLC 104 /* Cisco HDLC */ +#define DLT_CHDLC DLT_C_HDLC + +#define DLT_IEEE802_11 105 /* IEEE 802.11 wireless */ + +/* + * 106 is reserved for Linux Classical IP over ATM; it's like DLT_RAW, + * except when it isn't. (I.e., sometimes it's just raw IP, and + * sometimes it isn't.) We currently handle it as DLT_LINUX_SLL, + * so that we don't have to worry about the link-layer header.) + */ + +/* + * Frame Relay; BSD/OS has a DLT_FR with a value of 11, but that collides + * with other values. + * DLT_FR and DLT_FRELAY packets start with the Q.922 Frame Relay header + * (DLCI, etc.). + */ +#define DLT_FRELAY 107 + +/* + * OpenBSD DLT_LOOP, for loopback devices; it's like DLT_NULL, except + * that the AF_ type in the link-layer header is in network byte order. + * + * DLT_LOOP is 12 in OpenBSD, but that's DLT_RAW in other OSes, so + * we don't use 12 for it in OSes other than OpenBSD. + */ +#ifdef __OpenBSD__ +#define DLT_LOOP 12 +#else +#define DLT_LOOP 108 +#endif + +/* + * Encapsulated packets for IPsec; DLT_ENC is 13 in OpenBSD, but that's + * DLT_SLIP_BSDOS in NetBSD, so we don't use 13 for it in OSes other + * than OpenBSD. + */ +#ifdef __OpenBSD__ +#define DLT_ENC 13 +#else +#define DLT_ENC 109 +#endif + +/* + * Values between 110 and 112 are reserved for use in capture file headers + * as link-layer types corresponding to DLT_ types that might differ + * between platforms; don't use those values for new DLT_ types + * other than the corresponding DLT_ types. + */ + +/* + * This is for Linux cooked sockets. + */ +#define DLT_LINUX_SLL 113 + +/* + * Apple LocalTalk hardware. + */ +#define DLT_LTALK 114 + +/* + * Acorn Econet. + */ +#define DLT_ECONET 115 + +/* + * Reserved for use with OpenBSD ipfilter. + */ +#define DLT_IPFILTER 116 + +/* + * OpenBSD DLT_PFLOG; DLT_PFLOG is 17 in OpenBSD, but that's DLT_LANE8023 + * in SuSE 6.3, so we can't use 17 for it in capture-file headers. + * + * XXX: is there a conflict with DLT_PFSYNC 18 as well? + */ +#ifdef __OpenBSD__ +#define DLT_OLD_PFLOG 17 +#define DLT_PFSYNC 18 +#endif +#define DLT_PFLOG 117 + +/* + * Registered for Cisco-internal use. + */ +#define DLT_CISCO_IOS 118 + +/* + * For 802.11 cards using the Prism II chips, with a link-layer + * header including Prism monitor mode information plus an 802.11 + * header. + */ +#define DLT_PRISM_HEADER 119 + +/* + * Reserved for Aironet 802.11 cards, with an Aironet link-layer header + * (see Doug Ambrisko's FreeBSD patches). + */ +#define DLT_AIRONET_HEADER 120 + +/* + * Reserved for Siemens HiPath HDLC. + */ +#define DLT_HHDLC 121 + +/* + * This is for RFC 2625 IP-over-Fibre Channel. + * + * This is not for use with raw Fibre Channel, where the link-layer + * header starts with a Fibre Channel frame header; it's for IP-over-FC, + * where the link-layer header starts with an RFC 2625 Network_Header + * field. + */ +#define DLT_IP_OVER_FC 122 + +/* + * This is for Full Frontal ATM on Solaris with SunATM, with a + * pseudo-header followed by an AALn PDU. + * + * There may be other forms of Full Frontal ATM on other OSes, + * with different pseudo-headers. + * + * If ATM software returns a pseudo-header with VPI/VCI information + * (and, ideally, packet type information, e.g. signalling, ILMI, + * LANE, LLC-multiplexed traffic, etc.), it should not use + * DLT_ATM_RFC1483, but should get a new DLT_ value, so tcpdump + * and the like don't have to infer the presence or absence of a + * pseudo-header and the form of the pseudo-header. + */ +#define DLT_SUNATM 123 /* Solaris+SunATM */ + +/* + * Reserved as per request from Kent Dahlgren + * for private use. + */ +#define DLT_RIO 124 /* RapidIO */ +#define DLT_PCI_EXP 125 /* PCI Express */ +#define DLT_AURORA 126 /* Xilinx Aurora link layer */ + +/* + * Header for 802.11 plus a number of bits of link-layer information + * including radio information, used by some recent BSD drivers as + * well as the madwifi Atheros driver for Linux. + */ +#define DLT_IEEE802_11_RADIO 127 /* 802.11 plus radiotap radio header */ + +/* + * Reserved for the TZSP encapsulation, as per request from + * Chris Waters + * TZSP is a generic encapsulation for any other link type, + * which includes a means to include meta-information + * with the packet, e.g. signal strength and channel + * for 802.11 packets. + */ +#define DLT_TZSP 128 /* Tazmen Sniffer Protocol */ + +/* + * BSD's ARCNET headers have the source host, destination host, + * and type at the beginning of the packet; that's what's handed + * up to userland via BPF. + * + * Linux's ARCNET headers, however, have a 2-byte offset field + * between the host IDs and the type; that's what's handed up + * to userland via PF_PACKET sockets. + * + * We therefore have to have separate DLT_ values for them. + */ +#define DLT_ARCNET_LINUX 129 /* ARCNET */ + +/* + * Juniper-private data link types, as per request from + * Hannes Gredler . The DLT_s are used + * for passing on chassis-internal metainformation such as + * QOS profiles, etc.. + */ +#define DLT_JUNIPER_MLPPP 130 +#define DLT_JUNIPER_MLFR 131 +#define DLT_JUNIPER_ES 132 +#define DLT_JUNIPER_GGSN 133 +#define DLT_JUNIPER_MFR 134 +#define DLT_JUNIPER_ATM2 135 +#define DLT_JUNIPER_SERVICES 136 +#define DLT_JUNIPER_ATM1 137 + +/* + * Apple IP-over-IEEE 1394, as per a request from Dieter Siegmund + * . The header that's presented is an Ethernet-like + * header: + * + * #define FIREWIRE_EUI64_LEN 8 + * struct firewire_header { + * u_char firewire_dhost[FIREWIRE_EUI64_LEN]; + * u_char firewire_shost[FIREWIRE_EUI64_LEN]; + * u_short firewire_type; + * }; + * + * with "firewire_type" being an Ethernet type value, rather than, + * for example, raw GASP frames being handed up. + */ +#define DLT_APPLE_IP_OVER_IEEE1394 138 + +/* + * Various SS7 encapsulations, as per a request from Jeff Morriss + * and subsequent discussions. + */ +#define DLT_MTP2_WITH_PHDR 139 /* pseudo-header with various info, followed by MTP2 */ +#define DLT_MTP2 140 /* MTP2, without pseudo-header */ +#define DLT_MTP3 141 /* MTP3, without pseudo-header or MTP2 */ +#define DLT_SCCP 142 /* SCCP, without pseudo-header or MTP2 or MTP3 */ + +/* + * DOCSIS MAC frames. + */ +#define DLT_DOCSIS 143 + +/* + * Linux-IrDA packets. Protocol defined at http://www.irda.org. + * Those packets include IrLAP headers and above (IrLMP...), but + * don't include Phy framing (SOF/EOF/CRC & byte stuffing), because Phy + * framing can be handled by the hardware and depend on the bitrate. + * This is exactly the format you would get capturing on a Linux-IrDA + * interface (irdaX), but not on a raw serial port. + * Note the capture is done in "Linux-cooked" mode, so each packet include + * a fake packet header (struct sll_header). This is because IrDA packet + * decoding is dependant on the direction of the packet (incomming or + * outgoing). + * When/if other platform implement IrDA capture, we may revisit the + * issue and define a real DLT_IRDA... + * Jean II + */ +#define DLT_LINUX_IRDA 144 + +/* + * Reserved for IBM SP switch and IBM Next Federation switch. + */ +#define DLT_IBM_SP 145 +#define DLT_IBM_SN 146 + +/* + * Reserved for private use. If you have some link-layer header type + * that you want to use within your organization, with the capture files + * using that link-layer header type not ever be sent outside your + * organization, you can use these values. + * + * No libpcap release will use these for any purpose, nor will any + * tcpdump release use them, either. + * + * Do *NOT* use these in capture files that you expect anybody not using + * your private versions of capture-file-reading tools to read; in + * particular, do *NOT* use them in products, otherwise you may find that + * people won't be able to use tcpdump, or snort, or Ethereal, or... to + * read capture files from your firewall/intrusion detection/traffic + * monitoring/etc. appliance, or whatever product uses that DLT_ value, + * and you may also find that the developers of those applications will + * not accept patches to let them read those files. + * + * Also, do not use them if somebody might send you a capture using them + * for *their* private type and tools using them for *your* private type + * would have to read them. + * + * Instead, ask "tcpdump-workers@lists.tcpdump.org" for a new DLT_ value, + * as per the comment above, and use the type you're given. + */ +#define DLT_USER0 147 +#define DLT_USER1 148 +#define DLT_USER2 149 +#define DLT_USER3 150 +#define DLT_USER4 151 +#define DLT_USER5 152 +#define DLT_USER6 153 +#define DLT_USER7 154 +#define DLT_USER8 155 +#define DLT_USER9 156 +#define DLT_USER10 157 +#define DLT_USER11 158 +#define DLT_USER12 159 +#define DLT_USER13 160 +#define DLT_USER14 161 +#define DLT_USER15 162 + +/* + * For future use with 802.11 captures - defined by AbsoluteValue + * Systems to store a number of bits of link-layer information + * including radio information: + * + * http://www.shaftnet.org/~pizza/software/capturefrm.txt + * + * but it might be used by some non-AVS drivers now or in the + * future. + */ +#define DLT_IEEE802_11_RADIO_AVS 163 /* 802.11 plus AVS radio header */ + +/* + * Juniper-private data link type, as per request from + * Hannes Gredler . The DLT_s are used + * for passing on chassis-internal metainformation such as + * QOS profiles, etc.. + */ +#define DLT_JUNIPER_MONITOR 164 + +/* + * Reserved for BACnet MS/TP. + */ +#define DLT_BACNET_MS_TP 165 + +/* + * Another PPP variant as per request from Karsten Keil . + * + * This is used in some OSes to allow a kernel socket filter to distinguish + * between incoming and outgoing packets, on a socket intended to + * supply pppd with outgoing packets so it can do dial-on-demand and + * hangup-on-lack-of-demand; incoming packets are filtered out so they + * don't cause pppd to hold the connection up (you don't want random + * input packets such as port scans, packets from old lost connections, + * etc. to force the connection to stay up). + * + * The first byte of the PPP header (0xff03) is modified to accomodate + * the direction - 0x00 = IN, 0x01 = OUT. + */ +#define DLT_PPP_PPPD 166 + +/* + * Names for backwards compatibility with older versions of some PPP + * software; new software should use DLT_PPP_PPPD. + */ +#define DLT_PPP_WITH_DIRECTION DLT_PPP_PPPD +#define DLT_LINUX_PPP_WITHDIRECTION DLT_PPP_PPPD + +/* + * Juniper-private data link type, as per request from + * Hannes Gredler . The DLT_s are used + * for passing on chassis-internal metainformation such as + * QOS profiles, cookies, etc.. + */ +#define DLT_JUNIPER_PPPOE 167 +#define DLT_JUNIPER_PPPOE_ATM 168 + +#define DLT_GPRS_LLC 169 /* GPRS LLC */ +#define DLT_GPF_T 170 /* GPF-T (ITU-T G.7041/Y.1303) */ +#define DLT_GPF_F 171 /* GPF-F (ITU-T G.7041/Y.1303) */ + +/* + * Requested by Oolan Zimmer for use in Gcom's T1/E1 line + * monitoring equipment. + */ +#define DLT_GCOM_T1E1 172 +#define DLT_GCOM_SERIAL 173 + +/* + * Juniper-private data link type, as per request from + * Hannes Gredler . The DLT_ is used + * for internal communication to Physical Interface Cards (PIC) + */ +#define DLT_JUNIPER_PIC_PEER 174 + +/* + * Link types requested by Gregor Maier of Endace + * Measurement Systems. They add an ERF header (see + * http://www.endace.com/support/EndaceRecordFormat.pdf) in front of + * the link-layer header. + */ +#define DLT_ERF_ETH 175 /* Ethernet */ +#define DLT_ERF_POS 176 /* Packet-over-SONET */ + +/* + * Requested by Daniele Orlandi for raw LAPD + * for vISDN (http://www.orlandi.com/visdn/). Its link-layer header + * includes additional information before the LAPD header, so it's + * not necessarily a generic LAPD header. + */ +#define DLT_LINUX_LAPD 177 + +/* + * Juniper-private data link type, as per request from + * Hannes Gredler . + * The DLT_ are used for prepending meta-information + * like interface index, interface name + * before standard Ethernet, PPP, Frelay & C-HDLC Frames + */ +#define DLT_JUNIPER_ETHER 178 +#define DLT_JUNIPER_PPP 179 +#define DLT_JUNIPER_FRELAY 180 +#define DLT_JUNIPER_CHDLC 181 + +/* + * Multi Link Frame Relay (FRF.16) + */ +#define DLT_MFR 182 + +/* + * Juniper-private data link type, as per request from + * Hannes Gredler . + * The DLT_ is used for internal communication with a + * voice Adapter Card (PIC) + */ +#define DLT_JUNIPER_VP 183 + +/* + * Arinc 429 frames. + * DLT_ requested by Gianluca Varenni . + * Every frame contains a 32bit A429 label. + * More documentation on Arinc 429 can be found at + * http://www.condoreng.com/support/downloads/tutorials/ARINCTutorial.pdf + */ +#define DLT_A429 184 + +/* + * Arinc 653 Interpartition Communication messages. + * DLT_ requested by Gianluca Varenni . + * Please refer to the A653-1 standard for more information. + */ +#define DLT_A653_ICM 185 + +/* + * USB packets, beginning with a USB setup header; requested by + * Paolo Abeni . + */ +#define DLT_USB 186 + +/* + * Bluetooth HCI UART transport layer (part H:4); requested by + * Paolo Abeni. + */ +#define DLT_BLUETOOTH_HCI_H4 187 + +/* + * IEEE 802.16 MAC Common Part Sublayer; requested by Maria Cruz + * . + */ +#define DLT_IEEE802_16_MAC_CPS 188 + +/* + * USB packets, beginning with a Linux USB header; requested by + * Paolo Abeni . + */ +#define DLT_USB_LINUX 189 + +/* + * Controller Area Network (CAN) v. 2.0B packets. + * DLT_ requested by Gianluca Varenni . + * Used to dump CAN packets coming from a CAN Vector board. + * More documentation on the CAN v2.0B frames can be found at + * http://www.can-cia.org/downloads/?269 + */ +#define DLT_CAN20B 190 + +/* + * IEEE 802.15.4, with address fields padded, as is done by Linux + * drivers; requested by Juergen Schimmer. + */ +#define DLT_IEEE802_15_4_LINUX 191 + +/* + * Per Packet Information encapsulated packets. + * DLT_ requested by Gianluca Varenni . + */ +#define DLT_PPI 192 + +/* + * Header for 802.16 MAC Common Part Sublayer plus a radiotap radio header; + * requested by Charles Clancy. + */ +#define DLT_IEEE802_16_MAC_CPS_RADIO 193 + +/* + * Juniper-private data link type, as per request from + * Hannes Gredler . + * The DLT_ is used for internal communication with a + * integrated service module (ISM). + */ +#define DLT_JUNIPER_ISM 194 + +/* + * IEEE 802.15.4, exactly as it appears in the spec (no padding, no + * nothing); requested by Mikko Saarnivala . + */ +#define DLT_IEEE802_15_4 195 + +/* + * Various link-layer types, with a pseudo-header, for SITA + * (http://www.sita.aero/); requested by Fulko Hew (fulko.hew@gmail.com). + */ +#define DLT_SITA 196 + +/* + * Various link-layer types, with a pseudo-header, for Endace DAG cards; + * encapsulates Endace ERF records. Requested by Stephen Donnelly + * . + */ +#define DLT_ERF 197 + +/* + * Special header prepended to Ethernet packets when capturing from a + * u10 Networks board. Requested by Phil Mulholland + * . + */ +#define DLT_RAIF1 198 + +/* + * IPMB packet for IPMI, beginning with the I2C slave address, followed + * by the netFn and LUN, etc.. Requested by Chanthy Toeung + * . + */ +#define DLT_IPMB 199 + +/* + * Juniper-private data link type, as per request from + * Hannes Gredler . + * The DLT_ is used for capturing data on a secure tunnel interface. + */ +#define DLT_JUNIPER_ST 200 + +/* + * Bluetooth HCI UART transport layer (part H:4), with pseudo-header + * that includes direction information; requested by Paolo Abeni. + */ +#define DLT_BLUETOOTH_HCI_H4_WITH_PHDR 201 + +/* + * AX.25 packet with a 1-byte KISS header; see + * + * http://www.ax25.net/kiss.htm + * + * as per Richard Stearn . + */ +#define DLT_AX25_KISS 202 + +/* + * LAPD packets from an ISDN channel, starting with the address field, + * with no pseudo-header. + * Requested by Varuna De Silva . + */ +#define DLT_LAPD 203 + +/* + * Variants of various link-layer headers, with a one-byte direction + * pseudo-header prepended - zero means "received by this host", + * non-zero (any non-zero value) means "sent by this host" - as per + * Will Barker . + */ +#define DLT_PPP_WITH_DIR 204 /* PPP - don't confuse with DLT_PPP_WITH_DIRECTION */ +#define DLT_C_HDLC_WITH_DIR 205 /* Cisco HDLC */ +#define DLT_FRELAY_WITH_DIR 206 /* Frame Relay */ +#define DLT_LAPB_WITH_DIR 207 /* LAPB */ + +/* + * 208 is reserved for an as-yet-unspecified proprietary link-layer + * type, as requested by Will Barker. + */ + +/* + * IPMB with a Linux-specific pseudo-header; as requested by Alexey Neyman + * . + */ +#define DLT_IPMB_LINUX 209 + +/* + * FlexRay automotive bus - http://www.flexray.com/ - as requested + * by Hannes Kaelber . + */ +#define DLT_FLEXRAY 210 + +/* + * Media Oriented Systems Transport (MOST) bus for multimedia + * transport - http://www.mostcooperation.com/ - as requested + * by Hannes Kaelber . + */ +#define DLT_MOST 211 + +/* + * Local Interconnect Network (LIN) bus for vehicle networks - + * http://www.lin-subbus.org/ - as requested by Hannes Kaelber + * . + */ +#define DLT_LIN 212 + +/* + * X2E-private data link type used for serial line capture, + * as requested by Hannes Kaelber . + */ +#define DLT_X2E_SERIAL 213 + +/* + * X2E-private data link type used for the Xoraya data logger + * family, as requested by Hannes Kaelber . + */ +#define DLT_X2E_XORAYA 214 + +/* + * IEEE 802.15.4, exactly as it appears in the spec (no padding, no + * nothing), but with the PHY-level data for non-ASK PHYs (4 octets + * of 0 as preamble, one octet of SFD, one octet of frame length+ + * reserved bit, and then the MAC-layer data, starting with the + * frame control field). + * + * Requested by Max Filippov . + */ +#define DLT_IEEE802_15_4_NONASK_PHY 215 + + +/* + * DLT and savefile link type values are split into a class and + * a member of that class. A class value of 0 indicates a regular + * DLT_/LINKTYPE_ value. + */ +#define DLT_CLASS(x) ((x) & 0x03ff0000) + +/* + * NetBSD-specific generic "raw" link type. The class value indicates + * that this is the generic raw type, and the lower 16 bits are the + * address family we're dealing with. Those values are NetBSD-specific; + * do not assume that they correspond to AF_ values for your operating + * system. + */ +#define DLT_CLASS_NETBSD_RAWAF 0x02240000 +#define DLT_NETBSD_RAWAF(af) (DLT_CLASS_NETBSD_RAWAF | (af)) +#define DLT_NETBSD_RAWAF_AF(x) ((x) & 0x0000ffff) +#define DLT_IS_NETBSD_RAWAF(x) (DLT_CLASS(x) == DLT_CLASS_NETBSD_RAWAF) + + +/* + * The instruction encodings. + */ +/* instruction classes */ +#define BPF_CLASS(code) ((code) & 0x07) +#define BPF_LD 0x00 +#define BPF_LDX 0x01 +#define BPF_ST 0x02 +#define BPF_STX 0x03 +#define BPF_ALU 0x04 +#define BPF_JMP 0x05 +#define BPF_RET 0x06 +#define BPF_MISC 0x07 + +/* ld/ldx fields */ +#define BPF_SIZE(code) ((code) & 0x18) +#define BPF_W 0x00 +#define BPF_H 0x08 +#define BPF_B 0x10 +#define BPF_MODE(code) ((code) & 0xe0) +#define BPF_IMM 0x00 +#define BPF_ABS 0x20 +#define BPF_IND 0x40 +#define BPF_MEM 0x60 +#define BPF_LEN 0x80 +#define BPF_MSH 0xa0 + +/* alu/jmp fields */ +#define BPF_OP(code) ((code) & 0xf0) +#define BPF_ADD 0x00 +#define BPF_SUB 0x10 +#define BPF_MUL 0x20 +#define BPF_DIV 0x30 +#define BPF_OR 0x40 +#define BPF_AND 0x50 +#define BPF_LSH 0x60 +#define BPF_RSH 0x70 +#define BPF_NEG 0x80 +#define BPF_JA 0x00 +#define BPF_JEQ 0x10 +#define BPF_JGT 0x20 +#define BPF_JGE 0x30 +#define BPF_JSET 0x40 +#define BPF_SRC(code) ((code) & 0x08) +#define BPF_K 0x00 +#define BPF_X 0x08 + +/* ret - BPF_K and BPF_X also apply */ +#define BPF_RVAL(code) ((code) & 0x18) +#define BPF_A 0x10 + +/* misc */ +#define BPF_MISCOP(code) ((code) & 0xf8) +#define BPF_TAX 0x00 +#define BPF_TXA 0x80 + +/* + * The instruction data structure. + */ +struct bpf_insn { + u_short code; + u_char jt; + u_char jf; + bpf_u_int32 k; +}; + +/* + * Macros for insn array initializers. + */ +#define BPF_STMT(code, k) { (u_short)(code), 0, 0, k } +#define BPF_JUMP(code, k, jt, jf) { (u_short)(code), jt, jf, k } + +#if __STDC__ || defined(__cplusplus) +extern int bpf_validate(const struct bpf_insn *, int); +extern u_int bpf_filter(const struct bpf_insn *, const u_char *, u_int, u_int); +#else +extern int bpf_validate(); +extern u_int bpf_filter(); +#endif + +/* + * Number of scratch memory words (for BPF_LD|BPF_MEM and BPF_ST). + */ +#define BPF_MEMWORDS 16 + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/components/implementation/simple_nf/ndpi/btlib.c b/src/components/implementation/simple_nf/ndpi/btlib.c new file mode 100644 index 0000000000..7223167e83 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/btlib.c @@ -0,0 +1,472 @@ +/* + * btlib.c + * + * Copyright (C) 2011-22 - ntop.org + * Contributed by Vitaly Lavrov + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_api.h" +#if 0 +#ifndef NDPI_NO_STD_INC +#include +#include +#include +#include +#include +#include + +/* +typedef unsigned char u_int8_t; +typedef unsigned short int u_int16_t; +typedef unsigned long long int u_int64_t; +*/ + +#include +#include +#ifndef WIN32 +#include +#endif +#endif +#endif + +#include "btlib.h" + +int bt_parse_debug = 0; + +#if 0 +void dump_bt_proto_struct(struct bt_parse_protocol *p) { + char b20h[128]; + int i; + + if(p->y_e && p->e_msg) { + printf("Error %s/%u\n", p->e_msg, p->e_len); + } + if(p->y_q) { + printf("Query "); + if(p->q_ping) printf("ping\n"); + if(p->q_g_peers) printf("get_peers\n"); + if(p->q_f_node) printf("find_node\n"); + if(p->q_a_peer) printf("announce_peer\n"); + } + if(p->y_r) + printf("Reply\n"); + + if(p->t) printf("\tt\t%llx\n",p->t); + if(p->v) printf("\tv\t%llx\n",p->v); + if(p->ip) printf("\tIP\t%s\n",print_ip_p(b20h,p->ip,0)); + + if(p->a.port) printf("\tport\t%d\n",htons(p->a.port)); + if(p->a.id) printf("\tID\t%s\n",print20b(b20h,p->a.id)); + if(p->a.target) printf("\ttarget\t%s\n",print20b(b20h,p->a.target)); + if(p->a.token) printf("\ttoken\t%s\n",printXb(b20h,p->a.token,p->a.t_len)); + if(p->a.info_hash) printf("\ti_hash\t%s\n",print20b(b20h,p->a.info_hash)); + if(p->a.name && p->a.name_len) printf("\tname\t%.*s\n",p->a.name_len,p->a.name); + + if(p->r.ip) printf("\tip\t%s\n",print_ip_p(b20h,p->r.ip,1)); + if(p->r.port) printf("\tport\t%d\n",htons(p->r.port)); + if(p->r.id) printf("\tID\t%s\n",print20b(b20h,p->r.id)); + if(p->r.token) printf("\ttoken\t%s\n",printXb(b20h,p->r.token,p->r.t_len)); + if(p->r.name && p->r.name_len) printf("\tname\t%.*s\n",p->r.name_len,p->r.name); + if(p->r.values && p->r.nv) { + struct bt_ipv4p2 *n = (struct bt_ipv4p2 *)p->r.values; + for(i=0;i < p->r.nv; i++,n++) { + printf("\tvalues\t%s\n", print_ip_p(b20h,&n->d,0)); + } + } + if(p->r.values6 && p->r.nv6) { + struct bt_ipv6p2 *n = (struct bt_ipv6p2 *)p->r.values6; + for(i=0;i < p->r.nv6; i++,n++) { + printf("\tvalues6\t%s\n", print_ip6_p(b20h,&n->d,0)); + } + } + if(p->r.nodes && p->r.nn) { + for(i=0;i < p->r.nn; i++) { + printf("\tnodes\t%s\n",print_id_ip_p(b20h,p->r.nodes+i)); + } + } + if(p->r.nodes6 && p->r.nn6) { + for(i=0;i < p->r.nn6; i++) { + printf("\tnodes6\t%s\n",print_id_ip6_p(b20h,p->r.nodes6+i)); + } + } + + if(p->peers && p->n_peers) { + for(i=0;i < p->n_peers; i++) { + printf("\tpeers\t%s\n",print_ip_p(b20h,p->peers+i,0)); + } + } + + if(p->interval) printf("\tinterval\t%d\n",p->interval); + if(p->min_interval) printf("\tmin interval\t%d\n",p->min_interval); +} +#endif + +#ifdef BTLIB_DEBUG +static void _print_safe_str(char *msg,char *k,const u_int8_t *s,size_t l) { + static const char *th="0123456789abcdef?"; + char *buf = (char*)ndpi_malloc((size_t)(l*3+2)); + + int sl = l; + if(buf) { + char *b = buf; + for(;l > 0; s++,l--) { + if(*s < ' ' || *s >= 127) { + *b++ = '%'; + *b++ = th[(*s >> 4)&0xf]; + *b++ = th[(*s)&0xf]; + } else *b++ = *s; + } + *b = 0; + + printf("%s %s %s len %d\n",msg,k,buf ? buf:"",sl); + + ndpi_free(buf); + } +} + +static void print_safe_str(char *msg,bt_parse_data_cb_t *cbd) { + _print_safe_str(msg,cbd->buf,cbd->v.s.s,cbd->v.s.l); +} +#define DEBUG_TRACE(cmd) { if(bt_parse_debug) cmd; } + +#else +#define DEBUG_TRACE(cmd) ; +#endif + + +#define STREQ(a,b) !strcmp(a,b) + + +void cb_data(bt_parse_data_cb_t *cbd,int *ret) { + struct bt_parse_protocol *p = &(cbd->p); + const u_int8_t *s; + const char *ss; + + if(cbd->t == 0) return; + + if(cbd->t == 1) { + DEBUG_TRACE(printf("%s %lld\n",cbd->buf, (long long)cbd->v.i)); + + if(STREQ(cbd->buf,"a.port")) { + p->a.port = (u_int16_t)(cbd->v.i & 0xffff); + return; + } + if( + STREQ(cbd->buf,"a.implied_port") || + STREQ(cbd->buf,"a.noseed") || + STREQ(cbd->buf,"a.scrape") || + STREQ(cbd->buf,"a.seed") || + STREQ(cbd->buf,"a.vote") + ) { + return; + } + if(STREQ(cbd->buf,"r.port") || STREQ(cbd->buf,"r.p")) { + p->r.port = (u_int16_t)(cbd->v.i & 0xffff); + return; + } + if(STREQ(cbd->buf,"interval")) { + p->interval = (u_int16_t)(cbd->v.i & 0x7fffffff); + p->h_int = 1; + return; + } + if(STREQ(cbd->buf,"min interval")) { + p->min_interval = (u_int16_t)(cbd->v.i & 0x7fffffff); + p->h_mint = 1; + return; + } + DEBUG_TRACE(printf("UNKNOWN %s %lld\n",cbd->buf, (long long)cbd->v.i)); + return; + } + if(cbd->t != 2) { + DEBUG_TRACE(printf("BUG! t=%d %s\n",cbd->t,cbd->buf)); + return; + } + DEBUG_TRACE(print_safe_str("",cbd)); + + s = cbd->v.s.s; + ss = (char *)s; + + if(STREQ(cbd->buf,"a.id")) { + p->a.id = s; + return; + } + if(STREQ(cbd->buf,"a.info_hash")) { + p->a.info_hash = s; + return; + } + if(STREQ(cbd->buf,"a.target")) { + p->a.target = s; + return; + } + if(STREQ(cbd->buf,"a.token")) { + p->a.token = s; + p->a.t_len = cbd->v.s.l; + return; + } + if(STREQ(cbd->buf,"a.name")) { + p->a.name = s; + p->a.name_len = cbd->v.s.l; + return; + } + if(STREQ(cbd->buf,"a.want")) { + return; + } + + if(STREQ(cbd->buf,"r.id")) { + p->r.id = s; + return; + } + if(STREQ(cbd->buf,"r.ip")) { + if(cbd->v.s.l != 4) { + DEBUG_TRACE(printf("BUG! r.ip with port\n")); + return; + } + p->r.ip = (struct bt_ipv4p *)s; + return; + } + if(STREQ(cbd->buf,"r.token")) { + p->r.token = s; + p->r.t_len = cbd->v.s.l; + return; + } + if(STREQ(cbd->buf,"r.values")) { + if(cbd->v.s.l == 18) { + if(!p->r.values6) { + p->r.values6 = s; + p->r.nv6 = 1; + } else { + if(s != p->r.values6+(p->r.nv6*21)) { + // DEBUG_TRACE(printf("BUG! r.values6 not in list! %08x %08x \n", p->r.values+(p->r.nv6*21),s)); + return; + } + p->r.nv6++; + } + return; + } + if(cbd->v.s.l == 6) { + if(!p->r.values) { + p->r.values = s; + p->r.nv = 1; + } else { + if(s != p->r.values+(p->r.nv*8)) { + // DEBUG_TRACE(printf("BUG! r.values not in list! %u \n",s-p->r.values+(p->r.nv*8))); + return; + } + p->r.nv++; + } + return; + } + return; + } + + if(STREQ(cbd->buf,"r.name") || STREQ(cbd->buf,"r.n")) { + p->r.name = s; + p->r.name_len = cbd->v.s.l; + return; + } + if(STREQ(cbd->buf,"r.nodes")) { + if(cbd->v.s.l % 26) { + // DEBUG_TRACE(printf("BUG! r.nodes length %d not %% 26\n",cbd->v.s.l)); + return; + } + p->r.nodes = (struct bt_nodes_data *)s; + p->r.nn = cbd->v.s.l / 26; + return; + } + if(STREQ(cbd->buf,"r.nodes6")) { + if(cbd->v.s.l % 38) { + // DEBUG_TRACE(printf("BUG! r.nodes length %d not %% 38\n",cbd->v.s.l)); + return; + } + p->r.nodes6 = (struct bt_nodes6_data *)s; + p->r.nn6 = cbd->v.s.l / 38; + return; + } + + if(cbd->buf[0] == 'y' && !cbd->buf[1]) { + if(cbd->v.s.l != 1) return; + if(*ss == 'q') { p->y_q = 1; return; } + if(*ss == 'r') { p->y_r = 1; return; } + if(*ss == 'e') { p->y_e = 1; return; } + return; + } + if(cbd->buf[0] == 'q' && !cbd->buf[1]) { + if(!strncmp(ss,"announce_peer",13)) { + p->q_a_peer = 1; + return; + } + if(!strncmp(ss,"find_node",9)) { + p->q_f_node = 1; + return; + } + if(!strncmp(ss,"get_peers",9)) { + p->q_g_peers = 1; + return; + } + if(!strncmp(ss,"ping",4)) { + p->q_ping = 1; + return; + } + if(!strncmp(ss,"vote",4)) { + return; + } + } + if(STREQ(cbd->buf,"ip")) { + if(cbd->v.s.l != 6) { + // DEBUG_TRACE(printf("BUG! r.ip w/o port\n")); + } + p->ip = (struct bt_ipv4p *)s; + p->h_ip = 1; + return; + } + if(STREQ(cbd->buf,"peers")) { + if(cbd->v.s.l % 6) return; + p->peers = (struct bt_ipv4p *)s; + p->n_peers = cbd->v.s.l / 6; + return; + } + if((*cbd->buf == 't' || *cbd->buf == 'v') && !cbd->buf[1]) { + u_int64_t d = *(u_int64_t*)s; + switch(cbd->v.s.l) { + case 2: + d &= 0xffffllu; d = htons(d); break; + case 4: + d &= 0xffffffffllu; d = htonl(d); break; + case 6: + d &= 0xffffffffffffllu; d = (htonl(d & 0xffffffff) << 16) | + (htons(d >> 32) & 0xffff); + break; + case 8: d = ((u_int64_t)htonl(d & 0xffffffff) << 32) | + htonl(d >> 32); + break; + default: d = 0; + } + if(*cbd->buf == 'v') cbd->p.v = d; + else cbd->p.t = d; + return; + } + + if(cbd->buf[0] == 'e') { + p->e_msg = s; + p->e_len = cbd->v.s.l; + return; + } + // DEBUG_TRACE(print_safe_str("UNKNOWN",cbd)); +} + + +const u_int8_t *bt_decode(const u_int8_t *b, size_t *l, int *ret, bt_parse_data_cb_t *cbd) { + + unsigned int n=0,neg=0; + int64_t d = 0; + u_int8_t c; + + if(!l || *l == 0) return NULL; + if(cbd->level > BDEC_MAXDEPT) goto bad_data; + c = *b++; (*l)--; + if(c == 'i') { // integer + while(*l) { + c = *b++; (*l)--; + n++; + if(c == '-') { + if(n != 1) goto bad_data; + n--; + neg=1; + continue; + } + if(c >= '0' && c <= '9') { + if(c == '0' && n > 1 && !d && *b != 'e') goto bad_data; + d *= 10; + d += c-'0'; + continue; + } + if(c != 'e') goto bad_data; + break; + } + if(neg) d=-d; + cbd->t = 1; + cbd->v.i = neg ? -d:d; + return b; + } + if(c >= '1' && c <= '9') { //string + d=c-'0'; + while(*l) { + c = *b++; (*l)--; + n++; + if(c >= '0' && c <= '9') { + if(c == '0' && n > 1 && d == 0) goto bad_data; + d *= 10; + d += c-'0'; + continue; + } + if(c != ':') goto bad_data; + break; + } + if((size_t)d > *l) goto bad_data; + cbd->t = 2; + cbd->v.s.s = b; + cbd->v.s.l = d; + b += d; + *l -= d; + return b; + } + if(c == 'l') { + cbd->level++; + do { + b = bt_decode(b,l,ret,cbd); + if(*ret < 0 || *l == 0) goto bad_data; + cb_data(cbd,ret); + if(*ret < 0) goto bad_data; + cbd->t = 0; + } while (*b != 'e' && *l != 0); + b++; (*l)--; + cbd->level--; + return b; + } + if(c == 'd') { + cbd->level++; + do { + char *ls = cbd->buf + strlen(cbd->buf); + int l1 = ls != cbd->buf ? 1:0; + if(!(*b >= '1' && *b <= '9')) goto bad_data; + b = bt_decode(b,l,ret,cbd); + if(*ret < 0 || *l == 0) goto bad_data; + if(ls+cbd->v.s.l+l1 < &cbd->buf[sizeof(cbd->buf)-1]) { + if(l1) ls[0]='.'; + strncpy(ls+l1,(char *)cbd->v.s.s,cbd->v.s.l); + ls[cbd->v.s.l+l1]=0; + } + b = bt_decode(b,l,ret,cbd); + if(*ret < 0 || *l == 0) goto bad_data; + cb_data(cbd,ret); + if(*ret < 0) goto bad_data; + cbd->t = 0; + *ls = 0; + } while (*b != 'e' && l != 0); + + b++; (*l)--; + cbd->level--; + return b; + } + + bad_data: + *ret=-1; + return b; +} diff --git a/src/components/implementation/simple_nf/ndpi/btlib.h b/src/components/implementation/simple_nf/ndpi/btlib.h new file mode 100644 index 0000000000..cc8b52b65c --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/btlib.h @@ -0,0 +1,181 @@ +/* + * btlib.h + * + * Copyright (C) 2011-15 - ntop.org + * Contributed by Vitaly Lavrov + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#define BDEC_MAXDEPT 8 + +#ifdef WIN32 +#include "ndpi_win32.h" +#endif + +typedef struct b_elem_s { + const u_int8_t *s; + size_t l; +} b_elem_s_t; + +#ifdef WIN32 +// enable 1 byte packing on Windows +#include +#endif + +struct +#ifndef WIN32 + __attribute__((__packed__)) +#endif + bt_nodes_data { + u_int8_t id[20]; + u_int32_t ip; + u_int16_t port; +}; + +struct +#ifndef WIN32 + __attribute__((__packed__)) +#endif + bt_ipv4p { + u_int32_t ip; + u_int16_t port; +}; + +struct +#ifndef WIN32 + __attribute__((__packed__)) +#endif + bt_ipv4p2 { + struct bt_ipv4p d; + u_int8_t pad[2]; +}; + +struct +#ifndef WIN32 + __attribute__((__packed__)) +#endif + bt_nodes6_data { + u_int8_t id[20]; + u_int32_t ip[4]; + u_int16_t port; +}; + +struct +#ifndef WIN32 + __attribute__((__packed__)) +#endif + bt_ipv6p { + u_int32_t ip[4]; + u_int16_t port; +}; + +struct +#ifndef WIN32 + __attribute__((__packed__)) +#endif + bt_ipv6p2 { + struct bt_ipv6p d; + u_int8_t pad[3]; +}; + +#ifdef WIN32 +// disable 1 byte packing +#include +#endif + +/* + + a.id S r.id S + a.info_hash S r.ip ipv4 + a.name S r.nodes x(id,ipv4,port) + -a.noseed 0|1 r.n S name of file + a.port N r.p port + -a.scrape 0|1 r.token S + -a.seed 0|1 r.values x(ipv4,port) + a.target S + a.token S -a.vote N + -a.want n4|n6 + + q announce_peer q find_node + q get_peers q ping + -q vote + + ip ipv4+port interval N + min interval N peers x(ipv4,port) + t 2/4/8b v 4/6b + + e S y e y r y q + + */ + +struct bt_parse_protocol { + u_int16_t y_e:1, y_r:1, y_q:1, + q_a_peer:1,q_f_node:1, + q_g_peers:1,q_ping:1, + h_int:1,h_mint:1,h_ip:1; + struct { + const u_int8_t *id, // 20 + *info_hash, // 20 + *target, // 20 + *token, // 20|8 + *name; // varlen + u_int16_t name_len; + u_int16_t port; + u_int16_t t_len; + } a; + struct { + const u_int8_t *id, // 20 + *token, // 20|8 + *values, // (6+2)*x + *values6, // (18_3)*x + *name; // varlen + struct bt_ipv4p *ip; + struct bt_nodes_data *nodes; + struct bt_nodes6_data *nodes6; + u_int16_t name_len; + u_int16_t nn; // nodes num + u_int16_t nv; // values num + u_int16_t nn6; // nodes6 num + u_int16_t nv6; // values6 num + u_int16_t port; + u_int16_t t_len; + } r; + int interval,min_interval; + struct bt_ipv4p *peers; + int n_peers; + struct bt_ipv4p *ip; + const u_int8_t *e_msg; + u_int16_t e_len; + u_int64_t t,v; +}; + +typedef struct bt_parse_data_cb { + struct bt_parse_protocol p; + char buf[64]; + int level; + int t; + union { + int64_t i; + b_elem_s_t s; + } v; +} bt_parse_data_cb_t; + +extern int bt_parse_debug; +void dump_bt_proto_struct(struct bt_parse_protocol *p); +const u_int8_t *bt_decode(const u_int8_t *b, size_t *l, int *ret, bt_parse_data_cb_t *cbd); diff --git a/src/components/implementation/simple_nf/ndpi/capwap.c b/src/components/implementation/simple_nf/ndpi/capwap.c new file mode 100644 index 0000000000..11a3949213 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/capwap.c @@ -0,0 +1,144 @@ +/* + * capwap.c + * + * Copyright (C) 2019 - ntop.org + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_CAPWAP + +#include "ndpi_api.h" + +#define NDPI_CAPWAP_CONTROL_PORT 5246 +#define NDPI_CAPWAP_DATA_PORT 5247 + + +static void ndpi_int_capwap_add_connection(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_CAPWAP, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + +static int is_capwap_multicast(const struct ndpi_packet_struct *packet) +{ + /* RFC 5115 Sec 3.3 + "The WTP MUST send the Discovery Request + message to either the limited broadcast IP address (255.255.255.255), + the well-known CAPWAP multicast address (224.0.1.140), or to the + unicast IP address of the AC. For IPv6 networks, since broadcast + does not exist, the use of "All ACs multicast address" (FF0X:0:0:0:0: + 0:0:18C) is used instead. + */ + if(packet->iph) { + if((packet->iph->daddr == 0xFFFFFFFF) || + (ntohl(packet->iph->daddr) == 0XE000018C)) + return 1; + } else if(packet->iphv6) { + if(((ntohl(packet->iphv6->ip6_dst.u6_addr.u6_addr32[0] & 0xFFF0FFFF) == 0xFF000000)) && + (packet->iphv6->ip6_dst.u6_addr.u6_addr32[1] == 0) && + (packet->iphv6->ip6_dst.u6_addr.u6_addr32[2] == 0) && + (ntohl(packet->iphv6->ip6_dst.u6_addr.u6_addr32[3] == 0x0000018C))) + return 1; + } + return 0; +} + +/* ************************************************** */ + +static void ndpi_search_setup_capwap(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + u_int16_t sport, dport; + + sport = ntohs(packet->udp->source), dport = ntohs(packet->udp->dest); + + if((dport == NDPI_CAPWAP_CONTROL_PORT) + && (is_capwap_multicast(packet)) + && (packet->payload_packet_len >= 16) + && (packet->payload[0] == 0x0) + && (packet->payload[8] == 6 /* Mac len */) + ) + goto capwap_found; + + if(((sport == NDPI_CAPWAP_CONTROL_PORT) || (dport == NDPI_CAPWAP_CONTROL_PORT)) + && ((packet->payload[0] == 0x0) || (packet->payload[0] == 0x1)) + ) { + u_int16_t msg_len, offset, to_add; + + if(packet->payload[0] == 0x0) + offset = 13, to_add = 13; + else + offset = 15, to_add = 17; + + if (packet->payload_packet_len >= offset + sizeof(u_int16_t)) { + msg_len = ntohs(*(u_int16_t*)&packet->payload[offset]); + + if((msg_len+to_add) == packet->payload_packet_len) + goto capwap_found; + } + } + + if( + (((dport == NDPI_CAPWAP_DATA_PORT) && (!is_capwap_multicast(packet))) || (sport == NDPI_CAPWAP_DATA_PORT)) + && (packet->payload_packet_len >= 16) + && (packet->payload[0] == 0x0) + ) { + u_int8_t is_80211_data = (packet->payload[9] & 0x0C) >> 2; + + + if((sport == NDPI_CAPWAP_DATA_PORT) && (is_80211_data == 2 /* IEEE 802.11 Data */)) + goto capwap_found; + else if(dport == NDPI_CAPWAP_DATA_PORT) { + u_int16_t msg_len = ntohs(*(u_int16_t*)&packet->payload[13]); + + if((packet->payload[8] == 1 /* Mac len */) + || (packet->payload[8] == 6 /* Mac len */) + || (packet->payload[8] == 4 /* Wireless len */) + || ((msg_len+15) == packet->payload_packet_len)) + goto capwap_found; + } + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + + capwap_found: + ndpi_int_capwap_add_connection(ndpi_struct, flow); +} + +static void ndpi_search_capwap(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + if(packet->udp && (flow->detected_protocol_stack[0] == NDPI_PROTOCOL_UNKNOWN)) + ndpi_search_setup_capwap(ndpi_struct, flow); +} + + +void init_capwap_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("CAPWAP", ndpi_struct, *id, + NDPI_PROTOCOL_CAPWAP, + ndpi_search_capwap, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/cassandra.c b/src/components/implementation/simple_nf/ndpi/cassandra.c new file mode 100644 index 0000000000..25180ac311 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/cassandra.c @@ -0,0 +1,152 @@ +/* + * cassandra.c + * + * Copyright (C) 2021 by Lucas Santos + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + */ + +#include +#include "ndpi_protocol_ids.h" +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_CASSANDRA +#include "ndpi_api.h" + +#define CASSANDRA_HEADER_LEN 9 +#define CASSANDRA_MAX_BODY_SIZE 268435456 //256MB (256 * 1024^2) + +enum cassandra_version +{ + CASSANDRA_V1_REQUEST = 0x01, + CASSANDRA_V1_RESPONSE = 0x81, + CASSANDRA_V2_REQUEST = 0x02, + CASSANDRA_V2_RESPONSE = 0x82, + CASSANDRA_V3_REQUEST = 0x03, + CASSANDRA_V3_RESPONSE = 0x83, + CASSANDRA_V4_REQUEST = 0x04, + CASSANDRA_V4_RESPONSE = 0x84 +}; + +enum cassandra_opcode +{ + CASSANDRA_ERROR = 0x00, + CASSANDRA_STARTUP = 0x01, + CASSANDRA_READY = 0x02, + CASSANDRA_AUTHENTICATE = 0x03, + CASSANDRA_OPTIONS = 0x05, + CASSANDRA_SUPPORTED = 0x06, + CASSANDRA_QUERY = 0x07, + CASSANDRA_RESULT = 0x08, + CASSANDRA_PREPARE = 0x09, + CASSANDRA_EXECUTE = 0x0A, + CASSANDRA_REGISTER = 0x0B, + CASSANDRA_EVENT = 0x0C, + CASSANDRA_BATCH = 0x0D, + CASSANDRA_AUTH_CHALLENGE = 0x0E, + CASSANDRA_AUTH_RESPONSE = 0x0F, + CASSANDRA_AUTH_SUCCESS = 0x10 +}; + +static bool ndpi_check_valid_cassandra_version(uint8_t version) +{ + switch(version) { + case CASSANDRA_V1_REQUEST: + case CASSANDRA_V1_RESPONSE: + case CASSANDRA_V2_REQUEST: + case CASSANDRA_V2_RESPONSE: + case CASSANDRA_V3_REQUEST: + case CASSANDRA_V3_RESPONSE: + case CASSANDRA_V4_REQUEST: + case CASSANDRA_V4_RESPONSE: + return true; + } + return false; +} + +static bool ndpi_check_valid_cassandra_opcode(uint8_t opcode) +{ + switch (opcode) { + case CASSANDRA_ERROR: + case CASSANDRA_STARTUP: + case CASSANDRA_READY: + case CASSANDRA_AUTHENTICATE: + case CASSANDRA_OPTIONS: + case CASSANDRA_SUPPORTED: + case CASSANDRA_QUERY: + case CASSANDRA_RESULT: + case CASSANDRA_PREPARE: + case CASSANDRA_EXECUTE: + case CASSANDRA_REGISTER: + case CASSANDRA_EVENT: + case CASSANDRA_BATCH: + case CASSANDRA_AUTH_CHALLENGE: + case CASSANDRA_AUTH_RESPONSE: + case CASSANDRA_AUTH_SUCCESS: + return true; + } + return false; +} + +static bool ndpi_check_valid_cassandra_flags(uint8_t flags) +{ + return (flags & 0xF0) == 0; +} + +static void ndpi_search_cassandra(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search Cassandra\n"); + + if (packet->tcp) { + if (packet->payload_packet_len >= CASSANDRA_HEADER_LEN && + ndpi_check_valid_cassandra_version(get_u_int8_t(packet->payload, 0)) && + ndpi_check_valid_cassandra_flags(get_u_int8_t(packet->payload, 1)) && + ndpi_check_valid_cassandra_opcode(get_u_int8_t(packet->payload, 4)) && + ntohl(get_u_int32_t(packet->payload, 5)) <= CASSANDRA_MAX_BODY_SIZE && + ntohl(get_u_int32_t(packet->payload, 5)) >= (uint32_t) (packet->payload_packet_len - CASSANDRA_HEADER_LEN) && + flow->l4.tcp.h323_valid_packets == 0 /* To avoid clashing with H323 */ && + flow->socks4_stage == 0 /* To avoid clashing with SOCKS */) { + if (flow->packet_counter > 3) + { + NDPI_LOG_INFO(ndpi_struct, "found Cassandra\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_CASSANDRA, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + } + return; + } + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + +/* ********************************* */ + + +void init_cassandra_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id) { + + ndpi_set_bitmask_protocol_detection("Cassandra", + ndpi_struct, + *id, + NDPI_PROTOCOL_CASSANDRA, + ndpi_search_cassandra, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/checkmk.c b/src/components/implementation/simple_nf/ndpi/checkmk.c new file mode 100644 index 0000000000..c0b8574306 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/checkmk.c @@ -0,0 +1,82 @@ +/* + * checkmk.c + * + * Copyright (C) 2011-22 - ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + * + */ +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_CHECKMK + +#include "ndpi_api.h" + + +static void ndpi_int_checkmk_add_connection(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_CHECKMK, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + + +static void ndpi_search_checkmk(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + if (packet->payload_packet_len >= 15) { + + if(packet->payload_packet_len > 128) { + /* + When we transfer a large data chunk, unless we have observed + the initial connection, we need to discard these packets + as they are not an indication that this flow is not AFP + */ + return; + } + + /* + * this will detect the OpenSession command of the Data Stream Interface (DSI) protocol + * which is exclusively used by the Apple Filing Protocol (AFP) on TCP/IP networks + */ + if (packet->payload_packet_len >= 15 && packet->payload_packet_len < 100 + && memcmp(packet->payload, "<<>>", 14) == 0) { + + NDPI_LOG(NDPI_PROTOCOL_CHECKMK, ndpi_struct, NDPI_LOG_DEBUG, "Check_MK: Flow detected.\n"); + ndpi_int_checkmk_add_connection(ndpi_struct, flow); + return; + } + } + + NDPI_LOG(NDPI_PROTOCOL_CHECKMK, ndpi_struct, NDPI_LOG_DEBUG, "Check_MK excluded.\n"); + NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_CHECKMK); +} + + +void init_checkmk_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("CHECKMK", ndpi_struct, *id, + NDPI_PROTOCOL_CHECKMK, + ndpi_search_checkmk, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/ciscovpn.c b/src/components/implementation/simple_nf/ndpi/ciscovpn.c new file mode 100644 index 0000000000..d3a63579d6 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/ciscovpn.c @@ -0,0 +1,82 @@ +/* + * ciscovpn.c + * + * Copyright (C) 2013-22 - ntop.org + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + * Dissector developed by Remy Mudingay + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_CISCOVPN + +#include "ndpi_api.h" + +/* ****************************************************************** */ + +static void ndpi_int_ciscovpn_add_connection(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_CISCOVPN, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + +/* ****************************************************************** */ + +static void ndpi_search_ciscovpn(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + u_int16_t udport = 0, usport = 0; + + NDPI_LOG_DBG(ndpi_struct, "search CISCOVPN\n"); + + if(packet->udp != NULL) { + usport = ntohs(packet->udp->source), udport = ntohs(packet->udp->dest); + NDPI_LOG_DBG2(ndpi_struct, "calculated CISCOVPN over udp ports\n"); + } + + if( + ( + (usport == 10000 && udport == 10000) + && + (packet->payload_packet_len >= 4) && + (packet->payload[0] == 0xfe && + packet->payload[1] == 0x57 && + packet->payload[2] == 0x7e && + packet->payload[3] == 0x2b) + ) + ) + { + /* This is a good query fe577e2b */ + NDPI_LOG_INFO(ndpi_struct, "found CISCOVPN\n"); + ndpi_int_ciscovpn_add_connection(ndpi_struct, flow); + return; + } + + if(flow->num_processed_pkts > 5) + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + + +void init_ciscovpn_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("CiscoVPN", ndpi_struct, *id, + NDPI_PROTOCOL_CISCOVPN, + ndpi_search_ciscovpn, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/citrix.c b/src/components/implementation/simple_nf/ndpi/citrix.c new file mode 100644 index 0000000000..ccb3af0d7f --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/citrix.c @@ -0,0 +1,79 @@ +/* + * citrix.c + * + * Copyright (C) 2012-22 - ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_CITRIX + +#include "ndpi_api.h" + + +/* ************************************ */ + +static void ndpi_check_citrix(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + u_int32_t payload_len = packet->payload_packet_len; + + if(payload_len == 6) { + char citrix_header[] = { 0x7F, 0x7F, 0x49, 0x43, 0x41, 0x00 }; + + if(memcmp(packet->payload, citrix_header, sizeof(citrix_header)) == 0) { + NDPI_LOG_INFO(ndpi_struct, "found citrix\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_CITRIX, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } + } else if(payload_len > 22) { + char citrix_header[] = { 0x1a, 0x43, 0x47, 0x50, 0x2f, 0x30, 0x31 }; + + if((memcmp(packet->payload, citrix_header, sizeof(citrix_header)) == 0) + || (ndpi_strnstr((const char *)packet->payload, "Citrix.TcpProxyService", payload_len) != NULL)) { + NDPI_LOG_INFO(ndpi_struct, "found citrix\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_CITRIX, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + +static void ndpi_search_citrix(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + NDPI_LOG_DBG(ndpi_struct, "search citrix\n"); + + /* skip marked packets */ + if(flow->detected_protocol_stack[0] != NDPI_PROTOCOL_CITRIX) + ndpi_check_citrix(ndpi_struct, flow); +} + + +void init_citrix_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("Citrix", ndpi_struct, *id, + NDPI_PROTOCOL_CITRIX, + ndpi_search_citrix, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/coap.c b/src/components/implementation/simple_nf/ndpi/coap.c new file mode 100644 index 0000000000..6d0f68d469 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/coap.c @@ -0,0 +1,159 @@ +/* + * coap.c + * + * Copyright (C) 2016 Sorin Zamfir + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_COAP + +#include "ndpi_api.h" + + +#define CON 0 +#define NO_CON 1 +#define ACK 2 +#define RST 3 + +struct ndpi_coap_hdr +{ +#if defined(__BIG_ENDIAN__) + u_int8_t version:2, type:2, tkl:4; +#elif defined(__LITTLE_ENDIAN__) + u_int8_t tkl:4, type:2, version:2; +#endif + u_int8_t code; + u_int16_t message_id; //if needed, remember to convert in host number +}; + + +/** + VALUE OF -CODE- FIELD + + [0] = "Empty", + [1] = "GET", + [2] = "POST", + [3] = "PUT", + [4] = "DELETE", + [65] = "2.01 Created", + [66] = "2.02 Deleted", + [67] = "2.03 Valid", + [68] = "2.04 Changed", + [69] = "2.05 Content", + [128] = "4.00 Bad Request", + [129] = "4.01 Unauthorized", + [130] = "4.02 Bad Option", + [131] = "4.03 Forbidden", + [132] = "4.04 Not Found", + [133] = "4.05 Method Not Allowed", + [134] = "4.06 Not Acceptable", + [140] = "4.12 Precondition Failed", + [141] = "4.13 Request Entity Too Large", + [143] = "4.15 Unsupported Content-Format", + [160] = "5.00 Internal Server Error", + [161] = "5.01 Not Implemented", + [162] = "5.02 Bad Gateway", + [163] = "5.03 Service Unavailable", + [164] = "5.04 Gateway Timeout", + [165] = "5.05 Proxying Not Supported" +**/ + + +/** + * Entry point when protocol is identified. + */ +static void ndpi_int_coap_add_connection (struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + ndpi_set_detected_protocol(ndpi_struct,flow,NDPI_PROTOCOL_COAP,NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + +/** + * Check if the default port is acceptable + * + * UDP Port 5683 (mandatory) + * UDP Ports 61616-61631 compressed 6lowPAN + */ +static int isCoAPport(u_int16_t port) { + if((port == 5683) + || ((port >= 61616) && (port <= 61631))) + return(1); + else + return(0); +} + +/** + * Dissector function that searches CoAP headers + */ +static void ndpi_search_coap(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + struct ndpi_coap_hdr * h = (struct ndpi_coap_hdr*) packet->payload; + + // search for udp packet + if(packet->udp != NULL) { + u_int16_t s_port = ntohs(packet->udp->source); + u_int16_t d_port = ntohs(packet->udp->dest); + + if((!isCoAPport(s_port) && !isCoAPport(d_port)) + || (packet->payload_packet_len < 4) ) { // header too short + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + NDPI_LOG_DBG2(ndpi_struct, "calculating coap over udp\n"); + + // check values in header + if(h->version == 1) { + if(h->type == CON || h->type == NO_CON || h->type == ACK || h->type == RST ) { + if(h->tkl < 8) { + if((/* h->code >= 0 && */ h->code <= 5) || (h->code >= 65 && h->code <= 69) || + (h->code >= 128 && h->code <= 134) || (h->code >= 140 && h->code <= 143) || + (h->code >= 160 && h->code <= 165)) { + + NDPI_LOG_INFO(ndpi_struct, "found Coap\n"); + ndpi_int_coap_add_connection(ndpi_struct,flow); + return; + } + } + } + } + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; +} + +/** + * Entry point for the ndpi library + */ +void init_coap_dissector (struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection ("COAP", ndpi_struct, *id, + NDPI_PROTOCOL_COAP, + ndpi_search_coap, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, ADD_TO_DETECTION_BITMASK); + *id +=1; +} + diff --git a/src/components/implementation/simple_nf/ndpi/collectd.c b/src/components/implementation/simple_nf/ndpi/collectd.c new file mode 100644 index 0000000000..990ff61082 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/collectd.c @@ -0,0 +1,209 @@ +/* + * collectd.c + * + * Copyright (C) 2022-23 - ntop.org + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_COLLECTD + +#include "ndpi_api.h" + +#define COLLECTD_MIN_BLOCKS_REQUIRED 3 +#define COLLECTD_MAX_BLOCKS_TO_DISSECT 5 + +#define COLLECTD_ENCR_AES256_MIN_BLOCK_SIZE 6 +#define COLLECTD_ENCR_AES256_IV_SIZE 16 + +enum collectd_type { + COLLECTD_TYPE_HOST = 0x0000, + COLLECTD_TYPE_TIME = 0x0001, + COLLECTD_TYPE_TIME_HR = 0x0008, + COLLECTD_TYPE_PLUGIN = 0x0002, + COLLECTD_TYPE_PLUGIN_INSTANCE = 0x0003, + COLLECTD_TYPE_TYPE = 0x0004, + COLLECTD_TYPE_TYPE_INSTANCE = 0x0005, + COLLECTD_TYPE_VALUES = 0x0006, + COLLECTD_TYPE_INTERVAL = 0x0007, + COLLECTD_TYPE_INTERVAL_HR = 0x0009, + COLLECTD_TYPE_MESSAGE = 0x0100, + COLLECTD_TYPE_SEVERITY = 0x0101, + COLLECTD_TYPE_SIGN_SHA256 = 0x0200, + COLELCTD_TYPE_ENCR_AES256 = 0x0210, +}; + +static u_int16_t const collectd_types[] = { + COLLECTD_TYPE_HOST, COLLECTD_TYPE_TIME, COLLECTD_TYPE_TIME_HR, COLLECTD_TYPE_PLUGIN, + COLLECTD_TYPE_PLUGIN_INSTANCE, COLLECTD_TYPE_TYPE, COLLECTD_TYPE_TYPE_INSTANCE, + COLLECTD_TYPE_VALUES, COLLECTD_TYPE_INTERVAL, COLLECTD_TYPE_INTERVAL_HR, + COLLECTD_TYPE_MESSAGE, COLLECTD_TYPE_SEVERITY, COLLECTD_TYPE_SIGN_SHA256, + COLELCTD_TYPE_ENCR_AES256 +}; +static const size_t collectd_types_length = NDPI_ARRAY_LENGTH(collectd_types); + +static void ndpi_int_collectd_add_connection(struct ndpi_detection_module_struct * const ndpi_struct, + struct ndpi_flow_struct * const flow) +{ + NDPI_LOG_INFO(ndpi_struct, "found collectd\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, + NDPI_PROTOCOL_COLLECTD, + NDPI_PROTOCOL_UNKNOWN, + NDPI_CONFIDENCE_DPI); +} + +static u_int16_t npdi_int_collectd_block_size(struct ndpi_packet_struct const * const packet, + u_int16_t const block_offset) +{ + if (block_offset + 4 > packet->payload_packet_len) + { + return 0; + } + + u_int16_t next_block = ntohs(get_u_int16_t(packet->payload, block_offset + 2)); + if (block_offset + next_block > packet->payload_packet_len || + (u_int16_t)(block_offset + next_block) <= block_offset /* possible overflow or next_block is zero */) + { + return 0; + } + + return next_block; +} + +static int ndpi_int_collectd_check_type(u_int16_t block_type) +{ + size_t i; + + for (i = 0; i < collectd_types_length; ++i) + { + if (block_type == collectd_types[i]) + { + return 0; + } + } + + return 1; +} + +static int ndpi_int_collectd_dissect_hostname(struct ndpi_flow_struct * const flow, + struct ndpi_packet_struct const * const packet, + u_int16_t block_offset, u_int16_t block_length) +{ + return (ndpi_hostname_sni_set(flow, &packet->payload[4], block_length) == NULL); +} + +static int ndpi_int_collectd_dissect_username(struct ndpi_flow_struct * const flow, + struct ndpi_packet_struct const * const packet, + u_int16_t block_offset) +{ + u_int16_t username_length = ntohs(get_u_int16_t(packet->payload, 4)); + + if(username_length > packet->payload_packet_len - + COLLECTD_ENCR_AES256_MIN_BLOCK_SIZE - + COLLECTD_ENCR_AES256_IV_SIZE) + { + return 1; + } + + size_t sz_len = ndpi_min(sizeof(flow->protos.collectd.client_username) - 1, username_length); + memcpy(flow->protos.collectd.client_username, &packet->payload[6], sz_len); + flow->protos.collectd.client_username[sz_len] = '\0'; + + return 0; +} + +static void ndpi_search_collectd(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct const * const packet = &ndpi_struct->packet; + u_int16_t num_blocks; + u_int16_t block_offset = 0, block_type, block_length; + u_int16_t hostname_offset, hostname_length = 0; + + NDPI_LOG_DBG(ndpi_struct, "search collectd\n"); + + for (num_blocks = 0; num_blocks < COLLECTD_MAX_BLOCKS_TO_DISSECT; + ++num_blocks, block_offset += block_length) + { + block_length = npdi_int_collectd_block_size(packet, block_offset); + if (block_length == 0) + { + break; + } + + block_type = ntohs(get_u_int16_t(packet->payload, block_offset)); + if (ndpi_int_collectd_check_type(block_type) != 0) + { + break; + } else { + if (block_type == COLLECTD_TYPE_HOST) + { + /* + * Dissect the hostname later, when we are sure that it is + * the collectd protocol. + */ + hostname_offset = block_offset; + hostname_length = block_length; + } else if (block_type == COLELCTD_TYPE_ENCR_AES256) { + /* + * The encrypted data block is a special case. + * It is the only dissectable block as everything else in it + * is encrypted. + */ + if (block_length != packet->payload_packet_len || + block_length < COLLECTD_ENCR_AES256_MIN_BLOCK_SIZE || + ndpi_int_collectd_dissect_username(flow, packet, block_offset) != 0) + { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + } else { + ndpi_int_collectd_add_connection(ndpi_struct, flow); + } + return; + } + } + } + + if (num_blocks < COLLECTD_MIN_BLOCKS_REQUIRED) + { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + if (hostname_length > 0 && + ndpi_int_collectd_dissect_hostname(flow, packet, hostname_offset, + hostname_length) != 0) + { + ndpi_set_risk(ndpi_struct, flow, NDPI_MALFORMED_PACKET, "Invalid collectd Header"); + } + + ndpi_int_collectd_add_connection(ndpi_struct, flow); +} + +void init_collectd_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("collectd", ndpi_struct, *id, + NDPI_PROTOCOL_COLLECTD, + ndpi_search_collectd, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK + ); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/corba.c b/src/components/implementation/simple_nf/ndpi/corba.c new file mode 100644 index 0000000000..b8c453accf --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/corba.c @@ -0,0 +1,58 @@ +/* + * corba.c + * + * Copyright (C) 2013 Remy Mudingay + * + * This module is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This module is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License. + * If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_CORBA + +#include "ndpi_api.h" + +static void ndpi_int_corba_add_connection(struct ndpi_detection_module_struct + *ndpi_struct, struct ndpi_flow_struct *flow) +{ + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_CORBA, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} +static void ndpi_search_corba(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search for CORBA\n"); + if(packet->tcp != NULL) { + NDPI_LOG_DBG2(ndpi_struct, "calculating CORBA over tcp\n"); + /* Corba General Inter-ORB Protocol -> GIOP */ + if(packet->payload_packet_len >= 24 && + memcmp(packet->payload, "GIOP", 4) == 0) { + NDPI_LOG_INFO(ndpi_struct, "found corba\n"); + ndpi_int_corba_add_connection(ndpi_struct, flow); + } + } +} + + +void init_corba_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("Corba", ndpi_struct, *id, + NDPI_PROTOCOL_CORBA, + ndpi_search_corba, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/cpha.c b/src/components/implementation/simple_nf/ndpi/cpha.c new file mode 100644 index 0000000000..97bad4262b --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/cpha.c @@ -0,0 +1,63 @@ +/* + * qq.c + * + * Copyright (C) 2011-22 - ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +/* CPHA - CheckPoint High Availability Protocol */ + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_CPHA + +#include "ndpi_api.h" + + +static void ndpi_search_cpha(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + const u_int16_t cpha_port = htons(8116); + + NDPI_LOG_DBG(ndpi_struct, "search CPHA\n"); + + if((packet->payload_packet_len > 20) + && (packet->payload[0] == 0x1a) + && (packet->payload[1] == 0x90) + && packet->udp + && packet->iph + && (packet->udp->source == cpha_port) + && (packet->udp->dest == cpha_port) + && packet->iph->saddr == 0 /* 0.0.0.0 */ + ) { + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_CPHA, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + } else + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + + +void init_cpha_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) { + ndpi_set_bitmask_protocol_detection("CPHA", ndpi_struct, *id, + NDPI_PROTOCOL_CPHA, + ndpi_search_cpha, + NDPI_SELECTION_BITMASK_PROTOCOL_UDP_WITH_PAYLOAD, /* TODO: ipv6 support? */ + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/cpuid.h b/src/components/implementation/simple_nf/ndpi/cpuid.h new file mode 100644 index 0000000000..aebc17c682 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/cpuid.h @@ -0,0 +1,340 @@ +/* + * Copyright (C) 2007-2021 Free Software Foundation, Inc. + * + * This file is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 3, or (at your option) any + * later version. + * + * This file is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * Under Section 7 of GPL version 3, you are granted additional + * permissions described in the GCC Runtime Library Exception, version + * 3.1, as published by the Free Software Foundation. + * + * You should have received a copy of the GNU General Public License and + * a copy of the GCC Runtime Library Exception along with this program; + * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see + * . + */ + +#ifndef _CPUID_H_INCLUDED +#define _CPUID_H_INCLUDED + +/* %eax */ +#define bit_AVXVNNI (1 << 4) +#define bit_AVX512BF16 (1 << 5) +#define bit_HRESET (1 << 22) + +/* %ecx */ +#define bit_SSE3 (1 << 0) +#define bit_PCLMUL (1 << 1) +#define bit_LZCNT (1 << 5) +#define bit_SSSE3 (1 << 9) +#define bit_FMA (1 << 12) +#define bit_CMPXCHG16B (1 << 13) +#define bit_SSE4_1 (1 << 19) +#define bit_SSE4_2 (1 << 20) +#define bit_MOVBE (1 << 22) +#define bit_POPCNT (1 << 23) +#define bit_AES (1 << 25) +#define bit_XSAVE (1 << 26) +#define bit_OSXSAVE (1 << 27) +#define bit_AVX (1 << 28) +#define bit_F16C (1 << 29) +#define bit_RDRND (1 << 30) + +/* %edx */ +#define bit_CMPXCHG8B (1 << 8) +#define bit_CMOV (1 << 15) +#define bit_MMX (1 << 23) +#define bit_FXSAVE (1 << 24) +#define bit_SSE (1 << 25) +#define bit_SSE2 (1 << 26) + +/* Extended Features (%eax == 0x80000001) */ +/* %ecx */ +#define bit_LAHF_LM (1 << 0) +#define bit_ABM (1 << 5) +#define bit_SSE4a (1 << 6) +#define bit_PRFCHW (1 << 8) +#define bit_XOP (1 << 11) +#define bit_LWP (1 << 15) +#define bit_FMA4 (1 << 16) +#define bit_TBM (1 << 21) +#define bit_MWAITX (1 << 29) + +/* %edx */ +#define bit_MMXEXT (1 << 22) +#define bit_LM (1 << 29) +#define bit_3DNOWP (1 << 30) +#define bit_3DNOW (1u << 31) + +/* %ebx */ +#define bit_CLZERO (1 << 0) +#define bit_WBNOINVD (1 << 9) + +/* Extended Features (%eax == 7) */ +/* %ebx */ +#define bit_FSGSBASE (1 << 0) +#define bit_SGX (1 << 2) +#define bit_BMI (1 << 3) +#define bit_HLE (1 << 4) +#define bit_AVX2 (1 << 5) +#define bit_BMI2 (1 << 8) +#define bit_RTM (1 << 11) +#define bit_MPX (1 << 14) +#define bit_AVX512F (1 << 16) +#define bit_AVX512DQ (1 << 17) +#define bit_RDSEED (1 << 18) +#define bit_ADX (1 << 19) +#define bit_AVX512IFMA (1 << 21) +#define bit_CLFLUSHOPT (1 << 23) +#define bit_CLWB (1 << 24) +#define bit_AVX512PF (1 << 26) +#define bit_AVX512ER (1 << 27) +#define bit_AVX512CD (1 << 28) +#define bit_SHA (1 << 29) +#define bit_AVX512BW (1 << 30) +#define bit_AVX512VL (1u << 31) + +/* %ecx */ +#define bit_PREFETCHWT1 (1 << 0) +#define bit_AVX512VBMI (1 << 1) +#define bit_PKU (1 << 3) +#define bit_OSPKE (1 << 4) +#define bit_WAITPKG (1 << 5) +#define bit_AVX512VBMI2 (1 << 6) +#define bit_SHSTK (1 << 7) +#define bit_GFNI (1 << 8) +#define bit_VAES (1 << 9) +#define bit_AVX512VNNI (1 << 11) +#define bit_VPCLMULQDQ (1 << 10) +#define bit_AVX512BITALG (1 << 12) +#define bit_AVX512VPOPCNTDQ (1 << 14) +#define bit_RDPID (1 << 22) +#define bit_MOVDIRI (1 << 27) +#define bit_MOVDIR64B (1 << 28) +#define bit_ENQCMD (1 << 29) +#define bit_CLDEMOTE (1 << 25) +#define bit_KL (1 << 23) + +/* %edx */ +#define bit_AVX5124VNNIW (1 << 2) +#define bit_AVX5124FMAPS (1 << 3) +#define bit_AVX512VP2INTERSECT (1 << 8) +#define bit_IBT (1 << 20) +#define bit_UINTR (1 << 5) +#define bit_PCONFIG (1 << 18) +#define bit_SERIALIZE (1 << 14) +#define bit_TSXLDTRK (1 << 16) +#define bit_AMX_BF16 (1 << 22) +#define bit_AMX_TILE (1 << 24) +#define bit_AMX_INT8 (1 << 25) + +/* XFEATURE_ENABLED_MASK register bits (%eax == 0xd, %ecx == 0) */ +#define bit_BNDREGS (1 << 3) +#define bit_BNDCSR (1 << 4) + +/* Extended State Enumeration Sub-leaf (%eax == 0xd, %ecx == 1) */ +#define bit_XSAVEOPT (1 << 0) +#define bit_XSAVEC (1 << 1) +#define bit_XSAVES (1 << 3) + +/* PT sub leaf (%eax == 0x14, %ecx == 0) */ +/* %ebx */ +#define bit_PTWRITE (1 << 4) + +/* Keylocker leaf (%eax == 0x19) */ +/* %ebx */ +#define bit_AESKLE ( 1<<0 ) +#define bit_WIDEKL ( 1<<2 ) + + +/* Signatures for different CPU implementations as returned in uses + of cpuid with level 0. */ +#define signature_AMD_ebx 0x68747541 +#define signature_AMD_ecx 0x444d4163 +#define signature_AMD_edx 0x69746e65 + +#define signature_CENTAUR_ebx 0x746e6543 +#define signature_CENTAUR_ecx 0x736c7561 +#define signature_CENTAUR_edx 0x48727561 + +#define signature_CYRIX_ebx 0x69727943 +#define signature_CYRIX_ecx 0x64616574 +#define signature_CYRIX_edx 0x736e4978 + +#define signature_INTEL_ebx 0x756e6547 +#define signature_INTEL_ecx 0x6c65746e +#define signature_INTEL_edx 0x49656e69 + +#define signature_TM1_ebx 0x6e617254 +#define signature_TM1_ecx 0x55504361 +#define signature_TM1_edx 0x74656d73 + +#define signature_TM2_ebx 0x756e6547 +#define signature_TM2_ecx 0x3638784d +#define signature_TM2_edx 0x54656e69 + +#define signature_NSC_ebx 0x646f6547 +#define signature_NSC_ecx 0x43534e20 +#define signature_NSC_edx 0x79622065 + +#define signature_NEXGEN_ebx 0x4778654e +#define signature_NEXGEN_ecx 0x6e657669 +#define signature_NEXGEN_edx 0x72446e65 + +#define signature_RISE_ebx 0x65736952 +#define signature_RISE_ecx 0x65736952 +#define signature_RISE_edx 0x65736952 + +#define signature_SIS_ebx 0x20536953 +#define signature_SIS_ecx 0x20536953 +#define signature_SIS_edx 0x20536953 + +#define signature_UMC_ebx 0x20434d55 +#define signature_UMC_ecx 0x20434d55 +#define signature_UMC_edx 0x20434d55 + +#define signature_VIA_ebx 0x20414956 +#define signature_VIA_ecx 0x20414956 +#define signature_VIA_edx 0x20414956 + +#define signature_VORTEX_ebx 0x74726f56 +#define signature_VORTEX_ecx 0x436f5320 +#define signature_VORTEX_edx 0x36387865 + +#ifndef __x86_64__ +/* At least one cpu (Winchip 2) does not set %ebx and %ecx + for cpuid leaf 1. Forcibly zero the two registers before + calling cpuid as a precaution. */ +#define __cpuid(level, a, b, c, d) \ + do { \ + if (__builtin_constant_p (level) && (level) != 1) \ + __asm__ __volatile__ ("cpuid\n\t" \ + : "=a" (a), "=b" (b), "=c" (c), "=d" (d) \ + : "0" (level)); \ + else \ + __asm__ __volatile__ ("cpuid\n\t" \ + : "=a" (a), "=b" (b), "=c" (c), "=d" (d) \ + : "0" (level), "1" (0), "2" (0)); \ + } while (0) +#else +#define __cpuid(level, a, b, c, d) \ + __asm__ __volatile__ ("cpuid\n\t" \ + : "=a" (a), "=b" (b), "=c" (c), "=d" (d) \ + : "0" (level)) +#endif + +#define __cpuid_count(level, count, a, b, c, d) \ + __asm__ __volatile__ ("cpuid\n\t" \ + : "=a" (a), "=b" (b), "=c" (c), "=d" (d) \ + : "0" (level), "2" (count)) + + +/* Return highest supported input value for cpuid instruction. ext can + be either 0x0 or 0x80000000 to return highest supported value for + basic or extended cpuid information. Function returns 0 if cpuid + is not supported or whatever cpuid returns in eax register. If sig + pointer is non-null, then first four bytes of the signature + (as found in ebx register) are returned in location pointed by sig. */ + +static __inline unsigned int +__get_cpuid_max (unsigned int __ext, unsigned int *__sig) +{ + unsigned int __eax, __ebx, __ecx, __edx; + +#ifndef __x86_64__ + /* See if we can use cpuid. On AMD64 we always can. */ +#if __GNUC__ >= 3 + __asm__ ("pushf{l|d}\n\t" + "pushf{l|d}\n\t" + "pop{l}\t%0\n\t" + "mov{l}\t{%0, %1|%1, %0}\n\t" + "xor{l}\t{%2, %0|%0, %2}\n\t" + "push{l}\t%0\n\t" + "popf{l|d}\n\t" + "pushf{l|d}\n\t" + "pop{l}\t%0\n\t" + "popf{l|d}\n\t" + : "=&r" (__eax), "=&r" (__ebx) + : "i" (0x00200000)); +#else +/* Host GCCs older than 3.0 weren't supporting Intel asm syntax + nor alternatives in i386 code. */ + __asm__ ("pushfl\n\t" + "pushfl\n\t" + "popl\t%0\n\t" + "movl\t%0, %1\n\t" + "xorl\t%2, %0\n\t" + "pushl\t%0\n\t" + "popfl\n\t" + "pushfl\n\t" + "popl\t%0\n\t" + "popfl\n\t" + : "=&r" (__eax), "=&r" (__ebx) + : "i" (0x00200000)); +#endif + + if (!((__eax ^ __ebx) & 0x00200000)) + return 0; +#endif + + /* Host supports cpuid. Return highest supported cpuid input value. */ + __cpuid (__ext, __eax, __ebx, __ecx, __edx); + + if (__sig) + *__sig = __ebx; + + return __eax; +} + +/* Return cpuid data for requested cpuid leaf, as found in returned + eax, ebx, ecx and edx registers. The function checks if cpuid is + supported and returns 1 for valid cpuid information or 0 for + unsupported cpuid leaf. All pointers are required to be non-null. */ + +static __inline int +__get_cpuid (unsigned int __leaf, + unsigned int *__eax, unsigned int *__ebx, + unsigned int *__ecx, unsigned int *__edx) +{ + unsigned int __ext = __leaf & 0x80000000; + unsigned int __maxlevel = __get_cpuid_max (__ext, 0); + + if (__maxlevel == 0 || __maxlevel < __leaf) + return 0; + + __cpuid (__leaf, *__eax, *__ebx, *__ecx, *__edx); + return 1; +} + +/* Same as above, but sub-leaf can be specified. */ + +static __inline int +__get_cpuid_count (unsigned int __leaf, unsigned int __subleaf, + unsigned int *__eax, unsigned int *__ebx, + unsigned int *__ecx, unsigned int *__edx) +{ + unsigned int __ext = __leaf & 0x80000000; + unsigned int __maxlevel = __get_cpuid_max (__ext, 0); + + if (__maxlevel == 0 || __maxlevel < __leaf) + return 0; + + __cpuid_count (__leaf, __subleaf, *__eax, *__ebx, *__ecx, *__edx); + return 1; +} + +static __inline void +__cpuidex (int __cpuid_info[4], int __leaf, int __subleaf) +{ + __cpuid_count (__leaf, __subleaf, __cpuid_info[0], __cpuid_info[1], + __cpuid_info[2], __cpuid_info[3]); +} + +#endif /* _CPUID_H_INCLUDED */ diff --git a/src/components/implementation/simple_nf/ndpi/crossfire.c b/src/components/implementation/simple_nf/ndpi/crossfire.c new file mode 100644 index 0000000000..28cb3e5ca7 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/crossfire.c @@ -0,0 +1,88 @@ +/* + * crossfire.c + * + * Copyright (C) 2012-22 - ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_CROSSFIRE + +#include "ndpi_api.h" + + +static void ndpi_int_crossfire_add_connection(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow/* , ndpi_protocol_type_t protocol_type */) +{ + + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_CROSSFIRE, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + +static void ndpi_search_crossfire_tcp_udp(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search crossfire\n"); + + if (packet->udp != 0) { + if (packet->payload_packet_len == 25 + && get_u_int32_t(packet->payload, 0) == ntohl(0xc7d91999) + && get_u_int16_t(packet->payload, 4) == ntohs(0x0200) + && get_u_int16_t(packet->payload, 22) == ntohs(0x7d00)) { + NDPI_LOG_INFO(ndpi_struct, "found Crossfire: udp packet\n"); + ndpi_int_crossfire_add_connection(ndpi_struct, flow); + return; + } + + } else if (packet->tcp != 0) { + + if (packet->payload_packet_len > 4 && memcmp(packet->payload, "GET /", 5) == 0) { + ndpi_parse_packet_line_info(ndpi_struct, flow); + if (packet->parsed_lines == 8 + && (packet->line[0].ptr != NULL && packet->line[0].len >= 30 + && (memcmp(&packet->payload[5], "notice/login_big", 16) == 0 + || memcmp(&packet->payload[5], "notice/login_small", 18) == 0)) + && memcmp(&packet->payload[packet->line[0].len - 19], "/index.asp HTTP/1.", 18) == 0 + && (packet->host_line.ptr != NULL && packet->host_line.len >= 13 + && (memcmp(packet->host_line.ptr, "crossfire", 9) == 0 + || memcmp(packet->host_line.ptr, "www.crossfire", 13) == 0)) + ) { + NDPI_LOG_DBG(ndpi_struct, "found Crossfire: HTTP request\n"); + ndpi_int_crossfire_add_connection(ndpi_struct, flow); + return; + } + } + + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + + +void init_crossfire_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("Crossfire", ndpi_struct, *id, + NDPI_PROTOCOL_CROSSFIRE, + ndpi_search_crossfire_tcp_udp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/crynet.c b/src/components/implementation/simple_nf/ndpi/crynet.c new file mode 100644 index 0000000000..3d410c8070 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/crynet.c @@ -0,0 +1,81 @@ +/* + * crynet.c + * + * Copyright (C) 2022-23 - ntop.org + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_CRYNET + +#include "ndpi_api.h" + +static void ndpi_int_crynet_add_connection(struct ndpi_detection_module_struct * const ndpi_struct, + struct ndpi_flow_struct * const flow) +{ + NDPI_LOG_INFO(ndpi_struct, "found crynetwork\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, + NDPI_PROTOCOL_CRYNET, + NDPI_PROTOCOL_UNKNOWN, + NDPI_CONFIDENCE_DPI); +} + +static void ndpi_search_crynet(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct const * const packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search crynetwork\n"); + + if (packet->payload_packet_len < 26) + { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + if (packet->payload_packet_len != packet->payload[0] + 10) + { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + if (ntohs(get_u_int16_t(packet->payload, 3)) != 0x08ed || + packet->payload[16] != 0x01 || + packet->payload[20] != 0x07 || + ntohs(get_u_int16_t(packet->payload, 24)) != 0x0307) + { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + ndpi_int_crynet_add_connection(ndpi_struct, flow); +} + +void init_crynet_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("CryNetwork", ndpi_struct, *id, + NDPI_PROTOCOL_CRYNET, + ndpi_search_crynet, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK + ); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/csgo.c b/src/components/implementation/simple_nf/ndpi/csgo.c new file mode 100644 index 0000000000..a7d0cd130d --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/csgo.c @@ -0,0 +1,143 @@ +/* + * csgo.c + * + * Copyright (C) 2016-2017 Vitaly Lavrov + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_CSGO + +#include "ndpi_api.h" + +static void ndpi_search_csgo(struct ndpi_detection_module_struct* ndpi_struct, struct ndpi_flow_struct* flow) { + struct ndpi_packet_struct* packet = &ndpi_struct->packet; + + if(packet->udp != NULL) { + if(packet->payload_packet_len < sizeof(uint32_t)) { + NDPI_LOG_DBG2(ndpi_struct, "Short csgo packet\n"); + return; + } + + uint32_t w = htonl(get_u_int32_t(packet->payload, 0)); + NDPI_LOG_DBG2(ndpi_struct, "CSGO: word %08x\n", w); + + if(!flow->l4.udp.csgo_state && packet->payload_packet_len == 23 && w == 0xfffffffful) { + if(!memcmp(packet->payload + 5, "connect0x", 9)) { + flow->l4.udp.csgo_state++; + memcpy(flow->l4.udp.csgo_strid, packet->payload + 5, 18); + NDPI_LOG_DBG2(ndpi_struct, "Found csgo connect0x\n"); + return; + } + } + + if(flow->l4.udp.csgo_state == 1 && packet->payload_packet_len >= 42 && w == 0xfffffffful) { + if(!memcmp(packet->payload + 24, flow->l4.udp.csgo_strid, 18)) { + flow->l4.udp.csgo_state++; + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_CSGO, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + NDPI_LOG_INFO( ndpi_struct, "found csgo connect0x reply\n"); + return; + } + } + + if(packet->payload_packet_len == 8 && ( w == 0x3a180000 || w == 0x39180000) ) { + NDPI_LOG_INFO( ndpi_struct, "found csgo udp 8b\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_CSGO, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } + + if(packet->payload_packet_len >= 36 && w == 0x56533031ul) { + NDPI_LOG_INFO( ndpi_struct, "found csgo udp\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_CSGO, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } + + if(packet->payload_packet_len >= 36 && w == 0x01007364) { + uint32_t w2 = htonl(get_u_int32_t(packet->payload, 4)); + if(w2 == 0x70696e67) { + NDPI_LOG_INFO( ndpi_struct, "found csgo udp ping\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_CSGO, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } + } + + if(packet->payload_packet_len > 6 && + flow->l4.udp.csgo_s2 < 3 && (w & 0xffff0000ul) == 0x0d1d0000) { + uint32_t w2 = get_u_int32_t(packet->payload, 2); + if(packet->payload_packet_len == 13) { + if(!flow->l4.udp.csgo_s2) { + flow->l4.udp.csgo_id2 = w2; + flow->l4.udp.csgo_s2 = 1; + NDPI_LOG_DBG2( ndpi_struct, "Found csgo udp 0d1d step1\n"); + return; + } + + if(flow->l4.udp.csgo_s2 == 1 && flow->l4.udp.csgo_id2 == w2) { + NDPI_LOG_DBG2( ndpi_struct, "Found csgo udp 0d1d step1 DUP\n"); + return; + } + flow->l4.udp.csgo_s2 = 3; + return; + } + + if(packet->payload_packet_len == 15) { + if(flow->l4.udp.csgo_s2 == 1 && flow->l4.udp.csgo_id2 == w2) { + NDPI_LOG_INFO( ndpi_struct, "found csgo udp 0d1d\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_CSGO, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } + } + flow->l4.udp.csgo_s2 = 3; + } + + if(packet->payload_packet_len >= 140 && (w == 0x02124c6c || w == 0x02125c6c) && + !memcmp(&packet->payload[3], "lta\000mob\000tpc\000bhj\000bxd\000tae\000urg\000gkh\000", 32)) { + NDPI_LOG_INFO( ndpi_struct, "found csgo dictionary udp\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_CSGO, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } + + if(packet->payload_packet_len >= 33 && packet->iph && packet->iph->daddr == 0xffffffff && + !memcmp(&packet->payload[17], "LanSearch", 9)) { + NDPI_LOG_INFO( ndpi_struct, "found csgo LanSearch udp\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_CSGO, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } + + if(w == 0) { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + } + + if(flow->packet_counter > 5) + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + +void init_csgo_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("CSGO", ndpi_struct, *id, + NDPI_PROTOCOL_CSGO, + ndpi_search_csgo, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/dcerpc.c b/src/components/implementation/simple_nf/ndpi/dcerpc.c new file mode 100644 index 0000000000..688123ce51 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/dcerpc.c @@ -0,0 +1,105 @@ +/* + * dcerpc.c + * + * Copyright (C) 2011-18 by ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_RPC + +#include "ndpi_api.h" +#include + +static void ndpi_int_dcerpc_add_connection(struct ndpi_detection_module_struct + *ndpi_struct, struct ndpi_flow_struct *flow) +{ + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_RPC, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + +static bool is_connection_oriented_dcerpc(struct ndpi_packet_struct *packet, struct ndpi_flow_struct *flow) +{ + if((packet->tcp != NULL) + && (packet->payload_packet_len >= 64) + && (packet->payload[0] == 0x05) /* version 5 */ + && (packet->payload[2] < 16) /* Packet type */ + && (((packet->payload[9]<<8) | packet->payload[8]) == packet->payload_packet_len) /* Packet Length */ + ) { + return true; + } + return false; +} + +static bool is_connectionless_dcerpc(struct ndpi_packet_struct *packet, struct ndpi_flow_struct *flow) +{ + u_int16_t fragment_len; + + if (packet->udp == NULL) + return false; + if (packet->payload_packet_len < 80) + return false; + if (packet->payload[0] != 0x04) /* type must be equal to 4 */ + return false; + if (packet->payload[1] > 10) /* must be <= CANCEL ACK or it's not connectionless DCE/RPC */ + return false; + if (packet->payload[3] & 0xFC) /* flags2: bit 3:8 are reserved for future use and must be set to 0 */ + return false; + if (packet->payload[4] & 0xEE) /* neither big endian nor little endian */ + return false; + if (packet->payload[5] > 3) /* invalid floating point type */ + return false; + + if(packet->payload[4] == 0x10) + fragment_len = (packet->payload[75] << 8) + packet->payload[74]; /* Big endian */ + else + fragment_len = (packet->payload[74] << 8) + packet->payload[75]; /* Little endian */ + + if(packet->payload_packet_len != (fragment_len+76 /* offset */ + 4 /* rest of the packet */)) + return false; /* Too short or too long, bot RPC */ + + return true; +} + +static void ndpi_search_dcerpc(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search DCERPC\n"); + if (is_connection_oriented_dcerpc(packet, flow) || is_connectionless_dcerpc(packet, flow)) { + NDPI_LOG_INFO(ndpi_struct, "found DCERPC\n"); + ndpi_int_dcerpc_add_connection(ndpi_struct, flow); + return; + } + + if(packet->payload_packet_len>1) + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + + +void init_dcerpc_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("RPC", ndpi_struct, *id, + NDPI_PROTOCOL_RPC, + ndpi_search_dcerpc, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/dhcp.c b/src/components/implementation/simple_nf/ndpi/dhcp.c new file mode 100644 index 0000000000..12f8c57461 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/dhcp.c @@ -0,0 +1,202 @@ +/* + * dhcp.c + * + * Copyright (C) 2016-22 - ntop.org + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_DHCP + +#include "ndpi_api.h" + +/* freeradius/src/lib/dhcp.c */ +#define DHCP_CHADDR_LEN 6 +#define DHCP_SNAME_LEN 64 +#define DHCP_FILE_LEN 128 +#define DHCP_VEND_LEN 308 +#define DHCP_OPTION_MAGIC_NUMBER 0x63825363 +#define DHCP_MAGIC_LEN 4 + +PACK_ON +struct dhcp_packet { + uint8_t msgType; + uint8_t htype; + uint8_t hlen; + uint8_t hops; + uint32_t xid;/* 4 */ + uint16_t secs;/* 8 */ + uint16_t flags; + uint32_t ciaddr;/* 12 */ + uint32_t yiaddr;/* 16 */ + uint32_t siaddr;/* 20 */ + uint32_t giaddr;/* 24 */ + uint8_t chaddr[DHCP_CHADDR_LEN]; /* 28 */ + uint8_t pad[10]; /* 34 */ + uint8_t sname[DHCP_SNAME_LEN]; /* 44 */ + uint8_t file[DHCP_FILE_LEN]; /* 108 */ + uint8_t magic[DHCP_MAGIC_LEN]; /* 236 */ + uint8_t options[DHCP_VEND_LEN]; +} PACK_OFF; + + +static void ndpi_int_dhcp_add_connection(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_DHCP, + NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + +static int is_dhcp_magic(uint8_t *magic) { + if((magic[0] == 0x63) + && (magic[1] == 0x82) + && (magic[2] == 0x53) + && (magic[3] == 0x63)) + return(1); + else + return(0); +} + +static void ndpi_search_dhcp_udp(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + u_int8_t msg_type = 0; + + NDPI_LOG_DBG(ndpi_struct, "search DHCP\n"); + + /* this detection also works for asymmetric dhcp traffic */ + + /* check standard DHCP 0.0.0.0:68 -> 255.255.255.255:67 */ + if(packet->udp) { + struct dhcp_packet *dhcp = (struct dhcp_packet*)packet->payload; + + if((packet->payload_packet_len >= 244 /* 244 is the offset of options[0] in struct dhcp_packet */) + && (packet->udp->source == htons(67) || packet->udp->source == htons(68)) + && (packet->udp->dest == htons(67) || packet->udp->dest == htons(68)) + && is_dhcp_magic(dhcp->magic)) { + u_int i = 0, foundValidMsgType = 0; + + u_int dhcp_options_size = ndpi_min(DHCP_VEND_LEN /* maximum size of options in struct dhcp_packet */, + packet->payload_packet_len - 240); + + + /* Parse options in two steps (since we need first the message type and + it seems there is no specific order in the options list) */ + + /* First iteration: search for the message type */ + while(i + 1 /* for the len */ < dhcp_options_size) { + u_int8_t id = dhcp->options[i]; + + if(id == 0xFF) + break; + else { + /* Prevent malformed packets to cause out-of-bounds accesses */ + u_int8_t len = ndpi_min(dhcp->options[i+1] /* len as found in the packet */, + dhcp_options_size - (i+2) /* 1 for the type and 1 for the value */); + if(len == 0) + break; + + if(id == 53 /* DHCP Message Type */) { + msg_type = dhcp->options[i+2]; + + if(msg_type <= 8) { + foundValidMsgType = 1; + break; + } + } + + i += len + 2; + } + } + + if(!foundValidMsgType) { +#ifdef DHCP_DEBUG + NDPI_LOG_DBG2(ndpi_struct, "[DHCP] Invalid message type %d. Not dhcp\n", msg_type); +#endif + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + /* Ok, we have a valid DHCP packet -> we can write to flow->protos.dhcp */ + NDPI_LOG_INFO(ndpi_struct, "found DHCP\n"); + ndpi_int_dhcp_add_connection(ndpi_struct, flow); + + /* Second iteration: parse the interesting options */ + while(i + 1 /* for the len */ < dhcp_options_size) { + u_int8_t id = dhcp->options[i]; + + if(id == 0xFF) + break; + else { + /* Prevent malformed packets to cause out-of-bounds accesses */ + u_int8_t len = ndpi_min(dhcp->options[i+1] /* len as found in the packet */, + dhcp_options_size - (i+2) /* 1 for the type and 1 for the value */); + + if(len == 0) + break; + +#ifdef DHCP_DEBUG + NDPI_LOG_DBG2(ndpi_struct, "[DHCP] Id=%d [len=%d]\n", id, len); +#endif + + if(id == 55 /* Parameter Request List / Fingerprint */) { + u_int idx, offset = 0; + + for(idx = 0; idx < len && offset < sizeof(flow->protos.dhcp.fingerprint) - 2; idx++) { + int rc = ndpi_snprintf((char*)&flow->protos.dhcp.fingerprint[offset], + sizeof(flow->protos.dhcp.fingerprint) - offset, + "%s%u", (idx > 0) ? "," : "", + (unsigned int)dhcp->options[i+2+idx] & 0xFF); + + if(rc < 0) break; else offset += rc; + } + + flow->protos.dhcp.fingerprint[sizeof(flow->protos.dhcp.fingerprint) - 1] = '\0'; + } else if(id == 60 /* Class Identifier */) { + char *name = (char*)&dhcp->options[i+2]; + int j = 0; + + j = ndpi_min(len, sizeof(flow->protos.dhcp.class_ident)-1); + strncpy((char*)flow->protos.dhcp.class_ident, name, j); + flow->protos.dhcp.class_ident[j] = '\0'; + } else if(id == 12 /* Host Name */) { + u_int8_t *name = &dhcp->options[i+2]; + +#ifdef DHCP_DEBUG + NDPI_LOG_DBG2(ndpi_struct, "[DHCP] '%.*s'\n",name,len); + // while(j < len) { printf( "%c", name[j]); j++; }; printf("\n"); +#endif + ndpi_hostname_sni_set(flow, name, len); + } + + i += len + 2; + } + } + } + } +} + + +void init_dhcp_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id) { + ndpi_set_bitmask_protocol_detection("DHCP", ndpi_struct, *id, + NDPI_PROTOCOL_DHCP, + ndpi_search_dhcp_udp, + NDPI_SELECTION_BITMASK_PROTOCOL_UDP_WITH_PAYLOAD, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/dhcpv6.c b/src/components/implementation/simple_nf/ndpi/dhcpv6.c new file mode 100644 index 0000000000..9d1e1f1a8a --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/dhcpv6.c @@ -0,0 +1,68 @@ +/* + * dhcpv6.c + * + * Copyright (C) 2009-11 - ipoque GmbH + * Copyright (C) 2011-22 - ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_DHCPV6 + +#include "ndpi_api.h" + + +static void ndpi_int_dhcpv6_add_connection(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_DHCPV6, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + +static void ndpi_search_dhcpv6_udp(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search DHCPv6\n"); + + if (packet->payload_packet_len >= 4 && + (packet->udp->source == htons(546) || packet->udp->source == htons(547)) && + (packet->udp->dest == htons(546) || packet->udp->dest == htons(547)) && + packet->payload[0] >= 1 && packet->payload[0] <= 13) { + + NDPI_LOG_INFO(ndpi_struct, "found DHCPv6\n"); + ndpi_int_dhcpv6_add_connection(ndpi_struct, flow); + return; + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + + +void init_dhcpv6_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("DHCPV6", ndpi_struct, *id, + NDPI_PROTOCOL_DHCPV6, + ndpi_search_dhcpv6_udp, + NDPI_SELECTION_BITMASK_PROTOCOL_V6_UDP_WITH_PAYLOAD, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/diameter.c b/src/components/implementation/simple_nf/ndpi/diameter.c new file mode 100644 index 0000000000..2ed9748649 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/diameter.c @@ -0,0 +1,116 @@ +/* + * diameter.c + * + * Copyright (C) 2018 - ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + * Based on code of: + * Michele Campus - + */ +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_DIAMETER + +#include "ndpi_api.h" + + +// Header Flags possibile values +#define DIAMETER_REQUEST 0X80 +#define DIAMETER_PROXYABLE 0X40 +#define DIAMETER_ERROR 0X20 +#define DIAMETER_RETRASM 0X10 + +typedef enum { + AC = 271, + AS = 274, + CC = 272, + CE = 257, + DW = 280, + DP = 282, + RA = 258, + ST = 275 +} com_type_t; + +#define DIAM_HEADER_LEN 20 + +// DIAMETER header +struct diameter_header_t +{ + u_int8_t version; + u_int8_t length[3]; + u_int8_t flags; + u_int8_t com_code[3]; + u_int32_t app_id; + u_int32_t hop_id; + u_int32_t end_id; +}; + + +// Check packet +static int is_diameter(struct ndpi_packet_struct *packet) +{ + struct diameter_header_t *diameter = (struct diameter_header_t *)packet->payload; + + if(packet->payload_packet_len >= sizeof(struct diameter_header_t) && + diameter->version == 0x01 && + (diameter->flags == DIAMETER_REQUEST || + diameter->flags == DIAMETER_PROXYABLE || + diameter->flags == DIAMETER_ERROR || + diameter->flags == DIAMETER_RETRASM)) { + + u_int16_t com_code = diameter->com_code[2] + (diameter->com_code[1] << 8) + (diameter->com_code[0] << 8); + + if(com_code == AC || com_code == AS || + com_code == CC || com_code == CE || + com_code == DW || com_code == DP || + com_code == RA || com_code == ST) + return 0; + } + + return -1; +} + + +static void ndpi_search_diameter(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + if(packet->tcp) { + int ret = is_diameter(packet); + if(ret == 0) { + NDPI_LOG_INFO(ndpi_struct, "found Diameter\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_DIAMETER, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + + +void init_diameter_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("Diameter", ndpi_struct, *id, + NDPI_PROTOCOL_DIAMETER, ndpi_search_diameter, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, ADD_TO_DETECTION_BITMASK); + + *id += 1; +} + diff --git a/src/components/implementation/simple_nf/ndpi/discord.c b/src/components/implementation/simple_nf/ndpi/discord.c new file mode 100644 index 0000000000..e3e59a7e46 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/discord.c @@ -0,0 +1,89 @@ +/* + * discord.c + * + * Copyright (C) 2022-23 - ntop.org + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_DISCORD + +#include "ndpi_api.h" + +static void ndpi_int_discord_add_connection(struct ndpi_detection_module_struct * const ndpi_struct, + struct ndpi_flow_struct * const flow) +{ + NDPI_LOG_INFO(ndpi_struct, "found discord\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, + NDPI_PROTOCOL_DISCORD, + NDPI_PROTOCOL_UNKNOWN, + NDPI_CONFIDENCE_DPI); +} + +static void ndpi_search_discord(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct const * const packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search discord\n"); + + if (packet->payload_packet_len == 8 && + ntohl(get_u_int32_t(packet->payload, 0)) == 0x1337cafe) + { + ndpi_int_discord_add_connection(ndpi_struct, flow); + return; + } + + if (packet->payload_packet_len == 74) + { + if (flow->packet_counter == 1 && + ntohl(get_u_int32_t(packet->payload, 0)) == 0x00010046) + { + /* Wait for the next packet, hopefully beeing able to dissect the client IP. */ + return; + } + + if (flow->packet_counter == 2 && + ntohl(get_u_int32_t(packet->payload, 0)) == 0x00020046) + { + /* Dissect client IP. */ + size_t len = sizeof(flow->protos.discord.client_ip) - 1; + strncpy(flow->protos.discord.client_ip, (char const *)&packet->payload[8], len); + flow->protos.discord.client_ip[len] = '\0'; + ndpi_int_discord_add_connection(ndpi_struct, flow); + return; + } + } + + if (flow->packet_counter >= 5) + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + +void init_discord_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("Discord", ndpi_struct, *id, + NDPI_PROTOCOL_DISCORD, + ndpi_search_discord, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK + ); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/dnp3.c b/src/components/implementation/simple_nf/ndpi/dnp3.c new file mode 100644 index 0000000000..9361d8bfd0 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/dnp3.c @@ -0,0 +1,67 @@ +/* + * dnp3.c + * + * Copyright (C) 2011-22 - ntop.org + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + * Created by Cesar HM + * + */ + +#include "ndpi_protocol_ids.h" +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_DNP3 +#include "ndpi_api.h" + +/* + https://www.ixiacom.com/company/blog/scada-distributed-network-protocol-dnp3 +*/ + +/* ******************************************************** */ + +static void ndpi_search_dnp3_tcp(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search DNP3\n"); + + if(packet->tcp) { + /* The payload of DNP3 is 10 bytes long. + * Header bytes: 0x0564 + */ + if ((packet->payload_packet_len >= 10) + && (packet->payload[0] == 0x05) + && (packet->payload[1] == 0x64)) { + NDPI_LOG_INFO(ndpi_struct, "found DNP3\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_DNP3, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } + } + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + +} + +/* ******************************************************** */ + +void init_dnp3_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id) { + + ndpi_set_bitmask_protocol_detection("DNP3", ndpi_struct, *id, + NDPI_PROTOCOL_DNP3, + ndpi_search_dnp3_tcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/dns.c b/src/components/implementation/simple_nf/ndpi/dns.c new file mode 100644 index 0000000000..d99e94e8be --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/dns.c @@ -0,0 +1,838 @@ +/* + * dns.c + * + * Copyright (C) 2012-22 - ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_DNS + +#include "ndpi_api.h" + +#define FLAGS_MASK 0x8000 + +/* #define DNS_DEBUG 1 */ + +#define DNS_PORT 53 +#define LLMNR_PORT 5355 +#define MDNS_PORT 5353 + +#define PKT_LEN_ALERT 512 + +/* ndpi_main.c */ +extern u_int8_t ndpi_iph_is_valid_and_not_fragmented(const struct ndpi_iphdr *iph, const u_int16_t ipsize); + +static void ndpi_search_dns(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow); + +/* *********************************************** */ + +static void ndpi_check_dns_type(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, + u_int16_t dns_type) { + /* https://en.wikipedia.org/wiki/List_of_DNS_record_types */ + + switch(dns_type) { + /* Obsolete record types */ + case 3: + case 4: + case 254: + case 7: + case 8: + case 9: + case 14: + case 253: + case 11: + /* case 33: */ /* SRV */ + case 10: + case 38: + case 30: + case 25: + case 24: + case 13: + case 17: + case 19: + case 20: + case 21: + case 22: + case 23: + case 26: + case 31: + case 32: + case 34: + case 42: + case 40: + case 27: + case 100: + case 101: + case 102: + case 103: + case 99: + case 56: + case 57: + case 58: + case 104: + case 105: + case 106: + case 107: + case 259: + ndpi_set_risk(ndpi_struct, flow, NDPI_DNS_SUSPICIOUS_TRAFFIC, "Obsolete DNS record type"); + break; + } +} + +/* *********************************************** */ + +static u_int16_t checkPort(u_int16_t port) { + switch(port) { + case DNS_PORT: + return(NDPI_PROTOCOL_DNS); + case LLMNR_PORT: + return(NDPI_PROTOCOL_LLMNR); + case MDNS_PORT: + return(NDPI_PROTOCOL_MDNS); + } + + return(0); +} + +/* *********************************************** */ + +static int isMDNSMulticastAddress(struct ndpi_packet_struct * const packet) +{ + return (packet->iph && ntohl(packet->iph->daddr) == 0xE00000FB /* multicast: 224.0.0.251 */) || + (packet->iphv6 && ntohl(packet->iphv6->ip6_dst.u6_addr.u6_addr32[0]) == 0xFF020000 && + ntohl(packet->iphv6->ip6_dst.u6_addr.u6_addr32[1]) == 0x00000000 && + ntohl(packet->iphv6->ip6_dst.u6_addr.u6_addr32[2]) == 0x00000000 && + ntohl(packet->iphv6->ip6_dst.u6_addr.u6_addr32[3]) == 0x000000FB /* multicast: FF02::FB */); +} + +static int isLLMNRMulticastAddress(struct ndpi_packet_struct *const packet) +{ + return (packet->iph && ntohl(packet->iph->daddr) == 0xE00000FC /* multicast: 224.0.0.252 */) || + (packet->iphv6 && ntohl(packet->iphv6->ip6_dst.u6_addr.u6_addr32[0]) == 0xFF020000 && + ntohl(packet->iphv6->ip6_dst.u6_addr.u6_addr32[1]) == 0x00000000 && + ntohl(packet->iphv6->ip6_dst.u6_addr.u6_addr32[2]) == 0x00000000 && + ntohl(packet->iphv6->ip6_dst.u6_addr.u6_addr32[3]) == 0x00010003 /* multicast: FF02::1:3 */); +} + +/* *********************************************** */ + +static u_int16_t checkDNSSubprotocol(u_int16_t sport, u_int16_t dport) { + u_int16_t rc = checkPort(sport); + + if(rc == 0) + return(checkPort(dport)); + else + return(rc); +} + +/* *********************************************** */ + +static u_int16_t get16(u_int *i, const u_int8_t *payload) { + u_int16_t v = *(u_int16_t*)&payload[*i]; + + (*i) += 2; + + return(ntohs(v)); +} + +/* *********************************************** */ + +static u_int getNameLength(u_int i, const u_int8_t *payload, u_int payloadLen) { + if(i >= payloadLen) + return(0); + else if(payload[i] == 0x00) + return(1); + else if(payload[i] == 0xC0) + return(2); + else { + u_int8_t len = payload[i]; + u_int8_t off = len + 1; + + if(off == 0) /* Bad packet */ + return(0); + else + return(off + getNameLength(i+off, payload, payloadLen)); + } +} +/* + allowed chars for dns names A-Z 0-9 _ - + Perl script for generation map: + my @M; + for(my $ch=0; $ch < 256; $ch++) { + $M[$ch >> 5] |= 1 << ($ch & 0x1f) if chr($ch) =~ /[a-z0-9_-]/i; + } + print join(',', map { sprintf "0x%08x",$_ } @M),"\n"; +*/ + +static uint32_t dns_validchar[8] = { + 0x00000000,0x03ff2000,0x87fffffe,0x07fffffe,0,0,0,0 +}; + +/* *********************************************** */ + +static char* dns_error_code2string(u_int16_t error_code, char *buf, u_int buf_len) { + switch(error_code) { + case 0: return((char*)"NOERROR"); + case 1: return((char*)"FORMERR"); + case 2: return((char*)"SERVFAIL"); + case 3: return((char*)"NXDOMAIN"); + case 4: return((char*)"NOTIMP"); + case 5: return((char*)"REFUSED"); + case 6: return((char*)"YXDOMAIN"); + case 7: return((char*)"XRRSET"); + case 8: return((char*)"NOTAUTH"); + case 9: return((char*)"NOTZONE"); + + default: + snprintf(buf, buf_len, "%u", error_code); + return(buf); + } +} + +/* *********************************************** */ + +static u_int8_t ndpi_grab_dns_name(struct ndpi_packet_struct *packet, + u_int *off /* payload offset */, + char *_hostname, u_int max_len, + u_int *_hostname_len) { + u_int8_t hostname_is_valid = 1; + u_int j = 0; + + max_len--; + + while((j < max_len) + && ((*off) < packet->payload_packet_len) + && (packet->payload[(*off)] != '\0')) { + u_int8_t c, cl = packet->payload[(*off)++]; + + if(((cl & 0xc0) != 0) || // we not support compressed names in query + ((*off) + cl >= packet->payload_packet_len)) { + j = 0; + break; + } + + if(j && (j < max_len)) _hostname[j++] = '.'; + + while((j < max_len) && (cl != 0)) { + u_int32_t shift; + + c = packet->payload[(*off)++]; + shift = ((u_int32_t) 1) << (c & 0x1f); + + if((dns_validchar[c >> 5] & shift)) { + _hostname[j++] = tolower(c); + } else { + if (isprint(c) == 0) { + hostname_is_valid = 0; + _hostname[j++] = '?'; + } else { + _hostname[j++] = '_'; + } + } + + cl--; + } + } + + _hostname[j] = '\0', *_hostname_len = j; + + return(hostname_is_valid); +} + +/* *********************************************** */ + +static int search_valid_dns(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, + struct ndpi_dns_packet_header *dns_header, + u_int payload_offset, u_int8_t *is_query) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + u_int x = payload_offset; + + memcpy(dns_header, (struct ndpi_dns_packet_header*)&packet->payload[x], + sizeof(struct ndpi_dns_packet_header)); + + dns_header->tr_id = ntohs(dns_header->tr_id); + dns_header->flags = ntohs(dns_header->flags); + dns_header->num_queries = ntohs(dns_header->num_queries); + dns_header->num_answers = ntohs(dns_header->num_answers); + dns_header->authority_rrs = ntohs(dns_header->authority_rrs); + dns_header->additional_rrs = ntohs(dns_header->additional_rrs); + + x += sizeof(struct ndpi_dns_packet_header); + + /* 0x0000 QUERY */ + if((dns_header->flags & FLAGS_MASK) == 0x0000) + *is_query = 1; + /* 0x8000 RESPONSE */ + else + *is_query = 0; + + if(*is_query) { + /* DNS Request */ + if((dns_header->num_queries <= NDPI_MAX_DNS_REQUESTS) + // && (dns_header->num_answers == 0) + && (((dns_header->flags & 0x2800) == 0x2800 /* Dynamic DNS Update */) + || ((dns_header->flags & 0xFCF0) == 0x00) /* Standard Query */ + || ((dns_header->flags & 0xFCFF) == 0x0800) /* Inverse query */ + || ((dns_header->num_answers == 0) && (dns_header->authority_rrs == 0)))) { + /* This is a good query */ + while(x+2 < packet->payload_packet_len) { + if(packet->payload[x] == '\0') { + x++; + flow->protos.dns.query_type = get16(&x, packet->payload); +#ifdef DNS_DEBUG + NDPI_LOG_DBG2(ndpi_struct, "query_type=%2d\n", flow->protos.dns.query_type); + printf("[DNS] [request] query_type=%d\n", flow->protos.dns.query_type); +#endif + break; + } else + x++; + } + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_MALFORMED_PACKET, "Invalid DNS Header"); + return(1 /* invalid */); + } + } else { + /* DNS Reply */ + + if(flow->protos.dns.query_type == 0) { + /* In case we missed the query packet... */ + + while(x+2 < packet->payload_packet_len) { + if(packet->payload[x] == '\0') { + x++; + flow->protos.dns.query_type = get16(&x, packet->payload); +#ifdef DNS_DEBUG + NDPI_LOG_DBG2(ndpi_struct, "query_type=%2d\n", flow->protos.dns.query_type); + printf("[DNS] [request] query_type=%d\n", flow->protos.dns.query_type); +#endif + break; + } else + x++; + } + } + + flow->protos.dns.reply_code = dns_header->flags & 0x0F; + + if(flow->protos.dns.reply_code != 0) { + char str[32], buf[16]; + + snprintf(str, sizeof(str), "DNS Error Code %s", + dns_error_code2string(flow->protos.dns.reply_code, buf, sizeof(buf))); + ndpi_set_risk(ndpi_struct, flow, NDPI_ERROR_CODE_DETECTED, str); + } else { + if(ndpi_isset_risk(ndpi_struct, flow, NDPI_SUSPICIOUS_DGA_DOMAIN)) { + ndpi_set_risk(ndpi_struct, flow, NDPI_RISKY_DOMAIN, "DGA Name Query with no Error Code"); + } + } + + if((dns_header->num_queries > 0) && (dns_header->num_queries <= NDPI_MAX_DNS_REQUESTS) /* Don't assume that num_queries must be zero */ + && ((((dns_header->num_answers > 0) && (dns_header->num_answers <= NDPI_MAX_DNS_REQUESTS)) + || ((dns_header->authority_rrs > 0) && (dns_header->authority_rrs <= NDPI_MAX_DNS_REQUESTS)) + || ((dns_header->additional_rrs > 0) && (dns_header->additional_rrs <= NDPI_MAX_DNS_REQUESTS)))) + ) { + /* This is a good reply: we dissect it both for request and response */ + + if(dns_header->num_queries > 0) { +#ifdef DNS_DEBUG + u_int16_t rsp_type; +#endif + u_int16_t num; + + for(num = 0; num < dns_header->num_queries; num++) { + u_int16_t data_len; + + if((x+6) >= packet->payload_packet_len) { + break; + } + + if((data_len = getNameLength(x, packet->payload, + packet->payload_packet_len)) == 0) { + break; + } else + x += data_len; + + if((x+8) >= packet->payload_packet_len) { + break; + } + + /* To avoid warning: variable ‘rsp_type’ set but not used [-Wunused-but-set-variable] */ +#ifdef DNS_DEBUG + rsp_type = get16(&x, packet->payload); +#else + get16(&x, packet->payload); +#endif + +#ifdef DNS_DEBUG + printf("[DNS] [response (query)] response_type=%d\n", rsp_type); +#endif + + /* here x points to the response "class" field */ + x += 2; /* Skip class */ + } + } + + if(dns_header->num_answers > 0) { + u_int16_t rsp_type; + u_int32_t rsp_ttl; + u_int16_t num; + u_int8_t found = 0; + + for(num = 0; num < dns_header->num_answers; num++) { + u_int16_t data_len; + + if((x+6) >= packet->payload_packet_len) { + break; + } + + if((data_len = getNameLength(x, packet->payload, + packet->payload_packet_len)) == 0) { + break; + } else + x += data_len; + + if((x+8) >= packet->payload_packet_len) { + break; + } + + rsp_type = get16(&x, packet->payload); + rsp_ttl = ntohl(*((u_int32_t*)&packet->payload[x+2])); + + if(rsp_ttl == 0) + ndpi_set_risk(ndpi_struct, flow, NDPI_MINOR_ISSUES, "DNS Record with zero TTL"); + +#ifdef DNS_DEBUG + printf("[DNS] TTL = %u\n", rsp_ttl); + printf("[DNS] [response] response_type=%d\n", rsp_type); +#endif + + if(found == 0) { + ndpi_check_dns_type(ndpi_struct, flow, rsp_type); + flow->protos.dns.rsp_type = rsp_type; + } + + /* x points to the response "class" field */ + if((x+12) <= packet->payload_packet_len) { + x += 6; + data_len = get16(&x, packet->payload); + + if((x + data_len) <= packet->payload_packet_len) { +#ifdef DNS_DEBUG + printf("[DNS] [rsp_type: %u][data_len: %u]\n", rsp_type, data_len); +#endif + + if(rsp_type == 0x05 /* CNAME */) { + ; + } else if(rsp_type == 0x0C /* PTR */) { + u_int16_t ptr_len = (packet->payload[x-2] << 8) + packet->payload[x-1]; + + if((x + ptr_len) <= packet->payload_packet_len) { + if(found == 0) { + u_int len; + + ndpi_grab_dns_name(packet, &x, + flow->protos.dns.ptr_domain_name, + sizeof(flow->protos.dns.ptr_domain_name), &len); + found = 1; + } + } + } else if((((rsp_type == 0x1) && (data_len == 4)) /* A */ + || ((rsp_type == 0x1c) && (data_len == 16)) /* AAAA */ + )) { + if(found == 0) { + memcpy(&flow->protos.dns.rsp_addr, packet->payload + x, data_len); + found = 1; + } + } + + x += data_len; + } + } + + if(found && (dns_header->additional_rrs == 0)) { + /* + In case we have RR we need to iterate + all the answers and not just consider the + first one as we need to properly move 'x' + to the right offset + */ + break; + } + } + } + + if(dns_header->additional_rrs > 0) { + /* + Dissect the rest of the packet only if there are + additional_rrs as we need to check fo EDNS(0) + + In this case we need to go through the whole packet + as we need to update the 'x' offset + */ + if(dns_header->authority_rrs > 0) { +#ifdef DNS_DEBUG + u_int16_t rsp_type; +#endif + u_int16_t num; + + for(num = 0; num < dns_header->authority_rrs; num++) { + u_int16_t data_len; + + if((x+6) >= packet->payload_packet_len) { + break; + } + + if((data_len = getNameLength(x, packet->payload, + packet->payload_packet_len)) == 0) { + break; + } else + x += data_len; + + if((x+8) >= packet->payload_packet_len) { + break; + } + + /* To avoid warning: variable ‘rsp_type’ set but not used [-Wunused-but-set-variable] */ +#ifdef DNS_DEBUG + rsp_type = get16(&x, packet->payload); +#else + get16(&x, packet->payload); +#endif + +#ifdef DNS_DEBUG + printf("[DNS] [RRS response] response_type=%d\n", rsp_type); +#endif + + /* here x points to the response "class" field */ + if((x+12) <= packet->payload_packet_len) { + x += 6; + data_len = get16(&x, packet->payload); + + if((x + data_len) <= packet->payload_packet_len) + x += data_len; + } + } + } + + if(dns_header->additional_rrs > 0) { + u_int16_t rsp_type; + u_int16_t num; + + for(num = 0; num < dns_header->additional_rrs; num++) { + u_int16_t data_len; + + if((x+6) > packet->payload_packet_len) { + break; + } + + if((data_len = getNameLength(x, packet->payload, packet->payload_packet_len)) == 0) { + break; + } else + x += data_len; + + if((x+10) > packet->payload_packet_len) { + break; + } + + rsp_type = get16(&x, packet->payload); + +#ifdef DNS_DEBUG + printf("[DNS] [RR response] response_type=%d\n", rsp_type); +#endif + + if(rsp_type == 41 /* OPT */) { + /* https://en.wikipedia.org/wiki/Extension_Mechanisms_for_DNS */ + flow->protos.dns.edns0_udp_payload_size = ntohs(*((u_int16_t*)&packet->payload[x])); /* EDNS(0) */ + +#ifdef DNS_DEBUG + printf("[DNS] [response] edns0_udp_payload_size: %u\n", flow->protos.dns.edns0_udp_payload_size); +#endif + x += 6; + } else { + x += 6; + } + + if((data_len = getNameLength(x, packet->payload, packet->payload_packet_len)) == 0) { + break; + } else + x += data_len; + } + } + + if((flow->detected_protocol_stack[0] == NDPI_PROTOCOL_DNS) + || (flow->detected_protocol_stack[1] == NDPI_PROTOCOL_DNS)) { + /* Request already set the protocol */ + // flow->extra_packets_func = NULL; /* Removed so the caller can keep dissecting DNS flows */ + } else { + /* We missed the request */ + u_int16_t s_port = packet->udp ? ntohs(packet->udp->source) : ntohs(packet->tcp->source); + + ndpi_set_detected_protocol(ndpi_struct, flow, checkPort(s_port), NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + } + } + } + } + + /* Valid */ + return(0); +} + +/* *********************************************** */ + +static int search_dns_again(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { + /* possibly dissect the DNS reply */ + ndpi_search_dns(ndpi_struct, flow); + + if(flow->protos.dns.num_answers != 0) + return(0); + + /* Possibly more processing */ + return(1); +} + +/* *********************************************** */ + +static void ndpi_search_dns(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + int payload_offset; + u_int8_t is_query; + u_int16_t s_port = 0, d_port = 0; + + NDPI_LOG_DBG(ndpi_struct, "search DNS\n"); + + if(packet->udp != NULL) { + s_port = ntohs(packet->udp->source); + d_port = ntohs(packet->udp->dest); + payload_offset = 0; + + /* For MDNS/LLMNR: If the packet is not a response, dest addr needs to be multicast. */ + if ((d_port == MDNS_PORT && isMDNSMulticastAddress(packet) == 0) || + (d_port == LLMNR_PORT && isLLMNRMulticastAddress(packet) == 0)) + { + if (packet->payload_packet_len > 5 && + ntohs(get_u_int16_t(packet->payload, 2)) != 0 && + ntohs(get_u_int16_t(packet->payload, 4)) != 0) + { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + } + } else if(packet->tcp != NULL) /* pkt size > 512 bytes */ { + s_port = ntohs(packet->tcp->source); + d_port = ntohs(packet->tcp->dest); + payload_offset = 2; + } + + if(((s_port == DNS_PORT) || (d_port == DNS_PORT) + || (s_port == MDNS_PORT) || (d_port == MDNS_PORT) + || (d_port == LLMNR_PORT)) + && (packet->payload_packet_len > sizeof(struct ndpi_dns_packet_header)+payload_offset)) { + struct ndpi_dns_packet_header dns_header; + u_int len, off; + int invalid = search_valid_dns(ndpi_struct, flow, &dns_header, payload_offset, &is_query); + ndpi_protocol ret; + u_int num_queries, idx; + char _hostname[256]; + + ret.master_protocol = NDPI_PROTOCOL_UNKNOWN; + ret.app_protocol = (d_port == LLMNR_PORT) ? NDPI_PROTOCOL_LLMNR : ((d_port == MDNS_PORT) ? NDPI_PROTOCOL_MDNS : NDPI_PROTOCOL_DNS); + + if(invalid) { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + /* extract host name server */ + off = sizeof(struct ndpi_dns_packet_header) + payload_offset; + + /* Before continuing let's dissect the following queries to see if they are valid */ + for(idx=off, num_queries=0; (num_queries < dns_header.num_queries) && (idx < packet->payload_packet_len);) { + u_int32_t i, tot_len = 0; + + for(i=idx; ipayload_packet_len;) { + u_int8_t is_ptr = 0, name_len = packet->payload[i]; /* Lenght of the individual name blocks aaa.bbb.com */ + + if(name_len == 0) { + tot_len++; /* \0 */ + /* End of query */ + break; + } else if((name_len & 0xC0) == 0xC0) + is_ptr = 1, name_len = 0; /* Pointer */ + +#ifdef DNS_DEBUG + if((!is_ptr) && (name_len > 0)) { + printf("[DNS] [name_len: %u][", name_len); + + { + int idx; + + for(idx=0; idxpayload[i+1+idx]); + + printf("]\n"); + } + } +#endif + + i += name_len+1, tot_len += name_len+1; + if(is_ptr) break; + } /* for */ + +#ifdef DNS_DEBUG + printf("[DNS] [tot_len: %u]\n\n", tot_len+4 /* type + class */); +#endif + + if(((i+4 /* Skip query type and class */) > packet->payload_packet_len) + || ((packet->payload[i+1] == 0x0) && (packet->payload[i+2] == 0x0)) /* Query type cannot be 0 */ + || (tot_len > 253) + ) { + /* Invalid */ +#ifdef DNS_DEBUG + printf("[DNS] Invalid query len [%u >= %u]\n", i+4, packet->payload_packet_len); +#endif + ndpi_set_risk(ndpi_struct, flow, NDPI_MALFORMED_PACKET, "Invalid DNS Query Lenght"); + break; + } else { + idx = i+5, num_queries++; + } + } /* for */ + + u_int8_t hostname_is_valid = ndpi_grab_dns_name(packet, &off, _hostname, sizeof(_hostname), &len); + + ndpi_hostname_sni_set(flow, (const u_int8_t *)_hostname, len); + + if (hostname_is_valid == 0) + ndpi_set_risk(ndpi_struct, flow, NDPI_INVALID_CHARACTERS, NULL); + + if(len > 0) { + ndpi_protocol_match_result ret_match; + + ret.app_protocol = ndpi_match_host_subprotocol(ndpi_struct, flow, + flow->host_server_name, + strlen(flow->host_server_name), + &ret_match, + NDPI_PROTOCOL_DNS); + + /* Category is always NDPI_PROTOCOL_CATEGORY_NETWORK, regardless of the subprotocol */ + flow->category = NDPI_PROTOCOL_CATEGORY_NETWORK; + + if(ret.app_protocol == NDPI_PROTOCOL_UNKNOWN) + ret.master_protocol = checkDNSSubprotocol(s_port, d_port); + else + ret.master_protocol = NDPI_PROTOCOL_DNS; + + ndpi_check_dga_name(ndpi_struct, flow, flow->host_server_name, 1, 0); + } + + /* Report if this is a DNS query or reply */ + flow->protos.dns.is_query = is_query; + + if(is_query) { + /* In this case we say that the protocol has been detected just to let apps carry on with their activities */ + ndpi_set_detected_protocol(ndpi_struct, flow, ret.app_protocol, ret.master_protocol, NDPI_CONFIDENCE_DPI); + + /* We have never triggered extra-dissection for LLMNR. Keep the old behaviour */ + if(ret.master_protocol != NDPI_PROTOCOL_LLMNR) { + /* Don't use just 1 as in TCP DNS more packets could be returned (e.g. ACK). */ + flow->max_extra_packets_to_check = 5; + flow->extra_packets_func = search_dns_again; + } + return; /* The response will set the verdict */ + } + + flow->protos.dns.num_queries = (u_int8_t)dns_header.num_queries, + flow->protos.dns.num_answers = (u_int8_t) (dns_header.num_answers + dns_header.authority_rrs + dns_header.additional_rrs); + +#ifdef DNS_DEBUG + NDPI_LOG_DBG2(ndpi_struct, "[num_queries=%d][num_answers=%d][reply_code=%u][rsp_type=%u][host_server_name=%s]\n", + flow->protos.dns.num_queries, flow->protos.dns.num_answers, + flow->protos.dns.reply_code, flow->protos.dns.rsp_type, flow->host_server_name + ); +#endif + + if(flow->detected_protocol_stack[0] == NDPI_PROTOCOL_UNKNOWN) { + /** + Do not set the protocol with DNS if ndpi_match_host_subprotocol() has + matched a subprotocol + **/ + NDPI_LOG_INFO(ndpi_struct, "found DNS\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, ret.app_protocol, ret.master_protocol, NDPI_CONFIDENCE_DPI); + } else { + if((flow->detected_protocol_stack[0] == NDPI_PROTOCOL_DNS) + || (flow->detected_protocol_stack[1] == NDPI_PROTOCOL_DNS)) + ; + else + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + } + } + + if(flow->packet_counter > 3) + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + + if((flow->detected_protocol_stack[0] == NDPI_PROTOCOL_DNS) + || (flow->detected_protocol_stack[1] == NDPI_PROTOCOL_DNS)) { + /* TODO: add support to RFC6891 to avoid some false positives */ + if((packet->udp != NULL) + && (packet->payload_packet_len > PKT_LEN_ALERT) + && (packet->payload_packet_len > flow->protos.dns.edns0_udp_payload_size) + ) { + char str[48]; + + snprintf(str, sizeof(str), "%u Bytes DNS Packet", packet->payload_packet_len); + ndpi_set_risk(ndpi_struct, flow, NDPI_DNS_LARGE_PACKET, str); + } + + if(packet->iph != NULL) { + /* IPv4 */ + u_int8_t flags = ((u_int8_t*)packet->iph)[6]; + + /* 0: fragmented; 1: not fragmented */ + if((flags & 0x20) + || (ndpi_iph_is_valid_and_not_fragmented(packet->iph, packet->l3_packet_len) == 0)) { + ndpi_set_risk(ndpi_struct, flow, NDPI_DNS_FRAGMENTED, NULL); + } + } else if(packet->iphv6 != NULL) { + /* IPv6 */ + const struct ndpi_ip6_hdrctl *ip6_hdr = &packet->iphv6->ip6_hdr; + + if(ip6_hdr->ip6_un1_nxt == 0x2C /* Next Header: Fragment Header for IPv6 (44) */) { + ndpi_set_risk(ndpi_struct, flow, NDPI_DNS_FRAGMENTED, NULL); + } + } + } +} + +/* *********************************************** */ + +void init_dns_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id) { + ndpi_set_bitmask_protocol_detection("DNS", ndpi_struct, *id, + NDPI_PROTOCOL_DNS, + ndpi_search_dns, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; + +} diff --git a/src/components/implementation/simple_nf/ndpi/dnscrypt.c b/src/components/implementation/simple_nf/ndpi/dnscrypt.c new file mode 100644 index 0000000000..69b827f3d6 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/dnscrypt.c @@ -0,0 +1,77 @@ +/* + * dnscrypt.c + * + * Copyright (C) 2020 - ntop.org + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_DNSCRYPT + +#include "ndpi_api.h" + +static void ndpi_int_dnscrypt_add_connection(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_DNSCRYPT, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + +static void ndpi_search_dnscrypt(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + static char const * const dnscrypt_initial = "2\rdnscrypt"; + + NDPI_LOG_DBG(ndpi_struct, "search dnscrypt\n"); + + /* dnscrypt protocol version 1: check magic */ + if (packet->payload_packet_len >= 64 && + strncmp((char*)packet->payload, "r6fnvWj8", strlen("r6fnvWj8")) == 0) + { + ndpi_int_dnscrypt_add_connection(ndpi_struct, flow); + return; + } + /* dnscrypt protocol version 1 and 2: resolver ping */ + if (packet->payload_packet_len > 13 + strlen(dnscrypt_initial) && + strncasecmp((char*)packet->payload + 13, dnscrypt_initial, strlen(dnscrypt_initial)) == 0) + { + ndpi_int_dnscrypt_add_connection(ndpi_struct, flow); + return; + } + + if ((flow->packet_direction_counter[packet->packet_direction] >= 1 && + flow->packet_direction_counter[1 - packet->packet_direction] >= 1) || + flow->packet_counter >= 10) + { + /* + * Wait for at least one packet per direction, but not more then 10 packets. + * Required as we need to wait for the server response which contains the ASCII pattern below. + */ + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } +} + +void init_dnscrypt_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection( + "DNScrypt", ndpi_struct, *id, + NDPI_PROTOCOL_DNSCRYPT, ndpi_search_dnscrypt, NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, ADD_TO_DETECTION_BITMASK); + *id += 1; +} + diff --git a/src/components/implementation/simple_nf/ndpi/dofus.c b/src/components/implementation/simple_nf/ndpi/dofus.c new file mode 100644 index 0000000000..5357fc96fd --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/dofus.c @@ -0,0 +1,152 @@ +/* + * dofus.c + * + * Copyright (C) 2009-11 - ipoque GmbH + * Copyright (C) 2011-22 - ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_DOFUS + +#include "ndpi_api.h" + +static void ndpi_dofus_add_connection(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_DOFUS, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + NDPI_LOG_INFO(ndpi_struct, "found dofus\n"); +} + +static void ndpi_search_dofus(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search dofus\n"); + + /* Dofus v 1.x.x */ + if (packet->payload_packet_len == 13 && get_u_int16_t(packet->payload, 1) == ntohs(0x0508) + && get_u_int16_t(packet->payload, 5) == ntohs(0x04a0) + && get_u_int16_t(packet->payload, packet->payload_packet_len - 2) == ntohs(0x0194)) { + ndpi_dofus_add_connection(ndpi_struct, flow); + return; + } + if (flow->l4.tcp.dofus_stage == 0) { + if (packet->payload_packet_len == 3 && memcmp(packet->payload, "HG", 2) == 0 + && packet->payload[packet->payload_packet_len - 1] == 0) + goto maybe_dofus; + + if (packet->payload_packet_len == 12 && memcmp(packet->payload, "Af", 2) == 0 + && packet->payload[packet->payload_packet_len - 1] == 0) + goto maybe_dofus; + + if (packet->payload_packet_len == 35 && memcmp(packet->payload, "HC", 2) == 0 + && packet->payload[packet->payload_packet_len - 1] == 0) + goto maybe_dofus; + + if (packet->payload_packet_len > 2 && packet->payload[0] == 'A' + && (packet->payload[1] == 'x' || packet->payload[1] == 'X') + && packet->payload[packet->payload_packet_len - 1] == 0) + goto maybe_dofus; + + if (packet->payload_packet_len > 2 && memcmp(packet->payload, "Ad", 2) + && packet->payload[packet->payload_packet_len - 1] == 0) + goto maybe_dofus; + + } + if (flow->l4.tcp.dofus_stage == 1) { + if (packet->payload_packet_len == 11 && memcmp(packet->payload, "AT", 2) == 0 + && packet->payload[10] == 0x00) { + ndpi_dofus_add_connection(ndpi_struct, flow); + return; + } + if (packet->payload_packet_len == 5 + && packet->payload[0] == 'A' && packet->payload[4] == 0x00 + && (packet->payload[1] == 'T' || packet->payload[1] == 'k')) { + ndpi_dofus_add_connection(ndpi_struct, flow); + return; + } + } + /* end Dofus 1.x.x */ + + + /* Dofus 2.0 */ + if ((packet->payload_packet_len == 11 || packet->payload_packet_len == 13 || packet->payload_packet_len == 49) + && get_u_int32_t(packet->payload, 0) == ntohl(0x00050800) + && get_u_int16_t(packet->payload, 4) == ntohs(0x0005) + && get_u_int16_t(packet->payload, 8) == ntohs(0x0005) + && packet->payload[10] == 0x18) { + if (packet->payload_packet_len == 13 + && get_u_int16_t(packet->payload, packet->payload_packet_len - 2) != ntohs(0x0194)) { + goto exclude; + } + if (packet->payload_packet_len == 49 && ntohs(get_u_int16_t(packet->payload, 15)) + 17 != packet->payload_packet_len) { + goto exclude; + } + ndpi_dofus_add_connection(ndpi_struct, flow); + return; + } + if (packet->payload_packet_len >= 41 && get_u_int16_t(packet->payload, 0) == ntohs(0x01b9) && packet->payload[2] == 0x26) { + u_int16_t len, len2; + len = ntohs(get_u_int16_t(packet->payload, 3)); + if ((len + 5 + 2) > packet->payload_packet_len) + goto exclude; + len2 = ntohs(get_u_int16_t(packet->payload, 5 + len)); + if (5 + len + 2 + len2 == packet->payload_packet_len) { + ndpi_dofus_add_connection(ndpi_struct, flow); + return; + } + } + if (packet->payload_packet_len == 56 + && memcmp(packet->payload, "\x00\x11\x35\x02\x03\x00\x93\x96\x01\x00", 10) == 0) { + u_int16_t len, len2; + len = ntohs(get_u_int16_t(packet->payload, 10)); + if ((len + 12 + 2) > packet->payload_packet_len) + goto exclude; + len2 = ntohs(get_u_int16_t(packet->payload, 12 + len)); + if ((12 + len + 2 + len2 + 1) > packet->payload_packet_len) + goto exclude; + if (12 + len + 2 + len2 + 1 == packet->payload_packet_len && packet->payload[12 + len + 2 + len2] == 0x01) { + ndpi_dofus_add_connection(ndpi_struct, flow); + return; + } + } +exclude: + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + +maybe_dofus: + flow->l4.tcp.dofus_stage = 1; + NDPI_LOG_DBG2(ndpi_struct, "maybe dofus\n"); + return; + +} + +void init_dofus_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("Dofus", ndpi_struct, *id, + NDPI_PROTOCOL_DOFUS, + ndpi_search_dofus, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} + diff --git a/src/components/implementation/simple_nf/ndpi/drda.c b/src/components/implementation/simple_nf/ndpi/drda.c new file mode 100644 index 0000000000..dd39afdc6b --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/drda.c @@ -0,0 +1,102 @@ +/* + * drda.c + * + * Copyright (C) 2012-22 - ntop.org + * + * This module is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This module is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License. + * If not, see . + * + */ +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_DRDA + +#include "ndpi_api.h" + +struct ndpi_drda_hdr { + u_int16_t length; + u_int8_t magic; + u_int8_t format; + u_int16_t correlID; + u_int16_t length2; + u_int16_t code_pnt; +}; + + +static void ndpi_search_drda(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct * packet = &ndpi_struct->packet; + u_int16_t payload_len = packet->payload_packet_len; + u_int count = 0; // prevent integer overflow + + NDPI_LOG_DBG(ndpi_struct, "search DRDA\n"); + + if(packet->tcp != NULL) { + + /* check port */ + if(payload_len >= sizeof(struct ndpi_drda_hdr)) { + + struct ndpi_drda_hdr * drda = (struct ndpi_drda_hdr *) packet->payload; + + u_int16_t len = ntohs(drda->length); + + /* check first header */ + if(len != ntohs(drda->length2) + 6 || + drda->magic != 0xd0) + goto no_drda; + + /* check if there are more drda headers */ + if(payload_len > len) { + + count = len; + + while(count + sizeof(struct ndpi_drda_hdr) < payload_len) + { + /* update info */ + drda = (struct ndpi_drda_hdr *)(packet->payload + count); + len = ntohs(drda->length); + + if(len != ntohs(drda->length2) + 6 || + drda->magic != 0xd0) + goto no_drda; + + count += len; + } + if(count != payload_len) goto no_drda; + } + NDPI_LOG_INFO(ndpi_struct, "found DRDA\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_DRDA, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } + } + + no_drda: + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + + +/* ***************************************************************** */ + + +void init_drda_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("DRDA", ndpi_struct, *id, + NDPI_PROTOCOL_DRDA, + ndpi_search_drda, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/dropbox.c b/src/components/implementation/simple_nf/ndpi/dropbox.c new file mode 100644 index 0000000000..af4bc819cd --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/dropbox.c @@ -0,0 +1,93 @@ +/* + * dropbox.c + * + * Copyright (C) 2012-18 by ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_DROPBOX + +#include "ndpi_api.h" + + +#define DB_LSP_PORT 17500 + +static void ndpi_int_dropbox_add_connection(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, + u_int8_t due_to_correlation) { + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_DROPBOX, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + + +static void ndpi_check_dropbox(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + // const u_int8_t *packet_payload = packet->payload; + u_int32_t payload_len = packet->payload_packet_len; + + if(packet->udp != NULL) { + u_int16_t dropbox_port = htons(DB_LSP_PORT); + + if(packet->udp->dest == dropbox_port) { + if(packet->udp->source == dropbox_port) { + if(payload_len > 10) { + if(ndpi_strnstr((const char *)packet->payload, "\"host_int\"", payload_len) != NULL) { + NDPI_LOG_INFO(ndpi_struct, "found dropbox\n"); + ndpi_int_dropbox_add_connection(ndpi_struct, flow, 0); + return; + } + } + } else { + if(payload_len > 10) { + if(ndpi_strnstr((const char *)packet->payload, "Bus17Cmd", payload_len) != NULL) { + NDPI_LOG_INFO(ndpi_struct, "found dropbox\n"); + ndpi_int_dropbox_add_connection(ndpi_struct, flow, 0); + return; + } + } + } + } + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + +static void ndpi_search_dropbox(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + NDPI_LOG_DBG(ndpi_struct, "search dropbox\n"); + + /* skip marked packets */ + if (flow->detected_protocol_stack[0] != NDPI_PROTOCOL_DROPBOX) { + ndpi_check_dropbox(ndpi_struct, flow); + } +} + + +void init_dropbox_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("DROPBOX", ndpi_struct, *id, + NDPI_PROTOCOL_DROPBOX, + ndpi_search_dropbox, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/eaq.c b/src/components/implementation/simple_nf/ndpi/eaq.c new file mode 100644 index 0000000000..d01cae9d3d --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/eaq.c @@ -0,0 +1,92 @@ +/* + * eaq.c + * + * Copyright (C) 2015-22 - ntop.org + * + * This module is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This module is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License. + * If not, see . + * + */ + + +/* + EAQ: Entitade Aferidora da Qualidade de Banda Larga + + http://www.brasilbandalarga.com.br + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_EAQ + +#include "ndpi_api.h" + +#define EAQ_DEFAULT_PORT 6000 +#define EAQ_DEFAULT_SIZE 16 + +static void ndpi_int_eaq_add_connection(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_EAQ, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + + +static void ndpi_search_eaq(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + u_int16_t sport = ntohs(packet->udp->source), dport = ntohs(packet->udp->dest); + + NDPI_LOG_DBG(ndpi_struct, "search eaq\n"); + + do { + if( (packet->payload_packet_len != EAQ_DEFAULT_SIZE) || + ((sport != EAQ_DEFAULT_PORT) && (dport != EAQ_DEFAULT_PORT)) ) + break; + + if(packet->udp != NULL) { + u_int32_t seq = (packet->payload[0] * 1000) + (packet->payload[1] * 100) + (packet->payload[2] * 10) + packet->payload[3]; + + if(flow->l4.udp.eaq_pkt_id == 0) + flow->l4.udp.eaq_sequence = seq; + else { + if( (flow->l4.udp.eaq_sequence != seq) && + ((flow->l4.udp.eaq_sequence+1) != seq)) + break; + else + flow->l4.udp.eaq_sequence = seq; + } + + if(++flow->l4.udp.eaq_pkt_id == 4) { + /* We have collected enough packets so we assume it's EAQ */ + NDPI_LOG_INFO(ndpi_struct, "found eaq\n"); + ndpi_int_eaq_add_connection(ndpi_struct, flow); + return; + } else + return; + } + } while(0); + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + +} + + +void init_eaq_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("EAQ", ndpi_struct, *id, + NDPI_PROTOCOL_EAQ, + ndpi_search_eaq, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/edonkey.c b/src/components/implementation/simple_nf/ndpi/edonkey.c new file mode 100644 index 0000000000..be1fae412b --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/edonkey.c @@ -0,0 +1,222 @@ +/* + * edonkey.c + * + * Copyright (C) 2014 Tomasz Bujlow + * + * The signature is based on the Libprotoident library. + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_EDONKEY + +#include "ndpi_api.h" + + +static void ndpi_int_edonkey_add_connection(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_EDONKEY, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + +static int ndpi_edonkey_payload_check(const u_int8_t *data, u_int32_t len) { + if((len >= 4) && (data[0] == 0xe3) && (data[2] == 0x00) && (data[3] == 0x00)) + return 1; + + if((len >= 4) && (data[0] == 0xc5) && (data[2] == 0x00) && (data[3] == 0x00)) + return 1; + + if((len >= 2) && (data[0] == 0xe5) && (data[1] == 0x43)) + return 1; + + if((len >= 4) && (data[0] == 0xe5) && (data[1] == 0x08) && (data[2] == 0x78) && (data[3] == 0xda)) + return 1; + + if((len >= 4) && (data[0] == 0xe5) && (data[1] == 0x28) && (data[2] == 0x78) && (data[3] == 0xda)) + return 1; + + if((len >= 2) && (data[0] == 0xc5) && (data[1] == 0x90)) + return 1; + + if((len >= 2) && (data[0] == 0xc5) && (data[1] == 0x91)) + return 1; + + if((len == 2) && (data[0] == 0xc5) && (data[1] == 0x92)) + return 1; + + if((len == 2) && (data[0] == 0xc5) && (data[1] == 0x93)) + return 1; + + if((len >= 38 && len <= 70) && (data[0] == 0xc5) && (data[1] == 0x94)) + return 1; + + if((len >= 2) && (data[0] == 0xe3) && (data[1] == 0x9a)) + return 1; + + if((len >= 2) && (data[0] == 0xe3) && (data[1] == 0x9b)) + return 1; + + if((len == 6) && (data[0] == 0xe3) && (data[1] == 0x96)) + return 1; + + if((len <= 34 && ((len - 2) % 4 == 0)) && (data[0] == 0xe3) && (data[1] == 0x97)) + return 1; + + if((len >= 2) && (data[0] == 0xe3) && (data[1] == 0x92)) + return 1; + + if((len >= 2) && (data[0] == 0xe3) && (data[1] == 0x94)) + return 1; + + if((len >= 2) && (data[0] == 0xe3) && (data[1] == 0x98)) + return 1; + + if((len >= 2) && (data[0] == 0xe3) && (data[1] == 0x99)) + return 1; + + if((len == 6) && (data[0] == 0xe3) && (data[1] == 0xa2)) + return 1; + + if((len >= 2) && (data[0] == 0xe3) && (data[1] == 0xa3)) + return 1; + + if((len == 27) && (data[0] == 0xe4) && (data[1] == 0x00)) + return 1; + + if((len == 529) && (data[0] == 0xe4) && (data[1] == 0x08)) + return 1; + + if((len == 18) && (data[0] == 0xe4) && (data[1] == 0x01) && (data[2] == 0x00) && (data[3] == 0x00)) + return 1; + + if((len == 523) && (data[0] == 0xe4) && (data[1] == 0x09)) + return 1; + + if((len == 35) && (data[0] == 0xe4) && (data[1] == 0x21)) + return 1; + + if((len == 19) && (data[0] == 0xe4) && (data[1] == 0x4b)) + return 1; + + if((len >= 2) && (data[0] == 0xe4) && (data[1] == 0x11)) + return 1; + + if((len == 22 || len == 38 || len == 28) && (data[0] == 0xe4) && (data[1] == 0x19)) + return 1; + + if((len == 35) && (data[0] == 0xe4) && (data[1] == 0x20)) + return 1; + + if((len == 27) && (data[0] == 0xe4) && (data[1] == 0x18)) + return 1; + + if((len == 27) && (data[0] == 0xe4) && (data[1] == 0x10)) + return 1; + + if((len == 6) && (data[0] == 0xe4) && (data[1] == 0x58)) + return 1; + + if((len == 4) && (data[0] == 0xe4) && (data[1] == 0x50)) + return 1; + + if((len == 36) && (data[0] == 0xe4) && (data[1] == 0x52)) + return 1; + + if((len == 48) && (data[0] == 0xe4) && (data[1] == 0x40)) + return 1; + + if((len == 225) && (data[0] == 0xe4) && (data[1] == 0x43)) + return 1; + + if((len == 19) && (data[0] == 0xe4) && (data[1] == 0x48)) + return 1; + + if((len == 119 || len == 69 || len == 294) && (data[0] == 0xe4) && (data[1] == 0x29)) + return 1; + + if((len == 119 || len == 69 || len == 294 || len == 44 || len == 269) && (data[0] == 0xe4) && (data[1] == 0x28)) + return 1; + + return 0; +} + +static void ndpi_check_edonkey(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + u_int32_t payload_len = packet->payload_packet_len; + + /* Break after 20 packets. */ + if(flow->packet_counter > 20) { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + /* Check if we so far detected the protocol in the request or not. */ + if(flow->edonkey_stage == 0) { + NDPI_LOG_DBG2(ndpi_struct, "EDONKEY stage 0: \n"); + + if(ndpi_edonkey_payload_check(packet->payload, payload_len)) { + NDPI_LOG_DBG2(ndpi_struct, "Possible EDONKEY request detected, we will look further for the response\n"); + + /* Encode the direction of the packet in the stage, so we will know when we need to look for the response packet. */ + flow->edonkey_stage = packet->packet_direction + 1; + } else + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + } else { + NDPI_LOG_DBG2(ndpi_struct, "EDONKEY stage %u: \n", flow->edonkey_stage); + + /* At first check, if this is for sure a response packet (in another direction. If not, do nothing now and return. */ + if((flow->edonkey_stage - packet->packet_direction) == 1) { + return; + } + + /* This is a packet in another direction. Check if we find the proper response. */ + if(ndpi_edonkey_payload_check(packet->payload, payload_len)) { + NDPI_LOG_INFO(ndpi_struct, "found EDONKEY\n"); + ndpi_int_edonkey_add_connection(ndpi_struct, flow); + } else { + NDPI_LOG_DBG2(ndpi_struct, "The reply did not seem to belong to EDONKEY, resetting the stage to 0\n"); + flow->edonkey_stage = 0; + } + } + + if(flow->packet_counter > 5) + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + +static void ndpi_search_edonkey(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { + NDPI_LOG_DBG(ndpi_struct, "search EDONKEY\n"); + + /* skip marked packets */ + if(flow->detected_protocol_stack[0] != NDPI_PROTOCOL_EDONKEY) { + ndpi_check_edonkey(ndpi_struct, flow); + } +} + + +void init_edonkey_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("eDonkey", ndpi_struct, *id, + NDPI_PROTOCOL_EDONKEY, + ndpi_search_edonkey, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} + diff --git a/src/components/implementation/simple_nf/ndpi/elastic_search.c b/src/components/implementation/simple_nf/ndpi/elastic_search.c new file mode 100644 index 0000000000..f29b3fb4b6 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/elastic_search.c @@ -0,0 +1,85 @@ +/* + * elasticsearch.c + * + * Copyright (C) 2022-23 - ntop.org + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_ELASTICSEARCH + +#include "ndpi_api.h" + +static void ndpi_int_elasticsearch_add_connection(struct ndpi_detection_module_struct * const ndpi_struct, + struct ndpi_flow_struct * const flow) +{ + NDPI_LOG_INFO(ndpi_struct, "found elasticsearch\n"); + + ndpi_set_detected_protocol(ndpi_struct, flow, + NDPI_PROTOCOL_ELASTICSEARCH, + NDPI_PROTOCOL_UNKNOWN, + NDPI_CONFIDENCE_DPI); +} + +/* ***************************************************** */ + +static void ndpi_search_elasticsearch(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct const * const packet = &ndpi_struct->packet; + u_int32_t message_length; + + NDPI_LOG_DBG(ndpi_struct, "search elasticsearch\n"); + + if (packet->payload_packet_len < 6) + { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + if (ntohs(get_u_int16_t(packet->payload, 0)) != 0x4553 /* "ES" */) + { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + message_length = ntohl(get_u_int32_t(packet->payload, 2)); + if (packet->payload_packet_len < message_length + 6) + { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + ndpi_int_elasticsearch_add_connection(ndpi_struct, flow); +} + +/* ***************************************************** */ + +void init_elasticsearch_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("Elasticsearch", ndpi_struct, *id, + NDPI_PROTOCOL_ELASTICSEARCH, + ndpi_search_elasticsearch, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK + ); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/ethernet_ip.c b/src/components/implementation/simple_nf/ndpi/ethernet_ip.c new file mode 100644 index 0000000000..45ca056986 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/ethernet_ip.c @@ -0,0 +1,71 @@ +/* + * zmq.c + * + * Copyright (C) 2016-22 - ntop.org + * + * nDPI is free software: you can zmqtribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_ETHERNET_IP + +#include "ndpi_api.h" + +static void ndpi_int_ethernet_ip_add_connection(struct ndpi_detection_module_struct + *ndpi_struct, struct ndpi_flow_struct *flow) { + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_ETHERNET_IP, + NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + + +static void ndpi_search_ethernet_ip(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search for ETHERNET_IP\n"); + + if(packet->tcp != NULL) { + NDPI_LOG_DBG2(ndpi_struct, "calculating ETHERNET_IP over tcp\n"); + + if(packet->payload_packet_len >= 24) { + u_int16_t eth_ip_port = ntohs(44818); + + if((packet->tcp->source == eth_ip_port) || (packet->tcp->dest == eth_ip_port)) { + u_int16_t len = le16toh(*((u_int16_t *)&packet->payload[2])); /* Little endian */ + + if((len+24) == packet->payload_packet_len) { + NDPI_LOG_INFO(ndpi_struct, "found ethernet_ip\n"); + ndpi_int_ethernet_ip_add_connection(ndpi_struct, flow); + return; + } + } + } + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); /* No luck this time */ +} + + +void init_ethernet_ip_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id) { + ndpi_set_bitmask_protocol_detection("EthernetIP", ndpi_struct, *id, + NDPI_PROTOCOL_ETHERNET_IP, + ndpi_search_ethernet_ip, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/fastcgi.c b/src/components/implementation/simple_nf/ndpi/fastcgi.c new file mode 100644 index 0000000000..f5b4eb0b11 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/fastcgi.c @@ -0,0 +1,257 @@ +/* + * fastcgi.c + * + * Copyright (C) 2022-23 - ntop.org + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_FASTCGI + +#include "ndpi_api.h" + +/* Reference: http://www.mit.edu/~yandros/doc/specs/fcgi-spec.html */ + +PACK_ON +struct FCGI_Header { + u_int8_t version; + u_int8_t type; + u_int16_t requestId; + u_int16_t contentLength; + u_int8_t paddingLength; + u_int8_t reserved; +} PACK_OFF; + +enum FCGI_Type { + FCGI_MIN = 1, + + FCGI_BEGIN_REQUEST = 1, + FCGI_ABORT_REQUEST = 2, + FCGI_END_REQUEST = 3, + FCGI_PARAMS = 4, + FCGI_STDIN = 5, + FCGI_STDOUT = 6, + FCGI_STDERR = 7, + FCGI_DATA = 8, + FCGI_GET_VALUES = 9, + FCGI_GET_VALUES_RESULT = 10, + FCGI_UNKNOWN_TYPE = 11, + + FCGI_MAX = 11 +}; + +PACK_ON +struct FCGI_Params { + u_int8_t key_length; + u_int8_t value_length; +} PACK_OFF; + +struct fcgi_one_line_mapping { + char const * const key; + struct ndpi_int_one_line_struct * const value; +}; + +static int ndpi_search_fastcgi_extra(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow); + +static void ndpi_int_fastcgi_add_connection(struct ndpi_detection_module_struct * const ndpi_struct, + struct ndpi_flow_struct * const flow, + ndpi_protocol_match_result * const match) +{ + NDPI_LOG_INFO(ndpi_struct, "found fastcgi\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, + NDPI_PROTOCOL_FASTCGI, + (match != NULL ? match->protocol_id : NDPI_PROTOCOL_UNKNOWN), + NDPI_CONFIDENCE_DPI); + + if (flow->extra_packets_func == NULL) + { + flow->max_extra_packets_to_check = 5; + flow->extra_packets_func = ndpi_search_fastcgi_extra; + } +} + +static int fcgi_parse_params(struct ndpi_flow_struct * const flow, + struct ndpi_packet_struct * const packet) +{ + size_t i, j; + struct fcgi_one_line_mapping mappings[] = { + { "SCRIPT_URL", &packet->http_url_name }, + { "HTTP_HOST", &packet->host_line }, + { "HTTP_ACCEPT", &packet->accept_line }, + { "HTTP_USER_AGENT", &packet->user_agent_line }, + { "HTTP_ACCEPT_ENCODING", &packet->http_transfer_encoding }, + { "SERVER_SOFTWARE", &packet->server_line }, + { "REQUEST_METHOD", &packet->http_method } + }; + + i = sizeof(struct FCGI_Header); + while (i + sizeof(struct FCGI_Params) < packet->payload_packet_len) + { + struct FCGI_Params const * const params = (struct FCGI_Params const *)&packet->payload[i]; + + i += sizeof(*params); + if (i + params->key_length + params->value_length > packet->payload_packet_len) + { + return 1; + } + + for (j = 0; j < NDPI_ARRAY_LENGTH(mappings); ++j) + { + if (strlen(mappings[j].key) == params->key_length && + strncmp((char const *)&packet->payload[i], mappings[j].key, params->key_length) == 0) + { + mappings[j].value->ptr = &packet->payload[i + params->key_length]; + mappings[j].value->len = params->value_length; + if (packet->parsed_lines < NDPI_MAX_PARSE_LINES_PER_PACKET) + { + packet->line[packet->parsed_lines].ptr = &packet->payload[i + params->key_length]; + packet->line[packet->parsed_lines].len = params->value_length; + packet->parsed_lines++; + } + break; + } + } + + i += params->key_length + params->value_length; + }; + + if (i != packet->payload_packet_len) + { + return 1; + } + + flow->http.method = ndpi_http_str2method((const char*)packet->http_method.ptr, + (u_int16_t)packet->http_method.len); + ndpi_hostname_sni_set(flow, packet->host_line.ptr, packet->host_line.len); + ndpi_user_agent_set(flow, packet->user_agent_line.ptr, packet->user_agent_line.len); + + if (flow->http.url == NULL && packet->http_url_name.len > 0) + { + flow->http.url = ndpi_malloc(packet->http_url_name.len + 1); + if (flow->http.url != NULL) + { + strncpy(flow->http.url, (char const *)packet->http_url_name.ptr, packet->http_url_name.len); + flow->http.url[packet->http_url_name.len] = '\0'; + } + } + + return 0; +} + +static void ndpi_search_fastcgi(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct * const packet = &ndpi_struct->packet; + struct FCGI_Header const * fcgi_hdr; + enum FCGI_Type fcgi_type; + u_int16_t content_len; + ndpi_protocol_match_result ret_match; + + NDPI_LOG_DBG(ndpi_struct, "search fastcgi\n"); + + if (packet->payload_packet_len < sizeof(struct FCGI_Header)) + { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + fcgi_hdr = (struct FCGI_Header const *)&packet->payload[0]; + + if (fcgi_hdr->version != 0x01) + { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + fcgi_type = (enum FCGI_Type)fcgi_hdr->type; + if (fcgi_type < FCGI_MIN || fcgi_type > FCGI_MAX) + { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + content_len = ntohs(fcgi_hdr->contentLength); + if (packet->payload_packet_len != sizeof(*fcgi_hdr) + content_len + fcgi_hdr->paddingLength) + { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + if (fcgi_type == FCGI_PARAMS) + { + if (content_len == 0) + { + flow->max_extra_packets_to_check = 0; + flow->extra_packets_func = NULL; + return; + } + + if (fcgi_parse_params(flow, packet) != 0) + { + ndpi_set_risk(ndpi_struct, flow, NDPI_MALFORMED_PACKET, "Invalid FastCGI PARAMS header"); + ndpi_int_fastcgi_add_connection(ndpi_struct, flow, NULL); + } else { + ndpi_match_host_subprotocol(ndpi_struct, flow, + flow->host_server_name, + strlen(flow->host_server_name), + &ret_match, NDPI_PROTOCOL_FASTCGI); + ndpi_check_dga_name(ndpi_struct, flow, + flow->host_server_name, 1, 0); + if(ndpi_is_valid_hostname(flow->host_server_name, + strlen(flow->host_server_name)) == 0) { + char str[128]; + + snprintf(str, sizeof(str), "Invalid host %s", flow->host_server_name); + ndpi_set_risk(ndpi_struct, flow, NDPI_INVALID_CHARACTERS, str); + + /* This looks like an attack */ + ndpi_set_risk(ndpi_struct, flow, NDPI_POSSIBLE_EXPLOIT, NULL); + } + ndpi_int_fastcgi_add_connection(ndpi_struct, flow, &ret_match); + } + return; + } + + if (flow->packet_counter > 2) + { + ndpi_int_fastcgi_add_connection(ndpi_struct, flow, NULL); + } +} + +static int ndpi_search_fastcgi_extra(struct ndpi_detection_module_struct * ndpi_struct, + struct ndpi_flow_struct * flow) +{ + ndpi_search_fastcgi(ndpi_struct, flow); + + return flow->extra_packets_func != NULL; +} + +void init_fastcgi_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("FastCGI", ndpi_struct, *id, + NDPI_PROTOCOL_FASTCGI, + ndpi_search_fastcgi, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK + ); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/fix.c b/src/components/implementation/simple_nf/ndpi/fix.c new file mode 100644 index 0000000000..0d0e71331a --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/fix.c @@ -0,0 +1,74 @@ +/* + * fix.c + * + * Copyright (C) 2017-22 - ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_FIX + +#include "ndpi_api.h" + + +static void ndpi_search_fix(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search FIX\n"); + if(packet->tcp && packet->payload_packet_len > 5) { + // 8= + if(packet->payload[0] == 0x38 && packet->payload[1] == 0x3d) { + // FIX + if(packet->payload[2] == 0x46 && + packet->payload[3] == 0x49 && + packet->payload[4] == 0x58) { + + NDPI_LOG_INFO(ndpi_struct, "found FIX\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_FIX, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } + // 0. 9= + if(packet->payload[2] == 0x4f && + packet->payload[3] == 0x01 && + packet->payload[4] == 0x39 && + packet->payload[5] == 0x3d) { + + NDPI_LOG_INFO(ndpi_struct, "found FIX\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_FIX, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } + } + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + + +void init_fix_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("FIX", ndpi_struct, *id, + NDPI_PROTOCOL_FIX, + ndpi_search_fix, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/ftp_control.c b/src/components/implementation/simple_nf/ndpi/ftp_control.c new file mode 100644 index 0000000000..944c0aecba --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/ftp_control.c @@ -0,0 +1,693 @@ +/* + * ftp_control.c + * + * Copyright (C) 2016-22 - ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_FTP_CONTROL + +#include "ndpi_api.h" + +// #define FTP_DEBUG + +extern void switch_extra_dissection_to_tls(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow); + +/* *************************************************************** */ + +static void ndpi_int_ftp_control_add_connection(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + + flow->host_server_name[0] = '\0'; /* Remove any data set by other dissectors (eg. SMTP) */ + ndpi_set_detected_protocol(ndpi_struct, flow, + NDPI_PROTOCOL_FTP_CONTROL, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + +/* *************************************************************** */ + +static int ndpi_ftp_control_check_request(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, + const u_int8_t *payload, + size_t payload_len) { +#ifdef FTP_DEBUG + printf("%s() [%.*s]\n", __FUNCTION__, (int)payload_len, payload); +#endif + + if(ndpi_match_strprefix(payload, payload_len, "USER")) { + char buf[64]; + + ndpi_user_pwd_payload_copy((u_int8_t*)flow->l4.tcp.ftp_imap_pop_smtp.username, + sizeof(flow->l4.tcp.ftp_imap_pop_smtp.username), 5, + payload, payload_len); + + snprintf(buf, sizeof(buf), "Found FTP username (%s)", + flow->l4.tcp.ftp_imap_pop_smtp.username); + ndpi_set_risk(ndpi_struct, flow, NDPI_CLEAR_TEXT_CREDENTIALS, buf); + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "PASS")) { + ndpi_user_pwd_payload_copy((u_int8_t*)flow->l4.tcp.ftp_imap_pop_smtp.password, + sizeof(flow->l4.tcp.ftp_imap_pop_smtp.password), 5, + payload, payload_len); + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "AUTH") || + ndpi_match_strprefix(payload, payload_len, "auth")) { + flow->l4.tcp.ftp_imap_pop_smtp.auth_found = 1; + return 1; + } + /* ***************************************************** */ + + if(ndpi_match_strprefix(payload, payload_len, "ABOR")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "ACCT")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "ADAT")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "ALLO")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "APPE")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "CCC")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "CDUP")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "CONF")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "CWD")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "DELE")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "ENC")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "EPRT")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "EPSV")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "FEAT")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "HELP")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "LANG")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "LIST")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "LPRT")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "LPSV")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "MDTM")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "MIC")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "MKD")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "MLSD")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "MLST")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "MODE")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "NLST")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "NOOP")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "OPTS")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "PASV")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "PBSZ")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "PORT")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "PROT")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "PWD")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "QUIT")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "REIN")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "REST")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "RETR")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "RMD")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "RNFR")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "RNTO")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "SITE")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "SIZE")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "SMNT")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "STAT")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "STOR")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "STOU")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "STRU")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "SYST")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "TYPE")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "XCUP")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "XMKD")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "XPWD")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "XRCP")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "XRMD")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "XRSQ")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "XSEM")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "XSEN")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "HOST")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "abor")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "acct")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "adat")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "allo")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "appe")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "ccc")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "cdup")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "conf")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "cwd")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "dele")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "enc")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "eprt")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "epsv")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "feat")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "help")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "lang")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "list")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "lprt")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "lpsv")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "mdtm")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "mic")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "mkd")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "mlsd")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "mlst")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "mode")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "nlst")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "noop")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "opts")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "pass")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "pasv")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "pbsz")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "port")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "prot")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "pwd")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "quit")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "rein")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "rest")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "retr")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "rmd")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "rnfr")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "rnto")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "site")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "size")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "smnt")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "stat")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "stor")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "stou")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "stru")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "syst")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "type")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "user")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "xcup")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "xmkd")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "xpwd")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "xrcp")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "xrmd")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "xrsq")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "xsem")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "xsen")) { + return 1; + } + + if(ndpi_match_strprefix(payload, payload_len, "host")) { + return 1; + } + + return 0; +} + +/* *************************************************************** */ + +static int ndpi_ftp_control_check_response(struct ndpi_flow_struct *flow, + const u_int8_t *payload, + size_t payload_len) { +#ifdef FTP_DEBUG + printf("%s() [%.*s]\n", __FUNCTION__, (int)payload_len, payload); +#endif + + switch(payload[0]) { + case '1': + case '2': + case '3': + case '6': + if(flow->l4.tcp.ftp_imap_pop_smtp.auth_found == 1) + flow->l4.tcp.ftp_imap_pop_smtp.auth_tls = 1; + return(1); + + case '4': + case '5': + flow->l4.tcp.ftp_imap_pop_smtp.auth_failed = 1; + flow->l4.tcp.ftp_imap_pop_smtp.auth_done = 1; + return(1); + } + + return 0; +} + +/* *************************************************************** */ + +static void ndpi_check_ftp_control(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + u_int32_t payload_len = packet->payload_packet_len; + + /* Check connection over TCP */ + if(packet->tcp) { + u_int16_t twentyfive = htons(25); + + /* Exclude SMTP, which uses similar commands. */ + if(packet->tcp->dest == twentyfive || packet->tcp->source == twentyfive) { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + /* Break after 8 packets. */ + if(flow->packet_counter > 8) { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + /* Check if we so far detected the protocol in the request or not. */ + if(flow->ftp_control_stage == 0) { + NDPI_LOG_DBG2(ndpi_struct, "FTP_CONTROL stage 0: \n"); + + if((payload_len > 0) && ndpi_ftp_control_check_request(ndpi_struct, + flow, packet->payload, payload_len)) { + NDPI_LOG_DBG2(ndpi_struct, + "Possible FTP_CONTROL request detected, we will look further for the response..\n"); + + /* + Encode the direction of the packet in the stage, so we will know when we need + to look for the response packet. + */ + flow->ftp_control_stage = packet->packet_direction + 1; + } + } else { + NDPI_LOG_DBG2(ndpi_struct, "FTP_CONTROL stage %u: \n", flow->ftp_control_stage); + + /* + At first check, if this is for sure a response packet (in another direction. + If not, do nothing now and return. + */ + if((flow->ftp_control_stage - packet->packet_direction) == 1) { + return; + } + + /* This is a packet in another direction. Check if we find the proper response. */ + if((payload_len > 0) && ndpi_ftp_control_check_response(flow, packet->payload, payload_len)) { + NDPI_LOG_INFO(ndpi_struct, "found FTP_CONTROL\n"); + +#ifdef FTP_DEBUG + printf("%s() [user: %s][pwd: %s]\n", __FUNCTION__, + flow->l4.tcp.ftp_imap_pop_smtp.username, flow->l4.tcp.ftp_imap_pop_smtp.password); +#endif + + if(flow->l4.tcp.ftp_imap_pop_smtp.password[0] == '\0' && + flow->l4.tcp.ftp_imap_pop_smtp.auth_done == 0 && + flow->l4.tcp.ftp_imap_pop_smtp.auth_tls == 0) { + flow->ftp_control_stage = 0; + } else if (flow->l4.tcp.ftp_imap_pop_smtp.auth_tls == 1 && + ndpi_struct->opportunistic_tls_ftp_enabled) { + flow->host_server_name[0] = '\0'; /* Remove any data set by other dissectors (eg. SMTP) */ + /* Switch classification to FTPS */ + ndpi_set_detected_protocol(ndpi_struct, flow, + NDPI_PROTOCOL_FTPS, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + NDPI_LOG_DBG(ndpi_struct, "Switching to [%d/%d]\n", + flow->detected_protocol_stack[0], flow->detected_protocol_stack[1]); + /* We are done (in FTP dissector): delegating TLS... */ + switch_extra_dissection_to_tls(ndpi_struct, flow); + } else { + ndpi_int_ftp_control_add_connection(ndpi_struct, flow); + } + } else { + NDPI_LOG_DBG2(ndpi_struct, "The reply did not seem to belong to FTP_CONTROL, " + "resetting the stage to 0\n"); + flow->ftp_control_stage = 0; + } + } + } +} + +/* *************************************************************** */ + +static void ndpi_search_ftp_control(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + NDPI_LOG_DBG(ndpi_struct, "search FTP_CONTROL\n"); + + /* skip marked packets */ + if(flow->detected_protocol_stack[0] != NDPI_PROTOCOL_FTP_CONTROL) { + ndpi_check_ftp_control(ndpi_struct, flow); + } +} + +/* *************************************************************** */ + +void init_ftp_control_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id) { + ndpi_set_bitmask_protocol_detection("FTP_CONTROL", ndpi_struct, *id, + NDPI_PROTOCOL_FTP_CONTROL, + ndpi_search_ftp_control, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/ftp_data.c b/src/components/implementation/simple_nf/ndpi/ftp_data.c new file mode 100644 index 0000000000..ef924c5fa1 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/ftp_data.c @@ -0,0 +1,268 @@ +/* + * ftp_data.c + * + * Copyright (C) 2016-22 - ntop.org + * + * The signature is based on the Libprotoident library. + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_FTP_DATA + +#include "ndpi_api.h" + +static void ndpi_int_ftp_data_add_connection(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_FTP_DATA, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + +static int ndpi_match_ftp_data_port(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + /* Check connection over TCP */ + if(packet->tcp) { + if(packet->tcp->dest == htons(20) || packet->tcp->source == htons(20)) { + return 1; + } + } + return 0; +} + +static int ndpi_match_ftp_data_directory(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + u_int32_t payload_len = packet->payload_packet_len; + + if(payload_len > 10) { + int i; + + if(!((packet->payload[0] == '-') || (packet->payload[0] == 'd'))) + return(0); + + for(i=0; i<9; i += 3) + if(((packet->payload[1+i] == '-') || (packet->payload[1+i] == 'r')) + && ((packet->payload[2+i] == '-') || (packet->payload[2+i] == 'w')) + && ((packet->payload[3+i] == '-') || (packet->payload[3+i] == 'x'))) { + ; + } else + return 0; + + return 1; + } + + return 0; +} + +static int ndpi_match_file_header(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + u_int32_t payload_len = packet->payload_packet_len; + + /* A FTP packet is pretty long so 256 is a bit conservative but it should be OK */ + if(packet->payload_packet_len < 256) + return 0; + + /* RIFF is a meta-format for storing AVI and WAV files */ + if(ndpi_match_strprefix(packet->payload, payload_len, "RIFF")) + return 1; + + /* MZ is a .exe file */ + if((packet->payload[0] == 'M') && (packet->payload[1] == 'Z') && (packet->payload[3] == 0x00)) + return 1; + + /* Ogg files */ + if(ndpi_match_strprefix(packet->payload, payload_len, "OggS")) + return 1; + + /* ZIP files */ + if((packet->payload[0] == 'P') && (packet->payload[1] == 'K') && (packet->payload[2] == 0x03) && (packet->payload[3] == 0x04)) + return 1; + + /* MPEG files */ + if((packet->payload[0] == 0x00) && (packet->payload[1] == 0x00) && (packet->payload[2] == 0x01) && (packet->payload[3] == 0xba)) + return 1; + + /* RAR files */ + if(ndpi_match_strprefix(packet->payload, payload_len, "Rar!")) + return 1; + + /* EBML */ + if((packet->payload[0] == 0x1a) && (packet->payload[1] == 0x45) && (packet->payload[2] == 0xdf) && (packet->payload[3] == 0xa3)) + return 1; + + /* JPG */ + if((packet->payload[0] == 0xff) && (packet->payload[1] ==0xd8)) + return 1; + + /* GIF */ + if(ndpi_match_strprefix(packet->payload, payload_len, "GIF8")) + return 1; + + /* PHP scripts */ + if((packet->payload[0] == 0x3c) && (packet->payload[1] == 0x3f) && (packet->payload[2] == 0x70) && (packet->payload[3] == 0x68)) + return 1; + + /* Unix scripts */ + if((packet->payload[0] == 0x23) && (packet->payload[1] == 0x21) && (packet->payload[2] == 0x2f) && (packet->payload[3] == 0x62)) + return 1; + + /* PDFs */ + if(ndpi_match_strprefix(packet->payload, payload_len, "%PDF")) + return 1; + + /* PNG */ + if((packet->payload[0] == 0x89) && (packet->payload[1] == 'P') && (packet->payload[2] == 'N') && (packet->payload[3] == 'G')) + return 1; + + /* HTML */ + if(ndpi_match_strprefix(packet->payload, payload_len, "payload[0] == 0x0a) && (packet->payload[1] == '<') && (packet->payload[2] == '!') && (packet->payload[3] == 'D')) + return 1; + + /* 7zip */ + if((packet->payload[0] == 0x37) && (packet->payload[1] == 0x7a) && (packet->payload[2] == 0xbc) && (packet->payload[3] == 0xaf)) + return 1; + + /* gzip */ + if((packet->payload[0] == 0x1f) && (packet->payload[1] == 0x8b) && (packet->payload[2] == 0x08)) + return 1; + + /* XML */ + if(ndpi_match_strprefix(packet->payload, payload_len, "payload, payload_len, "fLaC")) + return 1; + + /* MP3 */ + if((packet->payload[0] == 'I') && (packet->payload[1] == 'D') && (packet->payload[2] == '3') && (packet->payload[3] == 0x03)) + return 1; + if(ndpi_match_strprefix(packet->payload, payload_len, "\xff\xfb\x90\xc0")) + return 1; + + /* RPM */ + if((packet->payload[0] == 0xed) && (packet->payload[1] == 0xab) && (packet->payload[2] == 0xee) && (packet->payload[3] == 0xdb)) + return 1; + + /* Wz Patch */ + if(ndpi_match_strprefix(packet->payload, payload_len, "WzPa")) + return 1; + + /* Flash Video */ + if((packet->payload[0] == 'F') && (packet->payload[1] == 'L') && (packet->payload[2] == 'V') && (packet->payload[3] == 0x01)) + return 1; + + /* .BKF (Microsoft Tape Format) */ + if(ndpi_match_strprefix(packet->payload, payload_len, "TAPE")) + return 1; + + /* MS Office Doc file - this is unpleasantly geeky */ + if((packet->payload[0] == 0xd0) && (packet->payload[1] == 0xcf) && (packet->payload[2] == 0x11) && (packet->payload[3] == 0xe0)) + return 1; + + /* ASP */ + if((packet->payload[0] == 0x3c) && (packet->payload[1] == 0x25) && (packet->payload[2] == 0x40) && (packet->payload[3] == 0x20)) + return 1; + + /* WMS file */ + if((packet->payload[0] == 0x3c) && (packet->payload[1] == 0x21) && (packet->payload[2] == 0x2d) && (packet->payload[3] == 0x2d)) + return 1; + + /* ar archive, typically .deb files */ + if(ndpi_match_strprefix(packet->payload, payload_len, "!payload, payload_len, "payload, "jabber", packet->payload_packet_len) == NULL)) + return 1; + + if(ndpi_match_strprefix(packet->payload, payload_len, "payload, payload_len, "SPFI")) + return 1; + + /* ABIF - Applied Biosystems */ + if(ndpi_match_strprefix(packet->payload, payload_len, "ABIF")) + return 1; + + /* bzip2 - other digits are also possible instead of 9 */ + if((packet->payload[0] == 'B') && (packet->payload[1] == 'Z') && (packet->payload[2] == 'h') && (packet->payload[3] == '9')) + return 1; + + /* Some other types of files */ + + if((packet->payload[0] == '<') && (packet->payload[1] == 'c') && (packet->payload[2] == 'f')) + return 1; + if((packet->payload[0] == '<') && (packet->payload[1] == 'C') && (packet->payload[2] == 'F')) + return 1; + if(ndpi_match_strprefix(packet->payload, payload_len, ".tem")) + return 1; + if(ndpi_match_strprefix(packet->payload, payload_len, ".ite")) + return 1; + if(ndpi_match_strprefix(packet->payload, payload_len, ".lef")) + return 1; + + return 0; +} + +static void ndpi_check_ftp_data(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + /* + Make sure we see the beginning of the connection as otherwise we might have + false positive results + */ + if(ndpi_seen_flow_beginning(flow)) { + if((packet->payload_packet_len > 0) + && (ndpi_match_file_header(ndpi_struct, flow) + || ndpi_match_ftp_data_directory(ndpi_struct, flow) + || ndpi_match_ftp_data_port(ndpi_struct, flow) + ) + ) { + NDPI_LOG_INFO(ndpi_struct, "found FTP_DATA request\n"); + ndpi_int_ftp_data_add_connection(ndpi_struct, flow); + return; + } + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + +static void ndpi_search_ftp_data(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { + + NDPI_LOG_DBG(ndpi_struct, "search FTP_DATA\n"); + ndpi_check_ftp_data(ndpi_struct, flow); +} + + +void init_ftp_data_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("FTP_DATA", ndpi_struct, *id, + NDPI_PROTOCOL_FTP_DATA, + ndpi_search_ftp_data, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/gcrypt/aes.c b/src/components/implementation/simple_nf/ndpi/gcrypt/aes.c new file mode 100644 index 0000000000..61dc2137ac --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/gcrypt/aes.c @@ -0,0 +1,508 @@ +/* + * FIPS-197 compliant AES implementation + * + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* + * The AES block cipher was designed by Vincent Rijmen and Joan Daemen. + * + * http://csrc.nist.gov/encryption/aes/rijndael/Rijndael.pdf + * http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf + */ + + +/* Parameter validation macros based on platform_util.h */ +#define AES_VALIDATE_RET( cond ) \ + MBEDTLS_INTERNAL_VALIDATE_RET( cond, MBEDTLS_ERR_AES_BAD_INPUT_DATA ) +#define AES_VALIDATE( cond ) MBEDTLS_INTERNAL_VALIDATE( cond ) + +/* + * Forward S-box & tables + */ +static unsigned char FSb[256]; +static uint32_t FT0[256]; +static uint32_t FT1[256]; +static uint32_t FT2[256]; +static uint32_t FT3[256]; + +/* + * Reverse S-box & tables + */ +static unsigned char RSb[256]; +static uint32_t RT0[256]; +static uint32_t RT1[256]; +static uint32_t RT2[256]; +static uint32_t RT3[256]; + +/* + * Round constants + */ +static uint32_t RCON[10]; + +/* + * Tables generation code + */ +#define XTIME(x) ( ( (x) << 1 ) ^ ( ( (x) & 0x80 ) ? 0x1B : 0x00 ) ) +#define MUL(x,y) ( ( (x) && (y) ) ? pow[(log[(x)]+log[(y)]) % 255] : 0 ) + +static int aes_init_done = 0; +int aes_aesni_has_support = 0; + +static void aes_gen_tables( void ) +{ + int i, x, y, z; + int pow[256]; + int log[256]; + +#if defined(MBEDTLS_AESNI_C) && defined(MBEDTLS_HAVE_X86_64) + if( mbedtls_aesni_has_support( MBEDTLS_AESNI_AES ) ) + aes_aesni_has_support = 1; +#endif + + /* + * compute pow and log tables over GF(2^8) + */ + for( i = 0, x = 1; i < 256; i++ ) + { + pow[i] = x; + log[x] = i; + x = MBEDTLS_BYTE_0( x ^ XTIME( x ) ); + } + + /* + * calculate the round constants + */ + for( i = 0, x = 1; i < 10; i++ ) + { + RCON[i] = (uint32_t) x; + x = MBEDTLS_BYTE_0( XTIME( x ) ); + } + + /* + * generate the forward and reverse S-boxes + */ + FSb[0x00] = 0x63; + RSb[0x63] = 0x00; + + for( i = 1; i < 256; i++ ) + { + x = pow[255 - log[i]]; + + y = x; y = MBEDTLS_BYTE_0( ( y << 1 ) | ( y >> 7 ) ); + x ^= y; y = MBEDTLS_BYTE_0( ( y << 1 ) | ( y >> 7 ) ); + x ^= y; y = MBEDTLS_BYTE_0( ( y << 1 ) | ( y >> 7 ) ); + x ^= y; y = MBEDTLS_BYTE_0( ( y << 1 ) | ( y >> 7 ) ); + x ^= y ^ 0x63; + + FSb[i] = (unsigned char) x; + RSb[x] = (unsigned char) i; + } + + /* + * generate the forward and reverse tables + */ + for( i = 0; i < 256; i++ ) + { + x = FSb[i]; + y = MBEDTLS_BYTE_0( XTIME( x ) ); + z = MBEDTLS_BYTE_0( y ^ x ); + + FT0[i] = ( (uint32_t) y ) ^ + ( (uint32_t) x << 8 ) ^ + ( (uint32_t) x << 16 ) ^ + ( (uint32_t) z << 24 ); + + FT1[i] = ROTL8( FT0[i] ); + FT2[i] = ROTL8( FT1[i] ); + FT3[i] = ROTL8( FT2[i] ); + + x = RSb[i]; + + RT0[i] = ( (uint32_t) MUL( 0x0E, x ) ) ^ + ( (uint32_t) MUL( 0x09, x ) << 8 ) ^ + ( (uint32_t) MUL( 0x0D, x ) << 16 ) ^ + ( (uint32_t) MUL( 0x0B, x ) << 24 ); + + RT1[i] = ROTL8( RT0[i] ); + RT2[i] = ROTL8( RT1[i] ); + RT3[i] = ROTL8( RT2[i] ); + } +} + +#define AES_RT0(idx) RT0[idx] +#define AES_RT1(idx) RT1[idx] +#define AES_RT2(idx) RT2[idx] +#define AES_RT3(idx) RT3[idx] + +#define AES_FT0(idx) FT0[idx] +#define AES_FT1(idx) FT1[idx] +#define AES_FT2(idx) FT2[idx] +#define AES_FT3(idx) FT3[idx] + +void mbedtls_aes_init( mbedtls_aes_context *ctx ) +{ + AES_VALIDATE( ctx != NULL ); + + memset( ctx, 0, sizeof( mbedtls_aes_context ) ); +} + +void mbedtls_aes_free( mbedtls_aes_context *ctx ) +{ + if( ctx == NULL ) + return; + + // mbedtls_platform_zeroize( ctx, sizeof( mbedtls_aes_context ) ); +} + + +/* + * AES key schedule (encryption) + */ +int mbedtls_aes_setkey_enc( mbedtls_aes_context *ctx, const unsigned char *key, + unsigned int keybits ) +{ + unsigned int i; + uint32_t *RK; + + AES_VALIDATE_RET( ctx != NULL ); + AES_VALIDATE_RET( key != NULL ); + + switch( keybits ) + { + case 128: ctx->nr = 10; break; + case 192: ctx->nr = 12; break; + case 256: ctx->nr = 14; break; + default : return( MBEDTLS_ERR_AES_INVALID_KEY_LENGTH ); + } + + if( aes_init_done == 0 ) + { + aes_gen_tables(); + aes_init_done = 1; + } + + ctx->rk = RK = ctx->buf; + +#if defined(MBEDTLS_AESNI_C) && defined(MBEDTLS_HAVE_X86_64) + if( aes_aesni_has_support ) + return( mbedtls_aesni_setkey_enc( (unsigned char *) ctx->rk, key, keybits ) ); +#endif + + for( i = 0; i < ( keybits >> 5 ); i++ ) + { + RK[i] = MBEDTLS_GET_UINT32_LE( key, i << 2 ); + } + + switch( ctx->nr ) + { + case 10: + + for( i = 0; i < 10; i++, RK += 4 ) + { + RK[4] = RK[0] ^ RCON[i] ^ + ( (uint32_t) FSb[ MBEDTLS_BYTE_1( RK[3] ) ] ) ^ + ( (uint32_t) FSb[ MBEDTLS_BYTE_2( RK[3] ) ] << 8 ) ^ + ( (uint32_t) FSb[ MBEDTLS_BYTE_3( RK[3] ) ] << 16 ) ^ + ( (uint32_t) FSb[ MBEDTLS_BYTE_0( RK[3] ) ] << 24 ); + + RK[5] = RK[1] ^ RK[4]; + RK[6] = RK[2] ^ RK[5]; + RK[7] = RK[3] ^ RK[6]; + } + break; + + case 12: + + for( i = 0; i < 8; i++, RK += 6 ) + { + RK[6] = RK[0] ^ RCON[i] ^ + ( (uint32_t) FSb[ MBEDTLS_BYTE_1( RK[5] ) ] ) ^ + ( (uint32_t) FSb[ MBEDTLS_BYTE_2( RK[5] ) ] << 8 ) ^ + ( (uint32_t) FSb[ MBEDTLS_BYTE_3( RK[5] ) ] << 16 ) ^ + ( (uint32_t) FSb[ MBEDTLS_BYTE_0( RK[5] ) ] << 24 ); + + RK[7] = RK[1] ^ RK[6]; + RK[8] = RK[2] ^ RK[7]; + RK[9] = RK[3] ^ RK[8]; + RK[10] = RK[4] ^ RK[9]; + RK[11] = RK[5] ^ RK[10]; + } + break; + + case 14: + + for( i = 0; i < 7; i++, RK += 8 ) + { + RK[8] = RK[0] ^ RCON[i] ^ + ( (uint32_t) FSb[ MBEDTLS_BYTE_1( RK[7] ) ] ) ^ + ( (uint32_t) FSb[ MBEDTLS_BYTE_2( RK[7] ) ] << 8 ) ^ + ( (uint32_t) FSb[ MBEDTLS_BYTE_3( RK[7] ) ] << 16 ) ^ + ( (uint32_t) FSb[ MBEDTLS_BYTE_0( RK[7] ) ] << 24 ); + + RK[9] = RK[1] ^ RK[8]; + RK[10] = RK[2] ^ RK[9]; + RK[11] = RK[3] ^ RK[10]; + + RK[12] = RK[4] ^ + ( (uint32_t) FSb[ MBEDTLS_BYTE_0( RK[11] ) ] ) ^ + ( (uint32_t) FSb[ MBEDTLS_BYTE_1( RK[11] ) ] << 8 ) ^ + ( (uint32_t) FSb[ MBEDTLS_BYTE_2( RK[11] ) ] << 16 ) ^ + ( (uint32_t) FSb[ MBEDTLS_BYTE_3( RK[11] ) ] << 24 ); + + RK[13] = RK[5] ^ RK[12]; + RK[14] = RK[6] ^ RK[13]; + RK[15] = RK[7] ^ RK[14]; + } + break; + } + + return( 0 ); +} + +/* + * AES key schedule (decryption) + */ +int mbedtls_aes_setkey_dec( mbedtls_aes_context *ctx, const unsigned char *key, + unsigned int keybits ) +{ + int i, j, ret; + mbedtls_aes_context cty; + uint32_t *RK; + uint32_t *SK; + + AES_VALIDATE_RET( ctx != NULL ); + AES_VALIDATE_RET( key != NULL ); + + mbedtls_aes_init( &cty ); + + ctx->rk = RK = ctx->buf; + + /* Also checks keybits */ + if( ( ret = mbedtls_aes_setkey_enc( &cty, key, keybits ) ) != 0 ) + goto exit; + + ctx->nr = cty.nr; + +#if defined(MBEDTLS_AESNI_C) && defined(MBEDTLS_HAVE_X86_64) + if( aes_aesni_has_support ) { + mbedtls_aesni_inverse_key( (unsigned char *) ctx->rk, + (const unsigned char *) cty.rk, ctx->nr ); + goto exit; + } +#endif + + SK = cty.rk + cty.nr * 4; + + *RK++ = *SK++; + *RK++ = *SK++; + *RK++ = *SK++; + *RK++ = *SK++; + + for( i = ctx->nr - 1, SK -= 8; i > 0; i--, SK -= 8 ) + { + for( j = 0; j < 4; j++, SK++ ) + { + *RK++ = AES_RT0( FSb[ MBEDTLS_BYTE_0( *SK ) ] ) ^ + AES_RT1( FSb[ MBEDTLS_BYTE_1( *SK ) ] ) ^ + AES_RT2( FSb[ MBEDTLS_BYTE_2( *SK ) ] ) ^ + AES_RT3( FSb[ MBEDTLS_BYTE_3( *SK ) ] ); + } + } + + *RK++ = *SK++; + *RK++ = *SK++; + *RK++ = *SK++; + *RK++ = *SK++; + +exit: + mbedtls_aes_free( &cty ); + + return( ret ); +} + +#define AES_FROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3) \ + { uint32_t T; \ + X0 = *RK++; X1 = *RK++; X2 = *RK++; X3 = *RK++; \ + T=Y0; \ + X0 ^= FT0[ ( T ) & 0xFF ]; T >>= 8; \ + X3 ^= FT1[ ( T ) & 0xFF ]; T >>= 8; \ + X2 ^= FT2[ ( T ) & 0xFF ]; T >>= 8; \ + X1 ^= FT3[ ( T ) & 0xFF ]; \ + T=Y1; \ + X1 ^= FT0[ ( T ) & 0xFF ]; T >>= 8; \ + X0 ^= FT1[ ( T ) & 0xFF ]; T >>= 8; \ + X3 ^= FT2[ ( T ) & 0xFF ]; T >>= 8; \ + X2 ^= FT3[ ( T ) & 0xFF ]; \ + T=Y2; \ + X2 ^= FT0[ ( T ) & 0xFF ]; T >>= 8; \ + X1 ^= FT1[ ( T ) & 0xFF ]; T >>= 8; \ + X0 ^= FT2[ ( T ) & 0xFF ]; T >>= 8; \ + X3 ^= FT3[ ( T ) & 0xFF ]; \ + T=Y3; \ + X3 ^= FT0[ ( T ) & 0xFF ]; T >>= 8; \ + X2 ^= FT1[ ( T ) & 0xFF ]; T >>= 8; \ + X1 ^= FT2[ ( T ) & 0xFF ]; T >>= 8; \ + X0 ^= FT3[ ( T ) & 0xFF ]; \ + } + +#define AES_RROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \ +{ uint32_t T; \ + X0 = *RK++; X1 = *RK++; X2 = *RK++; X3 = *RK++; \ + T=Y0; \ + X0 ^= RT0[ ( T ) & 0xFF ]; T >>= 8; \ + X1 ^= RT1[ ( T ) & 0xFF ]; T >>= 8; \ + X2 ^= RT2[ ( T ) & 0xFF ]; T >>= 8; \ + X3 ^= RT3[ ( T ) & 0xFF ]; \ + T=Y1; \ + X1 ^= RT0[ ( T ) & 0xFF ]; T >>= 8; \ + X2 ^= RT1[ ( T ) & 0xFF ]; T >>= 8; \ + X3 ^= RT2[ ( T ) & 0xFF ]; T >>= 8; \ + X0 ^= RT3[ ( T ) & 0xFF ]; \ + T=Y2; \ + X2 ^= RT0[ ( T ) & 0xFF ]; T >>= 8; \ + X3 ^= RT1[ ( T ) & 0xFF ]; T >>= 8; \ + X0 ^= RT2[ ( T ) & 0xFF ]; T >>= 8; \ + X2 ^= RT3[ ( T ) & 0xFF ]; \ + T=Y3; \ + X3 ^= RT0[ ( T ) & 0xFF ]; T >>= 8; \ + X0 ^= RT1[ ( T ) & 0xFF ]; T >>= 8; \ + X1 ^= RT2[ ( T ) & 0xFF ]; T >>= 8; \ + X2 ^= RT3[ ( T ) & 0xFF ]; \ +} + +/* + * AES-ECB block encryption + */ +int mbedtls_internal_aes_encrypt( mbedtls_aes_context *ctx, + const unsigned char input[16], + unsigned char output[16] ) +{ + int i; + uint32_t T0,*RK = ctx->rk; + struct + { + uint32_t X[4]; + uint32_t Y[4]; + } t; + + t.X[0] = MBEDTLS_GET_UINT32_LE( input, 0 ); t.X[0] ^= *RK++; + t.X[1] = MBEDTLS_GET_UINT32_LE( input, 4 ); t.X[1] ^= *RK++; + t.X[2] = MBEDTLS_GET_UINT32_LE( input, 8 ); t.X[2] ^= *RK++; + t.X[3] = MBEDTLS_GET_UINT32_LE( input, 12 ); t.X[3] ^= *RK++; + + for( i = ( ctx->nr >> 1 ) - 1; i > 0; i-- ) + { + AES_FROUND( t.Y[0], t.Y[1], t.Y[2], t.Y[3], t.X[0], t.X[1], t.X[2], t.X[3] ); + AES_FROUND( t.X[0], t.X[1], t.X[2], t.X[3], t.Y[0], t.Y[1], t.Y[2], t.Y[3] ); + } + + AES_FROUND( t.Y[0], t.Y[1], t.Y[2], t.Y[3], t.X[0], t.X[1], t.X[2], t.X[3] ); +#define AES_XROUND(X,Y0,Y1,Y2,Y3) \ + T0 = FSb[ ( Y3 >> 24 ) & 0xFF ]; T0 <<= 8; \ + T0 |= FSb[ ( Y2 >> 16 ) & 0xFF ]; T0 <<= 8; \ + T0 |= FSb[ ( Y1 >> 8 ) & 0xFF ]; T0 <<= 8;\ + T0 |= FSb[ ( Y0 ) & 0xFF ]; \ + X = *RK++ ^ T0 + + AES_XROUND(t.X[0],t.Y[0],t.Y[1],t.Y[2],t.Y[3]); + AES_XROUND(t.X[1],t.Y[1],t.Y[2],t.Y[3],t.Y[0]); + AES_XROUND(t.X[2],t.Y[2],t.Y[3],t.Y[0],t.Y[1]); + AES_XROUND(t.X[3],t.Y[3],t.Y[0],t.Y[1],t.Y[2]); +#undef AES_XROUND + + MBEDTLS_PUT_UINT32_LE( t.X[0], output, 0 ); + MBEDTLS_PUT_UINT32_LE( t.X[1], output, 4 ); + MBEDTLS_PUT_UINT32_LE( t.X[2], output, 8 ); + MBEDTLS_PUT_UINT32_LE( t.X[3], output, 12 ); + + return( 0 ); +} + +/* + * AES-ECB block decryption + */ +int mbedtls_internal_aes_decrypt( mbedtls_aes_context *ctx, + const unsigned char input[16], + unsigned char output[16] ) +{ + int i; + uint32_t T0,*RK = ctx->rk; + struct + { + uint32_t X[4]; + uint32_t Y[4]; + } t; + + t.X[0] = MBEDTLS_GET_UINT32_LE( input, 0 ); t.X[0] ^= *RK++; + t.X[1] = MBEDTLS_GET_UINT32_LE( input, 4 ); t.X[1] ^= *RK++; + t.X[2] = MBEDTLS_GET_UINT32_LE( input, 8 ); t.X[2] ^= *RK++; + t.X[3] = MBEDTLS_GET_UINT32_LE( input, 12 ); t.X[3] ^= *RK++; + + for( i = ( ctx->nr >> 1 ) - 1; i > 0; i-- ) + { + AES_RROUND( t.Y[0], t.Y[1], t.Y[2], t.Y[3], t.X[0], t.X[1], t.X[2], t.X[3] ); + AES_RROUND( t.X[0], t.X[1], t.X[2], t.X[3], t.Y[0], t.Y[1], t.Y[2], t.Y[3] ); + } + + AES_RROUND( t.Y[0], t.Y[1], t.Y[2], t.Y[3], t.X[0], t.X[1], t.X[2], t.X[3] ); +#define AES_XROUNDD(X,Y0,Y1,Y2,Y3) \ + T0 = RSb[ ( Y3 >> 24 ) & 0xFF ]; T0 <<= 8; \ + T0 |= RSb[ ( Y2 >> 16 ) & 0xFF ]; T0 <<= 8; \ + T0 |= RSb[ ( Y1 >> 8 ) & 0xFF ]; T0 <<= 8;\ + T0 |= RSb[ ( Y0 ) & 0xFF ]; \ + X = *RK++ ^ T0 + + AES_XROUNDD(t.X[0],t.Y[0],t.Y[3],t.Y[2],t.Y[1]); + AES_XROUNDD(t.X[1],t.Y[1],t.Y[0],t.Y[3],t.Y[2]); + AES_XROUNDD(t.X[2],t.Y[2],t.Y[1],t.Y[0],t.Y[3]); + AES_XROUNDD(t.X[3],t.Y[3],t.Y[2],t.Y[1],t.Y[0]); + +#undef AES_XROUNDD + + MBEDTLS_PUT_UINT32_LE( t.X[0], output, 0 ); + MBEDTLS_PUT_UINT32_LE( t.X[1], output, 4 ); + MBEDTLS_PUT_UINT32_LE( t.X[2], output, 8 ); + MBEDTLS_PUT_UINT32_LE( t.X[3], output, 12 ); + + return( 0 ); +} + +/* + * AES-ECB block encryption/decryption + */ +int mbedtls_aes_crypt_ecb( mbedtls_aes_context *ctx, + int mode, + const unsigned char input[16], + unsigned char output[16] ) +{ + AES_VALIDATE_RET( ctx != NULL ); + AES_VALIDATE_RET( input != NULL ); + AES_VALIDATE_RET( output != NULL ); + AES_VALIDATE_RET( mode == MBEDTLS_AES_ENCRYPT || + mode == MBEDTLS_AES_DECRYPT ); + +#if defined(MBEDTLS_AESNI_C) && defined(MBEDTLS_HAVE_X86_64) + if( aes_aesni_has_support ) + return( mbedtls_aesni_crypt_ecb( ctx, mode, input, output ) ); +#endif + + + if( mode == MBEDTLS_AES_ENCRYPT ) + return( mbedtls_internal_aes_encrypt( ctx, input, output ) ); + else + return( mbedtls_internal_aes_decrypt( ctx, input, output ) ); +} + diff --git a/src/components/implementation/simple_nf/ndpi/gcrypt/aes.h b/src/components/implementation/simple_nf/ndpi/gcrypt/aes.h new file mode 100644 index 0000000000..edfee5a7be --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/gcrypt/aes.h @@ -0,0 +1,271 @@ +/** + * \file aes.h + * + * \brief This file contains AES definitions and functions. + * + * The Advanced Encryption Standard (AES) specifies a FIPS-approved + * cryptographic algorithm that can be used to protect electronic + * data. + * + * The AES algorithm is a symmetric block cipher that can + * encrypt and decrypt information. For more information, see + * FIPS Publication 197: Advanced Encryption Standard and + * ISO/IEC 18033-2:2006: Information technology -- Security + * techniques -- Encryption algorithms -- Part 2: Asymmetric + * ciphers. + * + * The AES-XTS block mode is standardized by NIST SP 800-38E + * + * and described in detail by IEEE P1619 + * . + */ + +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MBEDTLS_AES_H +#define MBEDTLS_AES_H + + + +/* padlock.c and aesni.c rely on these values! */ +#define MBEDTLS_AES_ENCRYPT 1 /**< AES encryption. */ +#define MBEDTLS_AES_DECRYPT 0 /**< AES decryption. */ + +/* Error codes in range 0x0020-0x0022 */ +/** Invalid key length. */ +#define MBEDTLS_ERR_AES_INVALID_KEY_LENGTH -0x0020 +/** Invalid data input length. */ +#define MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH -0x0022 + +/* Error codes in range 0x0021-0x0025 */ +/** Invalid input data. */ +#define MBEDTLS_ERR_AES_BAD_INPUT_DATA -0x0021 + +#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \ + !defined(inline) && !defined(__cplusplus) +#define inline __inline +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +// Regular implementation +// + +/** + * \brief The AES context-type definition. + */ +typedef struct mbedtls_aes_context +{ + int nr; /*!< The number of rounds. */ + uint32_t *rk; /*!< AES round keys. */ + uint32_t buf[68]; /*!< Unaligned data buffer. This buffer can + hold 32 extra Bytes, which can be used for + one of the following purposes: +
  • Alignment if VIA padlock is + used.
  • +
  • Simplifying key expansion in the 256-bit + case by generating an extra round key. +
*/ +} +mbedtls_aes_context; + + + +/** + * \brief This function initializes the specified AES context. + * + * It must be the first API called before using + * the context. + * + * \param ctx The AES context to initialize. This must not be \c NULL. + */ +void mbedtls_aes_init( mbedtls_aes_context *ctx ); + +/** + * \brief This function releases and clears the specified AES context. + * + * \param ctx The AES context to clear. + * If this is \c NULL, this function does nothing. + * Otherwise, the context must have been at least initialized. + */ +void mbedtls_aes_free( mbedtls_aes_context *ctx ); + + +/** + * \brief This function sets the encryption key. + * + * \param ctx The AES context to which the key should be bound. + * It must be initialized. + * \param key The encryption key. + * This must be a readable buffer of size \p keybits bits. + * \param keybits The size of data passed in bits. Valid options are: + *
  • 128 bits
  • + *
  • 192 bits
  • + *
  • 256 bits
+ * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_AES_INVALID_KEY_LENGTH on failure. + */ +MBEDTLS_CHECK_RETURN_TYPICAL +int mbedtls_aes_setkey_enc( mbedtls_aes_context *ctx, const unsigned char *key, + unsigned int keybits ); + +/** + * \brief This function sets the decryption key. + * + * \param ctx The AES context to which the key should be bound. + * It must be initialized. + * \param key The decryption key. + * This must be a readable buffer of size \p keybits bits. + * \param keybits The size of data passed. Valid options are: + *
  • 128 bits
  • + *
  • 192 bits
  • + *
  • 256 bits
+ * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_AES_INVALID_KEY_LENGTH on failure. + */ +MBEDTLS_CHECK_RETURN_TYPICAL +int mbedtls_aes_setkey_dec( mbedtls_aes_context *ctx, const unsigned char *key, + unsigned int keybits ); + + +/** + * \brief This function performs an AES single-block encryption or + * decryption operation. + * + * It performs the operation defined in the \p mode parameter + * (encrypt or decrypt), on the input data buffer defined in + * the \p input parameter. + * + * mbedtls_aes_init(), and either mbedtls_aes_setkey_enc() or + * mbedtls_aes_setkey_dec() must be called before the first + * call to this API with the same context. + * + * \param ctx The AES context to use for encryption or decryption. + * It must be initialized and bound to a key. + * \param mode The AES operation: #MBEDTLS_AES_ENCRYPT or + * #MBEDTLS_AES_DECRYPT. + * \param input The buffer holding the input data. + * It must be readable and at least \c 16 Bytes long. + * \param output The buffer where the output data will be written. + * It must be writeable and at least \c 16 Bytes long. + + * \return \c 0 on success. + */ +MBEDTLS_CHECK_RETURN_TYPICAL +int mbedtls_aes_crypt_ecb( mbedtls_aes_context *ctx, + int mode, + const unsigned char input[16], + unsigned char output[16] ); + +#if defined(MBEDTLS_CIPHER_MODE_CBC) +/** + * \brief This function performs an AES-CBC encryption or decryption operation + * on full blocks. + * + * It performs the operation defined in the \p mode + * parameter (encrypt/decrypt), on the input data buffer defined in + * the \p input parameter. + * + * It can be called as many times as needed, until all the input + * data is processed. mbedtls_aes_init(), and either + * mbedtls_aes_setkey_enc() or mbedtls_aes_setkey_dec() must be called + * before the first call to this API with the same context. + * + * \note This function operates on full blocks, that is, the input size + * must be a multiple of the AES block size of \c 16 Bytes. + * + * \note Upon exit, the content of the IV is updated so that you can + * call the same function again on the next + * block(s) of data and get the same result as if it was + * encrypted in one call. This allows a "streaming" usage. + * If you need to retain the contents of the IV, you should + * either save it manually or use the cipher module instead. + * + * + * \param ctx The AES context to use for encryption or decryption. + * It must be initialized and bound to a key. + * \param mode The AES operation: #MBEDTLS_AES_ENCRYPT or + * #MBEDTLS_AES_DECRYPT. + * \param length The length of the input data in Bytes. This must be a + * multiple of the block size (\c 16 Bytes). + * \param iv Initialization vector (updated after use). + * It must be a readable and writeable buffer of \c 16 Bytes. + * \param input The buffer holding the input data. + * It must be readable and of size \p length Bytes. + * \param output The buffer holding the output data. + * It must be writeable and of size \p length Bytes. + * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH + * on failure. + */ +MBEDTLS_CHECK_RETURN_TYPICAL +int mbedtls_aes_crypt_cbc( mbedtls_aes_context *ctx, + int mode, + size_t length, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ); +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + + + + + +/** + * \brief Internal AES block encryption function. This is only + * exposed to allow overriding it using + * \c MBEDTLS_AES_ENCRYPT_ALT. + * + * \param ctx The AES context to use for encryption. + * \param input The plaintext block. + * \param output The output (ciphertext) block. + * + * \return \c 0 on success. + */ +MBEDTLS_CHECK_RETURN_TYPICAL +int mbedtls_internal_aes_encrypt( mbedtls_aes_context *ctx, + const unsigned char input[16], + unsigned char output[16] ); + +/** + * \brief Internal AES block decryption function. This is only + * exposed to allow overriding it using see + * \c MBEDTLS_AES_DECRYPT_ALT. + * + * \param ctx The AES context to use for decryption. + * \param input The ciphertext block. + * \param output The output (plaintext) block. + * + * \return \c 0 on success. + */ +MBEDTLS_CHECK_RETURN_TYPICAL +int mbedtls_internal_aes_decrypt( mbedtls_aes_context *ctx, + const unsigned char input[16], + unsigned char output[16] ); + + +#ifdef __cplusplus +} +#endif + +#endif /* aes.h */ diff --git a/src/components/implementation/simple_nf/ndpi/gcrypt/aesni.c b/src/components/implementation/simple_nf/ndpi/gcrypt/aesni.c new file mode 100644 index 0000000000..b47fb6ba6e --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/gcrypt/aesni.c @@ -0,0 +1,523 @@ +/* + * AES-NI support functions + * + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * [AES-WP] http://software.intel.com/en-us/articles/intel-advanced-encryption-standard-aes-instructions-set + * [CLMUL-WP] http://software.intel.com/en-us/articles/intel-carry-less-multiplication-instruction-and-its-usage-for-computing-the-gcm-mode/ + */ + + +#if defined(__has_feature) +#if __has_feature(memory_sanitizer) +/* Using "#pragma message" instead of "#warning" to allow compilation with -Werror. + This pragma directive should be supported from every compilers supporting also memory sanitizer +*/ +#pragma message "MBEDTLS_AESNI_C is known to cause spurious error reports with some memory sanitizers as they do not understand the assembly code." +#endif +#endif + +#ifndef asm +#define asm __asm +#endif + +#if defined(MBEDTLS_HAVE_X86_64) +#if defined(linux) || defined(__linux__) +#include +#endif + +#if defined(WIN32) || defined(WIN64) +#include +#endif + +#if defined(linux) || defined(__linux__) +static u_int8_t cached_has_aesni = 0, has_aesni_checked = 0; +#endif + +/* + * AES-NI support detection routine + */ +int mbedtls_aesni_has_support( unsigned int what ) +{ +#if defined(__has_feature) +# if __has_feature(memory_sanitizer) + return 0; +# endif +#endif + +#if defined(linux) || defined(__linux__) + if(has_aesni_checked == 0) { + /* + NOTE + + This code is necessary as __get_cpuid() is not reliable + Example with Intel(R) Celeron(R) CPU N2930 (that has NO AES-NI) + the code based on __get_cpuid() reports that AES-NI is present + and thus nDPI crashes on such platform. + */ + FILE *fd = fopen("/proc/cpuinfo", "r"); + + if(fd != NULL) { + char *line = NULL; + size_t len = 0; + u_int8_t num_lines = 0; + + while(getline(&line, &len, fd) != -1) { + if(strstr(line, "aes")) { + /* printf("FOUND %s", line); */ + cached_has_aesni = 1; + break; + } + + if(++num_lines > 99) + break; /* We giveup */ + } + + free(line); + fclose(fd); + + has_aesni_checked = 1; + } + } + + return(cached_has_aesni); + +#if 0 + if (__get_cpuid(1, &eax, &ebx, &ecx, &edx) == 0) + { + return 0; + } + + return ( (ecx & what) != 0 ); +#endif +#elif defined(WIN32) || defined(WIN64) + int cpuInfo[4]; + + __cpuid(cpuInfo, 1); + + return ( (cpuInfo[2] & what) != 0 ); +#else + volatile unsigned int c = 0; + + asm( "movl $1, %%eax \n\t" + "cpuid \n\t" + : "=c" (c) + : + : "eax", "ebx", "edx" ); + + return( ( c & what ) != 0 ); +#endif +} + +/* + * Binutils needs to be at least 2.19 to support AES-NI instructions. + * Unfortunately, a lot of users have a lower version now (2014-04). + * Emit bytecode directly in order to support "old" version of gas. + * + * Opcodes from the Intel architecture reference manual, vol. 3. + * We always use registers, so we don't need prefixes for memory operands. + * Operand macros are in gas order (src, dst) as opposed to Intel order + * (dst, src) in order to blend better into the surrounding assembly code. + */ +#define AESDEC ".byte 0x66,0x0F,0x38,0xDE," +#define AESDECLAST ".byte 0x66,0x0F,0x38,0xDF," +#define AESENC ".byte 0x66,0x0F,0x38,0xDC," +#define AESENCLAST ".byte 0x66,0x0F,0x38,0xDD," +#define AESIMC ".byte 0x66,0x0F,0x38,0xDB," +#define AESKEYGENA ".byte 0x66,0x0F,0x3A,0xDF," +#define PCLMULQDQ ".byte 0x66,0x0F,0x3A,0x44," + +#define xmm0_xmm0 "0xC0" +#define xmm0_xmm1 "0xC8" +#define xmm0_xmm2 "0xD0" +#define xmm0_xmm3 "0xD8" +#define xmm0_xmm4 "0xE0" +#define xmm1_xmm0 "0xC1" +#define xmm1_xmm2 "0xD1" + +/* + * AES-NI AES-ECB block en(de)cryption + */ +int mbedtls_aesni_crypt_ecb( mbedtls_aes_context *ctx, + int mode, + const unsigned char input[16], + unsigned char output[16] ) +{ + asm( "movdqu (%3), %%xmm0 \n\t" // load input + "movdqu (%1), %%xmm1 \n\t" // load round key 0 + "pxor %%xmm1, %%xmm0 \n\t" // round 0 + "add $16, %1 \n\t" // point to next round key + "subl $1, %0 \n\t" // normal rounds = nr - 1 + "test %2, %2 \n\t" // mode? + "jz 2f \n\t" // 0 = decrypt + + "1: \n\t" // encryption loop + "movdqu (%1), %%xmm1 \n\t" // load round key + AESENC xmm1_xmm0 "\n\t" // do round + "add $16, %1 \n\t" // point to next round key + "subl $1, %0 \n\t" // loop + "jnz 1b \n\t" + "movdqu (%1), %%xmm1 \n\t" // load round key + AESENCLAST xmm1_xmm0 "\n\t" // last round + "jmp 3f \n\t" + + "2: \n\t" // decryption loop + "movdqu (%1), %%xmm1 \n\t" + AESDEC xmm1_xmm0 "\n\t" // do round + "add $16, %1 \n\t" + "subl $1, %0 \n\t" + "jnz 2b \n\t" + "movdqu (%1), %%xmm1 \n\t" // load round key + AESDECLAST xmm1_xmm0 "\n\t" // last round + + "3: \n\t" + "movdqu %%xmm0, (%4) \n\t" // export output + : + : "r" (ctx->nr), "r" (ctx->rk), "r" (mode), "r" (input), "r" (output) + : "memory", "cc", "xmm0", "xmm1" ); + + + return( 0 ); +} + +/* + * GCM multiplication: c = a times b in GF(2^128) + * Based on [CLMUL-WP] algorithms 1 (with equation 27) and 5. + */ +void mbedtls_aesni_gcm_mult( unsigned char c[16], + const unsigned char a[16], + const unsigned char b[16] ) +{ + unsigned char aa[16], bb[16], cc[16]; + size_t i; + + /* The inputs are in big-endian order, so byte-reverse them */ + for( i = 0; i < 16; i++ ) + { + aa[i] = a[15 - i]; + bb[i] = b[15 - i]; + } + + asm( "movdqu (%0), %%xmm0 \n\t" // a1:a0 + "movdqu (%1), %%xmm1 \n\t" // b1:b0 + + /* + * Caryless multiplication xmm2:xmm1 = xmm0 * xmm1 + * using [CLMUL-WP] algorithm 1 (p. 13). + */ + "movdqa %%xmm1, %%xmm2 \n\t" // copy of b1:b0 + "movdqa %%xmm1, %%xmm3 \n\t" // same + "movdqa %%xmm1, %%xmm4 \n\t" // same + PCLMULQDQ xmm0_xmm1 ",0x00 \n\t" // a0*b0 = c1:c0 + PCLMULQDQ xmm0_xmm2 ",0x11 \n\t" // a1*b1 = d1:d0 + PCLMULQDQ xmm0_xmm3 ",0x10 \n\t" // a0*b1 = e1:e0 + PCLMULQDQ xmm0_xmm4 ",0x01 \n\t" // a1*b0 = f1:f0 + "pxor %%xmm3, %%xmm4 \n\t" // e1+f1:e0+f0 + "movdqa %%xmm4, %%xmm3 \n\t" // same + "psrldq $8, %%xmm4 \n\t" // 0:e1+f1 + "pslldq $8, %%xmm3 \n\t" // e0+f0:0 + "pxor %%xmm4, %%xmm2 \n\t" // d1:d0+e1+f1 + "pxor %%xmm3, %%xmm1 \n\t" // c1+e0+f1:c0 + + /* + * Now shift the result one bit to the left, + * taking advantage of [CLMUL-WP] eq 27 (p. 20) + */ + "movdqa %%xmm1, %%xmm3 \n\t" // r1:r0 + "movdqa %%xmm2, %%xmm4 \n\t" // r3:r2 + "psllq $1, %%xmm1 \n\t" // r1<<1:r0<<1 + "psllq $1, %%xmm2 \n\t" // r3<<1:r2<<1 + "psrlq $63, %%xmm3 \n\t" // r1>>63:r0>>63 + "psrlq $63, %%xmm4 \n\t" // r3>>63:r2>>63 + "movdqa %%xmm3, %%xmm5 \n\t" // r1>>63:r0>>63 + "pslldq $8, %%xmm3 \n\t" // r0>>63:0 + "pslldq $8, %%xmm4 \n\t" // r2>>63:0 + "psrldq $8, %%xmm5 \n\t" // 0:r1>>63 + "por %%xmm3, %%xmm1 \n\t" // r1<<1|r0>>63:r0<<1 + "por %%xmm4, %%xmm2 \n\t" // r3<<1|r2>>62:r2<<1 + "por %%xmm5, %%xmm2 \n\t" // r3<<1|r2>>62:r2<<1|r1>>63 + + /* + * Now reduce modulo the GCM polynomial x^128 + x^7 + x^2 + x + 1 + * using [CLMUL-WP] algorithm 5 (p. 20). + * Currently xmm2:xmm1 holds x3:x2:x1:x0 (already shifted). + */ + /* Step 2 (1) */ + "movdqa %%xmm1, %%xmm3 \n\t" // x1:x0 + "movdqa %%xmm1, %%xmm4 \n\t" // same + "movdqa %%xmm1, %%xmm5 \n\t" // same + "psllq $63, %%xmm3 \n\t" // x1<<63:x0<<63 = stuff:a + "psllq $62, %%xmm4 \n\t" // x1<<62:x0<<62 = stuff:b + "psllq $57, %%xmm5 \n\t" // x1<<57:x0<<57 = stuff:c + + /* Step 2 (2) */ + "pxor %%xmm4, %%xmm3 \n\t" // stuff:a+b + "pxor %%xmm5, %%xmm3 \n\t" // stuff:a+b+c + "pslldq $8, %%xmm3 \n\t" // a+b+c:0 + "pxor %%xmm3, %%xmm1 \n\t" // x1+a+b+c:x0 = d:x0 + + /* Steps 3 and 4 */ + "movdqa %%xmm1,%%xmm0 \n\t" // d:x0 + "movdqa %%xmm1,%%xmm4 \n\t" // same + "movdqa %%xmm1,%%xmm5 \n\t" // same + "psrlq $1, %%xmm0 \n\t" // e1:x0>>1 = e1:e0' + "psrlq $2, %%xmm4 \n\t" // f1:x0>>2 = f1:f0' + "psrlq $7, %%xmm5 \n\t" // g1:x0>>7 = g1:g0' + "pxor %%xmm4, %%xmm0 \n\t" // e1+f1:e0'+f0' + "pxor %%xmm5, %%xmm0 \n\t" // e1+f1+g1:e0'+f0'+g0' + // e0'+f0'+g0' is almost e0+f0+g0, ex\tcept for some missing + // bits carried from d. Now get those\t bits back in. + "movdqa %%xmm1,%%xmm3 \n\t" // d:x0 + "movdqa %%xmm1,%%xmm4 \n\t" // same + "movdqa %%xmm1,%%xmm5 \n\t" // same + "psllq $63, %%xmm3 \n\t" // d<<63:stuff + "psllq $62, %%xmm4 \n\t" // d<<62:stuff + "psllq $57, %%xmm5 \n\t" // d<<57:stuff + "pxor %%xmm4, %%xmm3 \n\t" // d<<63+d<<62:stuff + "pxor %%xmm5, %%xmm3 \n\t" // missing bits of d:stuff + "psrldq $8, %%xmm3 \n\t" // 0:missing bits of d + "pxor %%xmm3, %%xmm0 \n\t" // e1+f1+g1:e0+f0+g0 + "pxor %%xmm1, %%xmm0 \n\t" // h1:h0 + "pxor %%xmm2, %%xmm0 \n\t" // x3+h1:x2+h0 + + "movdqu %%xmm0, (%2) \n\t" // done + : + : "r" (aa), "r" (bb), "r" (cc) + : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5" ); + + /* Now byte-reverse the outputs */ + for( i = 0; i < 16; i++ ) + c[i] = cc[15 - i]; + + return; +} + +/* + * Compute decryption round keys from encryption round keys + */ +void mbedtls_aesni_inverse_key( unsigned char *invkey, + const unsigned char *fwdkey, int nr ) +{ + unsigned char *ik = invkey; + const unsigned char *fk = fwdkey + 16 * nr; + + memcpy( ik, fk, 16 ); + + for( fk -= 16, ik += 16; fk > fwdkey; fk -= 16, ik += 16 ) + asm( "movdqu (%0), %%xmm0 \n\t" + AESIMC xmm0_xmm0 "\n\t" + "movdqu %%xmm0, (%1) \n\t" + : + : "r" (fk), "r" (ik) + : "memory", "xmm0" ); + + memcpy( ik, fk, 16 ); +} + +/* + * Key expansion, 128-bit case + */ +static void aesni_setkey_enc_128( unsigned char *rk, + const unsigned char *key ) +{ + asm( "movdqu (%1), %%xmm0 \n\t" // copy the original key + "movdqu %%xmm0, (%0) \n\t" // as round key 0 + "jmp 2f \n\t" // skip auxiliary routine + + /* + * Finish generating the next round key. + * + * On entry xmm0 is r3:r2:r1:r0 and xmm1 is X:stuff:stuff:stuff + * with X = rot( sub( r3 ) ) ^ RCON. + * + * On exit, xmm0 is r7:r6:r5:r4 + * with r4 = X + r0, r5 = r4 + r1, r6 = r5 + r2, r7 = r6 + r3 + * and those are written to the round key buffer. + */ + "1: \n\t" + "pshufd $0xff, %%xmm1, %%xmm1 \n\t" // X:X:X:X + "pxor %%xmm0, %%xmm1 \n\t" // X+r3:X+r2:X+r1:r4 + "pslldq $4, %%xmm0 \n\t" // r2:r1:r0:0 + "pxor %%xmm0, %%xmm1 \n\t" // X+r3+r2:X+r2+r1:r5:r4 + "pslldq $4, %%xmm0 \n\t" // etc + "pxor %%xmm0, %%xmm1 \n\t" + "pslldq $4, %%xmm0 \n\t" + "pxor %%xmm1, %%xmm0 \n\t" // update xmm0 for next time! + "add $16, %0 \n\t" // point to next round key + "movdqu %%xmm0, (%0) \n\t" // write it + "ret \n\t" + + /* Main "loop" */ + "2: \n\t" + AESKEYGENA xmm0_xmm1 ",0x01 \n\tcall 1b \n\t" + AESKEYGENA xmm0_xmm1 ",0x02 \n\tcall 1b \n\t" + AESKEYGENA xmm0_xmm1 ",0x04 \n\tcall 1b \n\t" + AESKEYGENA xmm0_xmm1 ",0x08 \n\tcall 1b \n\t" + AESKEYGENA xmm0_xmm1 ",0x10 \n\tcall 1b \n\t" + AESKEYGENA xmm0_xmm1 ",0x20 \n\tcall 1b \n\t" + AESKEYGENA xmm0_xmm1 ",0x40 \n\tcall 1b \n\t" + AESKEYGENA xmm0_xmm1 ",0x80 \n\tcall 1b \n\t" + AESKEYGENA xmm0_xmm1 ",0x1B \n\tcall 1b \n\t" + AESKEYGENA xmm0_xmm1 ",0x36 \n\tcall 1b \n\t" + : + : "r" (rk), "r" (key) + : "memory", "cc", "0" ); +} + +/* + * Key expansion, 192-bit case + */ +static void aesni_setkey_enc_192( unsigned char *rk, + const unsigned char *key ) +{ + asm( "movdqu (%1), %%xmm0 \n\t" // copy original round key + "movdqu %%xmm0, (%0) \n\t" + "add $16, %0 \n\t" + "movq 16(%1), %%xmm1 \n\t" + "movq %%xmm1, (%0) \n\t" + "add $8, %0 \n\t" + "jmp 2f \n\t" // skip auxiliary routine + + /* + * Finish generating the next 6 quarter-keys. + * + * On entry xmm0 is r3:r2:r1:r0, xmm1 is stuff:stuff:r5:r4 + * and xmm2 is stuff:stuff:X:stuff with X = rot( sub( r3 ) ) ^ RCON. + * + * On exit, xmm0 is r9:r8:r7:r6 and xmm1 is stuff:stuff:r11:r10 + * and those are written to the round key buffer. + */ + "1: \n\t" + "pshufd $0x55, %%xmm2, %%xmm2 \n\t" // X:X:X:X + "pxor %%xmm0, %%xmm2 \n\t" // X+r3:X+r2:X+r1:r4 + "pslldq $4, %%xmm0 \n\t" // etc + "pxor %%xmm0, %%xmm2 \n\t" + "pslldq $4, %%xmm0 \n\t" + "pxor %%xmm0, %%xmm2 \n\t" + "pslldq $4, %%xmm0 \n\t" + "pxor %%xmm2, %%xmm0 \n\t" // update xmm0 = r9:r8:r7:r6 + "movdqu %%xmm0, (%0) \n\t" + "add $16, %0 \n\t" + "pshufd $0xff, %%xmm0, %%xmm2 \n\t" // r9:r9:r9:r9 + "pxor %%xmm1, %%xmm2 \n\t" // stuff:stuff:r9+r5:r10 + "pslldq $4, %%xmm1 \n\t" // r2:r1:r0:0 + "pxor %%xmm2, %%xmm1 \n\t" // xmm1 = stuff:stuff:r11:r10 + "movq %%xmm1, (%0) \n\t" + "add $8, %0 \n\t" + "ret \n\t" + + "2: \n\t" + AESKEYGENA xmm1_xmm2 ",0x01 \n\tcall 1b \n\t" + AESKEYGENA xmm1_xmm2 ",0x02 \n\tcall 1b \n\t" + AESKEYGENA xmm1_xmm2 ",0x04 \n\tcall 1b \n\t" + AESKEYGENA xmm1_xmm2 ",0x08 \n\tcall 1b \n\t" + AESKEYGENA xmm1_xmm2 ",0x10 \n\tcall 1b \n\t" + AESKEYGENA xmm1_xmm2 ",0x20 \n\tcall 1b \n\t" + AESKEYGENA xmm1_xmm2 ",0x40 \n\tcall 1b \n\t" + AESKEYGENA xmm1_xmm2 ",0x80 \n\tcall 1b \n\t" + + : + : "r" (rk), "r" (key) + : "memory", "cc", "0" ); +} + +/* + * Key expansion, 256-bit case + */ +static void aesni_setkey_enc_256( unsigned char *rk, + const unsigned char *key ) +{ + asm( "movdqu (%1), %%xmm0 \n\t" + "movdqu %%xmm0, (%0) \n\t" + "add $16, %0 \n\t" + "movdqu 16(%1), %%xmm1 \n\t" + "movdqu %%xmm1, (%0) \n\t" + "jmp 2f \n\t" // skip auxiliary routine + + /* + * Finish generating the next two round keys. + * + * On entry xmm0 is r3:r2:r1:r0, xmm1 is r7:r6:r5:r4 and + * xmm2 is X:stuff:stuff:stuff with X = rot( sub( r7 )) ^ RCON + * + * On exit, xmm0 is r11:r10:r9:r8 and xmm1 is r15:r14:r13:r12 + * and those have been written to the output buffer. + */ + "1: \n\t" + "pshufd $0xff, %%xmm2, %%xmm2 \n\t" + "pxor %%xmm0, %%xmm2 \n\t" + "pslldq $4, %%xmm0 \n\t" + "pxor %%xmm0, %%xmm2 \n\t" + "pslldq $4, %%xmm0 \n\t" + "pxor %%xmm0, %%xmm2 \n\t" + "pslldq $4, %%xmm0 \n\t" + "pxor %%xmm2, %%xmm0 \n\t" + "add $16, %0 \n\t" + "movdqu %%xmm0, (%0) \n\t" + + /* Set xmm2 to stuff:Y:stuff:stuff with Y = subword( r11 ) + * and proceed to generate next round key from there */ + AESKEYGENA xmm0_xmm2 ",0x00 \n\t" + "pshufd $0xaa, %%xmm2, %%xmm2 \n\t" + "pxor %%xmm1, %%xmm2 \n\t" + "pslldq $4, %%xmm1 \n\t" + "pxor %%xmm1, %%xmm2 \n\t" + "pslldq $4, %%xmm1 \n\t" + "pxor %%xmm1, %%xmm2 \n\t" + "pslldq $4, %%xmm1 \n\t" + "pxor %%xmm2, %%xmm1 \n\t" + "add $16, %0 \n\t" + "movdqu %%xmm1, (%0) \n\t" + "ret \n\t" + + /* + * Main "loop" - Generating one more key than necessary, + * see definition of mbedtls_aes_context.buf + */ + "2: \n\t" + AESKEYGENA xmm1_xmm2 ",0x01 \n\tcall 1b \n\t" + AESKEYGENA xmm1_xmm2 ",0x02 \n\tcall 1b \n\t" + AESKEYGENA xmm1_xmm2 ",0x04 \n\tcall 1b \n\t" + AESKEYGENA xmm1_xmm2 ",0x08 \n\tcall 1b \n\t" + AESKEYGENA xmm1_xmm2 ",0x10 \n\tcall 1b \n\t" + AESKEYGENA xmm1_xmm2 ",0x20 \n\tcall 1b \n\t" + AESKEYGENA xmm1_xmm2 ",0x40 \n\tcall 1b \n\t" + : + : "r" (rk), "r" (key) + : "memory", "cc", "0" ); +} + +/* + * Key expansion, wrapper + */ +int mbedtls_aesni_setkey_enc( unsigned char *rk, + const unsigned char *key, + size_t bits ) +{ + switch( bits ) + { + case 128: aesni_setkey_enc_128( rk, key ); break; + case 192: aesni_setkey_enc_192( rk, key ); break; + case 256: aesni_setkey_enc_256( rk, key ); break; + default : return( MBEDTLS_ERR_AES_INVALID_KEY_LENGTH ); + } + + return( 0 ); +} + +#endif /* MBEDTLS_HAVE_X86_64 */ diff --git a/src/components/implementation/simple_nf/ndpi/gcrypt/aesni.h b/src/components/implementation/simple_nf/ndpi/gcrypt/aesni.h new file mode 100644 index 0000000000..ca614475d1 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/gcrypt/aesni.h @@ -0,0 +1,130 @@ +/** + * \file aesni.h + * + * \brief AES-NI for hardware AES acceleration on some Intel processors + * + * \warning These functions are only for internal use by other library + * functions; you must not call them directly. + */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef MBEDTLS_AESNI_H +#define MBEDTLS_AESNI_H + + + +#define MBEDTLS_AESNI_AES 0x02000000u +#define MBEDTLS_AESNI_CLMUL 0x00000002u + +#if defined(MBEDTLS_HAVE_ASM) && defined(__GNUC__) && \ + ( defined(__amd64__) || defined(__x86_64__) ) && \ + ! defined(MBEDTLS_HAVE_X86_64) +#define MBEDTLS_HAVE_X86_64 +#endif + +#if defined(MBEDTLS_HAVE_X86_64) + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Internal function to detect the AES-NI feature in CPUs. + * + * \note This function is only for internal use by other library + * functions; you must not call it directly. + * + * \param what The feature to detect + * (MBEDTLS_AESNI_AES or MBEDTLS_AESNI_CLMUL) + * + * \return 1 if CPU has support for the feature, 0 otherwise + */ +int mbedtls_aesni_has_support( unsigned int what ); + +/** + * \brief Internal AES-NI AES-ECB block encryption and decryption + * + * \note This function is only for internal use by other library + * functions; you must not call it directly. + * + * \param ctx AES context + * \param mode MBEDTLS_AES_ENCRYPT or MBEDTLS_AES_DECRYPT + * \param input 16-byte input block + * \param output 16-byte output block + * + * \return 0 on success (cannot fail) + */ +int mbedtls_aesni_crypt_ecb( mbedtls_aes_context *ctx, + int mode, + const unsigned char input[16], + unsigned char output[16] ); + +/** + * \brief Internal GCM multiplication: c = a * b in GF(2^128) + * + * \note This function is only for internal use by other library + * functions; you must not call it directly. + * + * \param c Result + * \param a First operand + * \param b Second operand + * + * \note Both operands and result are bit strings interpreted as + * elements of GF(2^128) as per the GCM spec. + */ +void mbedtls_aesni_gcm_mult( unsigned char c[16], + const unsigned char a[16], + const unsigned char b[16] ); + +/** + * \brief Internal round key inversion. This function computes + * decryption round keys from the encryption round keys. + * + * \note This function is only for internal use by other library + * functions; you must not call it directly. + * + * \param invkey Round keys for the equivalent inverse cipher + * \param fwdkey Original round keys (for encryption) + * \param nr Number of rounds (that is, number of round keys minus one) + */ +void mbedtls_aesni_inverse_key( unsigned char *invkey, + const unsigned char *fwdkey, + int nr ); + +/** + * \brief Internal key expansion for encryption + * + * \note This function is only for internal use by other library + * functions; you must not call it directly. + * + * \param rk Destination buffer where the round keys are written + * \param key Encryption key + * \param bits Key size in bits (must be 128, 192 or 256) + * + * \return 0 if successful, or MBEDTLS_ERR_AES_INVALID_KEY_LENGTH + */ +int mbedtls_aesni_setkey_enc( unsigned char *rk, + const unsigned char *key, + size_t bits ); + +#ifdef __cplusplus +} +#endif + +#endif /* MBEDTLS_HAVE_X86_64 */ + +#endif /* MBEDTLS_AESNI_H */ diff --git a/src/components/implementation/simple_nf/ndpi/gcrypt/cipher.c b/src/components/implementation/simple_nf/ndpi/gcrypt/cipher.c new file mode 100644 index 0000000000..2231db9f63 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/gcrypt/cipher.c @@ -0,0 +1,591 @@ +/** + * \file cipher.c + * + * \brief Generic cipher wrapper for mbed TLS + * + * \author Adriaan de Jong + * + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define CIPHER_VALIDATE_RET( cond ) \ + MBEDTLS_INTERNAL_VALIDATE_RET( cond, MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ) +#define CIPHER_VALIDATE( cond ) \ + MBEDTLS_INTERNAL_VALIDATE( cond ) + +static int supported_init = 0; + +const int *mbedtls_cipher_list( void ) +{ + const mbedtls_cipher_definition_t *def; + int *type; + + if( ! supported_init ) + { + def = mbedtls_cipher_definitions; + type = mbedtls_cipher_supported; + + while( def->type != 0 ) + *type++ = (*def++).type; + + *type = 0; + + supported_init = 1; + } + + return( mbedtls_cipher_supported ); +} + +const mbedtls_cipher_info_t *mbedtls_cipher_info_from_type( + const mbedtls_cipher_type_t cipher_type ) +{ + const mbedtls_cipher_definition_t *def; + + for( def = mbedtls_cipher_definitions; def->info != NULL; def++ ) + if( def->type == cipher_type ) + return( def->info ); + + return( NULL ); +} + +const mbedtls_cipher_info_t *mbedtls_cipher_info_from_string( + const char *cipher_name ) +{ + const mbedtls_cipher_definition_t *def; + + if( NULL == cipher_name ) + return( NULL ); + + for( def = mbedtls_cipher_definitions; def->info != NULL; def++ ) + if( ! strcmp( def->info->name, cipher_name ) ) + return( def->info ); + + return( NULL ); +} + +const mbedtls_cipher_info_t *mbedtls_cipher_info_from_values( + const mbedtls_cipher_id_t cipher_id, + int key_bitlen, + const mbedtls_cipher_mode_t mode ) +{ + const mbedtls_cipher_definition_t *def; + + for( def = mbedtls_cipher_definitions; def->info != NULL; def++ ) + if( def->info->base->cipher == cipher_id && + def->info->key_bitlen == (unsigned) key_bitlen && + def->info->mode == mode ) + return( def->info ); + + return( NULL ); +} + +void mbedtls_cipher_init( mbedtls_cipher_context_t *ctx ) +{ + CIPHER_VALIDATE( ctx != NULL ); + memset( ctx, 0, sizeof( mbedtls_cipher_context_t ) ); +} + +int mbedtls_cipher_setkey( mbedtls_cipher_context_t *ctx, + const unsigned char *key, + int key_bitlen, + const mbedtls_operation_t operation ) +{ + CIPHER_VALIDATE_RET( ctx != NULL ); + CIPHER_VALIDATE_RET( key != NULL ); + CIPHER_VALIDATE_RET( operation == MBEDTLS_ENCRYPT || + operation == MBEDTLS_DECRYPT ); + if( ctx->cipher_info == NULL ) + return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + + if( ( ctx->cipher_info->flags & MBEDTLS_CIPHER_VARIABLE_KEY_LEN ) == 0 && + (int) ctx->cipher_info->key_bitlen != key_bitlen ) + { + return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + } + + ctx->key_bitlen = key_bitlen; + ctx->operation = operation; + + /* + * For OFB, CFB and CTR mode always use the encryption key schedule + */ + if( MBEDTLS_ENCRYPT == operation || + MBEDTLS_MODE_CFB == ctx->cipher_info->mode || + MBEDTLS_MODE_OFB == ctx->cipher_info->mode || + MBEDTLS_MODE_CTR == ctx->cipher_info->mode ) + { + return( ctx->cipher_info->base->setkey_enc_func( ctx->cipher_ctx, key, + ctx->key_bitlen ) ); + } + + if( MBEDTLS_DECRYPT == operation ) + return( ctx->cipher_info->base->setkey_dec_func( ctx->cipher_ctx, key, + ctx->key_bitlen ) ); + + return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +} + +int mbedtls_cipher_set_iv( mbedtls_cipher_context_t *ctx, + const unsigned char *iv, + size_t iv_len ) +{ + size_t actual_iv_size; + + CIPHER_VALIDATE_RET( ctx != NULL ); + CIPHER_VALIDATE_RET( iv_len == 0 || iv != NULL ); + if( ctx->cipher_info == NULL ) + return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* avoid buffer overflow in ctx->iv */ + if( iv_len > MBEDTLS_MAX_IV_LENGTH ) + return( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + + if( ( ctx->cipher_info->flags & MBEDTLS_CIPHER_VARIABLE_IV_LEN ) != 0 ) + actual_iv_size = iv_len; + else + { + actual_iv_size = ctx->cipher_info->iv_size; + + /* avoid reading past the end of input buffer */ + if( actual_iv_size > iv_len ) + return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + } + + +#if defined(MBEDTLS_GCM_C) + if( MBEDTLS_MODE_GCM == ctx->cipher_info->mode ) + { + return( mbedtls_gcm_starts( (mbedtls_gcm_context *) ctx->cipher_ctx, + ctx->operation, + iv, iv_len ) ); + } +#endif + + + if ( actual_iv_size != 0 ) + { + memcpy( ctx->iv, iv, actual_iv_size ); + ctx->iv_size = actual_iv_size; + } + + return( 0 ); +} + +int mbedtls_cipher_reset( mbedtls_cipher_context_t *ctx ) +{ + CIPHER_VALIDATE_RET( ctx != NULL ); + if( ctx->cipher_info == NULL ) + return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + + ctx->unprocessed_len = 0; + + return( 0 ); +} + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) +int mbedtls_cipher_update_ad( mbedtls_cipher_context_t *ctx, + const unsigned char *ad, size_t ad_len ) +{ + CIPHER_VALIDATE_RET( ctx != NULL ); + CIPHER_VALIDATE_RET( ad_len == 0 || ad != NULL ); + if( ctx->cipher_info == NULL ) + return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + +#if defined(MBEDTLS_GCM_C) + if( MBEDTLS_MODE_GCM == ctx->cipher_info->mode ) + { + return( mbedtls_gcm_update_ad( (mbedtls_gcm_context *) ctx->cipher_ctx, + ad, ad_len ) ); + } +#endif + + + return( 0 ); +} +#endif /* MBEDTLS_GCM_C || MBEDTLS_CHACHAPOLY_C */ + +int mbedtls_cipher_update( mbedtls_cipher_context_t *ctx, const unsigned char *input, + size_t ilen, unsigned char *output, size_t *olen ) +{ + int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; + size_t block_size; + + CIPHER_VALIDATE_RET( ctx != NULL ); + CIPHER_VALIDATE_RET( ilen == 0 || input != NULL ); + CIPHER_VALIDATE_RET( output != NULL ); + CIPHER_VALIDATE_RET( olen != NULL ); + if( ctx->cipher_info == NULL ) + return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + + *olen = 0; + block_size = mbedtls_cipher_get_block_size( ctx ); + if ( 0 == block_size ) + { + return( MBEDTLS_ERR_CIPHER_INVALID_CONTEXT ); + } + + if( ctx->cipher_info->mode == MBEDTLS_MODE_ECB ) + { + if( ilen != block_size ) + return( MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED ); + + *olen = ilen; + + if( 0 != ( ret = ctx->cipher_info->base->ecb_func( ctx->cipher_ctx, + ctx->operation, input, output ) ) ) + { + return( ret ); + } + + return( 0 ); + } + +#if defined(MBEDTLS_GCM_C) + if( ctx->cipher_info->mode == MBEDTLS_MODE_GCM ) + { + return( mbedtls_gcm_update( (mbedtls_gcm_context *) ctx->cipher_ctx, + input, ilen, + output, ilen, olen ) ); + } +#endif + + + + if( input == output && + ( ctx->unprocessed_len != 0 || ilen % block_size ) ) + { + return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + } + +#if defined(MBEDTLS_CIPHER_MODE_CBC) + if( ctx->cipher_info->mode == MBEDTLS_MODE_CBC ) + { + size_t copy_len = 0; + + /* + * If there is not enough data for a full block, cache it. + */ + if( ( ctx->operation == MBEDTLS_DECRYPT && NULL != ctx->add_padding && + ilen <= block_size - ctx->unprocessed_len ) || + ( ctx->operation == MBEDTLS_DECRYPT && NULL == ctx->add_padding && + ilen < block_size - ctx->unprocessed_len ) || + ( ctx->operation == MBEDTLS_ENCRYPT && + ilen < block_size - ctx->unprocessed_len ) ) + { + memcpy( &( ctx->unprocessed_data[ctx->unprocessed_len] ), input, + ilen ); + + ctx->unprocessed_len += ilen; + return( 0 ); + } + + /* + * Process cached data first + */ + if( 0 != ctx->unprocessed_len ) + { + copy_len = block_size - ctx->unprocessed_len; + + memcpy( &( ctx->unprocessed_data[ctx->unprocessed_len] ), input, + copy_len ); + + if( 0 != ( ret = ctx->cipher_info->base->cbc_func( ctx->cipher_ctx, + ctx->operation, block_size, ctx->iv, + ctx->unprocessed_data, output ) ) ) + { + return( ret ); + } + + *olen += block_size; + output += block_size; + ctx->unprocessed_len = 0; + + input += copy_len; + ilen -= copy_len; + } + + /* + * Cache final, incomplete block + */ + if( 0 != ilen ) + { + /* Encryption: only cache partial blocks + * Decryption w/ padding: always keep at least one whole block + * Decryption w/o padding: only cache partial blocks + */ + copy_len = ilen % block_size; + if( copy_len == 0 && + ctx->operation == MBEDTLS_DECRYPT && + NULL != ctx->add_padding) + { + copy_len = block_size; + } + + memcpy( ctx->unprocessed_data, &( input[ilen - copy_len] ), + copy_len ); + + ctx->unprocessed_len += copy_len; + ilen -= copy_len; + } + + /* + * Process remaining full blocks + */ + if( ilen ) + { + if( 0 != ( ret = ctx->cipher_info->base->cbc_func( ctx->cipher_ctx, + ctx->operation, ilen, ctx->iv, input, output ) ) ) + { + return( ret ); + } + + *olen += ilen; + } + + return( 0 ); + } +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + + + + + + + return( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); +} + + +int mbedtls_cipher_finish( mbedtls_cipher_context_t *ctx, + unsigned char *output, size_t *olen ) +{ + CIPHER_VALIDATE_RET( ctx != NULL ); + CIPHER_VALIDATE_RET( output != NULL ); + CIPHER_VALIDATE_RET( olen != NULL ); + if( ctx->cipher_info == NULL ) + return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + + *olen = 0; + + if( MBEDTLS_MODE_CFB == ctx->cipher_info->mode || + MBEDTLS_MODE_OFB == ctx->cipher_info->mode || + MBEDTLS_MODE_CTR == ctx->cipher_info->mode || + MBEDTLS_MODE_GCM == ctx->cipher_info->mode || + MBEDTLS_MODE_CCM_STAR_NO_TAG == ctx->cipher_info->mode || + MBEDTLS_MODE_XTS == ctx->cipher_info->mode || + MBEDTLS_MODE_STREAM == ctx->cipher_info->mode ) + { + return( 0 ); + } + + if ( ( MBEDTLS_CIPHER_CHACHA20 == ctx->cipher_info->type ) || + ( MBEDTLS_CIPHER_CHACHA20_POLY1305 == ctx->cipher_info->type ) ) + { + return( 0 ); + } + + if( MBEDTLS_MODE_ECB == ctx->cipher_info->mode ) + { + if( ctx->unprocessed_len != 0 ) + return( MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED ); + + return( 0 ); + } + +#if defined(MBEDTLS_CIPHER_MODE_CBC) + if( MBEDTLS_MODE_CBC == ctx->cipher_info->mode ) + { + int ret = 0; + + if( MBEDTLS_ENCRYPT == ctx->operation ) + { + /* check for 'no padding' mode */ + if( NULL == ctx->add_padding ) + { + if( 0 != ctx->unprocessed_len ) + return( MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED ); + + return( 0 ); + } + + ctx->add_padding( ctx->unprocessed_data, mbedtls_cipher_get_iv_size( ctx ), + ctx->unprocessed_len ); + } + else if( mbedtls_cipher_get_block_size( ctx ) != ctx->unprocessed_len ) + { + /* + * For decrypt operations, expect a full block, + * or an empty block if no padding + */ + if( NULL == ctx->add_padding && 0 == ctx->unprocessed_len ) + return( 0 ); + + return( MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED ); + } + + /* cipher block */ + if( 0 != ( ret = ctx->cipher_info->base->cbc_func( ctx->cipher_ctx, + ctx->operation, mbedtls_cipher_get_block_size( ctx ), ctx->iv, + ctx->unprocessed_data, output ) ) ) + { + return( ret ); + } + + /* Set output size for decryption */ + if( MBEDTLS_DECRYPT == ctx->operation ) + return( ctx->get_padding( output, mbedtls_cipher_get_block_size( ctx ), + olen ) ); + + /* Set output size for encryption */ + *olen = mbedtls_cipher_get_block_size( ctx ); + return( 0 ); + } +#else + ((void) output); +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + + return( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); +} + + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) +int mbedtls_cipher_write_tag( mbedtls_cipher_context_t *ctx, + unsigned char *tag, size_t tag_len ) +{ + CIPHER_VALIDATE_RET( ctx != NULL ); + CIPHER_VALIDATE_RET( tag_len == 0 || tag != NULL ); + if( ctx->cipher_info == NULL ) + return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + if( MBEDTLS_ENCRYPT != ctx->operation ) + return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + +#if defined(MBEDTLS_GCM_C) + if( MBEDTLS_MODE_GCM == ctx->cipher_info->mode ) + { + size_t output_length; + /* The code here doesn't yet support alternative implementations + * that can delay up to a block of output. */ + return( mbedtls_gcm_finish( (mbedtls_gcm_context *) ctx->cipher_ctx, + NULL, 0, &output_length, + tag, tag_len ) ); + } +#endif + + + return( 0 ); +} + +int mbedtls_cipher_check_tag( mbedtls_cipher_context_t *ctx, + const unsigned char *tag, size_t tag_len ) +{ + unsigned char check_tag[16]; + int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; + + CIPHER_VALIDATE_RET( ctx != NULL ); + CIPHER_VALIDATE_RET( tag_len == 0 || tag != NULL ); + if( ctx->cipher_info == NULL ) + return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + if( MBEDTLS_DECRYPT != ctx->operation ) + { + return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + } + + + /* Status to return on a non-authenticated algorithm. It would make sense + * to return MBEDTLS_ERR_CIPHER_INVALID_CONTEXT or perhaps + * MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, but at the time I write this our + * unit tests assume 0. */ + ret = 0; + +#if defined(MBEDTLS_GCM_C) + if( MBEDTLS_MODE_GCM == ctx->cipher_info->mode ) + { + size_t output_length; + /* The code here doesn't yet support alternative implementations + * that can delay up to a block of output. */ + + if( tag_len > sizeof( check_tag ) ) + return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + if( 0 != ( ret = mbedtls_gcm_finish( + (mbedtls_gcm_context *) ctx->cipher_ctx, + NULL, 0, &output_length, + check_tag, tag_len ) ) ) + { + return( ret ); + } + + /* Check the tag in "constant-time" */ + if( mbedtls_ct_memcmp( tag, check_tag, tag_len ) != 0 ) + { + ret = MBEDTLS_ERR_CIPHER_AUTH_FAILED; + goto exit; + } + } +#endif /* MBEDTLS_GCM_C */ + + +exit: + mbedtls_platform_zeroize( check_tag, tag_len ); + return( ret ); +} +#endif /* MBEDTLS_GCM_C || MBEDTLS_CHACHAPOLY_C */ + +/* + * Packet-oriented wrapper for non-AEAD modes + */ +int mbedtls_cipher_crypt( mbedtls_cipher_context_t *ctx, + const unsigned char *iv, size_t iv_len, + const unsigned char *input, size_t ilen, + unsigned char *output, size_t *olen ) +{ + int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; + size_t finish_olen; + + CIPHER_VALIDATE_RET( ctx != NULL ); + CIPHER_VALIDATE_RET( iv_len == 0 || iv != NULL ); + CIPHER_VALIDATE_RET( ilen == 0 || input != NULL ); + CIPHER_VALIDATE_RET( output != NULL ); + CIPHER_VALIDATE_RET( olen != NULL ); + + + if( ( ret = mbedtls_cipher_set_iv( ctx, iv, iv_len ) ) != 0 ) + return( ret ); + + if( ( ret = mbedtls_cipher_reset( ctx ) ) != 0 ) + return( ret ); + + if( ( ret = mbedtls_cipher_update( ctx, input, ilen, + output, olen ) ) != 0 ) + return( ret ); + + if( ( ret = mbedtls_cipher_finish( ctx, output + *olen, + &finish_olen ) ) != 0 ) + return( ret ); + + *olen += finish_olen; + + return( 0 ); +} + diff --git a/src/components/implementation/simple_nf/ndpi/gcrypt/cipher.h b/src/components/implementation/simple_nf/ndpi/gcrypt/cipher.h new file mode 100644 index 0000000000..3d67e5f599 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/gcrypt/cipher.h @@ -0,0 +1,934 @@ +/** + * \file cipher.h + * + * \brief This file contains an abstraction interface for use with the cipher + * primitives provided by the library. It provides a common interface to all of + * the available cipher operations. + * + * \author Adriaan de Jong + */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MBEDTLS_CIPHER_H +#define MBEDTLS_CIPHER_H + + + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CCM_C) || defined(MBEDTLS_CHACHAPOLY_C) +#define MBEDTLS_CIPHER_MODE_AEAD +#endif + +#if defined(MBEDTLS_CIPHER_MODE_CBC) +#define MBEDTLS_CIPHER_MODE_WITH_PADDING +#endif + +#if defined(MBEDTLS_CIPHER_NULL_CIPHER) || \ + defined(MBEDTLS_CHACHA20_C) +#define MBEDTLS_CIPHER_MODE_STREAM +#endif + +#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \ + !defined(inline) && !defined(__cplusplus) +#define inline __inline +#endif + +/** The selected feature is not available. */ +#define MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE -0x6080 +/** Bad input parameters. */ +#define MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA -0x6100 +/** Failed to allocate memory. */ +#define MBEDTLS_ERR_CIPHER_ALLOC_FAILED -0x6180 +/** Input data contains invalid padding and is rejected. */ +#define MBEDTLS_ERR_CIPHER_INVALID_PADDING -0x6200 +/** Decryption of block requires a full block. */ +#define MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED -0x6280 +/** Authentication failed (for AEAD modes). */ +#define MBEDTLS_ERR_CIPHER_AUTH_FAILED -0x6300 +/** The context is invalid. For example, because it was freed. */ +#define MBEDTLS_ERR_CIPHER_INVALID_CONTEXT -0x6380 + +#define MBEDTLS_CIPHER_VARIABLE_IV_LEN 0x01 /**< Cipher accepts IVs of variable length. */ +#define MBEDTLS_CIPHER_VARIABLE_KEY_LEN 0x02 /**< Cipher accepts keys of variable length. */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Supported cipher types. + * + * \warning DES is considered weak cipher and its use + * constitutes a security risk. Arm recommends considering stronger + * ciphers instead. + */ +typedef enum { + MBEDTLS_CIPHER_ID_NONE = 0, /**< Placeholder to mark the end of cipher ID lists. */ + MBEDTLS_CIPHER_ID_NULL, /**< The identity cipher, treated as a stream cipher. */ + MBEDTLS_CIPHER_ID_AES, /**< The AES cipher. */ + MBEDTLS_CIPHER_ID_DES, /**< The DES cipher. */ + MBEDTLS_CIPHER_ID_3DES, /**< The Triple DES cipher. */ + MBEDTLS_CIPHER_ID_CAMELLIA, /**< The Camellia cipher. */ + MBEDTLS_CIPHER_ID_ARIA, /**< The Aria cipher. */ + MBEDTLS_CIPHER_ID_CHACHA20, /**< The ChaCha20 cipher. */ +} mbedtls_cipher_id_t; + +/** + * \brief Supported {cipher type, cipher mode} pairs. + * + * \warning DES is considered weak cipher and its use + * constitutes a security risk. Arm recommends considering stronger + * ciphers instead. + */ +typedef enum { + MBEDTLS_CIPHER_NONE = 0, /**< Placeholder to mark the end of cipher-pair lists. */ + MBEDTLS_CIPHER_NULL, /**< The identity stream cipher. */ + MBEDTLS_CIPHER_AES_128_ECB, /**< AES cipher with 128-bit ECB mode. */ + MBEDTLS_CIPHER_AES_192_ECB, /**< AES cipher with 192-bit ECB mode. */ + MBEDTLS_CIPHER_AES_256_ECB, /**< AES cipher with 256-bit ECB mode. */ + MBEDTLS_CIPHER_AES_128_CBC, /**< AES cipher with 128-bit CBC mode. */ + MBEDTLS_CIPHER_AES_192_CBC, /**< AES cipher with 192-bit CBC mode. */ + MBEDTLS_CIPHER_AES_256_CBC, /**< AES cipher with 256-bit CBC mode. */ + MBEDTLS_CIPHER_AES_128_CFB128, /**< AES cipher with 128-bit CFB128 mode. */ + MBEDTLS_CIPHER_AES_192_CFB128, /**< AES cipher with 192-bit CFB128 mode. */ + MBEDTLS_CIPHER_AES_256_CFB128, /**< AES cipher with 256-bit CFB128 mode. */ + MBEDTLS_CIPHER_AES_128_CTR, /**< AES cipher with 128-bit CTR mode. */ + MBEDTLS_CIPHER_AES_192_CTR, /**< AES cipher with 192-bit CTR mode. */ + MBEDTLS_CIPHER_AES_256_CTR, /**< AES cipher with 256-bit CTR mode. */ + MBEDTLS_CIPHER_AES_128_GCM, /**< AES cipher with 128-bit GCM mode. */ + MBEDTLS_CIPHER_AES_192_GCM, /**< AES cipher with 192-bit GCM mode. */ + MBEDTLS_CIPHER_AES_256_GCM, /**< AES cipher with 256-bit GCM mode. */ + MBEDTLS_CIPHER_CAMELLIA_128_ECB, /**< Camellia cipher with 128-bit ECB mode. */ + MBEDTLS_CIPHER_CAMELLIA_192_ECB, /**< Camellia cipher with 192-bit ECB mode. */ + MBEDTLS_CIPHER_CAMELLIA_256_ECB, /**< Camellia cipher with 256-bit ECB mode. */ + MBEDTLS_CIPHER_CAMELLIA_128_CBC, /**< Camellia cipher with 128-bit CBC mode. */ + MBEDTLS_CIPHER_CAMELLIA_192_CBC, /**< Camellia cipher with 192-bit CBC mode. */ + MBEDTLS_CIPHER_CAMELLIA_256_CBC, /**< Camellia cipher with 256-bit CBC mode. */ + MBEDTLS_CIPHER_CAMELLIA_128_CFB128, /**< Camellia cipher with 128-bit CFB128 mode. */ + MBEDTLS_CIPHER_CAMELLIA_192_CFB128, /**< Camellia cipher with 192-bit CFB128 mode. */ + MBEDTLS_CIPHER_CAMELLIA_256_CFB128, /**< Camellia cipher with 256-bit CFB128 mode. */ + MBEDTLS_CIPHER_CAMELLIA_128_CTR, /**< Camellia cipher with 128-bit CTR mode. */ + MBEDTLS_CIPHER_CAMELLIA_192_CTR, /**< Camellia cipher with 192-bit CTR mode. */ + MBEDTLS_CIPHER_CAMELLIA_256_CTR, /**< Camellia cipher with 256-bit CTR mode. */ + MBEDTLS_CIPHER_CAMELLIA_128_GCM, /**< Camellia cipher with 128-bit GCM mode. */ + MBEDTLS_CIPHER_CAMELLIA_192_GCM, /**< Camellia cipher with 192-bit GCM mode. */ + MBEDTLS_CIPHER_CAMELLIA_256_GCM, /**< Camellia cipher with 256-bit GCM mode. */ + MBEDTLS_CIPHER_DES_ECB, /**< DES cipher with ECB mode. */ + MBEDTLS_CIPHER_DES_CBC, /**< DES cipher with CBC mode. */ + MBEDTLS_CIPHER_DES_EDE_ECB, /**< DES cipher with EDE ECB mode. */ + MBEDTLS_CIPHER_DES_EDE_CBC, /**< DES cipher with EDE CBC mode. */ + MBEDTLS_CIPHER_DES_EDE3_ECB, /**< DES cipher with EDE3 ECB mode. */ + MBEDTLS_CIPHER_DES_EDE3_CBC, /**< DES cipher with EDE3 CBC mode. */ + MBEDTLS_CIPHER_AES_128_CCM, /**< AES cipher with 128-bit CCM mode. */ + MBEDTLS_CIPHER_AES_192_CCM, /**< AES cipher with 192-bit CCM mode. */ + MBEDTLS_CIPHER_AES_256_CCM, /**< AES cipher with 256-bit CCM mode. */ + MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG, /**< AES cipher with 128-bit CCM_STAR_NO_TAG mode. */ + MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG, /**< AES cipher with 192-bit CCM_STAR_NO_TAG mode. */ + MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG, /**< AES cipher with 256-bit CCM_STAR_NO_TAG mode. */ + MBEDTLS_CIPHER_CAMELLIA_128_CCM, /**< Camellia cipher with 128-bit CCM mode. */ + MBEDTLS_CIPHER_CAMELLIA_192_CCM, /**< Camellia cipher with 192-bit CCM mode. */ + MBEDTLS_CIPHER_CAMELLIA_256_CCM, /**< Camellia cipher with 256-bit CCM mode. */ + MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG, /**< Camellia cipher with 128-bit CCM_STAR_NO_TAG mode. */ + MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG, /**< Camellia cipher with 192-bit CCM_STAR_NO_TAG mode. */ + MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG, /**< Camellia cipher with 256-bit CCM_STAR_NO_TAG mode. */ + MBEDTLS_CIPHER_ARIA_128_ECB, /**< Aria cipher with 128-bit key and ECB mode. */ + MBEDTLS_CIPHER_ARIA_192_ECB, /**< Aria cipher with 192-bit key and ECB mode. */ + MBEDTLS_CIPHER_ARIA_256_ECB, /**< Aria cipher with 256-bit key and ECB mode. */ + MBEDTLS_CIPHER_ARIA_128_CBC, /**< Aria cipher with 128-bit key and CBC mode. */ + MBEDTLS_CIPHER_ARIA_192_CBC, /**< Aria cipher with 192-bit key and CBC mode. */ + MBEDTLS_CIPHER_ARIA_256_CBC, /**< Aria cipher with 256-bit key and CBC mode. */ + MBEDTLS_CIPHER_ARIA_128_CFB128, /**< Aria cipher with 128-bit key and CFB-128 mode. */ + MBEDTLS_CIPHER_ARIA_192_CFB128, /**< Aria cipher with 192-bit key and CFB-128 mode. */ + MBEDTLS_CIPHER_ARIA_256_CFB128, /**< Aria cipher with 256-bit key and CFB-128 mode. */ + MBEDTLS_CIPHER_ARIA_128_CTR, /**< Aria cipher with 128-bit key and CTR mode. */ + MBEDTLS_CIPHER_ARIA_192_CTR, /**< Aria cipher with 192-bit key and CTR mode. */ + MBEDTLS_CIPHER_ARIA_256_CTR, /**< Aria cipher with 256-bit key and CTR mode. */ + MBEDTLS_CIPHER_ARIA_128_GCM, /**< Aria cipher with 128-bit key and GCM mode. */ + MBEDTLS_CIPHER_ARIA_192_GCM, /**< Aria cipher with 192-bit key and GCM mode. */ + MBEDTLS_CIPHER_ARIA_256_GCM, /**< Aria cipher with 256-bit key and GCM mode. */ + MBEDTLS_CIPHER_ARIA_128_CCM, /**< Aria cipher with 128-bit key and CCM mode. */ + MBEDTLS_CIPHER_ARIA_192_CCM, /**< Aria cipher with 192-bit key and CCM mode. */ + MBEDTLS_CIPHER_ARIA_256_CCM, /**< Aria cipher with 256-bit key and CCM mode. */ + MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG, /**< Aria cipher with 128-bit key and CCM_STAR_NO_TAG mode. */ + MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG, /**< Aria cipher with 192-bit key and CCM_STAR_NO_TAG mode. */ + MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG, /**< Aria cipher with 256-bit key and CCM_STAR_NO_TAG mode. */ + MBEDTLS_CIPHER_AES_128_OFB, /**< AES 128-bit cipher in OFB mode. */ + MBEDTLS_CIPHER_AES_192_OFB, /**< AES 192-bit cipher in OFB mode. */ + MBEDTLS_CIPHER_AES_256_OFB, /**< AES 256-bit cipher in OFB mode. */ + MBEDTLS_CIPHER_AES_128_XTS, /**< AES 128-bit cipher in XTS block mode. */ + MBEDTLS_CIPHER_AES_256_XTS, /**< AES 256-bit cipher in XTS block mode. */ + MBEDTLS_CIPHER_CHACHA20, /**< ChaCha20 stream cipher. */ + MBEDTLS_CIPHER_CHACHA20_POLY1305, /**< ChaCha20-Poly1305 AEAD cipher. */ + MBEDTLS_CIPHER_AES_128_KW, /**< AES cipher with 128-bit NIST KW mode. */ + MBEDTLS_CIPHER_AES_192_KW, /**< AES cipher with 192-bit NIST KW mode. */ + MBEDTLS_CIPHER_AES_256_KW, /**< AES cipher with 256-bit NIST KW mode. */ + MBEDTLS_CIPHER_AES_128_KWP, /**< AES cipher with 128-bit NIST KWP mode. */ + MBEDTLS_CIPHER_AES_192_KWP, /**< AES cipher with 192-bit NIST KWP mode. */ + MBEDTLS_CIPHER_AES_256_KWP, /**< AES cipher with 256-bit NIST KWP mode. */ +} mbedtls_cipher_type_t; + +/** Supported cipher modes. */ +typedef enum { + MBEDTLS_MODE_NONE = 0, /**< None. */ + MBEDTLS_MODE_ECB, /**< The ECB cipher mode. */ + MBEDTLS_MODE_CBC, /**< The CBC cipher mode. */ + MBEDTLS_MODE_CFB, /**< The CFB cipher mode. */ + MBEDTLS_MODE_OFB, /**< The OFB cipher mode. */ + MBEDTLS_MODE_CTR, /**< The CTR cipher mode. */ + MBEDTLS_MODE_GCM, /**< The GCM cipher mode. */ + MBEDTLS_MODE_STREAM, /**< The stream cipher mode. */ + MBEDTLS_MODE_CCM, /**< The CCM cipher mode. */ + MBEDTLS_MODE_CCM_STAR_NO_TAG, /**< The CCM*-no-tag cipher mode. */ + MBEDTLS_MODE_XTS, /**< The XTS cipher mode. */ + MBEDTLS_MODE_CHACHAPOLY, /**< The ChaCha-Poly cipher mode. */ + MBEDTLS_MODE_KW, /**< The SP800-38F KW mode */ + MBEDTLS_MODE_KWP, /**< The SP800-38F KWP mode */ +} mbedtls_cipher_mode_t; + +/** Supported cipher padding types. */ +typedef enum { + MBEDTLS_PADDING_PKCS7 = 0, /**< PKCS7 padding (default). */ + MBEDTLS_PADDING_ONE_AND_ZEROS, /**< ISO/IEC 7816-4 padding. */ + MBEDTLS_PADDING_ZEROS_AND_LEN, /**< ANSI X.923 padding. */ + MBEDTLS_PADDING_ZEROS, /**< Zero padding (not reversible). */ + MBEDTLS_PADDING_NONE, /**< Never pad (full blocks only). */ +} mbedtls_cipher_padding_t; + +/** Type of operation. */ +typedef enum { + MBEDTLS_OPERATION_NONE = -1, + MBEDTLS_DECRYPT = 0, + MBEDTLS_ENCRYPT, +} mbedtls_operation_t; + +enum { + /** Undefined key length. */ + MBEDTLS_KEY_LENGTH_NONE = 0, + /** Key length, in bits (including parity), for DES keys. */ + MBEDTLS_KEY_LENGTH_DES = 64, + /** Key length in bits, including parity, for DES in two-key EDE. */ + MBEDTLS_KEY_LENGTH_DES_EDE = 128, + /** Key length in bits, including parity, for DES in three-key EDE. */ + MBEDTLS_KEY_LENGTH_DES_EDE3 = 192, +}; + +/** Maximum length of any IV, in Bytes. */ +/* This should ideally be derived automatically from list of ciphers. + * This should be kept in sync with MBEDTLS_SSL_MAX_IV_LENGTH defined + * in library/ssl_misc.h. */ +#define MBEDTLS_MAX_IV_LENGTH 16 + +/** Maximum block size of any cipher, in Bytes. */ +/* This should ideally be derived automatically from list of ciphers. + * This should be kept in sync with MBEDTLS_SSL_MAX_BLOCK_LENGTH defined + * in library/ssl_misc.h. */ +#define MBEDTLS_MAX_BLOCK_LENGTH 16 + +/** Maximum key length, in Bytes. */ +/* This should ideally be derived automatically from list of ciphers. + * For now, only check whether XTS is enabled which uses 64 Byte keys, + * and use 32 Bytes as an upper bound for the maximum key length otherwise. + * This should be kept in sync with MBEDTLS_SSL_MAX_BLOCK_LENGTH defined + * in library/ssl_misc.h, which however deliberately ignores the case of XTS + * since the latter isn't used in SSL/TLS. */ +#define MBEDTLS_MAX_KEY_LENGTH 32 + +/** + * Base cipher information (opaque struct). + */ +typedef struct mbedtls_cipher_base_t mbedtls_cipher_base_t; + +/** + * CMAC context (opaque struct). + */ +typedef struct mbedtls_cmac_context_t mbedtls_cmac_context_t; + +/** + * Cipher information. Allows calling cipher functions + * in a generic way. + * + * \note The library does not support custom cipher info structures, + * only built-in structures returned by the functions + * mbedtls_cipher_info_from_string(), + * mbedtls_cipher_info_from_type(), + * mbedtls_cipher_info_from_values(), + * mbedtls_cipher_info_from_psa(). + */ +typedef struct mbedtls_cipher_info_t +{ + /** Full cipher identifier. For example, + * MBEDTLS_CIPHER_AES_256_CBC. + */ + mbedtls_cipher_type_t type; + + /** The cipher mode. For example, MBEDTLS_MODE_CBC. */ + mbedtls_cipher_mode_t mode; + + /** The cipher key length, in bits. This is the + * default length for variable sized ciphers. + * Includes parity bits for ciphers like DES. + */ + unsigned int key_bitlen; + + /** Name of the cipher. */ + const char * name; + + /** IV or nonce size, in Bytes. + * For ciphers that accept variable IV sizes, + * this is the recommended size. + */ + unsigned int iv_size; + + /** Bitflag comprised of MBEDTLS_CIPHER_VARIABLE_IV_LEN and + * MBEDTLS_CIPHER_VARIABLE_KEY_LEN indicating whether the + * cipher supports variable IV or variable key sizes, respectively. + */ + int flags; + + /** The block size, in Bytes. */ + unsigned int block_size; + + /** Struct for base cipher information and functions. */ + const mbedtls_cipher_base_t *base; + +} mbedtls_cipher_info_t; + +/** + * Generic cipher context. + */ +typedef struct mbedtls_cipher_context_t +{ + /** Information about the associated cipher. */ + const mbedtls_cipher_info_t *cipher_info; + + /** Key length to use. */ + int key_bitlen; + + /** Operation that the key of the context has been + * initialized for. + */ + mbedtls_operation_t operation; + + + /** Buffer for input that has not been processed yet. */ + unsigned char unprocessed_data[MBEDTLS_MAX_BLOCK_LENGTH]; + + /** Number of Bytes that have not been processed yet. */ + size_t unprocessed_len; + + /** Current IV or NONCE_COUNTER for CTR-mode, data unit (or sector) number + * for XTS-mode. */ + unsigned char iv[MBEDTLS_MAX_IV_LENGTH]; + + /** IV size in Bytes, for ciphers with variable-length IVs. */ + size_t iv_size; + + /** The cipher-specific context. */ + void *cipher_ctx; + + + +} mbedtls_cipher_context_t; + +/** + * \brief This function retrieves the list of ciphers supported + * by the generic cipher module. + * + * For any cipher identifier in the returned list, you can + * obtain the corresponding generic cipher information structure + * via mbedtls_cipher_info_from_type(), which can then be used + * to prepare a cipher context via mbedtls_cipher_setup(). + * + * + * \return A statically-allocated array of cipher identifiers + * of type cipher_type_t. The last entry is zero. + */ +const int *mbedtls_cipher_list( void ); + +/** + * \brief This function retrieves the cipher-information + * structure associated with the given cipher name. + * + * \param cipher_name Name of the cipher to search for. This must not be + * \c NULL. + * + * \return The cipher information structure associated with the + * given \p cipher_name. + * \return \c NULL if the associated cipher information is not found. + */ +const mbedtls_cipher_info_t *mbedtls_cipher_info_from_string( const char *cipher_name ); + +/** + * \brief This function retrieves the cipher-information + * structure associated with the given cipher type. + * + * \param cipher_type Type of the cipher to search for. + * + * \return The cipher information structure associated with the + * given \p cipher_type. + * \return \c NULL if the associated cipher information is not found. + */ +const mbedtls_cipher_info_t *mbedtls_cipher_info_from_type( const mbedtls_cipher_type_t cipher_type ); + +/** + * \brief This function retrieves the cipher-information + * structure associated with the given cipher ID, + * key size and mode. + * + * \param cipher_id The ID of the cipher to search for. For example, + * #MBEDTLS_CIPHER_ID_AES. + * \param key_bitlen The length of the key in bits. + * \param mode The cipher mode. For example, #MBEDTLS_MODE_CBC. + * + * \return The cipher information structure associated with the + * given \p cipher_id. + * \return \c NULL if the associated cipher information is not found. + */ +const mbedtls_cipher_info_t *mbedtls_cipher_info_from_values( const mbedtls_cipher_id_t cipher_id, + int key_bitlen, + const mbedtls_cipher_mode_t mode ); + +/** + * \brief Retrieve the identifier for a cipher info structure. + * + * \param[in] info The cipher info structure to query. + * This may be \c NULL. + * + * \return The full cipher identifier (\c MBEDTLS_CIPHER_xxx). + * \return #MBEDTLS_CIPHER_NONE if \p info is \c NULL. + */ +static inline mbedtls_cipher_type_t mbedtls_cipher_info_get_type( + const mbedtls_cipher_info_t *info ) +{ + if( info == NULL ) + return( MBEDTLS_CIPHER_NONE ); + else + return( info->type ); +} + +/** + * \brief Retrieve the operation mode for a cipher info structure. + * + * \param[in] info The cipher info structure to query. + * This may be \c NULL. + * + * \return The cipher mode (\c MBEDTLS_MODE_xxx). + * \return #MBEDTLS_MODE_NONE if \p info is \c NULL. + */ +static inline mbedtls_cipher_mode_t mbedtls_cipher_info_get_mode( + const mbedtls_cipher_info_t *info ) +{ + if( info == NULL ) + return( MBEDTLS_MODE_NONE ); + else + return( info->mode ); +} + +/** + * \brief Retrieve the key size for a cipher info structure. + * + * \param[in] info The cipher info structure to query. + * This may be \c NULL. + * + * \return The key length in bits. + * For variable-sized ciphers, this is the default length. + * For DES, this includes the parity bits. + * \return \c 0 if \p info is \c NULL. + */ +static inline size_t mbedtls_cipher_info_get_key_bitlen( + const mbedtls_cipher_info_t *info ) +{ + if( info == NULL ) + return( 0 ); + else + return( info->key_bitlen ); +} + +/** + * \brief Retrieve the human-readable name for a + * cipher info structure. + * + * \param[in] info The cipher info structure to query. + * This may be \c NULL. + * + * \return The cipher name, which is a human readable string, + * with static storage duration. + * \return \c NULL if \c info is \p NULL. + */ +static inline const char *mbedtls_cipher_info_get_name( + const mbedtls_cipher_info_t *info ) +{ + if( info == NULL ) + return( NULL ); + else + return( info->name ); +} + +/** + * \brief This function returns the size of the IV or nonce + * for the cipher info structure, in bytes. + * + * \param info The cipher info structure. This may be \c NULL. + * + * \return The recommended IV size. + * \return \c 0 for ciphers not using an IV or a nonce. + * \return \c 0 if \p info is \c NULL. + */ +static inline size_t mbedtls_cipher_info_get_iv_size( + const mbedtls_cipher_info_t *info ) +{ + if( info == NULL ) + return( 0 ); + + return( (size_t) info->iv_size ); +} + +/** + * \brief This function returns the block size of the given + * cipher info structure in bytes. + * + * \param info The cipher info structure. This may be \c NULL. + * + * \return The block size of the cipher. + * \return \c 1 if the cipher is a stream cipher. + * \return \c 0 if \p info is \c NULL. + */ +static inline size_t mbedtls_cipher_info_get_block_size( + const mbedtls_cipher_info_t *info ) +{ + if( info == NULL ) + return( 0 ); + + return( (size_t) info->block_size ); +} + +/** + * \brief This function returns a non-zero value if the key length for + * the given cipher is variable. + * + * \param info The cipher info structure. This may be \c NULL. + * + * \return Non-zero if the key length is variable, \c 0 otherwise. + * \return \c 0 if the given pointer is \c NULL. + */ +static inline int mbedtls_cipher_info_has_variable_key_bitlen( + const mbedtls_cipher_info_t *info ) +{ + if( info == NULL ) + return( 0 ); + + return( info->flags & MBEDTLS_CIPHER_VARIABLE_KEY_LEN ); +} + +/** + * \brief This function returns a non-zero value if the IV size for + * the given cipher is variable. + * + * \param info The cipher info structure. This may be \c NULL. + * + * \return Non-zero if the IV size is variable, \c 0 otherwise. + * \return \c 0 if the given pointer is \c NULL. + */ +static inline int mbedtls_cipher_info_has_variable_iv_size( + const mbedtls_cipher_info_t *info ) +{ + if( info == NULL ) + return( 0 ); + + return( info->flags & MBEDTLS_CIPHER_VARIABLE_IV_LEN ); +} + +/** + * \brief This function initializes a \p cipher_context as NONE. + * + * \param ctx The context to be initialized. This must not be \c NULL. + */ +void mbedtls_cipher_init( mbedtls_cipher_context_t *ctx ); + +/** + * \brief This function returns the block size of the given cipher + * in bytes. + * + * \param ctx The context of the cipher. + * + * \return The block size of the underlying cipher. + * \return \c 1 if the cipher is a stream cipher. + * \return \c 0 if \p ctx has not been initialized. + */ +static inline unsigned int mbedtls_cipher_get_block_size( + const mbedtls_cipher_context_t *ctx ) +{ + MBEDTLS_INTERNAL_VALIDATE_RET( ctx != NULL, 0 ); + if( ctx->cipher_info == NULL ) + return 0; + + return ctx->cipher_info->block_size; +} + +/** + * \brief This function returns the mode of operation for + * the cipher. For example, MBEDTLS_MODE_CBC. + * + * \param ctx The context of the cipher. This must be initialized. + * + * \return The mode of operation. + * \return #MBEDTLS_MODE_NONE if \p ctx has not been initialized. + */ +static inline mbedtls_cipher_mode_t mbedtls_cipher_get_cipher_mode( + const mbedtls_cipher_context_t *ctx ) +{ + MBEDTLS_INTERNAL_VALIDATE_RET( ctx != NULL, MBEDTLS_MODE_NONE ); + if( ctx->cipher_info == NULL ) + return MBEDTLS_MODE_NONE; + + return ctx->cipher_info->mode; +} + +/** + * \brief This function returns the size of the IV or nonce + * of the cipher, in Bytes. + * + * \param ctx The context of the cipher. This must be initialized. + * + * \return The recommended IV size if no IV has been set. + * \return \c 0 for ciphers not using an IV or a nonce. + * \return The actual size if an IV has been set. + */ +static inline int mbedtls_cipher_get_iv_size( + const mbedtls_cipher_context_t *ctx ) +{ + MBEDTLS_INTERNAL_VALIDATE_RET( ctx != NULL, 0 ); + if( ctx->cipher_info == NULL ) + return 0; + + if( ctx->iv_size != 0 ) + return (int) ctx->iv_size; + + return (int) ctx->cipher_info->iv_size; +} + +/** + * \brief This function returns the type of the given cipher. + * + * \param ctx The context of the cipher. This must be initialized. + * + * \return The type of the cipher. + * \return #MBEDTLS_CIPHER_NONE if \p ctx has not been initialized. + */ +static inline mbedtls_cipher_type_t mbedtls_cipher_get_type( + const mbedtls_cipher_context_t *ctx ) +{ + MBEDTLS_INTERNAL_VALIDATE_RET( + ctx != NULL, MBEDTLS_CIPHER_NONE ); + if( ctx->cipher_info == NULL ) + return MBEDTLS_CIPHER_NONE; + + return ctx->cipher_info->type; +} + +/** + * \brief This function returns the name of the given cipher + * as a string. + * + * \param ctx The context of the cipher. This must be initialized. + * + * \return The name of the cipher. + * \return NULL if \p ctx has not been not initialized. + */ +static inline const char *mbedtls_cipher_get_name( + const mbedtls_cipher_context_t *ctx ) +{ + MBEDTLS_INTERNAL_VALIDATE_RET( ctx != NULL, 0 ); + if( ctx->cipher_info == NULL ) + return 0; + + return ctx->cipher_info->name; +} + +/** + * \brief This function returns the key length of the cipher. + * + * \param ctx The context of the cipher. This must be initialized. + * + * \return The key length of the cipher in bits. + * \return #MBEDTLS_KEY_LENGTH_NONE if ctx \p has not been + * initialized. + */ +static inline int mbedtls_cipher_get_key_bitlen( + const mbedtls_cipher_context_t *ctx ) +{ + MBEDTLS_INTERNAL_VALIDATE_RET( + ctx != NULL, MBEDTLS_KEY_LENGTH_NONE ); + if( ctx->cipher_info == NULL ) + return MBEDTLS_KEY_LENGTH_NONE; + + return (int) ctx->cipher_info->key_bitlen; +} + +/** + * \brief This function returns the operation of the given cipher. + * + * \param ctx The context of the cipher. This must be initialized. + * + * \return The type of operation: #MBEDTLS_ENCRYPT or #MBEDTLS_DECRYPT. + * \return #MBEDTLS_OPERATION_NONE if \p ctx has not been initialized. + */ +static inline mbedtls_operation_t mbedtls_cipher_get_operation( + const mbedtls_cipher_context_t *ctx ) +{ + MBEDTLS_INTERNAL_VALIDATE_RET( + ctx != NULL, MBEDTLS_OPERATION_NONE ); + if( ctx->cipher_info == NULL ) + return MBEDTLS_OPERATION_NONE; + + return ctx->operation; +} + +/** + * \brief This function sets the key to use with the given context. + * + * \param ctx The generic cipher context. This must be initialized and + * bound to a cipher information structure. + * \param key The key to use. This must be a readable buffer of at + * least \p key_bitlen Bits. + * \param key_bitlen The key length to use, in Bits. + * \param operation The operation that the key will be used for: + * #MBEDTLS_ENCRYPT or #MBEDTLS_DECRYPT. + * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on + * parameter-verification failure. + * \return A cipher-specific error code on failure. + */ +int mbedtls_cipher_setkey( mbedtls_cipher_context_t *ctx, + const unsigned char *key, + int key_bitlen, + const mbedtls_operation_t operation ); + + +/** + * \brief This function sets the initialization vector (IV) + * or nonce. + * + * \note Some ciphers do not use IVs nor nonce. For these + * ciphers, this function has no effect. + * + * \param ctx The generic cipher context. This must be initialized and + * bound to a cipher information structure. + * \param iv The IV to use, or NONCE_COUNTER for CTR-mode ciphers. This + * must be a readable buffer of at least \p iv_len Bytes. + * \param iv_len The IV length for ciphers with variable-size IV. + * This parameter is discarded by ciphers with fixed-size IV. + * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on + * parameter-verification failure. + */ +int mbedtls_cipher_set_iv( mbedtls_cipher_context_t *ctx, + const unsigned char *iv, + size_t iv_len ); + +/** + * \brief This function resets the cipher state. + * + * \note With non-AEAD ciphers, the order of calls for each message + * is as follows: + * 1. mbedtls_cipher_set_iv() if the mode uses an IV/nonce. + * 2. mbedtls_cipher_reset() + * 3. mbedtls_cipher_update() one or more times + * 4. mbedtls_cipher_finish() + * . + * This sequence can be repeated to encrypt or decrypt multiple + * messages with the same key. + * + * \note With AEAD ciphers, the order of calls for each message + * is as follows: + * 1. mbedtls_cipher_set_iv() if the mode uses an IV/nonce. + * 2. mbedtls_cipher_reset() + * 3. mbedtls_cipher_update_ad() + * 4. mbedtls_cipher_update() one or more times + * 5. mbedtls_cipher_finish() + * 6. mbedtls_cipher_check_tag() (for decryption) or + * mbedtls_cipher_write_tag() (for encryption). + * . + * This sequence can be repeated to encrypt or decrypt multiple + * messages with the same key. + * + * \param ctx The generic cipher context. This must be bound to a key. + * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on + * parameter-verification failure. + */ +int mbedtls_cipher_reset( mbedtls_cipher_context_t *ctx ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) +/** + * \brief This function adds additional data for AEAD ciphers. + * Currently supported with GCM and ChaCha20+Poly1305. + * + * \param ctx The generic cipher context. This must be initialized. + * \param ad The additional data to use. This must be a readable + * buffer of at least \p ad_len Bytes. + * \param ad_len The length of \p ad in Bytes. + * + * \return \c 0 on success. + * \return A specific error code on failure. + */ +int mbedtls_cipher_update_ad( mbedtls_cipher_context_t *ctx, + const unsigned char *ad, size_t ad_len ); +#endif /* MBEDTLS_GCM_C || MBEDTLS_CHACHAPOLY_C */ + +/** + * \brief The generic cipher update function. It encrypts or + * decrypts using the given cipher context. Writes as + * many block-sized blocks of data as possible to output. + * Any data that cannot be written immediately is either + * added to the next block, or flushed when + * mbedtls_cipher_finish() is called. + * Exception: For MBEDTLS_MODE_ECB, expects a single block + * in size. For example, 16 Bytes for AES. + * + * \param ctx The generic cipher context. This must be initialized and + * bound to a key. + * \param input The buffer holding the input data. This must be a + * readable buffer of at least \p ilen Bytes. + * \param ilen The length of the input data. + * \param output The buffer for the output data. This must be able to + * hold at least `ilen + block_size`. This must not be the + * same buffer as \p input. + * \param olen The length of the output data, to be updated with the + * actual number of Bytes written. This must not be + * \c NULL. + * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on + * parameter-verification failure. + * \return #MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE on an + * unsupported mode for a cipher. + * \return A cipher-specific error code on failure. + */ +int mbedtls_cipher_update( mbedtls_cipher_context_t *ctx, + const unsigned char *input, + size_t ilen, unsigned char *output, + size_t *olen ); + +/** + * \brief The generic cipher finalization function. If data still + * needs to be flushed from an incomplete block, the data + * contained in it is padded to the size of + * the last block, and written to the \p output buffer. + * + * \param ctx The generic cipher context. This must be initialized and + * bound to a key. + * \param output The buffer to write data to. This needs to be a writable + * buffer of at least \p block_size Bytes. + * \param olen The length of the data written to the \p output buffer. + * This may not be \c NULL. + * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on + * parameter-verification failure. + * \return #MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED on decryption + * expecting a full block but not receiving one. + * \return #MBEDTLS_ERR_CIPHER_INVALID_PADDING on invalid padding + * while decrypting. + * \return A cipher-specific error code on failure. + */ +int mbedtls_cipher_finish( mbedtls_cipher_context_t *ctx, + unsigned char *output, size_t *olen ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) +/** + * \brief This function writes a tag for AEAD ciphers. + * Currently supported with GCM and ChaCha20+Poly1305. + * This must be called after mbedtls_cipher_finish(). + * + * \param ctx The generic cipher context. This must be initialized, + * bound to a key, and have just completed a cipher + * operation through mbedtls_cipher_finish() the tag for + * which should be written. + * \param tag The buffer to write the tag to. This must be a writable + * buffer of at least \p tag_len Bytes. + * \param tag_len The length of the tag to write. + * + * \return \c 0 on success. + * \return A specific error code on failure. + */ +int mbedtls_cipher_write_tag( mbedtls_cipher_context_t *ctx, + unsigned char *tag, size_t tag_len ); + +/** + * \brief This function checks the tag for AEAD ciphers. + * Currently supported with GCM and ChaCha20+Poly1305. + * This must be called after mbedtls_cipher_finish(). + * + * \param ctx The generic cipher context. This must be initialized. + * \param tag The buffer holding the tag. This must be a readable + * buffer of at least \p tag_len Bytes. + * \param tag_len The length of the tag to check. + * + * \return \c 0 on success. + * \return A specific error code on failure. + */ +int mbedtls_cipher_check_tag( mbedtls_cipher_context_t *ctx, + const unsigned char *tag, size_t tag_len ); +#endif /* MBEDTLS_GCM_C || MBEDTLS_CHACHAPOLY_C */ + +/** + * \brief The generic all-in-one encryption/decryption function, + * for all ciphers except AEAD constructs. + * + * \param ctx The generic cipher context. This must be initialized. + * \param iv The IV to use, or NONCE_COUNTER for CTR-mode ciphers. + * This must be a readable buffer of at least \p iv_len + * Bytes. + * \param iv_len The IV length for ciphers with variable-size IV. + * This parameter is discarded by ciphers with fixed-size + * IV. + * \param input The buffer holding the input data. This must be a + * readable buffer of at least \p ilen Bytes. + * \param ilen The length of the input data in Bytes. + * \param output The buffer for the output data. This must be able to + * hold at least `ilen + block_size`. This must not be the + * same buffer as \p input. + * \param olen The length of the output data, to be updated with the + * actual number of Bytes written. This must not be + * \c NULL. + * + * \note Some ciphers do not use IVs nor nonce. For these + * ciphers, use \p iv = NULL and \p iv_len = 0. + * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on + * parameter-verification failure. + * \return #MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED on decryption + * expecting a full block but not receiving one. + * \return #MBEDTLS_ERR_CIPHER_INVALID_PADDING on invalid padding + * while decrypting. + * \return A cipher-specific error code on failure. + */ +int mbedtls_cipher_crypt( mbedtls_cipher_context_t *ctx, + const unsigned char *iv, size_t iv_len, + const unsigned char *input, size_t ilen, + unsigned char *output, size_t *olen ); + +#ifdef __cplusplus +} +#endif + +#endif /* MBEDTLS_CIPHER_H */ diff --git a/src/components/implementation/simple_nf/ndpi/gcrypt/cipher_wrap.c b/src/components/implementation/simple_nf/ndpi/gcrypt/cipher_wrap.c new file mode 100644 index 0000000000..5e3e679aad --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/gcrypt/cipher_wrap.c @@ -0,0 +1,234 @@ +/** + * \file cipher_wrap.c + * + * \brief Generic cipher wrapper for mbed TLS + * + * \author Adriaan de Jong + * + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined(MBEDTLS_AES_C) + +static int aes_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation, + const unsigned char *input, unsigned char *output ) +{ + return mbedtls_aes_crypt_ecb( (mbedtls_aes_context *) ctx, operation, input, output ); +} + + +static int aes_setkey_dec_wrap( void *ctx, const unsigned char *key, + unsigned int key_bitlen ) +{ + return mbedtls_aes_setkey_dec( (mbedtls_aes_context *) ctx, key, key_bitlen ); +} + +static int aes_setkey_enc_wrap( void *ctx, const unsigned char *key, + unsigned int key_bitlen ) +{ + return mbedtls_aes_setkey_enc( (mbedtls_aes_context *) ctx, key, key_bitlen ); +} + +static void aes_ctx_zero( void *ctx ) +{ + mbedtls_aes_init( (mbedtls_aes_context *) ctx ); +} + +static const mbedtls_cipher_base_t aes_info = { + MBEDTLS_CIPHER_ID_AES, + aes_crypt_ecb_wrap, + aes_setkey_enc_wrap, + aes_setkey_dec_wrap, + NULL, // aes_ctx_alloc + NULL, // aes_ctx_free + aes_ctx_zero +}; + +static const mbedtls_cipher_info_t aes_128_ecb_info = { + MBEDTLS_CIPHER_AES_128_ECB, + MBEDTLS_MODE_ECB, + 128, + "AES-128-ECB", + 0, + 0, + 16, + &aes_info +}; + +static const mbedtls_cipher_info_t aes_192_ecb_info = { + MBEDTLS_CIPHER_AES_192_ECB, + MBEDTLS_MODE_ECB, + 192, + "AES-192-ECB", + 0, + 0, + 16, + &aes_info +}; + +static const mbedtls_cipher_info_t aes_256_ecb_info = { + MBEDTLS_CIPHER_AES_256_ECB, + MBEDTLS_MODE_ECB, + 256, + "AES-256-ECB", + 0, + 0, + 16, + &aes_info +}; + +#if defined(MBEDTLS_GCM_C) +static int gcm_aes_setkey_wrap( void *ctx, const unsigned char *key, + unsigned int key_bitlen ) +{ + return mbedtls_gcm_setkey( (mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_AES, + key, key_bitlen ); +} + +static const mbedtls_cipher_base_t gcm_aes_info = { + MBEDTLS_CIPHER_ID_AES, + NULL, + gcm_aes_setkey_wrap, + gcm_aes_setkey_wrap, + NULL, // gcm_ctx_alloc + NULL, // gcm_ctx_free + NULL +}; + +static const mbedtls_cipher_info_t aes_128_gcm_info = { + MBEDTLS_CIPHER_AES_128_GCM, + MBEDTLS_MODE_GCM, + 128, + "AES-128-GCM", + 12, + MBEDTLS_CIPHER_VARIABLE_IV_LEN, + 16, + &gcm_aes_info +}; + +static const mbedtls_cipher_info_t aes_192_gcm_info = { + MBEDTLS_CIPHER_AES_192_GCM, + MBEDTLS_MODE_GCM, + 192, + "AES-192-GCM", + 12, + MBEDTLS_CIPHER_VARIABLE_IV_LEN, + 16, + &gcm_aes_info +}; + +static const mbedtls_cipher_info_t aes_256_gcm_info = { + MBEDTLS_CIPHER_AES_256_GCM, + MBEDTLS_MODE_GCM, + 256, + "AES-256-GCM", + 12, + MBEDTLS_CIPHER_VARIABLE_IV_LEN, + 16, + &gcm_aes_info +}; +#endif /* MBEDTLS_GCM_C */ + + +#endif /* MBEDTLS_AES_C */ + + + + + + +#if defined(MBEDTLS_CIPHER_NULL_CIPHER) +static int null_crypt_stream( void *ctx, size_t length, + const unsigned char *input, + unsigned char *output ) +{ + ((void) ctx); + memmove( output, input, length ); + return( 0 ); +} + +static int null_setkey( void *ctx, const unsigned char *key, + unsigned int key_bitlen ) +{ + ((void) ctx); + ((void) key); + ((void) key_bitlen); + + return( 0 ); +} + +static void * null_ctx_alloc( void ) +{ + return( (void *) 1 ); +} + +static void null_ctx_free( void *ctx ) +{ + ((void) ctx); +} + +static const mbedtls_cipher_base_t null_base_info = { + MBEDTLS_CIPHER_ID_NULL, + NULL, + null_setkey, + null_setkey, + null_ctx_alloc, + null_ctx_free +}; + +static const mbedtls_cipher_info_t null_cipher_info = { + MBEDTLS_CIPHER_NULL, + MBEDTLS_MODE_STREAM, + 0, + "NULL", + 0, + 0, + 1, + &null_base_info +}; +#endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */ + + +const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] = +{ +#if defined(MBEDTLS_AES_C) + { MBEDTLS_CIPHER_AES_128_ECB, &aes_128_ecb_info }, + { MBEDTLS_CIPHER_AES_192_ECB, &aes_192_ecb_info }, + { MBEDTLS_CIPHER_AES_256_ECB, &aes_256_ecb_info }, +#if defined(MBEDTLS_GCM_C) + { MBEDTLS_CIPHER_AES_128_GCM, &aes_128_gcm_info }, + { MBEDTLS_CIPHER_AES_192_GCM, &aes_192_gcm_info }, + { MBEDTLS_CIPHER_AES_256_GCM, &aes_256_gcm_info }, +#endif +#endif /* MBEDTLS_AES_C */ + + + + + + + +#if defined(MBEDTLS_CIPHER_NULL_CIPHER) + { MBEDTLS_CIPHER_NULL, &null_cipher_info }, +#endif /* MBEDTLS_CIPHER_NULL_CIPHER */ + + { MBEDTLS_CIPHER_NONE, NULL } +}; + +#define NUM_CIPHERS ( sizeof(mbedtls_cipher_definitions) / \ + sizeof(mbedtls_cipher_definitions[0]) ) +int mbedtls_cipher_supported[NUM_CIPHERS]; + diff --git a/src/components/implementation/simple_nf/ndpi/gcrypt/cipher_wrap.h b/src/components/implementation/simple_nf/ndpi/gcrypt/cipher_wrap.h new file mode 100644 index 0000000000..a75d04c91f --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/gcrypt/cipher_wrap.h @@ -0,0 +1,92 @@ +/** + * \file cipher_wrap.h + * + * \brief Cipher wrappers. + * + * \author Adriaan de Jong + */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef MBEDTLS_CIPHER_WRAP_H +#define MBEDTLS_CIPHER_WRAP_H + + + + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Base cipher information. The non-mode specific functions and values. + */ +struct mbedtls_cipher_base_t +{ + /** Base Cipher type (e.g. MBEDTLS_CIPHER_ID_AES) */ + mbedtls_cipher_id_t cipher; + + /** Encrypt using ECB */ + int (*ecb_func)( void *ctx, mbedtls_operation_t mode, + const unsigned char *input, unsigned char *output ); + +#if defined(MBEDTLS_CIPHER_MODE_CBC) + /** Encrypt using CBC */ + int (*cbc_func)( void *ctx, mbedtls_operation_t mode, size_t length, + unsigned char *iv, const unsigned char *input, + unsigned char *output ); +#endif + + + + + + + /** Set key for encryption purposes */ + int (*setkey_enc_func)( void *ctx, const unsigned char *key, + unsigned int key_bitlen ); + + /** Set key for decryption purposes */ + int (*setkey_dec_func)( void *ctx, const unsigned char *key, + unsigned int key_bitlen); + + /** Allocate a new context */ + void * (*ctx_alloc_func)( void ); + + /** Free the given context */ + void (*ctx_free_func)( void *ctx ); + + /** Zero the given context */ + void (*ctx_zero_func)( void *ctx ); + +}; + +typedef struct +{ + mbedtls_cipher_type_t type; + const mbedtls_cipher_info_t *info; +} mbedtls_cipher_definition_t; + + +extern const mbedtls_cipher_definition_t mbedtls_cipher_definitions[]; + +extern int mbedtls_cipher_supported[]; + +#ifdef __cplusplus +} +#endif + +#endif /* MBEDTLS_CIPHER_WRAP_H */ diff --git a/src/components/implementation/simple_nf/ndpi/gcrypt/common.h b/src/components/implementation/simple_nf/ndpi/gcrypt/common.h new file mode 100644 index 0000000000..ba6a654ab7 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/gcrypt/common.h @@ -0,0 +1,368 @@ +/** + * \file common.h + * + * \brief Utility macros for internal use in the library + */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MBEDTLS_LIBRARY_COMMON_H +#define MBEDTLS_LIBRARY_COMMON_H + +#ifdef _MSC_VER + + #include + #define bswap_64(x) _byteswap_uint64(x) + +#elif defined(__APPLE__) + + // Mac OS X / Darwin features + #include + #define bswap_64(x) OSSwapInt64(x) + +#elif defined(__sun) || defined(sun) + + #include + #define bswap_64(x) BSWAP_64(x) + +#elif defined(__FreeBSD__) + + #include + #define bswap_64(x) bswap64(x) + +#elif defined(__OpenBSD__) + + #include + #define bswap_64(x) swap64(x) + +#elif defined(__NetBSD__) + + #include + #include + #if defined(__BSWAP_RENAME) && !defined(__bswap_32) + #define bswap_64(x) bswap64(x) + #endif +#elif defined(__MINGW32__) || defined(__MINGW64__) + #define bswap_64(x) __builtin_bswap64(x) +#else + #include +#endif + + +/** Helper to define a function as static except when building invasive tests. + * + * If a function is only used inside its own source file and should be + * declared `static` to allow the compiler to optimize for code size, + * but that function has unit tests, define it with + * ``` + * MBEDTLS_STATIC_TESTABLE int mbedtls_foo(...) { ... } + * ``` + * and declare it in a header in the `library/` directory with + * ``` + * #if defined(MBEDTLS_TEST_HOOKS) + * int mbedtls_foo(...); + * #endif + * ``` + */ + +/** Byte Reading Macros + * + * Given a multi-byte integer \p x, MBEDTLS_BYTE_n retrieves the n-th + * byte from x, where byte 0 is the least significant byte. + */ + +#if defined(__LITTLE_ENDIAN__) || defined(_LITTLE_ENDIAN) + +#define MBEDTLS_GET_UINT32_LE(b,i) (*(uint32_t *) (&(b)[(i)])) +#define MBEDTLS_GET_UINT32_BE(b,i) htonl(*(uint32_t *) (&(b)[(i)])) +#define MBEDTLS_PUT_UINT32_LE(n,b,i) *(uint32_t *) (&(b)[(i)]) = (n); +#define MBEDTLS_PUT_UINT64_BE(n,b,i) *(uint64_t *) (&(b)[(i)]) = bswap_64(n); + +#elif defined(__BIG_ENDIAN__) || defined(__BIG_ENDIAN) + +#define MBEDTLS_GET_UINT32_LE(b,i) bswap_32(*(uint32_t *) (&(b)[(i)])) +#define MBEDTLS_GET_UINT32_BE(b,i) (*(uint32_t *) (&(b)[(i)])) +#define MBEDTLS_PUT_UINT32_LE(n,b,i) *(uint32_t *) (&(b)[(i)]) = bswap_32(n); +#define MBEDTLS_PUT_UINT64_BE(n,b,i) *(uint64_t *) (&(b)[(i)]) = (n); + +#else +#warning "__BYTE_ORDER MUST BE DEFINED !" +#endif + + +#define MBEDTLS_BYTE_0( x ) ( (uint8_t) ( ( x ) & 0xff ) ) +#define MBEDTLS_BYTE_1( x ) ( (uint8_t) ( ( ( x ) >> 8 ) & 0xff ) ) +#define MBEDTLS_BYTE_2( x ) ( (uint8_t) ( ( ( x ) >> 16 ) & 0xff ) ) +#define MBEDTLS_BYTE_3( x ) ( (uint8_t) ( ( ( x ) >> 24 ) & 0xff ) ) + +/** + * Get the unsigned 32 bits integer corresponding to four bytes in + * big-endian order (MSB first). + * + * \param data Base address of the memory to get the four bytes from. + * \param offset Offset from \p data of the first and most significant + * byte of the four bytes to build the 32 bits unsigned + * integer from. + */ +#ifndef MBEDTLS_GET_UINT32_BE +#define MBEDTLS_GET_UINT32_BE( data , offset ) \ + ( \ + ( (uint32_t) ( data )[( offset ) ] << 24 ) \ + | ( (uint32_t) ( data )[( offset ) + 1] << 16 ) \ + | ( (uint32_t) ( data )[( offset ) + 2] << 8 ) \ + | ( (uint32_t) ( data )[( offset ) + 3] ) \ + ) +#endif + +/** + * Put in memory a 32 bits unsigned integer in big-endian order. + * + * \param n 32 bits unsigned integer to put in memory. + * \param data Base address of the memory where to put the 32 + * bits unsigned integer in. + * \param offset Offset from \p data where to put the most significant + * byte of the 32 bits unsigned integer \p n. + */ +#ifndef MBEDTLS_PUT_UINT32_BE +#define MBEDTLS_PUT_UINT32_BE( n, data, offset ) \ +{ \ + ( data )[( offset ) ] = MBEDTLS_BYTE_3( n ); \ + ( data )[( offset ) + 1] = MBEDTLS_BYTE_2( n ); \ + ( data )[( offset ) + 2] = MBEDTLS_BYTE_1( n ); \ + ( data )[( offset ) + 3] = MBEDTLS_BYTE_0( n ); \ +} +#endif + +/** + * Get the unsigned 32 bits integer corresponding to four bytes in + * little-endian order (LSB first). + * + * \param data Base address of the memory to get the four bytes from. + * \param offset Offset from \p data of the first and least significant + * byte of the four bytes to build the 32 bits unsigned + * integer from. + */ +#ifndef MBEDTLS_GET_UINT32_LE +#define MBEDTLS_GET_UINT32_LE( data, offset ) \ + ( \ + ( (uint32_t) ( data )[( offset ) ] ) \ + | ( (uint32_t) ( data )[( offset ) + 1] << 8 ) \ + | ( (uint32_t) ( data )[( offset ) + 2] << 16 ) \ + | ( (uint32_t) ( data )[( offset ) + 3] << 24 ) \ + ) +#endif + +/** + * Put in memory a 32 bits unsigned integer in little-endian order. + * + * \param n 32 bits unsigned integer to put in memory. + * \param data Base address of the memory where to put the 32 + * bits unsigned integer in. + * \param offset Offset from \p data where to put the least significant + * byte of the 32 bits unsigned integer \p n. + */ +#ifndef MBEDTLS_PUT_UINT32_LE +#define MBEDTLS_PUT_UINT32_LE( n, data, offset ) \ +{ \ + ( data )[( offset ) ] = MBEDTLS_BYTE_0( n ); \ + ( data )[( offset ) + 1] = MBEDTLS_BYTE_1( n ); \ + ( data )[( offset ) + 2] = MBEDTLS_BYTE_2( n ); \ + ( data )[( offset ) + 3] = MBEDTLS_BYTE_3( n ); \ +} +#endif + +/** + * Get the unsigned 16 bits integer corresponding to two bytes in + * little-endian order (LSB first). + * + * \param data Base address of the memory to get the two bytes from. + * \param offset Offset from \p data of the first and least significant + * byte of the two bytes to build the 16 bits unsigned + * integer from. + */ +#ifndef MBEDTLS_GET_UINT16_LE +#define MBEDTLS_GET_UINT16_LE( data, offset ) \ + ( \ + ( (uint16_t) ( data )[( offset ) ] ) \ + | ( (uint16_t) ( data )[( offset ) + 1] << 8 ) \ + ) +#endif + +/** + * Put in memory a 16 bits unsigned integer in little-endian order. + * + * \param n 16 bits unsigned integer to put in memory. + * \param data Base address of the memory where to put the 16 + * bits unsigned integer in. + * \param offset Offset from \p data where to put the least significant + * byte of the 16 bits unsigned integer \p n. + */ +#ifndef MBEDTLS_PUT_UINT16_LE +#define MBEDTLS_PUT_UINT16_LE( n, data, offset ) \ +{ \ + ( data )[( offset ) ] = MBEDTLS_BYTE_0( n ); \ + ( data )[( offset ) + 1] = MBEDTLS_BYTE_1( n ); \ +} +#endif + +/** + * Get the unsigned 16 bits integer corresponding to two bytes in + * big-endian order (MSB first). + * + * \param data Base address of the memory to get the two bytes from. + * \param offset Offset from \p data of the first and most significant + * byte of the two bytes to build the 16 bits unsigned + * integer from. + */ +#ifndef MBEDTLS_GET_UINT16_BE +#define MBEDTLS_GET_UINT16_BE( data, offset ) \ + ( \ + ( (uint16_t) ( data )[( offset ) ] << 8 ) \ + | ( (uint16_t) ( data )[( offset ) + 1] ) \ + ) +#endif + +/** + * Put in memory a 16 bits unsigned integer in big-endian order. + * + * \param n 16 bits unsigned integer to put in memory. + * \param data Base address of the memory where to put the 16 + * bits unsigned integer in. + * \param offset Offset from \p data where to put the most significant + * byte of the 16 bits unsigned integer \p n. + */ +#ifndef MBEDTLS_PUT_UINT16_BE +#define MBEDTLS_PUT_UINT16_BE( n, data, offset ) \ +{ \ + ( data )[( offset ) ] = MBEDTLS_BYTE_1( n ); \ + ( data )[( offset ) + 1] = MBEDTLS_BYTE_0( n ); \ +} +#endif + +/** + * Get the unsigned 64 bits integer corresponding to eight bytes in + * big-endian order (MSB first). + * + * \param data Base address of the memory to get the eight bytes from. + * \param offset Offset from \p data of the first and most significant + * byte of the eight bytes to build the 64 bits unsigned + * integer from. + */ +#ifndef MBEDTLS_GET_UINT64_BE +#define MBEDTLS_GET_UINT64_BE( data, offset ) \ + ( \ + ( (uint64_t) ( data )[( offset ) ] << 56 ) \ + | ( (uint64_t) ( data )[( offset ) + 1] << 48 ) \ + | ( (uint64_t) ( data )[( offset ) + 2] << 40 ) \ + | ( (uint64_t) ( data )[( offset ) + 3] << 32 ) \ + | ( (uint64_t) ( data )[( offset ) + 4] << 24 ) \ + | ( (uint64_t) ( data )[( offset ) + 5] << 16 ) \ + | ( (uint64_t) ( data )[( offset ) + 6] << 8 ) \ + | ( (uint64_t) ( data )[( offset ) + 7] ) \ + ) +#endif + +/** + * Put in memory a 64 bits unsigned integer in big-endian order. + * + * \param n 64 bits unsigned integer to put in memory. + * \param data Base address of the memory where to put the 64 + * bits unsigned integer in. + * \param offset Offset from \p data where to put the most significant + * byte of the 64 bits unsigned integer \p n. + */ +#ifndef MBEDTLS_PUT_UINT64_BE +#define MBEDTLS_PUT_UINT64_BE( n, data, offset ) \ +{ \ + ( data )[( offset ) ] = MBEDTLS_BYTE_7( n ); \ + ( data )[( offset ) + 1] = MBEDTLS_BYTE_6( n ); \ + ( data )[( offset ) + 2] = MBEDTLS_BYTE_5( n ); \ + ( data )[( offset ) + 3] = MBEDTLS_BYTE_4( n ); \ + ( data )[( offset ) + 4] = MBEDTLS_BYTE_3( n ); \ + ( data )[( offset ) + 5] = MBEDTLS_BYTE_2( n ); \ + ( data )[( offset ) + 6] = MBEDTLS_BYTE_1( n ); \ + ( data )[( offset ) + 7] = MBEDTLS_BYTE_0( n ); \ +} +#endif + +/** + * Get the unsigned 64 bits integer corresponding to eight bytes in + * little-endian order (LSB first). + * + * \param data Base address of the memory to get the eight bytes from. + * \param offset Offset from \p data of the first and least significant + * byte of the eight bytes to build the 64 bits unsigned + * integer from. + */ +#ifndef MBEDTLS_GET_UINT64_LE +#define MBEDTLS_GET_UINT64_LE( data, offset ) \ + ( \ + ( (uint64_t) ( data )[( offset ) + 7] << 56 ) \ + | ( (uint64_t) ( data )[( offset ) + 6] << 48 ) \ + | ( (uint64_t) ( data )[( offset ) + 5] << 40 ) \ + | ( (uint64_t) ( data )[( offset ) + 4] << 32 ) \ + | ( (uint64_t) ( data )[( offset ) + 3] << 24 ) \ + | ( (uint64_t) ( data )[( offset ) + 2] << 16 ) \ + | ( (uint64_t) ( data )[( offset ) + 1] << 8 ) \ + | ( (uint64_t) ( data )[( offset ) ] ) \ + ) +#endif + +/** + * Put in memory a 64 bits unsigned integer in little-endian order. + * + * \param n 64 bits unsigned integer to put in memory. + * \param data Base address of the memory where to put the 64 + * bits unsigned integer in. + * \param offset Offset from \p data where to put the least significant + * byte of the 64 bits unsigned integer \p n. + */ +#ifndef MBEDTLS_PUT_UINT64_LE +#define MBEDTLS_PUT_UINT64_LE( n, data, offset ) \ +{ \ + ( data )[( offset ) ] = MBEDTLS_BYTE_0( n ); \ + ( data )[( offset ) + 1] = MBEDTLS_BYTE_1( n ); \ + ( data )[( offset ) + 2] = MBEDTLS_BYTE_2( n ); \ + ( data )[( offset ) + 3] = MBEDTLS_BYTE_3( n ); \ + ( data )[( offset ) + 4] = MBEDTLS_BYTE_4( n ); \ + ( data )[( offset ) + 5] = MBEDTLS_BYTE_5( n ); \ + ( data )[( offset ) + 6] = MBEDTLS_BYTE_6( n ); \ + ( data )[( offset ) + 7] = MBEDTLS_BYTE_7( n ); \ +} +#endif + +/* Fix MSVC C99 compatible issue + * MSVC support __func__ from visual studio 2015( 1900 ) + * Use MSVC predefine macro to avoid name check fail. + */ +#if (defined(_MSC_VER) && ( _MSC_VER <= 1900 )) +#define /*no-check-names*/ __func__ __FUNCTION__ +#endif + +#define ROTL8(x) ( (uint32_t)( ( x ) << 8 ) + (uint32_t)( ( x ) >> 24 ) ) +#define ROTL16(x) ( (uint32_t)( ( x ) << 16 ) + (uint32_t)( ( x ) >> 16 ) ) +#define ROTL24(x) ( (uint32_t)( ( x ) << 24 ) + (uint32_t)( ( x ) >> 8 ) ) + +#ifndef mbedtls_calloc +#define mbedtls_calloc calloc +#endif +#ifndef mbedtls_free +#define mbedtls_free free +#endif + + +#endif /* MBEDTLS_LIBRARY_COMMON_H */ diff --git a/src/components/implementation/simple_nf/ndpi/gcrypt/digest.c b/src/components/implementation/simple_nf/ndpi/gcrypt/digest.c new file mode 100644 index 0000000000..48e6eea973 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/gcrypt/digest.c @@ -0,0 +1,321 @@ +/* + * hmac-sha256.c + * Copyright (C) 2017 Adrian Perez + * + * Distributed under terms of the MIT license. + */ + +//#include +//#include +//#include +//#include + +//#include "gcrypt/digest.h" + +/* define it for speed optimization */ +#define _SHA256_UNROLL +#define _SHA256_UNROLL2 + +/* + * Crypto/Sha256.c -- SHA-256 Hash + * 2010-06-11 : Igor Pavlov : Public domain + * This code is based on public domain code from Wei Dai's Crypto++ library. + */ + +#define U8V(v) ((uint8_t)(v) & 0xFFU) +#define U16V(v) ((uint16_t)(v) & 0xFFFFU) +#define U32V(v) ((uint32_t)(v) & 0xFFFFFFFFU) +#define U64V(v) ((uint64_t)(v) & 0xFFFFFFFFFFFFFFFFU) + +#define ROTL32(v, n) (U32V((uint32_t)(v) << (n)) | ((uint32_t)(v) >> (32 - (n)))) + +// tests fail if we don't have this cast... +#define ROTL64(v, n) (U64V((uint64_t)(v) << (n)) | ((uint64_t)(v) >> (64 - (n)))) + +#define ROTR32(v, n) ROTL32(v, 32 - (n)) +#define ROTR64(v, n) ROTL64(v, 64 - (n)) + +#ifndef ROTL8 +#define ROTL8(v, n) (U8V((uint8_t)(v) << (n)) | ((uint8_t)(v) >> (8 - (n)))) +#endif +#ifndef ROTL16 +#define ROTL16(v, n) (U16V((uint16_t)(v) << (n)) | ((uint16_t)(v) >> (16 - (n)))) +#endif + +#define ROTR8(v, n) ROTL8(v, 8 - (n)) +#define ROTR16(v, n) ROTL16(v, 16 - (n)) + +#define S0(x) (ROTR32(x, 2) ^ ROTR32(x,13) ^ ROTR32(x, 22)) +#define S1(x) (ROTR32(x, 6) ^ ROTR32(x,11) ^ ROTR32(x, 25)) +#define s0(x) (ROTR32(x, 7) ^ ROTR32(x,18) ^ (x >> 3)) +#define s1(x) (ROTR32(x,17) ^ ROTR32(x,19) ^ (x >> 10)) + +#define blk0(i) (W[i] = data[i]) +#define blk2(i) (W[i&15] += s1(W[(i-2)&15]) + W[(i-7)&15] + s0(W[(i-15)&15])) + +#define Ch(x,y,z) (z^(x&(y^z))) +#define Maj(x,y,z) ((x&y)|(z&(x|y))) + +#define a(i) T[(0-(i))&7] +#define b(i) T[(1-(i))&7] +#define c(i) T[(2-(i))&7] +#define d(i) T[(3-(i))&7] +#define e(i) T[(4-(i))&7] +#define f(i) T[(5-(i))&7] +#define g(i) T[(6-(i))&7] +#define h(i) T[(7-(i))&7] + + +#ifdef _SHA256_UNROLL2 + +#define R(a,b,c,d,e,f,g,h, i) h += S1(e) + Ch(e,f,g) + K[i+j] + (j?blk2(i):blk0(i));\ + d += h; h += S0(a) + Maj(a, b, c) + +#define RX_8(i) \ + R(a,b,c,d,e,f,g,h, i); \ + R(h,a,b,c,d,e,f,g, (i+1)); \ + R(g,h,a,b,c,d,e,f, (i+2)); \ + R(f,g,h,a,b,c,d,e, (i+3)); \ + R(e,f,g,h,a,b,c,d, (i+4)); \ + R(d,e,f,g,h,a,b,c, (i+5)); \ + R(c,d,e,f,g,h,a,b, (i+6)); \ + R(b,c,d,e,f,g,h,a, (i+7)) + +#else + +#define R(i) h(i) += S1(e(i)) + Ch(e(i),f(i),g(i)) + K[i+j] + (j?blk2(i):blk0(i));\ + d(i) += h(i); h(i) += S0(a(i)) + Maj(a(i), b(i), c(i)) + +#ifdef _SHA256_UNROLL + +#define RX_8(i) R(i+0); R(i+1); R(i+2); R(i+3); R(i+4); R(i+5); R(i+6); R(i+7); + +#endif + +#endif + +static const uint32_t K[64] = { + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, + 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, + 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, + 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, + 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, + 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, + 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, + 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, + 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 +}; + +static void +sha256_init(sha256_t *p) +{ + p->state[0] = 0x6a09e667; + p->state[1] = 0xbb67ae85; + p->state[2] = 0x3c6ef372; + p->state[3] = 0xa54ff53a; + p->state[4] = 0x510e527f; + p->state[5] = 0x9b05688c; + p->state[6] = 0x1f83d9ab; + p->state[7] = 0x5be0cd19; + p->count = 0; +} + +static void +sha256_transform(uint32_t *state, const uint32_t *data) +{ + uint32_t W[16] = {0}; + unsigned j; + #ifdef _SHA256_UNROLL2 + uint32_t a,b,c,d,e,f,g,h; + a = state[0]; + b = state[1]; + c = state[2]; + d = state[3]; + e = state[4]; + f = state[5]; + g = state[6]; + h = state[7]; + #else + uint32_t T[8]; + for (j = 0; j < 8; j++) + T[j] = state[j]; + #endif + + for (j = 0; j < 64; j += 16) + { + #if defined(_SHA256_UNROLL) || defined(_SHA256_UNROLL2) + RX_8(0); RX_8(8); + #else + unsigned i; + for (i = 0; i < 16; i++) { R(i); } + #endif + } + + #ifdef _SHA256_UNROLL2 + state[0] += a; + state[1] += b; + state[2] += c; + state[3] += d; + state[4] += e; + state[5] += f; + state[6] += g; + state[7] += h; + #else + for (j = 0; j < 8; j++) + state[j] += T[j]; + #endif + + /* Wipe variables */ + /* memset(W, 0, sizeof(W)); */ + /* memset(T, 0, sizeof(T)); */ +} + +#undef S0 +#undef S1 +#undef s0 +#undef s1 + +static void +sha256_write_byte_block(sha256_t *p) +{ + uint32_t data32[16]; + unsigned i; + for (i = 0; i < 16; i++) + data32[i] = + ((uint32_t)(p->buffer[i * 4 ]) << 24) + + ((uint32_t)(p->buffer[i * 4 + 1]) << 16) + + ((uint32_t)(p->buffer[i * 4 + 2]) << 8) + + ((uint32_t)(p->buffer[i * 4 + 3])); + sha256_transform(p->state, data32); +} + +static void +sha256_update(sha256_t *p, const unsigned char *data, size_t size) +{ + uint32_t curBufferPos = (uint32_t)p->count & 0x3F; + while (size > 0) + { + p->buffer[curBufferPos++] = *data++; + p->count++; + size--; + if (curBufferPos == 64) + { + curBufferPos = 0; + sha256_write_byte_block(p); + } + } +} + + +void +sha256_final(sha256_t *p, unsigned char *digest) +{ + uint64_t lenInBits = (p->count << 3); + uint32_t curBufferPos = (uint32_t)p->count & 0x3F; + unsigned i; + p->buffer[curBufferPos++] = 0x80; + while (curBufferPos != (64 - 8)) + { + curBufferPos &= 0x3F; + if (curBufferPos == 0) + sha256_write_byte_block(p); + p->buffer[curBufferPos++] = 0; + } + for (i = 0; i < 8; i++) + { + p->buffer[curBufferPos++] = (unsigned char)(lenInBits >> 56); + lenInBits <<= 8; + } + sha256_write_byte_block(p); + + for (i = 0; i < 8; i++) + { + *digest++ = (unsigned char)(p->state[i] >> 24); + *digest++ = (unsigned char)(p->state[i] >> 16); + *digest++ = (unsigned char)(p->state[i] >> 8); + *digest++ = (unsigned char)(p->state[i]); + } + sha256_init(p); +} + +/* + * HMAC(H, K) == H(K ^ opad, H(K ^ ipad, text)) + * + * H: Hash function (sha256) + * K: Secret key + * B: Block byte length + * L: Byte length of hash function output + * + * https://tools.ietf.org/html/rfc2104 + */ + +#define B 64 +#define L (SHA256_DIGEST_SIZE) +#define K (SHA256_DIGEST_SIZE * 2) + +#define I_PAD 0x36 +#define O_PAD 0x5C + +void +hmac_sha256 (uint8_t out[HMAC_SHA256_DIGEST_SIZE], + const uint8_t *data, size_t data_len, + const uint8_t *key, size_t key_len) +{ + sha256_t ss; + uint8_t kx[B]; + size_t i; + + if(!out) return; + if(!data) return; + if(!key) return; + if(key_len > B) return; + + /* + * (1) append zeros to the end of K to create a B byte string + * (e.g., if K is of length 20 bytes and B=64, then K will be + * appended with 44 zero bytes 0x00) + * (2) XOR (bitwise exclusive-OR) the B byte string computed in step + * (1) with ipad + */ + for (i = 0; i < key_len; i++) kx[i] = I_PAD ^ key[i]; + for (i = key_len; i < B; i++) kx[i] = I_PAD ^ 0; + + /* + * (3) append the stream of data 'text' to the B byte string resulting + * from step (2) + * (4) apply H to the stream generated in step (3) + */ + sha256_init (&ss); + sha256_update (&ss, kx, B); + sha256_update (&ss, data, data_len); + sha256_final (&ss, out); + + /* + * (5) XOR (bitwise exclusive-OR) the B byte string computed in + * step (1) with opad + * + * NOTE: The "kx" variable is reused. + */ + for (i = 0; i < key_len; i++) kx[i] = O_PAD ^ key[i]; + for (i = key_len; i < B; i++) kx[i] = O_PAD ^ 0; + + /* + * (6) append the H result from step (4) to the B byte string + * resulting from step (5) + * (7) apply H to the stream generated in step (6) and output + * the result + */ + sha256_init (&ss); + sha256_update (&ss, kx, B); + sha256_update (&ss, out, SHA256_DIGEST_SIZE); + sha256_final (&ss, out); +} + + diff --git a/src/components/implementation/simple_nf/ndpi/gcrypt/digest.h b/src/components/implementation/simple_nf/ndpi/gcrypt/digest.h new file mode 100644 index 0000000000..a57a901e5e --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/gcrypt/digest.h @@ -0,0 +1,26 @@ +/* + * hmac-sha256.c + * Copyright (C) 2017 Adrian Perez + * + * Distributed under terms of the MIT license. + */ + +#ifndef DIGEST_CRYPT_H +#define DIGEST_CRYPT_H + +#define HMAC_SHA256_DIGEST_SIZE 32 /* Same as SHA-256's output size. */ +#define SHA256_DIGEST_SIZE 32 + +typedef struct sha256_t +{ + uint32_t state[8]; + uint64_t count; + unsigned char buffer[64]; +} sha256_t; + +void +hmac_sha256 (uint8_t out[HMAC_SHA256_DIGEST_SIZE], + const uint8_t *data, size_t data_len, + const uint8_t *key, size_t key_len); + +#endif diff --git a/src/components/implementation/simple_nf/ndpi/gcrypt/error.h b/src/components/implementation/simple_nf/ndpi/gcrypt/error.h new file mode 100644 index 0000000000..3fc9b03d98 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/gcrypt/error.h @@ -0,0 +1,201 @@ +/** + * \file error.h + * + * \brief Error to string translation + */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef MBEDTLS_ERROR_H +#define MBEDTLS_ERROR_H + + + +#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \ + !defined(inline) && !defined(__cplusplus) +#define inline __inline +#endif + +/** + * Error code layout. + * + * Currently we try to keep all error codes within the negative space of 16 + * bits signed integers to support all platforms (-0x0001 - -0x7FFF). In + * addition we'd like to give two layers of information on the error if + * possible. + * + * For that purpose the error codes are segmented in the following manner: + * + * 16 bit error code bit-segmentation + * + * 1 bit - Unused (sign bit) + * 3 bits - High level module ID + * 5 bits - Module-dependent error code + * 7 bits - Low level module errors + * + * For historical reasons, low-level error codes are divided in even and odd, + * even codes were assigned first, and -1 is reserved for other errors. + * + * Low-level module errors (0x0002-0x007E, 0x0001-0x007F) + * + * Module Nr Codes assigned + * ERROR 2 0x006E 0x0001 + * MPI 7 0x0002-0x0010 + * GCM 3 0x0012-0x0016 0x0013-0x0013 + * THREADING 3 0x001A-0x001E + * AES 5 0x0020-0x0022 0x0021-0x0025 + * CAMELLIA 3 0x0024-0x0026 0x0027-0x0027 + * BASE64 2 0x002A-0x002C + * OID 1 0x002E-0x002E 0x000B-0x000B + * PADLOCK 1 0x0030-0x0030 + * DES 2 0x0032-0x0032 0x0033-0x0033 + * CTR_DBRG 4 0x0034-0x003A + * ENTROPY 3 0x003C-0x0040 0x003D-0x003F + * NET 13 0x0042-0x0052 0x0043-0x0049 + * ARIA 4 0x0058-0x005E + * ASN1 7 0x0060-0x006C + * CMAC 1 0x007A-0x007A + * PBKDF2 1 0x007C-0x007C + * HMAC_DRBG 4 0x0003-0x0009 + * CCM 3 0x000D-0x0011 + * MD5 1 0x002F-0x002F + * RIPEMD160 1 0x0031-0x0031 + * SHA1 1 0x0035-0x0035 0x0073-0x0073 + * SHA256 1 0x0037-0x0037 0x0074-0x0074 + * SHA512 1 0x0039-0x0039 0x0075-0x0075 + * CHACHA20 3 0x0051-0x0055 + * POLY1305 3 0x0057-0x005B + * CHACHAPOLY 2 0x0054-0x0056 + * PLATFORM 2 0x0070-0x0072 + * + * High-level module nr (3 bits - 0x0...-0x7...) + * Name ID Nr of Errors + * PEM 1 9 + * PKCS#12 1 4 (Started from top) + * X509 2 20 + * PKCS5 2 4 (Started from top) + * DHM 3 11 + * PK 3 15 (Started from top) + * RSA 4 11 + * ECP 4 10 (Started from top) + * MD 5 5 + * HKDF 5 1 (Started from top) + * SSL 5 2 (Started from 0x5F00) + * CIPHER 6 8 (Started from 0x6080) + * SSL 6 22 (Started from top, plus 0x6000) + * SSL 7 20 (Started from 0x7000, gaps at + * 0x7380, 0x7900-0x7980, 0x7A80-0x7E80) + * + * Module dependent error code (5 bits 0x.00.-0x.F8.) + */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** Generic error */ +#define MBEDTLS_ERR_ERROR_GENERIC_ERROR -0x0001 +/** This is a bug in the library */ +#define MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED -0x006E + +/** Hardware accelerator failed */ +#define MBEDTLS_ERR_PLATFORM_HW_ACCEL_FAILED -0x0070 +/** The requested feature is not supported by the platform */ +#define MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED -0x0072 + +/** + * \brief Combines a high-level and low-level error code together. + * + * Wrapper macro for mbedtls_error_add(). See that function for + * more details. + */ +#define MBEDTLS_ERROR_ADD( high, low ) \ + mbedtls_error_add( high, low, __FILE__, __LINE__ ) + + +/** + * \brief Combines a high-level and low-level error code together. + * + * This function can be called directly however it is usually + * called via the #MBEDTLS_ERROR_ADD macro. + * + * While a value of zero is not a negative error code, it is still an + * error code (that denotes success) and can be combined with both a + * negative error code or another value of zero. + * + * \note When invasive testing is enabled via #MBEDTLS_TEST_HOOKS, also try to + * call \link mbedtls_test_hook_error_add \endlink. + * + * \param high high-level error code. See error.h for more details. + * \param low low-level error code. See error.h for more details. + * \param file file where this error code addition occurred. + * \param line line where this error code addition occurred. + */ +static inline int mbedtls_error_add( int high, int low, + const char *file, int line ) +{ + (void)file; + (void)line; + + return( high + low ); +} + +/** + * \brief Translate a mbed TLS error code into a string representation, + * Result is truncated if necessary and always includes a terminating + * null byte. + * + * \param errnum error code + * \param buffer buffer to place representation in + * \param buflen length of the buffer + */ +void mbedtls_strerror( int errnum, char *buffer, size_t buflen ); + +/** + * \brief Translate the high-level part of an Mbed TLS error code into a string + * representation. + * + * This function returns a const pointer to an un-modifiable string. The caller + * must not try to modify the string. It is intended to be used mostly for + * logging purposes. + * + * \param error_code error code + * + * \return The string representation of the error code, or \c NULL if the error + * code is unknown. + */ +const char * mbedtls_high_level_strerr( int error_code ); + +/** + * \brief Translate the low-level part of an Mbed TLS error code into a string + * representation. + * + * This function returns a const pointer to an un-modifiable string. The caller + * must not try to modify the string. It is intended to be used mostly for + * logging purposes. + * + * \param error_code error code + * + * \return The string representation of the error code, or \c NULL if the error + * code is unknown. + */ +const char * mbedtls_low_level_strerr( int error_code ); + +#ifdef __cplusplus +} +#endif + +#endif /* error.h */ diff --git a/src/components/implementation/simple_nf/ndpi/gcrypt/gcm.c b/src/components/implementation/simple_nf/ndpi/gcrypt/gcm.c new file mode 100644 index 0000000000..e793465f54 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/gcrypt/gcm.c @@ -0,0 +1,671 @@ +/* + * NIST SP800-38D compliant GCM implementation + * + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * http://csrc.nist.gov/publications/nistpubs/800-38D/SP-800-38D.pdf + * + * See also: + * [MGV] http://csrc.nist.gov/groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-revised-spec.pdf + * + * We use the algorithm described as Shoup's method with 4-bit tables in + * [MGV] 4.1, pp. 12-13, to enhance speed without using too much memory. + */ + + +/* Parameter validation macros */ +#define GCM_VALIDATE_RET( cond ) \ + MBEDTLS_INTERNAL_VALIDATE_RET( cond, MBEDTLS_ERR_GCM_BAD_INPUT ) +#define GCM_VALIDATE( cond ) \ + MBEDTLS_INTERNAL_VALIDATE( cond ) + +#ifdef WIN32 +#define LBLOCKSIZE 4 +#else +#define LBLOCKSIZE __SIZEOF_LONG__ +#endif + +static void xorbytes( unsigned char *dst, const unsigned char *src, int n) { + while(n > LBLOCKSIZE) { + *(unsigned long int *)dst ^= *(const unsigned long int *)src; + dst += LBLOCKSIZE; + src += LBLOCKSIZE; + n -= LBLOCKSIZE; + } + while(n) { + *dst++ ^= *src++; + n--; + } +} + +static void xorbytes3d( unsigned char *output, unsigned char *buf, + const unsigned char *ectr, const unsigned char *input, int n) { + while(n > LBLOCKSIZE) { + *(unsigned long int *)buf ^= *(const unsigned long int *)input; + *(unsigned long int *)output = *(const unsigned long int *)input ^ *(const unsigned long int *)ectr; + buf += LBLOCKSIZE; + output += LBLOCKSIZE; + ectr += LBLOCKSIZE; + input += LBLOCKSIZE; + n -= LBLOCKSIZE; + } + while(n) { + *buf++ ^= *input; + *output++ = *input++ ^ *ectr++; + n--; + } +} + +static void xorbytes3e( unsigned char *output, unsigned char *buf, + const unsigned char *ectr, const unsigned char *input, int n) { + while(n > LBLOCKSIZE) { + unsigned long int t = *(const unsigned long int *)input ^ *(const unsigned long int *)ectr; + *(unsigned long int *)output = t; + *(unsigned long int *)buf ^= t; + buf += LBLOCKSIZE; + output += LBLOCKSIZE; + ectr += LBLOCKSIZE; + input += LBLOCKSIZE; + n -= LBLOCKSIZE; + } + while(n) { + *output++ = *input++ ^ *ectr++; + *buf++ ^= *output++; + n--; + } +} + + + +/* + * Initialize a context + */ +void mbedtls_gcm_init( mbedtls_gcm_context *ctx, void *aes_ctx ) +{ + GCM_VALIDATE( ctx != NULL ); + memset( ctx, 0, sizeof( mbedtls_gcm_context ) ); + ctx->cipher_ctx.cipher_ctx = aes_ctx; +} + +/* + * Precompute small multiples of H, that is set + * HH[i] || HL[i] = H times i, + * where i is seen as a field element as in [MGV], ie high-order bits + * correspond to low powers of P. The result is stored in the same way, that + * is the high-order bit of HH corresponds to P^0 and the low-order bit of HL + * corresponds to P^127. + */ +static int gcm_gen_table( mbedtls_gcm_context *ctx ) +{ + int ret, i, j; + uint64_t hi, lo; + uint64_t vl, vh; + unsigned char h[16]; + size_t olen = 0; + + memset( h, 0, 16 ); + if( ( ret = mbedtls_cipher_update( &ctx->cipher_ctx, h, 16, h, &olen ) ) != 0 ) + return( ret ); + + /* pack h as two 64-bits ints, big-endian */ + hi = MBEDTLS_GET_UINT32_BE( h, 0 ); + lo = MBEDTLS_GET_UINT32_BE( h, 4 ); + vh = (uint64_t) hi << 32 | lo; + + hi = MBEDTLS_GET_UINT32_BE( h, 8 ); + lo = MBEDTLS_GET_UINT32_BE( h, 12 ); + vl = (uint64_t) hi << 32 | lo; + + /* 8 = 1000 corresponds to 1 in GF(2^128) */ + ctx->HL[8] = vl; + ctx->HH[8] = vh; + +#if defined(MBEDTLS_AESNI_C) && defined(MBEDTLS_HAVE_X86_64) + /* With CLMUL support, we need only h, not the rest of the table */ + if( mbedtls_aesni_has_support( MBEDTLS_AESNI_CLMUL ) ) { + aes_aesni_has_support = 1; + return( 0 ); + } +#endif + + /* 0 corresponds to 0 in GF(2^128) */ + ctx->HH[0] = 0; + ctx->HL[0] = 0; + + for( i = 4; i > 0; i >>= 1 ) + { + uint32_t T = ( vl & 1 ) * 0xe1000000U; + vl = ( vh << 63 ) | ( vl >> 1 ); + vh = ( vh >> 1 ) ^ ( (uint64_t) T << 32); + + ctx->HL[i] = vl; + ctx->HH[i] = vh; + } + + for( i = 2; i <= 8; i *= 2 ) + { + uint64_t *HiL = ctx->HL + i, *HiH = ctx->HH + i; + vh = *HiH; + vl = *HiL; + for( j = 1; j < i; j++ ) + { + HiH[j] = vh ^ ctx->HH[j]; + HiL[j] = vl ^ ctx->HL[j]; + } + } + + return( 0 ); +} + +int mbedtls_gcm_setkey( mbedtls_gcm_context *ctx, + mbedtls_cipher_id_t cipher, + const unsigned char *key, + unsigned int keybits ) +{ + int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; + const mbedtls_cipher_info_t *cipher_info; + + GCM_VALIDATE_RET( ctx != NULL ); + GCM_VALIDATE_RET( key != NULL ); + GCM_VALIDATE_RET( keybits == 128 || keybits == 192 || keybits == 256 ); + + cipher_info = mbedtls_cipher_info_from_values( cipher, keybits, + MBEDTLS_MODE_ECB ); + if( cipher_info == NULL ) + return( MBEDTLS_ERR_GCM_BAD_INPUT ); + + if( cipher_info->block_size != 16 ) + return( MBEDTLS_ERR_GCM_BAD_INPUT ); + + if(ctx->cipher_ctx.cipher_ctx == NULL) return MBEDTLS_ERR_GCM_BAD_INPUT; + if(!cipher_info->base->ctx_zero_func) return MBEDTLS_ERR_GCM_BAD_INPUT; + (*cipher_info->base->ctx_zero_func)(ctx->cipher_ctx.cipher_ctx); + ctx->cipher_ctx.cipher_info = cipher_info; + + if( ( ret = mbedtls_cipher_setkey( &ctx->cipher_ctx, key, keybits, + MBEDTLS_ENCRYPT ) ) != 0 ) + { + return( ret ); + } + + if( ( ret = gcm_gen_table( ctx ) ) != 0 ) + return( ret ); + + return( 0 ); +} + +/* + * Shoup's method for multiplication use this table with + * last4[x] = x times P^128 + * where x and last4[x] are seen as elements of GF(2^128) as in [MGV] + */ +static const uint64_t last4[16] = +{ + 0x0000ULL << 48, 0x1c20ULL << 48, 0x3840ULL << 48, 0x2460ULL << 48, + 0x7080ULL << 48, 0x6ca0ULL << 48, 0x48c0ULL << 48, 0x54e0ULL << 48, + 0xe100ULL << 48, 0xfd20ULL << 48, 0xd940ULL << 48, 0xc560ULL << 48, + 0x9180ULL << 48, 0x8da0ULL << 48, 0xa9c0ULL << 48, 0xb5e0ULL << 48 +}; + +/* + * Sets output to x times H using the precomputed tables. + * x and output are seen as elements of GF(2^128) as in [MGV]. + */ +static void gcm_mult( mbedtls_gcm_context *ctx, const unsigned char x[16], + unsigned char output[16] ) +{ + int i = 0; + unsigned char lo, hi, rem; + uint64_t zh, zl; + +#if defined(MBEDTLS_AESNI_C) && defined(MBEDTLS_HAVE_X86_64) + if( aes_aesni_has_support) { + unsigned char h[16]; + + MBEDTLS_PUT_UINT64_BE( ctx->HH[8], h, 0 ); + MBEDTLS_PUT_UINT64_BE( ctx->HL[8], h, 8 ); + + mbedtls_aesni_gcm_mult( output, x, h ); + return; + } +#endif /* MBEDTLS_AESNI_C && MBEDTLS_HAVE_X86_64 */ + + lo = x[15] & 0xf; + + zh = ctx->HH[lo]; + zl = ctx->HL[lo]; + + for( i = 15; i >= 0; i-- ) + { + lo = x[i] & 0xf; + hi = ( x[i] >> 4 ) & 0xf; + + if( i != 15 ) + { + rem = (unsigned char) zl & 0xf; + zl = ( zh << 60 ) | ( zl >> 4 ); + zh = ( zh >> 4 ); + zh ^= (uint64_t) last4[rem]; + zh ^= ctx->HH[lo]; + zl ^= ctx->HL[lo]; + + } + + rem = (unsigned char) zl & 0xf; + zl = ( zh << 60 ) | ( zl >> 4 ); + zh = ( zh >> 4 ); + zh ^= (uint64_t) last4[rem]; + zh ^= ctx->HH[hi]; + zl ^= ctx->HL[hi]; + } + MBEDTLS_PUT_UINT64_BE( zh, output, 0 ); + MBEDTLS_PUT_UINT64_BE( zl, output, 8 ); +} + +int mbedtls_gcm_starts( mbedtls_gcm_context *ctx, + int mode, + const unsigned char *iv, size_t iv_len ) +{ + int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; + unsigned char work_buf[16]; + const unsigned char *p; + size_t use_len, olen = 0; + uint64_t iv_bits; + + GCM_VALIDATE_RET( ctx != NULL ); + GCM_VALIDATE_RET( iv != NULL ); + + /* IV is limited to 2^64 bits, so 2^61 bytes */ + /* IV is not allowed to be zero length */ + if( iv_len == 0) + return( MBEDTLS_ERR_GCM_BAD_INPUT ); +#if __SIZE_WIDTH__ == 64 + if( iv_len >= (1ULL << 32 )) + return( MBEDTLS_ERR_GCM_BAD_INPUT ); +#endif + + memset( ctx->y, 0x00, sizeof(ctx->y) ); + memset( ctx->buf, 0x00, sizeof(ctx->buf) ); + + ctx->mode = mode; + ctx->len = 0; + ctx->add_len = 0; + + if( iv_len == 12 ) + { + memcpy( ctx->y, iv, iv_len ); + ctx->y[15] = 1; + } + else + { + memset( work_buf, 0x00, 16 ); + iv_bits = (uint64_t)iv_len * 8; + MBEDTLS_PUT_UINT64_BE( iv_bits, work_buf, 8 ); + + p = iv; + while( iv_len > 0 ) + { + use_len = ( iv_len < 16 ) ? iv_len : 16; + + xorbytes(ctx->y,p,use_len); + + gcm_mult( ctx, ctx->y, ctx->y ); + + iv_len -= use_len; + p += use_len; + } + + xorbytes(ctx->y,work_buf,16); + + gcm_mult( ctx, ctx->y, ctx->y ); + } + + if( ( ret = mbedtls_cipher_update( &ctx->cipher_ctx, ctx->y, 16, + ctx->base_ectr, &olen ) ) != 0 ) + { + return( ret ); + } + + return( 0 ); +} + +/** + * mbedtls_gcm_context::buf contains the partial state of the computation of + * the authentication tag. + * mbedtls_gcm_context::add_len and mbedtls_gcm_context::len indicate + * different stages of the computation: + * * len == 0 && add_len == 0: initial state + * * len == 0 && add_len % 16 != 0: the first `add_len % 16` bytes have + * a partial block of AD that has been + * xored in but not yet multiplied in. + * * len == 0 && add_len % 16 == 0: the authentication tag is correct if + * the data ends now. + * * len % 16 != 0: the first `len % 16` bytes have + * a partial block of ciphertext that has + * been xored in but not yet multiplied in. + * * len > 0 && len % 16 == 0: the authentication tag is correct if + * the data ends now. + */ +int mbedtls_gcm_update_ad( mbedtls_gcm_context *ctx, + const unsigned char *add, size_t add_len ) +{ + const unsigned char *p; + size_t use_len, offset; + + GCM_VALIDATE_RET( add_len == 0 || add != NULL ); + + /* IV is limited to 2^64 bits, so 2^61 bytes */ + if( (uint64_t) add_len >> 61 != 0 ) + return( MBEDTLS_ERR_GCM_BAD_INPUT ); + + offset = ctx->add_len % 16; + p = add; + + if( offset != 0 ) + { + use_len = 16 - offset; + if( use_len > add_len ) + use_len = add_len; + + xorbytes(ctx->buf,p,use_len); + + if( offset + use_len == 16 ) + gcm_mult( ctx, ctx->buf, ctx->buf ); + + ctx->add_len += use_len; + add_len -= use_len; + p += use_len; + } + + ctx->add_len += add_len; + + while( add_len >= 16 ) + { + xorbytes(ctx->buf,p,16); + + gcm_mult( ctx, ctx->buf, ctx->buf ); + + add_len -= 16; + p += 16; + } + + if( add_len > 0 ) + xorbytes(ctx->buf,p,add_len); + + return( 0 ); +} + +/* Increment the counter. */ +static void gcm_incr( unsigned char y[16] ) +{ + size_t i; + for( i = 16; i > 12; i-- ) + if( ++y[i - 1] != 0 ) + break; +} + +/* Calculate and apply the encryption mask. Process use_len bytes of data, + * starting at position offset in the mask block. */ +static int gcm_mask( mbedtls_gcm_context *ctx, + unsigned char ectr[16], + size_t offset, size_t use_len, + const unsigned char *input, + unsigned char *output ) +{ + size_t olen = 0; + int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; + + if( ( ret = mbedtls_cipher_update( &ctx->cipher_ctx, ctx->y, 16, ectr, + &olen ) ) != 0 ) + { + mbedtls_platform_zeroize( ectr, 16 ); + return( ret ); + } + + if(ctx->mode == MBEDTLS_GCM_DECRYPT ) + xorbytes3d(output,&ctx->buf[offset],&ectr[offset],input,use_len); + else + xorbytes3e(output,&ctx->buf[offset],&ectr[offset],input,use_len); + + return( 0 ); +} + +int mbedtls_gcm_update( mbedtls_gcm_context *ctx, + const unsigned char *input, size_t input_length, + unsigned char *output, size_t output_size, + size_t *output_length ) +{ + int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; + const unsigned char *p = input; + unsigned char *out_p = output; + size_t offset; + unsigned char ectr[16]; + + if( output_size < input_length ) + return( MBEDTLS_ERR_GCM_BUFFER_TOO_SMALL ); + GCM_VALIDATE_RET( output_length != NULL ); + *output_length = input_length; + + /* Exit early if input_length==0 so that we don't do any pointer arithmetic + * on a potentially null pointer. + * Returning early also means that the last partial block of AD remains + * untouched for mbedtls_gcm_finish */ + if( input_length == 0 ) + return( 0 ); + + GCM_VALIDATE_RET( ctx != NULL ); + GCM_VALIDATE_RET( input != NULL ); + GCM_VALIDATE_RET( output != NULL ); + + if( output > input && (size_t) ( output - input ) < input_length ) + return( MBEDTLS_ERR_GCM_BAD_INPUT ); + + /* Total length is restricted to 2^39 - 256 bits, ie 2^36 - 2^5 bytes + * Also check for possible overflow */ + if( ctx->len + input_length < ctx->len || + (uint64_t) ctx->len + input_length > 0xFFFFFFFE0ull ) + { + return( MBEDTLS_ERR_GCM_BAD_INPUT ); + } + + if( ctx->len == 0 && ctx->add_len % 16 != 0 ) + { + gcm_mult( ctx, ctx->buf, ctx->buf ); + } + + offset = ctx->len % 16; + if( offset != 0 ) + { + size_t use_len = 16 - offset; + if( use_len > input_length ) + use_len = input_length; + + if( ( ret = gcm_mask( ctx, ectr, offset, use_len, p, out_p ) ) != 0 ) + return( ret ); + + if( offset + use_len == 16 ) + gcm_mult( ctx, ctx->buf, ctx->buf ); + + ctx->len += use_len; + input_length -= use_len; + p += use_len; + out_p += use_len; + } + + ctx->len += input_length; + + while( input_length >= 16 ) + { + gcm_incr( ctx->y ); + if( ( ret = gcm_mask( ctx, ectr, 0, 16, p, out_p ) ) != 0 ) + return( ret ); + + gcm_mult( ctx, ctx->buf, ctx->buf ); + + input_length -= 16; + p += 16; + out_p += 16; + } + + if( input_length > 0 ) + { + gcm_incr( ctx->y ); + if( ( ret = gcm_mask( ctx, ectr, 0, input_length, p, out_p ) ) != 0 ) + return( ret ); + } + + return( 0 ); +} + +int mbedtls_gcm_finish( mbedtls_gcm_context *ctx, + unsigned char *output, size_t output_size, + size_t *output_length, + unsigned char *tag, size_t tag_len ) +{ + unsigned char work_buf[16]; + uint64_t orig_len; + uint64_t orig_add_len; + + GCM_VALIDATE_RET( ctx != NULL ); + GCM_VALIDATE_RET( tag != NULL ); + + /* We never pass any output in finish(). The output parameter exists only + * for the sake of alternative implementations. */ + (void) output; + (void) output_size; + *output_length = 0; + + orig_len = ctx->len * 8; + orig_add_len = ctx->add_len * 8; + + if( ctx->len == 0 && ctx->add_len % 16 != 0 ) + { + gcm_mult( ctx, ctx->buf, ctx->buf ); + } + + if( tag_len > 16 || tag_len < 4 ) + return( MBEDTLS_ERR_GCM_BAD_INPUT ); + + if( ctx->len % 16 != 0 ) + gcm_mult( ctx, ctx->buf, ctx->buf ); + + memcpy( tag, ctx->base_ectr, tag_len ); + + if( orig_len || orig_add_len ) + { + MBEDTLS_PUT_UINT64_BE( ( orig_add_len ), work_buf, 0 ); + MBEDTLS_PUT_UINT64_BE( ( orig_len ), work_buf, 8 ); + + xorbytes(ctx->buf,work_buf,16); + + gcm_mult( ctx, ctx->buf, ctx->buf ); + + xorbytes(tag,ctx->buf,tag_len); + } + + return( 0 ); +} + +int mbedtls_gcm_crypt_and_tag( mbedtls_gcm_context *ctx, + int mode, + size_t length, + const unsigned char *iv, + size_t iv_len, + const unsigned char *add, + size_t add_len, + const unsigned char *input, + unsigned char *output, + size_t tag_len, + unsigned char *tag ) +{ + int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; + size_t olen; + + GCM_VALIDATE_RET( ctx != NULL ); + GCM_VALIDATE_RET( iv != NULL ); + GCM_VALIDATE_RET( add_len == 0 || add != NULL ); + GCM_VALIDATE_RET( length == 0 || input != NULL ); + GCM_VALIDATE_RET( length == 0 || output != NULL ); + GCM_VALIDATE_RET( tag != NULL ); + + if( ( ret = mbedtls_gcm_starts( ctx, mode, iv, iv_len ) ) != 0 ) + return( ret ); + + if( ( ret = mbedtls_gcm_update_ad( ctx, add, add_len ) ) != 0 ) + return( ret ); + + if( ( ret = mbedtls_gcm_update( ctx, input, length, + output, length, &olen ) ) != 0 ) + return( ret ); + + if( ( ret = mbedtls_gcm_finish( ctx, NULL, 0, &olen, tag, tag_len ) ) != 0 ) + return( ret ); + + return( 0 ); +} + +int mbedtls_gcm_auth_decrypt( mbedtls_gcm_context *ctx, + size_t length, + const unsigned char *iv, + size_t iv_len, + const unsigned char *add, + size_t add_len, + const unsigned char *tag, + size_t tag_len, + const unsigned char *input, + unsigned char *output ) +{ + int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; + unsigned char check_tag[16]; + size_t i; + int diff; + + GCM_VALIDATE_RET( ctx != NULL ); + GCM_VALIDATE_RET( iv != NULL ); + GCM_VALIDATE_RET( add_len == 0 || add != NULL ); + GCM_VALIDATE_RET( tag != NULL ); + GCM_VALIDATE_RET( length == 0 || input != NULL ); + GCM_VALIDATE_RET( length == 0 || output != NULL ); + + if( ( ret = mbedtls_gcm_crypt_and_tag( ctx, MBEDTLS_GCM_DECRYPT, length, + iv, iv_len, add, add_len, + input, output, tag_len, check_tag ) ) != 0 ) + { + return( ret ); + } + + /* Check tag in "constant-time" */ + for( diff = 0, i = 0; i < tag_len; i++ ) + diff |= tag[i] ^ check_tag[i]; + + if( diff != 0 ) + { + mbedtls_platform_zeroize( output, length ); + return( MBEDTLS_ERR_GCM_AUTH_FAILED ); + } + + return( 0 ); +} + +void mbedtls_gcm_free( mbedtls_gcm_context *ctx ) +{ + if( ctx == NULL ) + return; + // mbedtls_cipher_free( &ctx->cipher_ctx ); +} + diff --git a/src/components/implementation/simple_nf/ndpi/gcrypt/gcm.h b/src/components/implementation/simple_nf/ndpi/gcrypt/gcm.h new file mode 100644 index 0000000000..19f07111be --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/gcrypt/gcm.h @@ -0,0 +1,364 @@ +/** + * \file gcm.h + * + * \brief This file contains GCM definitions and functions. + * + * The Galois/Counter Mode (GCM) for 128-bit block ciphers is defined + * in D. McGrew, J. Viega, The Galois/Counter Mode of Operation + * (GCM), Natl. Inst. Stand. Technol. + * + * For more information on GCM, see NIST SP 800-38D: Recommendation for + * Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC. + * + */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MBEDTLS_GCM_H +#define MBEDTLS_GCM_H + + + + +#define MBEDTLS_GCM_ENCRYPT 1 +#define MBEDTLS_GCM_DECRYPT 0 + +/** Authenticated decryption failed. */ +#define MBEDTLS_ERR_GCM_AUTH_FAILED -0x0012 +/** Bad input parameters to function. */ +#define MBEDTLS_ERR_GCM_BAD_INPUT -0x0014 +/** An output buffer is too small. */ +#define MBEDTLS_ERR_GCM_BUFFER_TOO_SMALL -0x0016 + +#ifdef __cplusplus +extern "C" { +#endif + + +/** + * \brief The GCM context structure. + */ +typedef struct mbedtls_gcm_context +{ + mbedtls_cipher_context_t cipher_ctx; /*!< The cipher context used. */ + uint64_t HL[16]; /*!< Precalculated HTable low. */ + uint64_t HH[16]; /*!< Precalculated HTable high. */ + uint64_t len; /*!< The total length of the encrypted data. */ + uint64_t add_len; /*!< The total length of the additional data. */ + unsigned char base_ectr[16]; /*!< The first ECTR for tag. */ + unsigned char y[16]; /*!< The Y working value. */ + unsigned char buf[16]; /*!< The buf working value. */ + int mode; /*!< The operation to perform: + #MBEDTLS_GCM_ENCRYPT or + #MBEDTLS_GCM_DECRYPT. */ +} +mbedtls_gcm_context; + + +/** + * \brief This function initializes the specified GCM context, + * to make references valid, and prepares the context + * for mbedtls_gcm_setkey() or mbedtls_gcm_free(). + * + * The function does not bind the GCM context to a particular + * cipher, nor set the key. For this purpose, use + * mbedtls_gcm_setkey(). + * + * \param ctx The GCM context to initialize. This must not be \c NULL. + */ +void mbedtls_gcm_init( mbedtls_gcm_context *ctx, void *aes_ctx ); + +/** + * \brief This function associates a GCM context with a + * cipher algorithm and a key. + * + * \param ctx The GCM context. This must be initialized. + * \param cipher The 128-bit block cipher to use. + * \param key The encryption key. This must be a readable buffer of at + * least \p keybits bits. + * \param keybits The key size in bits. Valid options are: + *
  • 128 bits
  • + *
  • 192 bits
  • + *
  • 256 bits
+ * + * \return \c 0 on success. + * \return A cipher-specific error code on failure. + */ +int mbedtls_gcm_setkey( mbedtls_gcm_context *ctx, + mbedtls_cipher_id_t cipher, + const unsigned char *key, + unsigned int keybits ); + +/** + * \brief This function performs GCM encryption or decryption of a buffer. + * + * \note For encryption, the output buffer can be the same as the + * input buffer. For decryption, the output buffer cannot be + * the same as input buffer. If the buffers overlap, the output + * buffer must trail at least 8 Bytes behind the input buffer. + * + * \warning When this function performs a decryption, it outputs the + * authentication tag and does not verify that the data is + * authentic. You should use this function to perform encryption + * only. For decryption, use mbedtls_gcm_auth_decrypt() instead. + * + * \param ctx The GCM context to use for encryption or decryption. This + * must be initialized. + * \param mode The operation to perform: + * - #MBEDTLS_GCM_ENCRYPT to perform authenticated encryption. + * The ciphertext is written to \p output and the + * authentication tag is written to \p tag. + * - #MBEDTLS_GCM_DECRYPT to perform decryption. + * The plaintext is written to \p output and the + * authentication tag is written to \p tag. + * Note that this mode is not recommended, because it does + * not verify the authenticity of the data. For this reason, + * you should use mbedtls_gcm_auth_decrypt() instead of + * calling this function in decryption mode. + * \param length The length of the input data, which is equal to the length + * of the output data. + * \param iv The initialization vector. This must be a readable buffer of + * at least \p iv_len Bytes. + * \param iv_len The length of the IV. + * \param add The buffer holding the additional data. This must be of at + * least that size in Bytes. + * \param add_len The length of the additional data. + * \param input The buffer holding the input data. If \p length is greater + * than zero, this must be a readable buffer of at least that + * size in Bytes. + * \param output The buffer for holding the output data. If \p length is greater + * than zero, this must be a writable buffer of at least that + * size in Bytes. + * \param tag_len The length of the tag to generate. + * \param tag The buffer for holding the tag. This must be a writable + * buffer of at least \p tag_len Bytes. + * + * \return \c 0 if the encryption or decryption was performed + * successfully. Note that in #MBEDTLS_GCM_DECRYPT mode, + * this does not indicate that the data is authentic. + * \return #MBEDTLS_ERR_GCM_BAD_INPUT if the lengths or pointers are + * not valid or a cipher-specific error code if the encryption + * or decryption failed. + */ +int mbedtls_gcm_crypt_and_tag( mbedtls_gcm_context *ctx, + int mode, + size_t length, + const unsigned char *iv, + size_t iv_len, + const unsigned char *add, + size_t add_len, + const unsigned char *input, + unsigned char *output, + size_t tag_len, + unsigned char *tag ); + +/** + * \brief This function performs a GCM authenticated decryption of a + * buffer. + * + * \note For decryption, the output buffer cannot be the same as + * input buffer. If the buffers overlap, the output buffer + * must trail at least 8 Bytes behind the input buffer. + * + * \param ctx The GCM context. This must be initialized. + * \param length The length of the ciphertext to decrypt, which is also + * the length of the decrypted plaintext. + * \param iv The initialization vector. This must be a readable buffer + * of at least \p iv_len Bytes. + * \param iv_len The length of the IV. + * \param add The buffer holding the additional data. This must be of at + * least that size in Bytes. + * \param add_len The length of the additional data. + * \param tag The buffer holding the tag to verify. This must be a + * readable buffer of at least \p tag_len Bytes. + * \param tag_len The length of the tag to verify. + * \param input The buffer holding the ciphertext. If \p length is greater + * than zero, this must be a readable buffer of at least that + * size. + * \param output The buffer for holding the decrypted plaintext. If \p length + * is greater than zero, this must be a writable buffer of at + * least that size. + * + * \return \c 0 if successful and authenticated. + * \return #MBEDTLS_ERR_GCM_AUTH_FAILED if the tag does not match. + * \return #MBEDTLS_ERR_GCM_BAD_INPUT if the lengths or pointers are + * not valid or a cipher-specific error code if the decryption + * failed. + */ +int mbedtls_gcm_auth_decrypt( mbedtls_gcm_context *ctx, + size_t length, + const unsigned char *iv, + size_t iv_len, + const unsigned char *add, + size_t add_len, + const unsigned char *tag, + size_t tag_len, + const unsigned char *input, + unsigned char *output ); + +/** + * \brief This function starts a GCM encryption or decryption + * operation. + * + * \param ctx The GCM context. This must be initialized. + * \param mode The operation to perform: #MBEDTLS_GCM_ENCRYPT or + * #MBEDTLS_GCM_DECRYPT. + * \param iv The initialization vector. This must be a readable buffer of + * at least \p iv_len Bytes. + * \param iv_len The length of the IV. + * + * \return \c 0 on success. + */ +int mbedtls_gcm_starts( mbedtls_gcm_context *ctx, + int mode, + const unsigned char *iv, + size_t iv_len ); + +/** + * \brief This function feeds an input buffer as associated data + * (authenticated but not encrypted data) in a GCM + * encryption or decryption operation. + * + * Call this function after mbedtls_gcm_starts() to pass + * the associated data. If the associated data is empty, + * you do not need to call this function. You may not + * call this function after calling mbedtls_cipher_update(). + * + * \param ctx The GCM context. This must have been started with + * mbedtls_gcm_starts() and must not have yet received + * any input with mbedtls_gcm_update(). + * \param add The buffer holding the additional data, or \c NULL + * if \p add_len is \c 0. + * \param add_len The length of the additional data. If \c 0, + * \p add may be \c NULL. + * + * \return \c 0 on success. + */ +int mbedtls_gcm_update_ad( mbedtls_gcm_context *ctx, + const unsigned char *add, + size_t add_len ); + +/** + * \brief This function feeds an input buffer into an ongoing GCM + * encryption or decryption operation. + * + * You may call this function zero, one or more times + * to pass successive parts of the input: the plaintext to + * encrypt, or the ciphertext (not including the tag) to + * decrypt. After the last part of the input, call + * mbedtls_gcm_finish(). + * + * This function may produce output in one of the following + * ways: + * - Immediate output: the output length is always equal + * to the input length. + * - Buffered output: the output consists of a whole number + * of 16-byte blocks. If the total input length so far + * (not including associated data) is 16 \* *B* + *A* + * with *A* < 16 then the total output length is 16 \* *B*. + * + * In particular: + * - It is always correct to call this function with + * \p output_size >= \p input_length + 15. + * - If \p input_length is a multiple of 16 for all the calls + * to this function during an operation, then it is + * correct to use \p output_size = \p input_length. + * + * \note For decryption, the output buffer cannot be the same as + * input buffer. If the buffers overlap, the output buffer + * must trail at least 8 Bytes behind the input buffer. + * + * \param ctx The GCM context. This must be initialized. + * \param input The buffer holding the input data. If \p input_length + * is greater than zero, this must be a readable buffer + * of at least \p input_length bytes. + * \param input_length The length of the input data in bytes. + * \param output The buffer for the output data. If \p output_size + * is greater than zero, this must be a writable buffer of + * of at least \p output_size bytes. + * \param output_size The size of the output buffer in bytes. + * See the function description regarding the output size. + * \param output_length On success, \p *output_length contains the actual + * length of the output written in \p output. + * On failure, the content of \p *output_length is + * unspecified. + * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_GCM_BAD_INPUT on failure: + * total input length too long, + * unsupported input/output buffer overlap detected, + * or \p output_size too small. + */ +int mbedtls_gcm_update( mbedtls_gcm_context *ctx, + const unsigned char *input, size_t input_length, + unsigned char *output, size_t output_size, + size_t *output_length ); + +/** + * \brief This function finishes the GCM operation and generates + * the authentication tag. + * + * It wraps up the GCM stream, and generates the + * tag. The tag can have a maximum length of 16 Bytes. + * + * \param ctx The GCM context. This must be initialized. + * \param tag The buffer for holding the tag. This must be a writable + * buffer of at least \p tag_len Bytes. + * \param tag_len The length of the tag to generate. This must be at least + * four. + * \param output The buffer for the final output. + * If \p output_size is nonzero, this must be a writable + * buffer of at least \p output_size bytes. + * \param output_size The size of the \p output buffer in bytes. + * This must be large enough for the output that + * mbedtls_gcm_update() has not produced. In particular: + * - If mbedtls_gcm_update() produces immediate output, + * or if the total input size is a multiple of \c 16, + * then mbedtls_gcm_finish() never produces any output, + * so \p output_size can be \c 0. + * - \p output_size never needs to be more than \c 15. + * \param output_length On success, \p *output_length contains the actual + * length of the output written in \p output. + * On failure, the content of \p *output_length is + * unspecified. + * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_GCM_BAD_INPUT on failure: + * invalid value of \p tag_len, + * or \p output_size too small. + */ +int mbedtls_gcm_finish( mbedtls_gcm_context *ctx, + unsigned char *output, size_t output_size, + size_t *output_length, + unsigned char *tag, size_t tag_len ); + +/** + * \brief This function clears a GCM context and the underlying + * cipher sub-context. + * + * \param ctx The GCM context to clear. If this is \c NULL, the call has + * no effect. Otherwise, this must be initialized. + */ +void mbedtls_gcm_free( mbedtls_gcm_context *ctx ); + + +#ifdef __cplusplus +} +#endif + + +#endif /* gcm.h */ diff --git a/src/components/implementation/simple_nf/ndpi/gcrypt_light.c b/src/components/implementation/simple_nf/ndpi/gcrypt_light.c new file mode 100644 index 0000000000..10cb7cd39d --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/gcrypt_light.c @@ -0,0 +1,375 @@ + +#include +#if !defined(WIN32) && !defined(_MSC_VER) +#include +#endif +#include +#include + +#include "ndpi_api.h" + +#if defined(__GNUC__) && \ + ( defined(__amd64__) || defined(__x86_64__) ) && \ + ! defined(MBEDTLS_HAVE_X86_64) +#define MBEDTLS_HAVE_X86_64 +#define MBEDTLS_AESNI_C +#endif + +/****************************/ +#define MBEDTLS_GCM_C +#define MBEDTLS_CIPHER_C +#define MBEDTLS_AES_C +/****************************/ + +#define mbedtls_calloc ndpi_calloc +#define mbedtls_free ndpi_free + +#include "gcrypt_light.h" + +#define MBEDTLS_CHECK_RETURN_TYPICAL +#define MBEDTLS_INTERNAL_VALIDATE_RET( cond, ret ) do { } while( 0 ) +#define MBEDTLS_INTERNAL_VALIDATE( cond ) do { } while( 0 ) + +#define mbedtls_platform_zeroize(a,b) memset(a,0,b) +#define mbedtls_ct_memcmp(s1,s2,n) memcmp(s1,s2,n) + +#include "gcrypt/common.h" +#include "gcrypt/error.h" +#include "gcrypt/aes.h" +#if defined(MBEDTLS_AESNI_C) +#include "gcrypt/aesni.h" +#endif +#include "gcrypt/cipher.h" +#include "gcrypt/gcm.h" +#include "gcrypt/digest.h" +#include "gcrypt/cipher_wrap.h" + + +#include "gcrypt/aes.c" +#if defined(MBEDTLS_AESNI_C) && defined(MBEDTLS_HAVE_X86_64) +#include "gcrypt/aesni.c" +#endif + +#include "gcrypt/gcm.c" + +#include "gcrypt/cipher.c" +#include "gcrypt/cipher_wrap.c" +#include "gcrypt/digest.c" + +#define MBEDTLS_ERR_MD_ALLOC_FAILED 0x50f0 +#define MBEDTLS_ERR_MD_NOT_SUPPORT 0x50f1 +#define MBEDTLS_ERR_MD_REKEY 0x50f2 +#define MBEDTLS_ERR_MD_DATA_TOO_BIG 0x50f3 +#define MBEDTLS_ERR_CIPHER_BAD_KEY 0x50f4 +#define MBEDTLS_ERR_GCM_ALLOC_FAILED 0x50f5 +#define MBEDTLS_ERR_GCM_NOT_SUPPORT 0x50f6 +#define MBEDTLS_ERR_GCM_MISSING_KEY 0x50f7 +#define MBEDTLS_ERR_AES_MISSING_KEY 0x50f8 +#define MBEDTLS_ERR_NOT_SUPPORT 0x50f9 + +const char *gcry_errstr(gcry_error_t err) { + switch(err) { + case MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED: return "Corruption detected"; + case MBEDTLS_ERR_MD_ALLOC_FAILED: return "MD:Alloc failed"; + case MBEDTLS_ERR_MD_NOT_SUPPORT: return "MD:Not supported"; + case MBEDTLS_ERR_MD_REKEY: return "MD:Key already set"; + case MBEDTLS_ERR_MD_DATA_TOO_BIG: return "MD:Data is too long"; + case MBEDTLS_ERR_AES_BAD_INPUT_DATA: return "AES:Bad input data"; + case MBEDTLS_ERR_AES_MISSING_KEY: return "AES:No key"; + case MBEDTLS_ERR_AES_INVALID_KEY_LENGTH: return "AES:Invalid key length"; + case MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH: return "AES:Invalid input length"; + case MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA: return "CIPHER:Bad input data"; + case MBEDTLS_ERR_CIPHER_ALLOC_FAILED: return "CIPHER:Alloc failed"; + case MBEDTLS_ERR_CIPHER_BAD_KEY: return "CIPHER:Wrong key/iv"; + case MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE: return "CIPHER:Feature unavailable"; + case MBEDTLS_ERR_CIPHER_INVALID_CONTEXT: return "CIPHER:Invalid context"; + case MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED: return "CIPHER:Full block expected"; + case MBEDTLS_ERR_CIPHER_AUTH_FAILED: return "CIPHER:Auth failed"; + case MBEDTLS_ERR_GCM_AUTH_FAILED: return "GCM:Auth failed"; + case MBEDTLS_ERR_GCM_BAD_INPUT: return "GCM:Bad input"; + case MBEDTLS_ERR_GCM_BUFFER_TOO_SMALL: return "GCM:Buffer too small"; + case MBEDTLS_ERR_GCM_ALLOC_FAILED: return "GCM:Alloc failed"; + case MBEDTLS_ERR_GCM_NOT_SUPPORT: return "GCM:Not supported"; + case MBEDTLS_ERR_GCM_MISSING_KEY: return "GCM:No key/siv/auth"; + case MBEDTLS_ERR_NOT_SUPPORT: return "Not supported"; + } + return "Unknown error code"; +} + +char *gpg_strerror_r(gcry_error_t err,char *buf, size_t buflen) { + const char *err_txt = gcry_errstr(err); + strncpy(buf,err_txt,buflen-1); + return buf; +} + +int gcry_control (int ctl,int val) { + if(ctl == GCRYCTL_INITIALIZATION_FINISHED || + (ctl == 1 && val == 0) /* GCRYCTL_INITIALIZATION_FINISHED_P */) + return GPG_ERR_NO_ERROR; + return MBEDTLS_ERR_NOT_SUPPORT; +} + +const char *gcry_check_version(void *unused) { + return "1.8.6internal"; +} + +gcry_error_t gcry_md_open(gcry_md_hd_t *h,int algo,int flags) { + gcry_md_hd_t ctx; + if(!(algo == GCRY_MD_SHA256 && flags == GCRY_MD_FLAG_HMAC)) return MBEDTLS_ERR_MD_NOT_SUPPORT; + ctx = ndpi_calloc(1,sizeof(struct gcry_md_hd)); + if(!ctx) return MBEDTLS_ERR_MD_ALLOC_FAILED; + *h = ctx; + return GPG_ERR_NO_ERROR; +} + +void gcry_md_close(gcry_md_hd_t h) { + if(h) ndpi_free(h); +} + +void gcry_md_reset(gcry_md_hd_t h) { + memset((char *)h, 0, sizeof(*h)); +} + +gcry_error_t gcry_md_setkey(gcry_md_hd_t h,const uint8_t *key,size_t key_len) { + if(h->key_len) return MBEDTLS_ERR_MD_REKEY; + h->key_len = key_len <= sizeof(h->key) ? key_len : sizeof(h->key); + memcpy(h->key,key,h->key_len); + return GPG_ERR_NO_ERROR; +} + +gcry_error_t gcry_md_write(gcry_md_hd_t h,const uint8_t *data,size_t data_len) { + if(h->data_len + data_len > GCRY_MD_BUFF_SIZE) return MBEDTLS_ERR_MD_DATA_TOO_BIG; + memcpy(&h->data_buf[h->data_len],data,data_len); + h->data_len += data_len; + return GPG_ERR_NO_ERROR; +} + +size_t gcry_md_get_algo_dlen(int algo) { + return algo == GCRY_MD_SHA256 ? HMAC_SHA256_DIGEST_SIZE:0; +} + +int gcry_md_get_algo(gcry_md_hd_t h) { + return GCRY_MD_SHA256; +} + +uint8_t *gcry_md_read(gcry_md_hd_t h, int flag) { + hmac_sha256(h->out,h->data_buf,h->data_len,h->key,h->key_len); + return h->out; +} + +/**********************************************************/ + +static int check_valid_algo_mode(gcry_cipher_hd_t h) { + if(!h) return 1; + if(h->algo == GCRY_CIPHER_AES128 && + (h->mode == GCRY_CIPHER_MODE_ECB || h->mode == GCRY_CIPHER_MODE_GCM)) return 0; + return 1; +} + +#define ROUND_SIZE8(a) (((a)+7UL) & ~7UL) + +gcry_error_t gcry_cipher_open (gcry_cipher_hd_t *handle, + int algo, int mode, unsigned int flags) { + +struct gcry_cipher_hd *r = 0; +size_t s_len = ROUND_SIZE8(sizeof(struct gcry_cipher_hd));; + + if(flags || algo != GCRY_CIPHER_AES128 || !( mode == GCRY_CIPHER_MODE_ECB || mode == GCRY_CIPHER_MODE_GCM)) return MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE; + + switch(mode) { + case GCRY_CIPHER_MODE_ECB: + r = ndpi_calloc(1,s_len + sizeof(mbedtls_aes_context)); + if(!r) return MBEDTLS_ERR_CIPHER_ALLOC_FAILED; + r->ctx.ecb = (mbedtls_aes_context *)(r+1); + mbedtls_aes_init(r->ctx.ecb); + break; + case GCRY_CIPHER_MODE_GCM: + { + size_t aes_ctx_size = ROUND_SIZE8(sizeof( mbedtls_aes_context )); + size_t gcm_ctx_size = ROUND_SIZE8(sizeof( mbedtls_gcm_context )); + + r = ndpi_calloc(1,s_len + gcm_ctx_size + aes_ctx_size); + if(!r) return MBEDTLS_ERR_CIPHER_ALLOC_FAILED; + r->ctx.gcm = (mbedtls_gcm_context *)(r+1); + mbedtls_gcm_init(r->ctx.gcm,(void *)(((char *)(r+1)) + gcm_ctx_size)); + } + break; + default: + return MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE; + } + r->algo = algo; + r->mode = mode; + *handle = r; + return GPG_ERR_NO_ERROR; +} + +void gcry_cipher_close (gcry_cipher_hd_t h) { + if(h && !check_valid_algo_mode(h)) { + switch(h->mode) { + case GCRY_CIPHER_MODE_ECB: + mbedtls_aes_free(h->ctx.ecb); + break; + case GCRY_CIPHER_MODE_GCM: + mbedtls_gcm_free(h->ctx.gcm); + break; + } + ndpi_free(h); + } +} + +gcry_error_t gcry_cipher_ctl (gcry_cipher_hd_t h, int cmd, void *data, size_t len) { + return MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE; +} + +gcry_error_t gcry_cipher_reset (gcry_cipher_hd_t h) { + + gcry_error_t err = MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE; + if(check_valid_algo_mode(h)) return err; + h->authlen = 0; h->taglen = 0; h->ivlen = 0; + h->s_auth = 0; h->s_iv = 0; h->s_crypt_ok = 0; + memset((char *)h->iv,0,sizeof(h->iv)); + memset((char *)h->auth,0,sizeof(h->auth)); + memset((char *)h->tag,0,sizeof(h->tag)); + switch(h->mode) { + case GCRY_CIPHER_MODE_ECB: + break; + case GCRY_CIPHER_MODE_GCM: + mbedtls_cipher_reset(&h->ctx.gcm->cipher_ctx); + break; + default: + return err; + } + return 0; +} + + +gcry_error_t gcry_cipher_setkey (gcry_cipher_hd_t h, const void *key, size_t keylen) { + gcry_error_t r = MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA; + if(check_valid_algo_mode(h)) return MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE; + if( h->s_key ) return MBEDTLS_ERR_CIPHER_BAD_KEY; + if( keylen != gcry_cipher_get_algo_keylen(h->algo)) return MBEDTLS_ERR_CIPHER_BAD_KEY; + switch(h->mode) { + case GCRY_CIPHER_MODE_ECB: + r = mbedtls_aes_setkey_enc( h->ctx.ecb, key, keylen*8 ); + break; + case GCRY_CIPHER_MODE_GCM: + r = mbedtls_gcm_setkey( h->ctx.gcm, MBEDTLS_CIPHER_ID_AES, key, keylen*8 ); + break; + } + if(!r) { + h->s_key = 1; + h->keylen = keylen; + } + return r; +} + +gcry_error_t gcry_cipher_setiv (gcry_cipher_hd_t h, const void *iv, size_t ivlen) { + if(check_valid_algo_mode(h)) return MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE; + if(h->s_iv) return MBEDTLS_ERR_CIPHER_BAD_KEY; + switch(h->mode) { + case GCRY_CIPHER_MODE_GCM: + if(ivlen != 12) return MBEDTLS_ERR_CIPHER_BAD_KEY; + h->s_iv = 1; + h->ivlen = ivlen; + memcpy( h->iv, iv, ivlen ); + return 0; + } + return MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE; +} + +gcry_error_t gcry_cipher_authenticate (gcry_cipher_hd_t h, const void *abuf, size_t abuflen) { + if(check_valid_algo_mode(h)) return MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE; + if(h->s_auth) return MBEDTLS_ERR_CIPHER_BAD_KEY; + switch(h->mode) { + case GCRY_CIPHER_MODE_GCM: + if(abuflen > sizeof(h->auth)) return MBEDTLS_ERR_CIPHER_BAD_KEY; + h->s_auth = 1; + h->authlen = abuflen; + memcpy(h->auth,abuf,abuflen); + return 0; + } + return MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE; +} + +gcry_error_t gcry_cipher_checktag (gcry_cipher_hd_t h, const void *intag, size_t taglen) { + if(check_valid_algo_mode(h)) return MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE; + switch(h->mode) { + case GCRY_CIPHER_MODE_GCM: + if(h->s_crypt_ok && h->taglen == taglen) { + size_t i; + int diff; + const uint8_t *ctag = intag; + for( diff = 0, i = 0; i < taglen; i++ ) + diff |= ctag[i] ^ h->tag[i]; + if(!diff) return 0; + } + return MBEDTLS_ERR_GCM_AUTH_FAILED; + } + return MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE; +} + +size_t gcry_cipher_get_algo_keylen (int algo) { + switch(algo) { + case GCRY_CIPHER_AES128: return 16; + default: return 0; + } + return 0; +} + +static gcry_error_t _gcry_cipher_crypt (gcry_cipher_hd_t h, + void *out, size_t outsize, + const void *in, size_t inlen,int encrypt) { + uint8_t *src = NULL; + size_t srclen = 0; + gcry_error_t rv = MBEDTLS_ERR_GCM_BAD_INPUT; + + if(check_valid_algo_mode(h)) return MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE; + if(!inlen && !outsize) return MBEDTLS_ERR_GCM_BAD_INPUT; + if(!in && !inlen) { + src = ndpi_malloc(outsize); + if(!src) return MBEDTLS_ERR_GCM_ALLOC_FAILED; + srclen = outsize; + memcpy(src,out,outsize); + } else { + if(inlen != outsize) return MBEDTLS_ERR_GCM_BAD_INPUT; + } + switch(h->mode) { + case GCRY_CIPHER_MODE_ECB: + if(!encrypt) return MBEDTLS_ERR_GCM_NOT_SUPPORT; + if(!( h->s_key && !h->s_crypt_ok)) return MBEDTLS_ERR_AES_MISSING_KEY; + rv = mbedtls_aes_crypt_ecb(h->ctx.ecb, MBEDTLS_AES_ENCRYPT, + src ? src:in, out); + break; + case GCRY_CIPHER_MODE_GCM: + if(encrypt) return MBEDTLS_ERR_GCM_NOT_SUPPORT; + if(!( h->s_key && h->s_auth && h->s_iv && !h->s_crypt_ok)) return MBEDTLS_ERR_GCM_MISSING_KEY; + h->taglen = 16; + rv = mbedtls_gcm_crypt_and_tag(h->ctx.gcm, + MBEDTLS_GCM_DECRYPT, + src ? srclen:outsize, + h->iv,h->ivlen, + h->auth,h->authlen, + src ? src:in,out, + h->taglen, h->tag); + break; + } + if(!rv) h->s_crypt_ok = 1; + + if(src) ndpi_free(src); + return rv; +} + + +gcry_error_t gcry_cipher_encrypt (gcry_cipher_hd_t h, + void *out, size_t outsize, + const void *in, size_t inlen) { + return _gcry_cipher_crypt(h,out,outsize,in,inlen,1); +} + +gcry_error_t gcry_cipher_decrypt (gcry_cipher_hd_t h, + void *out, size_t outsize, + const void *in, size_t inlen) { + return _gcry_cipher_crypt(h,out,outsize,in,inlen,0); +} + +/* vim: set ts=4 sw=4 et: */ diff --git a/src/components/implementation/simple_nf/ndpi/gcrypt_light.h b/src/components/implementation/simple_nf/ndpi/gcrypt_light.h new file mode 100644 index 0000000000..6d6a115ee6 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/gcrypt_light.h @@ -0,0 +1,87 @@ + +#ifndef GCRY_LIGHT_H +#define GCRY_LIGHT_H + +#define HMAC_SHA256_DIGEST_SIZE 32 /* Same as SHA-256's output size. */ +#define SHA256_DIGEST_SIZE 32 +#define GCRY_MD_BUFF_SIZE 256 + +#define GCRY_CIPHER_AES128 7 +#define GCRY_CIPHER_AES256 8 +#define GCRY_CIPHER_MODE_ECB 1 +#define GCRY_CIPHER_MODE_GCM 8 + +#define GCRY_MD_SHA256 8 +#define GCRY_MD_FLAG_HMAC 2 +#define GPG_ERR_NO_ERROR 0 +#define GPG_ERR_KEY -1 +#define GPG_ERR_ANY -2 +#define GPG_ERR_INV_ARG -3 +#define GCRYCTL_INITIALIZATION_FINISHED_P 1,0 +#define GCRYCTL_INITIALIZATION_FINISHED 2 +#define GCRYCTL_RESET 3 + +#define GCRY_AES_KEY_SIZE 32 +#define GCRY_AES_AUTH_SIZE 256 +#define GCRY_AES_TAG_SIZE 32 +#define GCRY_AES_IV_SIZE 12 + +typedef int gcry_error_t; +typedef gcry_error_t gpg_error_t; + +struct gcry_md_hd { + uint8_t key[64],out[HMAC_SHA256_DIGEST_SIZE]; + uint8_t data_buf[GCRY_MD_BUFF_SIZE]; + uint32_t key_len; + uint32_t data_len; +}; +typedef struct gcry_md_hd * gcry_md_hd_t; + +struct gcry_cipher_hd { + int algo,mode; + size_t keylen,authlen,taglen,ivlen; + uint8_t s_key:1,s_auth:1,s_iv:1,s_crypt_ok:1; + uint8_t auth[GCRY_AES_AUTH_SIZE]; + uint8_t tag[GCRY_AES_TAG_SIZE]; + uint8_t iv[GCRY_AES_IV_SIZE]; + union { + struct mbedtls_aes_context *ecb; + struct mbedtls_gcm_context *gcm; + } ctx; +}; + +typedef struct gcry_cipher_hd * gcry_cipher_hd_t; + +int gcry_control (int, int); +const char *gcry_check_version(void *); +char *gpg_strerror_r(gcry_error_t, char *, size_t); + +gcry_error_t gcry_md_open (gcry_md_hd_t *h, int algo, int flags); +void gcry_md_close (gcry_md_hd_t h); +void gcry_md_reset (gcry_md_hd_t h); + +gcry_error_t gcry_md_setkey (gcry_md_hd_t h, const uint8_t *key, size_t key_len); +gcry_error_t gcry_md_write (gcry_md_hd_t h, const uint8_t *data, size_t data_len); +uint8_t *gcry_md_read (gcry_md_hd_t h, int flag); + +size_t gcry_md_get_algo_dlen (int algo); +int gcry_md_get_algo (gcry_md_hd_t h); + +gcry_error_t gcry_cipher_open (gcry_cipher_hd_t *handle, int algo, int mode, unsigned int flags); +void gcry_cipher_close (gcry_cipher_hd_t h); +gcry_error_t gcry_cipher_ctl (gcry_cipher_hd_t h, int cmd, void *data, size_t len); +gcry_error_t gcry_cipher_reset (gcry_cipher_hd_t h); +gcry_error_t gcry_cipher_setiv (gcry_cipher_hd_t h, const void *iv, size_t ivlen); +gcry_error_t gcry_cipher_setkey (gcry_cipher_hd_t h, const void *key, size_t keylen); +gcry_error_t gcry_cipher_checktag (gcry_cipher_hd_t h, const void *intag, size_t taglen); +gcry_error_t gcry_cipher_authenticate (gcry_cipher_hd_t h, const void *abuf, size_t abuflen); +gcry_error_t gcry_cipher_encrypt (gcry_cipher_hd_t h, void *out, size_t outsize, + const void *in, size_t inlen); +gcry_error_t gcry_cipher_decrypt (gcry_cipher_hd_t h, void *out, size_t outsize, + const void *in, size_t inlen); + +size_t gcry_cipher_get_algo_keylen (int algo); + +#endif /* GCRY_LIGHT_H */ + +/* vim: set ts=4 sw=4 et foldmethod=marker foldmarker={{{{,}}}}: */ diff --git a/src/components/implementation/simple_nf/ndpi/genshin_impact.c b/src/components/implementation/simple_nf/ndpi/genshin_impact.c new file mode 100644 index 0000000000..e837747a4c --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/genshin_impact.c @@ -0,0 +1,86 @@ +/* + * genshin_impact.c + * + * Copyright (C) 2012-22 - ntop.org + * + * This module is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This module is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License. + * If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_GENSHIN_IMPACT + +#include "ndpi_api.h" + + +static void ndpi_int_genshin_impact_add_connection( + struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_GENSHIN_IMPACT, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + +static void ndpi_search_genshin_impact(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct * packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search genshin-impact\n"); + + if (packet->tcp != NULL && packet->payload_packet_len >= 18) + { + u_int32_t pdu_len = ntohl(get_u_int32_t(packet->payload, 1)); + + if (packet->payload[0] == 0x01 && pdu_len == packet->payload_packet_len && + (packet->payload[5] == 0x01 || packet->payload[5] == 0x07) && + ntohs(get_u_int16_t(packet->payload, 16)) == 0x4da6) + { + NDPI_LOG_INFO(ndpi_struct, "found genshin-impact (TCP)\n"); + ndpi_int_genshin_impact_add_connection(ndpi_struct, flow); + return; + } + } + else if (packet->udp != NULL) + { + if (flow->packet_counter == 1 && packet->payload_packet_len >= 20 && + ntohl(get_u_int32_t(packet->payload, 0)) == 0x000000FF && + ntohl(get_u_int32_t(packet->payload, 4)) == 0x00000000 && + ntohl(get_u_int32_t(packet->payload, 12)) == 0x499602D2 && + ntohl(get_u_int32_t(packet->payload, 16)) == 0xFFFFFFFF) + { + NDPI_LOG_INFO(ndpi_struct, "found genshin-impact (UDP)\n"); + ndpi_int_genshin_impact_add_connection(ndpi_struct, flow); + return; + } + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + + +/* ***************************************************************** */ + +void init_genshin_impact_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("GenshinImpact", + ndpi_struct, *id, + NDPI_PROTOCOL_GENSHIN_IMPACT, + ndpi_search_genshin_impact, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/git.c b/src/components/implementation/simple_nf/ndpi/git.c new file mode 100644 index 0000000000..06038febd0 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/git.c @@ -0,0 +1,86 @@ +/* + * git.c + * + * Copyright (C) 2012-22 - ntop.org + * + * This module is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This module is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License. + * If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_GIT + +#include "ndpi_api.h" + + +#define GIT_PORT 9418 + +static void ndpi_search_git(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct * packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search Git\n"); + + if((packet->tcp != NULL) && (packet->payload_packet_len > 4)) { + if((ntohs(packet->tcp->source) == GIT_PORT) + || (ntohs(packet->tcp->dest) == GIT_PORT)) { + const u_int8_t * pp = packet->payload; + u_int16_t payload_len = packet->payload_packet_len; + u_int8_t found_git = 1; + u_int16_t offset = 0; + + while((offset+4) < payload_len) { + char len[5]; + u_int32_t git_pkt_len; + + memcpy(&len, &pp[offset], 4), len[4] = 0; + if(sscanf(len, "%x", &git_pkt_len) != 1) { + found_git = 0; + break; + } + + if((payload_len < git_pkt_len) || (git_pkt_len == 0 /* Bad */)) { + found_git = 0; + break; + } else + offset += git_pkt_len, payload_len -= git_pkt_len; + } + + if(found_git) { + NDPI_LOG_INFO(ndpi_struct, "found Git\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_GIT, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } + } + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + + +/* ***************************************************************** */ + +void init_git_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("Git", ndpi_struct, *id, + NDPI_PROTOCOL_GIT, + ndpi_search_git, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/gnutella.c b/src/components/implementation/simple_nf/ndpi/gnutella.c new file mode 100644 index 0000000000..13b8d99c7b --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/gnutella.c @@ -0,0 +1,328 @@ +/* + * gnutella.c + * + * Copyright (C) 2009-11 - ipoque GmbH + * Copyright (C) 2011-22 - ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_GNUTELLA + +#include "ndpi_api.h" + + +static void ndpi_int_gnutella_add_connection(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, + ndpi_confidence_t confidence) +{ + NDPI_LOG_INFO(ndpi_struct, "found GNUTELLA\n"); + ndpi_set_detected_protocol_keeping_master(ndpi_struct, flow, NDPI_PROTOCOL_GNUTELLA, + confidence); +} + +static void ndpi_search_gnutella(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + u_int16_t c; + + NDPI_LOG_DBG(ndpi_struct, "search GNUTELLA\n"); + + /* skip packets without payload */ + if (packet->payload_packet_len < 2) { + return; + } + if (packet->tcp != NULL) { + /* this case works asymmetrically */ + if (packet->payload_packet_len > 10 && memcmp(packet->payload, "GNUTELLA/", 9) == 0) { + ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return; + } + /* this case works asymmetrically */ + if (packet->payload_packet_len > 17 && memcmp(packet->payload, "GNUTELLA CONNECT/", 17) == 0) { + ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return; + } + + if (packet->payload_packet_len > 50 && ((memcmp(packet->payload, "GET /get/", 9) == 0) + || (memcmp(packet->payload, "GET /uri-res/", 13) == 0) + )) { + ndpi_parse_packet_line_info(ndpi_struct, flow); + for (c = 0; c < packet->parsed_lines; c++) { + if ((packet->line[c].len > 19 && memcmp(packet->line[c].ptr, "User-Agent: Gnutella", 20) == 0) + || (packet->line[c].len > 10 && memcmp(packet->line[c].ptr, "X-Gnutella-", 11) == 0) + || (packet->line[c].len > 7 && memcmp(packet->line[c].ptr, "X-Queue:", 8) == 0) + || (packet->line[c].len > 36 && memcmp(packet->line[c].ptr, + "Content-Type: application/x-gnutella-", 37) == 0)) { + ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return; + } + } + } + if (packet->payload_packet_len > 50 && ((memcmp(packet->payload, "GET / HTTP", 10) == 0))) { + ndpi_parse_packet_line_info(ndpi_struct, flow); + if ((packet->user_agent_line.ptr != NULL && packet->user_agent_line.len > 15 + && memcmp(packet->user_agent_line.ptr, "BearShare Lite ", 15) == 0) + || (packet->accept_line.ptr != NULL && packet->accept_line.len > 24 + && memcmp(packet->accept_line.ptr, "application n/x-gnutella", 24) == 0)) { + ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + } + + } + /* haven't found this pattern in any trace. */ + if (packet->payload_packet_len > 50 && ((memcmp(packet->payload, "GET /get/", 9) == 0) + || (memcmp(packet->payload, "GET /uri-res/", 13) == 0))) { + c = 8; + while (c < (packet->payload_packet_len - 9)) { + if (packet->payload[c] == '?') + break; + c++; + } + + if (c < (packet->payload_packet_len - 9) && memcmp(&packet->payload[c], "urn:sha1:", 9) == 0) { + NDPI_LOG_DBG2(ndpi_struct, "detected GET /get/ or GET /uri-res/\n"); + ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + } + + } + + /* answer to this packet is HTTP/1.1 ..... Content-Type: application/x-gnutella-packets, + * it is searched in the upper paragraph. */ + if (packet->payload_packet_len > 30 && memcmp(packet->payload, "HEAD /gnutella/push-proxy?", 26) == 0) { + NDPI_LOG_DBG2(ndpi_struct, "detected HEAD /gnutella/push-proxy?\n"); + ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return; + } + /* haven't found any trace with this pattern */ + if (packet->payload_packet_len == 46 + && memcmp(packet->payload, "\x50\x55\x53\x48\x20\x67\x75\x69\x64\x3a", 10) == 0) { + NDPI_LOG_DBG2(ndpi_struct, + "detected \x50\x55\x53\x48\x20\x67\x75\x69\x64\x3a\n"); + ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return; + } + /* haven't found any trace with this pattern */ + if (packet->payload_packet_len > 250 && memcmp(packet->payload, "GET /gnutella/", 14) == 0) + //PATTERN IS :: GET /gnutella/tigertree/v3?urn:tree:tiger/: + { + const u_int16_t end = packet->payload_packet_len - 3; + + c = 13; + while (c < end) { + if ((memcmp(&packet->payload[14], "tigertree/", 10) == 0) + || (end - c > 18 && memcmp(&packet->payload[c], "\r\nUser-Agent: Foxy", 18) == 0) + || (end - c > 44 + && memcmp(&packet->payload[c], + "\r\nAccept: application/tigertree-breadthfirst", + 44) == 0) || (end - c > 10 && memcmp(&packet->payload[c], "\r\nX-Queue:", 10) == 0) + || (end - c > 13 && memcmp(&packet->payload[c], "\r\nX-Features:", 13) == 0)) { + + NDPI_LOG_DBG2(ndpi_struct, "FOXY :: GNUTELLA GET 2 DETECTED\n"); + ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return; + } + + c++; + } + } + /* haven't found any trace with this pattern */ + if (packet->payload_packet_len > 1 && packet->payload[packet->payload_packet_len - 1] == 0x0a + && packet->payload[packet->payload_packet_len - 2] == 0x0a) { + if (packet->payload_packet_len > 3 && memcmp(packet->payload, "GIV", 3) == 0) { + NDPI_LOG_DBG2(ndpi_struct, "MORPHEUS GIV DETECTED\n"); + /* Not Excluding the flow now.. We shall Check the next Packet too for Gnutella Patterns */ + return; + } + } + /* might be super tricky new ssl gnutella transmission, but the certificate is strange... */ + if (packet->payload_packet_len == 46 && get_u_int32_t(packet->payload, 0) == htonl(0x802c0103) && + get_u_int32_t(packet->payload, 4) == htonl(0x01000300) && get_u_int32_t(packet->payload, 8) == htonl(0x00002000) && + get_u_int16_t(packet->payload, 12) == htons(0x0034)) { + NDPI_LOG_DBG2(ndpi_struct, "detected gnutella len == 46\n"); + ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return; + } + if (packet->payload_packet_len == 49 && + memcmp(packet->payload, "\x80\x2f\x01\x03\x01\x00\x06\x00\x00\x00\x20\x00\x00\x34\x00\x00\xff\x4d\x6c", + 19) == 0) { + NDPI_LOG_DBG2(ndpi_struct, "detected gnutella len == 49\n"); + ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return; + } + if (packet->payload_packet_len == 89 && memcmp(&packet->payload[43], "\x20\x4d\x6c", 3) == 0 && + memcmp(packet->payload, "\x16\x03\x01\x00\x54\x01\x00\x00\x50\x03\x01\x4d\x6c", 13) == 0 && + memcmp(&packet->payload[76], "\x00\x02\x00\x34\x01\x00\x00\x05", 8) == 0) { + NDPI_LOG_DBG2(ndpi_struct, + "detected gnutella asymmetrically len == 388.\n"); + ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return; + } else if (packet->payload_packet_len == 82) { + if (get_u_int32_t(packet->payload, 0) == htonl(0x16030100) + && get_u_int32_t(packet->payload, 4) == htonl(0x4d010000) + && get_u_int16_t(packet->payload, 8) == htons(0x4903) + && get_u_int16_t(packet->payload, 76) == htons(0x0002) + && get_u_int32_t(packet->payload, 78) == htonl(0x00340100)) { + NDPI_LOG_DBG2(ndpi_struct, "detected len == 82\n"); + ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return; + } + } + } else if (packet->udp != NULL) { + /* Check for Mojito-DHT encapsulated gnutella (gtk-gnutella). */ + if (packet->payload_packet_len >= 28 && + ntohl(get_u_int32_t(packet->payload, 24)) == 0x47544b47 /* GTKG */) + { + u_int32_t gnutella_payload_len = le32toh(get_u_int32_t(packet->payload, 19)); + + if (gnutella_payload_len == (u_int32_t)packet->payload_packet_len - 23) + { + NDPI_LOG_DBG2(ndpi_struct, "detected mojito-dht/gnutella udp\n"); + ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return; + } + } + + /* observations: + * all the following patterns send out many packets which are the only ones of their flows, + * often on the very beginning of the traces, or flows with many packets in one direction only. + * but then suddenly, one gets an answer as you can see in netpeker-gnutella-rpc.pcap packet 11483. + * Maybe gnutella tries to send out keys? + */ + if (packet->payload_packet_len == 23 && packet->payload[15] == 0x00 + && packet->payload[16] == 0x41 && packet->payload[17] == 0x01 + && packet->payload[18] == 0x00 && packet->payload[19] == 0x00 + && packet->payload[20] == 0x00 && packet->payload[21] == 0x00 && packet->payload[22] == 0x00) { + NDPI_LOG_DBG2(ndpi_struct, "detected gnutella udp, len = 23\n"); + ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + + return; + } + if (packet->payload_packet_len == 35 && packet->payload[25] == 0x49 + && packet->payload[26] == 0x50 && packet->payload[27] == 0x40 + && packet->payload[28] == 0x83 && packet->payload[29] == 0x53 + && packet->payload[30] == 0x43 && packet->payload[31] == 0x50 && packet->payload[32] == 0x41) { + NDPI_LOG_DBG2(ndpi_struct, "detected gnutella udp, len = 35\n"); + ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return; + } + if (packet->payload_packet_len == 32 + && (memcmp(&packet->payload[16], "\x31\x01\x00\x09\x00\x00\x00\x4c\x49\x4d\x45", 11) == 0)) { + NDPI_LOG_DBG2(ndpi_struct, "detected gnutella udp, len = 32\n"); + ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return; + } + if (packet->payload_packet_len == 34 && (memcmp(&packet->payload[25], "SCP@", 4) == 0) + && (memcmp(&packet->payload[30], "DNA@", 4) == 0)) { + NDPI_LOG_DBG2(ndpi_struct, "detected gnutella udp, len = 34\n"); + ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return; + } + if ((packet->payload_packet_len == 73 || packet->payload_packet_len == 96) + && memcmp(&packet->payload[32], "urn:sha1:", 9) == 0) { + NDPI_LOG_DBG2(ndpi_struct, "detected gnutella udp, len = 73,96\n"); + ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return; + } + + if (packet->payload_packet_len >= 3 && memcmp(packet->payload, "GND", 3) == 0) { + if ((packet->payload_packet_len == 8 && (memcmp(&packet->payload[6], "\x01\x00", 2) == 0)) + || (packet->payload_packet_len == 11 && (memcmp(&packet->payload[6], "\x01\x01\x08\x50\x49", 5) + == 0)) || (packet->payload_packet_len == 17 + && + (memcmp + (&packet->payload[6], "\x01\x01\x4c\x05\x50", + 5) == 0)) + || (packet->payload_packet_len == 28 + && (memcmp(&packet->payload[6], "\x01\x01\x54\x0f\x51\x4b\x52\x50\x06\x52", 10) == 0)) + || (packet->payload_packet_len == 41 + && (memcmp(&packet->payload[6], "\x01\x01\x5c\x1b\x50\x55\x53\x48\x48\x10", 10) == 0)) + || (packet->payload_packet_len > 200 && packet->payload_packet_len < 300 && packet->payload[3] == 0x03) + || (packet->payload_packet_len > 300 && (packet->payload[3] == 0x01 || packet->payload[3] == 0x03))) { + NDPI_LOG_DBG2(ndpi_struct, "detected gnutella udp, GND\n"); + ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return; + } + } + + if ((packet->payload_packet_len == 32) + && memcmp(&packet->payload[16], "\x31\x01\x00\x09\x00\x00\x00", 7) == 0) { + NDPI_LOG_DBG2(ndpi_struct, "detected gnutella udp, len = 32 ii\n"); + ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return; + } + if ((packet->payload_packet_len == 23) + && memcmp(&packet->payload[16], "\x00\x01\x00\x00\x00\x00\x00", 7) == 0) { + NDPI_LOG_DBG2(ndpi_struct, "detected gnutella udp, len = 23 ii\n"); + ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return; + } + } + //neonet detection follows + + /* haven't found any trace with this pattern */ + if (packet->tcp != NULL && ntohs(packet->tcp->source) >= 1024 && ntohs(packet->tcp->dest) >= 1024) { + if (flow->l4.tcp.gnutella_stage == 0) { + if (flow->packet_counter == 1 + && (packet->payload_packet_len == 11 + || packet->payload_packet_len == 33 || packet->payload_packet_len == 37)) { + flow->l4.tcp.gnutella_msg_id[0] = packet->payload[4]; + flow->l4.tcp.gnutella_msg_id[1] = packet->payload[6]; + flow->l4.tcp.gnutella_msg_id[2] = packet->payload[8]; + flow->l4.tcp.gnutella_stage = 1 + packet->packet_direction; + return; + } + } else if (flow->l4.tcp.gnutella_stage == 1 + packet->packet_direction) { + if (flow->packet_counter == 2 && (packet->payload_packet_len == 33 || packet->payload_packet_len == 22) + && flow->l4.tcp.gnutella_msg_id[0] == packet->payload[0] + && flow->l4.tcp.gnutella_msg_id[1] == packet->payload[2] + && flow->l4.tcp.gnutella_msg_id[2] == packet->payload[4]) { + NDPI_LOG_DBG2(ndpi_struct, "GNUTELLA DETECTED due to message ID match (NEONet protocol)\n"); + ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return; + } + } else if (flow->l4.tcp.gnutella_stage == 2 - packet->packet_direction) { + if (flow->packet_counter == 2 && (packet->payload_packet_len == 10 || packet->payload_packet_len == 75) + && flow->l4.tcp.gnutella_msg_id[0] == packet->payload[0] + && flow->l4.tcp.gnutella_msg_id[1] == packet->payload[2] + && flow->l4.tcp.gnutella_msg_id[2] == packet->payload[4]) { + NDPI_LOG_DBG2(ndpi_struct, "GNUTELLA DETECTED due to message ID match (NEONet protocol)\n"); + ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return; + } + } + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + + +void init_gnutella_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("Gnutella", ndpi_struct, *id, + NDPI_PROTOCOL_GNUTELLA, + ndpi_search_gnutella, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} + diff --git a/src/components/implementation/simple_nf/ndpi/gtp.c b/src/components/implementation/simple_nf/ndpi/gtp.c new file mode 100644 index 0000000000..a0c461774f --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/gtp.c @@ -0,0 +1,141 @@ +/* + * gtp.c + * + * Copyright (C) 2011-22 - ntop.org + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_GTP + +#include "ndpi_api.h" + + +/* This code handles: GTP-U (port 2152), GTP-C (v1 and v2; port 2123) and GTP-PRIME + (port 3386). + It should be fine to ignore v0, since it should not be used anymore. + + Message length checks and basic headers are not uniform across these protocols. + + For GTPv2 (GTP-C v2), see TS 29.274 Sec. 5.5.1: + "Octets 3 to 4 represent the Message Length field. This field shall indicate + the length of the message in octets excluding the mandatory part of the GTP-C + header (the first 4 octets). The TEID (if present) and the Sequence Number + shall be included in the length count." + + For GTP-PRIME TS 32.295 Sec. 6.1.1 + "The Length indicates the length of payload (number of octets after the GTP' + header). The Sequence Number of the packet is part of the GTP' header." + + For GTPv1 (GTP-U and GTP-C v1) TS TS 29.060 Sec. 6 + "Length: This field indicates the length in octets of the payload, i.e. the + rest of the packet following the mandatory part of the GTP header (that is + the first 8 octets). The Sequence Number, the N-PDU Number or any Extension + headers shall be considered to be part of the payload, i.e. included in the + length count." + +*/ + +#define HEADER_LEN_GTP_U 8 +#define HEADER_LEN_GTP_C_V1 8 +#define HEADER_LEN_GTP_C_V2 4 +#define HEADER_LEN_GTP_PRIME 6 + + +/* Common header for all GTP types */ +struct gtp_header_generic { + u_int8_t flags, message_type; + u_int16_t message_len; +}; + +static void ndpi_check_gtp(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + u_int32_t payload_len = packet->payload_packet_len; + + if((packet->udp != NULL) && (payload_len > sizeof(struct gtp_header_generic))) { + u_int32_t gtp_u = ntohs(2152); + u_int32_t gtp_c = ntohs(2123); + u_int32_t gtp_prime = ntohs(3386); + + struct gtp_header_generic *gtp = (struct gtp_header_generic *)packet->payload; + u_int8_t version = (gtp->flags & 0xE0) >> 5; + u_int8_t pt = (gtp->flags & 0x10) >> 4; + u_int16_t message_len = ntohs(gtp->message_len); + + if((packet->udp->source == gtp_u) || (packet->udp->dest == gtp_u)) { + if((version == 1) && (pt == 1) && + (payload_len >= HEADER_LEN_GTP_U) && + (message_len <= (payload_len - HEADER_LEN_GTP_U))) { + NDPI_LOG_INFO(ndpi_struct, "found gtp-u\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_GTP_U, NDPI_PROTOCOL_GTP, NDPI_CONFIDENCE_DPI); + return; + } + } + if((packet->udp->source == gtp_c) || (packet->udp->dest == gtp_c)) { + if(((version == 1) && + (payload_len >= HEADER_LEN_GTP_C_V1) && + (message_len == (payload_len - HEADER_LEN_GTP_C_V1)) && + (message_len >= 4 * (!!(gtp->flags & 0x07))) && + (gtp->message_type > 0 && gtp->message_type <= 129)) || /* Loose check based on TS 29.060 7.1 */ + ((version == 2) && + /* payload_len is always valid, because HEADER_LEN_GTP_C_V2 == sizeof(struct gtp_header_generic) */ + (message_len == (payload_len - HEADER_LEN_GTP_C_V2)))) { + NDPI_LOG_INFO(ndpi_struct, "found gtp-c\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_GTP_C, NDPI_PROTOCOL_GTP, NDPI_CONFIDENCE_DPI); + return; + } + } + if((packet->udp->source == gtp_prime) || (packet->udp->dest == gtp_prime)) { + if((pt == 0) && + ((gtp->flags & 0x0E) >> 1 == 0x7) && /* Spare bits */ + (payload_len >= HEADER_LEN_GTP_PRIME) && + (message_len <= (payload_len - HEADER_LEN_GTP_PRIME)) && + ((gtp->message_type > 0 && gtp->message_type <= 7) || /* Check based on TS 32.295 6.2.1 */ + gtp->message_type == 240 || gtp->message_type == 241)) { + NDPI_LOG_INFO(ndpi_struct, "found gtp-prime\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_GTP_PRIME, NDPI_PROTOCOL_GTP, NDPI_CONFIDENCE_DPI); + return; + } + } + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; +} + +static void ndpi_search_gtp(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + NDPI_LOG_DBG(ndpi_struct, "search gtp\n"); + + /* skip marked packets */ + if(flow->detected_protocol_stack[0] != NDPI_PROTOCOL_GTP) + ndpi_check_gtp(ndpi_struct, flow); +} + + +void init_gtp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("GTP", ndpi_struct, *id, + NDPI_PROTOCOL_GTP, + ndpi_search_gtp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/guildwars.c b/src/components/implementation/simple_nf/ndpi/guildwars.c new file mode 100644 index 0000000000..86ca00a6d2 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/guildwars.c @@ -0,0 +1,78 @@ +/* + * guildwars.c + * + * Copyright (C) 2009-11 - ipoque GmbH + * Copyright (C) 2011-22 - ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_GUILDWARS + +#include "ndpi_api.h" + + +static void ndpi_int_guildwars_add_connection(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_GUILDWARS, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + +static void ndpi_search_guildwars_tcp(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search guildwars\n"); + + if (packet->payload_packet_len == 64 && get_u_int16_t(packet->payload, 1) == ntohs(0x050c) + && memcmp(&packet->payload[50], "@2&P", 4) == 0) { + NDPI_LOG_INFO(ndpi_struct, "found GuildWars version 29.350\n"); + ndpi_int_guildwars_add_connection(ndpi_struct, flow); + return; + } + if (packet->payload_packet_len == 16 && get_u_int16_t(packet->payload, 1) == ntohs(0x040c) + && get_u_int16_t(packet->payload, 4) == ntohs(0xa672) + && packet->payload[8] == 0x01 && packet->payload[12] == 0x04) { + NDPI_LOG_INFO(ndpi_struct, "found GuildWars version 29.350\n"); + ndpi_int_guildwars_add_connection(ndpi_struct, flow); + return; + } + if (packet->payload_packet_len == 21 && get_u_int16_t(packet->payload, 0) == ntohs(0x0100) + && get_u_int32_t(packet->payload, 5) == ntohl(0xf1001000) + && packet->payload[9] == 0x01) { + NDPI_LOG_INFO(ndpi_struct, "found GuildWars version 216.107.245.50\n"); + ndpi_int_guildwars_add_connection(ndpi_struct, flow); + return; + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + + +void init_guildwars_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("Guildwars", ndpi_struct, *id, + NDPI_PROTOCOL_GUILDWARS, + ndpi_search_guildwars_tcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/h323.c b/src/components/implementation/simple_nf/ndpi/h323.c new file mode 100644 index 0000000000..bb088b2390 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/h323.c @@ -0,0 +1,130 @@ +/* + * h323.c + * + * Copyright (C) 2015-20 ntop.org + * Copyright (C) 2013 Remy Mudingay + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_H323 + +#include "ndpi_api.h" + + +struct tpkt { + u_int8_t version, reserved; + u_int16_t len; +}; + +static void ndpi_search_h323(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + u_int16_t dport = 0, sport = 0; + + NDPI_LOG_DBG(ndpi_struct, "search H323\n"); + + /* + The TPKT protocol is used by ISO 8072 (on port 102) + and H.323. So this check below is to avoid ambiguities + */ + if((packet->tcp != NULL) && (packet->tcp->dest != ntohs(102))) { + NDPI_LOG_DBG2(ndpi_struct, "calculated dport over tcp\n"); + + /* H323 */ + if(packet->payload_packet_len > 5 + && (packet->payload[0] == 0x03) + && (packet->payload[1] == 0x00)) { + struct tpkt *t = (struct tpkt*)packet->payload; + u_int16_t len = ntohs(t->len); + + if(packet->payload_packet_len == len) { + /* + We need to check if this packet is in reality + a RDP (Remote Desktop) packet encapsulated on TPTK + */ + + if(packet->payload[4] == (packet->payload_packet_len - sizeof(struct tpkt) - 1)) { + /* ISO 8073/X.224 */ + if((packet->payload[5] == 0xE0 /* CC Connect Request */) + || (packet->payload[5] == 0xD0 /* CC Connect Confirm */)) { + NDPI_LOG_INFO(ndpi_struct, "found RDP\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_RDP, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } + } + + flow->l4.tcp.h323_valid_packets++; + + if(flow->l4.tcp.h323_valid_packets >= 2) { + NDPI_LOG_INFO(ndpi_struct, "found H323 broadcast\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_H323, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + } + } else { + /* This is not H.323 */ + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + } + } else if(packet->udp != NULL) { + sport = ntohs(packet->udp->source), dport = ntohs(packet->udp->dest); + NDPI_LOG_DBG2(ndpi_struct, "calculated dport over udp\n"); + + if(packet->payload_packet_len >= 6 && packet->payload[0] == 0x80 && packet->payload[1] == 0x08 && + (packet->payload[2] == 0xe7 || packet->payload[2] == 0x26) && + packet->payload[4] == 0x00 && packet->payload[5] == 0x00) + { + NDPI_LOG_INFO(ndpi_struct, "found H323 broadcast\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_H323, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } + /* H323 */ + if(sport == 1719 || dport == 1719) { + if((packet->payload_packet_len > 5) + && (packet->payload[0] == 0x16) + && (packet->payload[1] == 0x80) + && (packet->payload[4] == 0x06) + && (packet->payload[5] == 0x00)) { + NDPI_LOG_INFO(ndpi_struct, "found H323 broadcast\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_H323, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } else if(packet->payload_packet_len >= 20 && packet->payload_packet_len <= 117) { + NDPI_LOG_INFO(ndpi_struct, "found H323 broadcast\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_H323, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } else { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + } + } + + if(flow->packet_counter > 5) + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + +void init_h323_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("H323", ndpi_struct, *id, + NDPI_PROTOCOL_H323, + ndpi_search_h323, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/halflife2_and_mods.c b/src/components/implementation/simple_nf/ndpi/halflife2_and_mods.c new file mode 100644 index 0000000000..b4c91dd193 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/halflife2_and_mods.c @@ -0,0 +1,77 @@ +/* + * halflife2_and_mods.c + * + * Copyright (C) 2009-11 - ipoque GmbH + * Copyright (C) 2011-22 - ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_HALFLIFE2 + +#include "ndpi_api.h" + + +static void ndpi_int_halflife2_add_connection(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_HALFLIFE2, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + +static void ndpi_search_halflife2(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search halflife2\n"); + + if (flow->l4.udp.halflife2_stage == 0) { + if (packet->payload_packet_len >= 20 + && get_u_int32_t(packet->payload, 0) == 0xFFFFFFFF + && get_u_int32_t(packet->payload, packet->payload_packet_len - 4) == htonl(0x30303000)) { + flow->l4.udp.halflife2_stage = 1 + packet->packet_direction; + NDPI_LOG_DBG2(ndpi_struct, + "halflife2 client req detected, waiting for server reply\n"); + return; + } + } else if (flow->l4.udp.halflife2_stage == 2 - packet->packet_direction) { + if (packet->payload_packet_len >= 20 + && get_u_int32_t(packet->payload, 0) == 0xFFFFFFFF + && get_u_int32_t(packet->payload, packet->payload_packet_len - 4) == htonl(0x30303000)) { + ndpi_int_halflife2_add_connection(ndpi_struct, flow); + NDPI_LOG_INFO(ndpi_struct, "found halflife2\n"); + return; + } + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + + +void init_halflife2_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("HalfLife2", ndpi_struct, *id, + NDPI_PROTOCOL_HALFLIFE2, + ndpi_search_halflife2, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/hangout.c b/src/components/implementation/simple_nf/ndpi/hangout.c new file mode 100644 index 0000000000..720b4045c0 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/hangout.c @@ -0,0 +1,107 @@ +/* + * hangout.c + * + * Copyright (C) 2012-22 - ntop.org + * + * This module is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This module is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License. + * If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_HANGOUT_DUO + +/* #define DEBUG_LRU 1 */ + +#include "ndpi_api.h" + +/* stun.c */ +extern u_int32_t get_stun_lru_key(struct ndpi_flow_struct *flow, u_int8_t rev); + +/* https://support.google.com/a/answer/1279090?hl=en */ +#define HANGOUT_UDP_LOW_PORT 19302 +#define HANGOUT_UDP_HIGH_PORT 19309 +#define HANGOUT_TCP_LOW_PORT 19305 +#define HANGOUT_TCP_HIGH_PORT 19309 + +/* ***************************************************************** */ + +static u_int8_t isHangoutUDPPort(u_int16_t port) { + if((port >= HANGOUT_UDP_LOW_PORT) && (port <= HANGOUT_UDP_HIGH_PORT)) + return(1); + else + return(0); +} + +/* ***************************************************************** */ + +static u_int8_t isHangoutTCPPort(u_int16_t port) { + if((port >= HANGOUT_TCP_LOW_PORT) && (port <= HANGOUT_TCP_HIGH_PORT)) + return(1); + else + return(0); +} + +/* ***************************************************************** */ + +static void ndpi_search_hangout(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct * packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search Hangout\n"); + + if((packet->payload_packet_len > 24) && flow->guessed_protocol_id_by_ip == NDPI_PROTOCOL_GOOGLE) { + int matched_src = 0; + if( + ((packet->udp != NULL) && (matched_src = isHangoutUDPPort(ntohs(packet->udp->source)) + || isHangoutUDPPort(ntohs(packet->udp->dest)))) + || + ((packet->tcp != NULL) && (matched_src = isHangoutTCPPort(ntohs(packet->tcp->source)) + || isHangoutTCPPort(ntohs(packet->tcp->dest))))) { + NDPI_LOG_INFO(ndpi_struct, "found Hangout\n"); + + /* Hangout is over STUN hence the LRU cache is shared */ + + if(ndpi_struct->stun_cache) { + u_int32_t key = get_stun_lru_key(flow, !matched_src); + +#ifdef DEBUG_LRU + printf("[LRU] ADDING %u / %u.%u\n", key, NDPI_PROTOCOL_STUN, NDPI_PROTOCOL_HANGOUT_DUO); +#endif + + ndpi_lru_add_to_cache(ndpi_struct->stun_cache, key, NDPI_PROTOCOL_HANGOUT_DUO, ndpi_get_current_time(flow)); + } + + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_HANGOUT_DUO, + NDPI_PROTOCOL_STUN, NDPI_CONFIDENCE_DPI); + return; + } + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + +/* ***************************************************************** */ + +void init_hangout_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) { + ndpi_set_bitmask_protocol_detection("GoogleHangout", ndpi_struct, *id, + NDPI_PROTOCOL_HANGOUT_DUO, + ndpi_search_hangout, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} + diff --git a/src/components/implementation/simple_nf/ndpi/hll.h b/src/components/implementation/simple_nf/ndpi/hll.h new file mode 100644 index 0000000000..bbb318c7c4 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/hll.h @@ -0,0 +1,31 @@ +/* + Code taken from https://github.com/avz/hll + + Copyright (c) 2015 Artem Zaytsev + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + */ + +#include +#include + +#include "ndpi_typedefs.h" + +extern int hll_init(struct ndpi_hll *hll, u_int8_t bits); +extern void hll_destroy(struct ndpi_hll *hll); +extern int hll_add(struct ndpi_hll *hll, const void *buf, size_t size); +extern double hll_count(const struct ndpi_hll *hll); diff --git a/src/components/implementation/simple_nf/ndpi/hpvirtgrp.c b/src/components/implementation/simple_nf/ndpi/hpvirtgrp.c new file mode 100644 index 0000000000..df2da5faac --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/hpvirtgrp.c @@ -0,0 +1,70 @@ +/* + * hpvirtgrp.c + * + * Copyright (C) 2012-22 - ntop.org + * + * This module is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This module is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License. + * If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_HPVIRTGRP + +#include "ndpi_api.h" + + +static void ndpi_int_hpvirtgrp_add_connection( + struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_HPVIRTGRP, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + +static void ndpi_search_hpvirtgrp(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct * packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search hpvirtgrp\n"); + + if (packet->tcp != NULL) + { + if (flow->packet_counter == 1 && packet->payload_packet_len >= 4 && + packet->payload_packet_len == ntohs(*(u_int16_t*)&packet->payload[1]) && + packet->payload[0] == 0x16 && packet->payload[3] == 0x00) + { + ndpi_int_hpvirtgrp_add_connection(ndpi_struct, flow); + return; + } + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + + +/* ***************************************************************** */ + +void init_hpvirtgrp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("HP Virtual Machine Group Management", + ndpi_struct, *id, + NDPI_PROTOCOL_HPVIRTGRP, + ndpi_search_hpvirtgrp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/hsrp.c b/src/components/implementation/simple_nf/ndpi/hsrp.c new file mode 100644 index 0000000000..3f177ebfbd --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/hsrp.c @@ -0,0 +1,93 @@ +/* + * ayiya.c + * + * Copyright (C) 2011-22 - ntop.org + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* + https://www.cisco.com/c/en/us/support/docs/ip/hot-standby-router-protocol-hsrp/9234-hsrpguidetoc.html +*/ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_HSRP + +#include "ndpi_api.h" + +#define HSRP_PORT 1985 +#define HSRP_PORT_V6 2029 + +static void ndpi_search_hsrp(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + u_int16_t port_to_match; + + NDPI_LOG_DBG(ndpi_struct, "search HSRP\n"); + + if(packet->iphv6) { + port_to_match = htons(HSRP_PORT_V6); + + if((packet->udp->source == port_to_match) && (packet->udp->dest == port_to_match) + && (packet->payload[0] <= 0x04) /* Message type */ + && (ntohl(packet->iphv6->ip6_dst.u6_addr.u6_addr32[0]) == 0xFF020000) + && (ntohl(packet->iphv6->ip6_dst.u6_addr.u6_addr32[1]) == 0x00000000) + && (ntohl(packet->iphv6->ip6_dst.u6_addr.u6_addr32[2]) == 0x00000000) + && (ntohl(packet->iphv6->ip6_dst.u6_addr.u6_addr32[3]) == 0x00000066)) { /* multicast: ff02::66 */; + NDPI_LOG_INFO(ndpi_struct, "found HSRP\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_HSRP, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } + } else if(packet->iph) { + port_to_match = htons(HSRP_PORT); + + if((packet->udp->source == port_to_match) && (packet->udp->dest == port_to_match)) { + u_int8_t found = 0; + + if((ntohl(packet->iph->daddr) == 0xE0000002 /* 224.0.0.2 v0 */) + && (packet->payload_packet_len >= 20) + && (packet->payload[0] == 0x0 /* v0 */) + && (packet->payload[7] == 0x0 /* reserved */)) + found = 1; /* v0 */ + else if((packet->payload_packet_len >= 42) + && (packet->payload[2] == 0x02) /* Version 2 */ + && (packet->payload[5] == 0x04) /* IPv4 */ + && (ntohl(packet->iph->daddr) == 0xE0000066 /* 224.0.0.102 v2 */)) + found = 1; + + if(found) { + NDPI_LOG_INFO(ndpi_struct, "found HSRP\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_HSRP, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } + } + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + + +void init_hsrp_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id) { + ndpi_set_bitmask_protocol_detection("HSRP", ndpi_struct, *id, + NDPI_PROTOCOL_HSRP, + ndpi_search_hsrp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/http.c b/src/components/implementation/simple_nf/ndpi/http.c new file mode 100644 index 0000000000..b9cc198c1a --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/http.c @@ -0,0 +1,1533 @@ +/* + * http.c + * + * Copyright (C) 2011-22 - ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_HTTP + +#include "ndpi_api.h" + +static const char* binary_file_mimes_e[] = { "exe", NULL }; +static const char* binary_file_mimes_j[] = { "java-vm", NULL }; +static const char* binary_file_mimes_v[] = { "vnd.ms-cab-compressed", "vnd.microsoft.portable-executable", NULL }; +static const char* binary_file_mimes_x[] = { "x-msdownload", "x-dosexec", NULL }; + +static const char* download_file_mimes_b[] = { "bz", "bz2", NULL }; +static const char* download_file_mimes_o[] = { "octet-stream", NULL }; +static const char* download_file_mimes_x[] = { "x-tar", "x-zip", "x-bzip", NULL }; + +#define ATTACHMENT_LEN 3 +static const char* binary_file_ext[] = { + "exe", + "msi", + "cab", + NULL +}; + +static void ndpi_search_http_tcp(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow); + +/* *********************************************** */ + +static void ndpi_set_binary_application_transfer(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, + char *msg) { + /* + Check known exceptions + */ + if(ndpi_ends_with((char*)flow->host_server_name, ".windowsupdate.com")) + ; + else + ndpi_set_risk(ndpi_struct, flow, NDPI_BINARY_APPLICATION_TRANSFER, msg); + } + + /* *********************************************** */ + +static void ndpi_analyze_content_signature(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + u_int8_t set_risk = 0; + const char *msg = NULL; + + if((flow->initial_binary_bytes_len >= 2) && (flow->initial_binary_bytes[0] == 0x4D) && (flow->initial_binary_bytes[1] == 0x5A)) + set_risk = 1, msg = "Found Windows Exe"; /* Win executable */ + else if((flow->initial_binary_bytes_len >= 4) && (flow->initial_binary_bytes[0] == 0x7F) && (flow->initial_binary_bytes[1] == 'E') + && (flow->initial_binary_bytes[2] == 'L') && (flow->initial_binary_bytes[3] == 'F')) + set_risk = 1, msg = "Found Linux Exe"; /* Linux executable */ + else if((flow->initial_binary_bytes_len >= 4) && (flow->initial_binary_bytes[0] == 0xCF) && (flow->initial_binary_bytes[1] == 0xFA) + && (flow->initial_binary_bytes[2] == 0xED) && (flow->initial_binary_bytes[3] == 0xFE)) + set_risk = 1, msg = "Found Linux Exe"; /* Linux executable */ + else if((flow->initial_binary_bytes_len >= 3) + && (flow->initial_binary_bytes[0] == '#') + && (flow->initial_binary_bytes[1] == '!') + && (flow->initial_binary_bytes[2] == '/')) + set_risk = 1, msg = "Found Unix Script"; /* Unix script (e.g. #!/bin/sh) */ + else if(flow->initial_binary_bytes_len >= 8) { + u_int8_t exec_pattern[] = { 0x64, 0x65, 0x78, 0x0A, 0x30, 0x33, 0x35, 0x00 }; + + if(memcmp(flow->initial_binary_bytes, exec_pattern, 8) == 0) + set_risk = 1, msg = "Found Android Exe"; /* Dalvik Executable (Android) */ + } + + if(set_risk) + ndpi_set_binary_application_transfer(ndpi_struct, flow, (char*)msg); +} + +/* *********************************************** */ + +static int ndpi_search_http_tcp_again(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + + ndpi_search_http_tcp(ndpi_struct, flow); + +#ifdef HTTP_DEBUG + printf("=> %s()\n", __FUNCTION__); +#endif + + if((flow->host_server_name[0] != '\0') + && (flow->http.response_status_code != 0) + ) { + /* stop extra processing */ + if(flow->initial_binary_bytes_len) ndpi_analyze_content_signature(ndpi_struct, flow); + + flow->extra_packets_func = NULL; /* We're good now */ + return(0); + } + + /* Possibly more processing */ + return(1); +} + +/* *********************************************** */ + +static int ndpi_http_is_print(char c) { + if(isprint(c) || (c == '\t') || (c == '\r') || (c == '\n')) + return(1); + else + return(0); +} + +/* *********************************************** */ + +static void ndpi_http_check_human_redeable_content(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, + const u_int8_t *content, u_int16_t content_len) { + if(content_len >= 4) { + NDPI_LOG_DBG(ndpi_struct, " [len: %u] [%02X %02X %02X %02X][%c%c%c%c]", content_len, + content[0], content[1], content[2], content[3], + content[0], content[1], content[2], content[3] + ); + + if(ndpi_http_is_print(content[0]) && ndpi_http_is_print(content[1]) + && ndpi_http_is_print(content[2]) && ndpi_http_is_print(content[3])) { + /* OK */ + } else { + /* Looks bad: last resort check if it's gzipped [1F 8B 08 00] */ + + if((content[0] == 0x1F) + && (content[1] == 0x8B) + && (content[2] == 0x08) + && (content[3] == 0x00)) { + /* Looks like compressed data */ + } else { + char str[32]; + + snprintf(str, sizeof(str), "Susp content %02X%02X%02X%02X", + content[0], content[1], content[2], content[3]); + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_CONTENT, str); + } + } + } +} + +/* *********************************************** */ + +static void ndpi_validate_http_content(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + const u_int8_t *double_ret = (const u_int8_t *)ndpi_strnstr((const char *)packet->payload, "\r\n\r\n", packet->payload_packet_len); + + NDPI_LOG_DBG(ndpi_struct, "==>>> [len: %u] ", packet->payload_packet_len); + NDPI_LOG_DBG(ndpi_struct, "->> %.*s\n", packet->content_line.len, (const char *)packet->content_line.ptr); + + if(double_ret) { + u_int len; + + len = packet->payload_packet_len - (double_ret - packet->payload); + + if(ndpi_strnstr((const char *)packet->content_line.ptr, "text/", packet->content_line.len) + || ndpi_strnstr((const char *)packet->content_line.ptr, "/json", packet->content_line.len) + || ndpi_strnstr((const char *)packet->content_line.ptr, "x-www-form-urlencoded", packet->content_line.len) + ) { + /* This is supposed to be a human-readeable text file */ + + packet->http_check_content = 1; + + if(len >= 8 /* 4 chars for \r\n\r\n and at least 4 charts for content guess */) { + double_ret += 4; + + ndpi_http_check_human_redeable_content(ndpi_struct, flow, double_ret, len); + } + } + + /* Final checks */ + + if(ndpi_isset_risk(ndpi_struct, flow, NDPI_BINARY_APPLICATION_TRANSFER) + && flow->http.user_agent && flow->http.content_type) { + if(((strncmp((const char *)flow->http.user_agent, "Java/", 5) == 0)) + && + ((strcmp((const char *)flow->http.content_type, "application/java-vm") == 0)) + ) { + /* + Java downloads Java: Log4J: + https://corelight.com/blog/detecting-log4j-exploits-via-zeek-when-java-downloads-java + */ + + ndpi_set_risk(ndpi_struct, flow, NDPI_POSSIBLE_EXPLOIT, "Suspicious Log4J"); + } + } + + NDPI_LOG_DBG(ndpi_struct, "\n"); + } + + if((flow->http.user_agent == NULL) || (flow->http.user_agent[0] == '\0')) + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_USER_AGENT, "Empty or missing User-Agent"); +} + +/* *********************************************** */ + +/* https://www.freeformatter.com/mime-types-list.html */ +static ndpi_protocol_category_t ndpi_http_check_content(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + if(packet->content_line.len > 0) { + u_int app_len = sizeof("application"); + + if(packet->content_line.len > app_len) { + const char *app = (const char *)&packet->content_line.ptr[app_len]; + u_int app_len_avail = packet->content_line.len-app_len; + + if(strncasecmp(app, "mpeg", app_len_avail) == 0) { + flow->guessed_category = flow->category = NDPI_PROTOCOL_CATEGORY_STREAMING; + return(flow->category); + } else { + if(app_len_avail > 3) { + const char** cmp_mimes = NULL; + + switch(app[0]) { + case 'b': cmp_mimes = download_file_mimes_b; break; + case 'o': cmp_mimes = download_file_mimes_o; break; + case 'x': cmp_mimes = download_file_mimes_x; break; + } + + if(cmp_mimes != NULL) { + u_int8_t i; + + for(i = 0; cmp_mimes[i] != NULL; i++) { + if(strncasecmp(app, cmp_mimes[i], app_len_avail) == 0) { + flow->guessed_category = flow->category = NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT; + NDPI_LOG_INFO(ndpi_struct, "found executable HTTP transfer"); + break; + } + } + } + + /* ***************************************** */ + + switch(app[0]) { + case 'e': cmp_mimes = binary_file_mimes_e; break; + case 'j': cmp_mimes = binary_file_mimes_j; break; + case 'v': cmp_mimes = binary_file_mimes_v; break; + case 'x': cmp_mimes = binary_file_mimes_x; break; + } + + if(cmp_mimes != NULL) { + u_int8_t i; + + for(i = 0; cmp_mimes[i] != NULL; i++) { + if(strncasecmp(app, cmp_mimes[i], app_len_avail) == 0) { + char str[64]; + + snprintf(str, sizeof(str), "Found mime exe %s", cmp_mimes[i]); + flow->guessed_category = flow->category = NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT; + ndpi_set_binary_application_transfer(ndpi_struct, flow, str); + NDPI_LOG_INFO(ndpi_struct, "Found executable HTTP transfer"); + return(flow->category); + } + } + } + } + + ndpi_validate_http_content(ndpi_struct, flow); + } + } + + /* check for attachment */ + if(packet->content_disposition_line.len > 0) { + u_int8_t attachment_len = sizeof("attachment; filename"); + + if(packet->content_disposition_line.len > attachment_len) { + u_int8_t filename_len = packet->content_disposition_line.len - attachment_len; + int i; + + if(filename_len > ATTACHMENT_LEN) { + attachment_len += filename_len-ATTACHMENT_LEN-1; + + if((attachment_len+ATTACHMENT_LEN) <= packet->content_disposition_line.len) { + for(i = 0; binary_file_ext[i] != NULL; i++) { + /* Use memcmp in case content-disposition contains binary data */ + if(memcmp(&packet->content_disposition_line.ptr[attachment_len], + binary_file_ext[i], ATTACHMENT_LEN) == 0) { + char str[64]; + + snprintf(str, sizeof(str), "Found file extn %s", binary_file_ext[i]); + flow->guessed_category = flow->category = NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT; + ndpi_set_binary_application_transfer(ndpi_struct, flow, str); + NDPI_LOG_INFO(ndpi_struct, "found executable HTTP transfer"); + return(flow->category); + } + } + } + } + } + } + + switch(packet->content_line.ptr[0]) { + case 'a': + if(strncasecmp((const char *)packet->content_line.ptr, "audio", + ndpi_min(packet->content_line.len, 5)) == 0) + flow->guessed_category = flow->category = NDPI_PROTOCOL_CATEGORY_MEDIA; + break; + + case 'v': + if(strncasecmp((const char *)packet->content_line.ptr, "video", + ndpi_min(packet->content_line.len, 5)) == 0) + flow->guessed_category = flow->category = NDPI_PROTOCOL_CATEGORY_MEDIA; + break; + } + } + + return(flow->category); +} + +/* *********************************************** */ + +static void ndpi_int_http_add_connection(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, + u_int16_t http_protocol, + ndpi_protocol_category_t category) { + u_int16_t master_protocol; + +#ifdef HTTP_DEBUG + printf("=> %s()\n", __FUNCTION__); +#endif + + master_protocol = NDPI_PROTOCOL_HTTP; + if(flow->detected_protocol_stack[1] != NDPI_PROTOCOL_UNKNOWN) + master_protocol = flow->detected_protocol_stack[1]; + else if(flow->detected_protocol_stack[0] == NDPI_PROTOCOL_HTTP_CONNECT || + flow->detected_protocol_stack[0] == NDPI_PROTOCOL_HTTP_PROXY) + master_protocol = flow->detected_protocol_stack[0]; + + /* Update the classification only if we don't already have master + app; + for example don't change the protocols if we have already detected a + sub-protocol via the (content-matched) subprotocols logic (i.e. + MPEGDASH, SOAP, ....) */ + if(flow->detected_protocol_stack[1] == 0) + ndpi_set_detected_protocol(ndpi_struct, flow, http_protocol, + master_protocol, + NDPI_CONFIDENCE_DPI); + + flow->max_extra_packets_to_check = 8; + flow->extra_packets_func = ndpi_search_http_tcp_again; + flow->http_detected = 1; + + switch(flow->detected_protocol_stack[1]) { + case NDPI_PROTOCOL_HTTP_CONNECT: + case NDPI_PROTOCOL_HTTP_PROXY: + if(flow->detected_protocol_stack[0] == NDPI_PROTOCOL_HTTP) { + flow->detected_protocol_stack[0] = flow->detected_protocol_stack[1]; + flow->detected_protocol_stack[1] = NDPI_PROTOCOL_UNKNOWN; + } + break; + } +} + +/* ************************************************************* */ + +static void setHttpUserAgent(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, char *ua) { + if( !strcmp(ua, "Windows NT 5.0")) ua = "Windows 2000"; + else if(!strcmp(ua, "Windows NT 5.1")) ua = "Windows XP"; + else if(!strcmp(ua, "Windows NT 5.2")) ua = "Windows Server 2003"; + else if(!strcmp(ua, "Windows NT 6.0")) ua = "Windows Vista"; + else if(!strcmp(ua, "Windows NT 6.1")) ua = "Windows 7"; + else if(!strcmp(ua, "Windows NT 6.2")) ua = "Windows 8"; + else if(!strcmp(ua, "Windows NT 6.3")) ua = "Windows 8.1"; + else if(!strcmp(ua, "Windows NT 10.0")) ua = "Windows 10"; + + /* Good reference for future implementations: + * https://github.com/ua-parser/uap-core/blob/master/regexes.yaml */ + + if(flow->http.detected_os == NULL) + flow->http.detected_os = ndpi_strdup(ua); +} + +/* ************************************************************* */ + +static void ndpi_http_parse_subprotocol(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + u_int16_t master_protocol; + + if((flow->l4.tcp.http_stage == 0) || (flow->http.url && flow->http_detected)) { + char *double_col = strchr((char*)flow->host_server_name, ':'); + int a, b, c, d; + + if(double_col) double_col[0] = '\0'; + + if(ndpi_struct->packet.iph + && (sscanf(flow->host_server_name, "%d.%d.%d.%d", &a, &b, &c, &d) == 4)) { + /* IPv4 */ + + if(ndpi_struct->packet.iph->daddr != inet_addr(flow->host_server_name)) { + char buf[64], msg[128]; + + snprintf(msg, sizeof(msg), "Expected %s, found %s", + ndpi_intoav4(ntohl(ndpi_struct->packet.iph->daddr), buf, sizeof(buf)), flow->host_server_name); + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, msg); + } + } + + master_protocol = NDPI_PROTOCOL_HTTP; + if(flow->detected_protocol_stack[1] != NDPI_PROTOCOL_UNKNOWN) + master_protocol = flow->detected_protocol_stack[1]; + else if(flow->detected_protocol_stack[0] == NDPI_PROTOCOL_HTTP_CONNECT || + flow->detected_protocol_stack[0] == NDPI_PROTOCOL_HTTP_PROXY) + master_protocol = flow->detected_protocol_stack[0]; + + if(ndpi_match_hostname_protocol(ndpi_struct, flow, + master_protocol, + flow->host_server_name, + strlen(flow->host_server_name)) == 0) { + if(flow->http.url && + ((strstr(flow->http.url, ":8080/downloading?n=0.") != NULL) + || (strstr(flow->http.url, ":8080/upload?n=0.") != NULL))) { + /* This looks like Ookla speedtest */ + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_OOKLA, master_protocol, NDPI_CONFIDENCE_DPI); + } + } + + if (flow->http.url != NULL && + strstr(flow->http.url, "micloud.xiaomi.net") != NULL) + { + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_XIAOMI, master_protocol, NDPI_CONFIDENCE_DPI); + } + } +} + +/* ************************************************************* */ + +static void ndpi_check_user_agent(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, + char const *ua, size_t ua_len) { + char *double_slash; + + if((!ua) || (ua[0] == '\0')) + return; + + if (ua_len > 12) + { + size_t i, upper_case_count = 0; + + for (i = 0; i < ua_len; ++i) + { + /* + * We assume at least one non alpha char. + * e.g. ' ', '-' or ';' ... + */ + if (isalpha(ua[i]) == 0) + { + break; + } + if (isupper(ua[i]) != 0) + { + upper_case_count++; + } + } + + if (i == ua_len) { + float upper_case_ratio = (float)upper_case_count / (float)ua_len; + + if (upper_case_ratio >= 0.2f) { + char str[64]; + + snprintf(str, sizeof(str), "UA %s", ua); + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_USER_AGENT, str); + } + } + } + + if((!strncmp(ua, " 256) /* Too long */ + || (!strncmp(ua, "test", 4)) + || strchr(ua, '{') + || strchr(ua, '}') + ) { + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_USER_AGENT, "Suspicious Log4J"); + } + + /* + Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots) + Amazon-Route53-Health-Check-Service (ref 68784dad-be98-49e4-a63c-9fbbe2816d7c; report http://amzn.to/1vsZADi) + Anonymous Crawler/1.0 (Webcrawler developed with StormCrawler; http://example.com/; webcrawler@example.com) + */ + if((strstr(ua, "+http") != NULL) + || (strstr(ua, " http") != NULL) + || ndpi_strncasestr(ua, "Crawler", ua_len) + || ndpi_strncasestr(ua, "Bot", ua_len) /* bot/robot */ + ) { + char str[64]; + + snprintf(str, sizeof(str), "UA %s", ua); + + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_CRAWLER_BOT, str); + } +} + +/* ************************************************************* */ + +int http_process_user_agent(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, + const u_int8_t *ua_ptr, u_int16_t ua_ptr_len) { + /** + Format examples: + Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) .... + Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:54.0) Gecko/20100101 Firefox/54.0 + */ + if(ua_ptr_len > 7) { + char ua[256]; + u_int mlen = ndpi_min(ua_ptr_len, sizeof(ua)-1); + + strncpy(ua, (const char *)ua_ptr, mlen); + ua[mlen] = '\0'; + + if(strncmp(ua, "Mozilla", 7) == 0) { + char *parent = strchr(ua, '('); + + if(parent) { + char *token, *end; + + parent++; + end = strchr(parent, ')'); + if(end) end[0] = '\0'; + + token = strsep(&parent, ";"); + if(token) { + if((strcmp(token, "X11") == 0) + || (strcmp(token, "compatible") == 0) + || (strcmp(token, "Linux") == 0) + || (strcmp(token, "Macintosh") == 0) + ) { + token = strsep(&parent, ";"); + if(token && (token[0] == ' ')) token++; /* Skip space */ + + if(token + && ((strcmp(token, "U") == 0) + || (strncmp(token, "MSIE", 4) == 0))) { + token = strsep(&parent, ";"); + if(token && (token[0] == ' ')) token++; /* Skip space */ + + if(token && (strncmp(token, "Update", 6) == 0)) { + token = strsep(&parent, ";"); + + if(token && (token[0] == ' ')) token++; /* Skip space */ + + if(token && (strncmp(token, "AOL", 3) == 0)) { + + token = strsep(&parent, ";"); + if(token && (token[0] == ' ')) token++; /* Skip space */ + } + } + } + } + + if(token) + setHttpUserAgent(ndpi_struct, flow, token); + } + } + } + } + + if(ndpi_user_agent_set(flow, ua_ptr, ua_ptr_len) != NULL) + ndpi_check_user_agent(ndpi_struct, flow, flow->http.user_agent, ua_ptr_len); + else + NDPI_LOG_DBG2(ndpi_struct, "Could not set HTTP user agent\n"); + + NDPI_LOG_DBG2(ndpi_struct, "User Agent Type line found %.*s\n", + ua_ptr_len, ua_ptr); + return 0; +} + +/* ************************************************************* */ + +static void ndpi_check_numeric_ip(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, + char *ip, u_int ip_len) { + char buf[22], *double_dot; + struct in_addr ip_addr; + + strncpy(buf, ip, ip_len); + buf[ip_len] = '\0'; + + if((double_dot = strchr(buf, ':')) != NULL) + double_dot[0] = '\0'; + + ip_addr.s_addr = inet_addr(buf); + if(strcmp(inet_ntoa(ip_addr), buf) == 0) { + char str[64]; + + snprintf(str, sizeof(str), "Found host %s", buf); + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_NUMERIC_IP_HOST, str); + } +} + +/* ************************************************************* */ + +static void ndpi_check_http_url(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, + char *url) { + if(strstr(url, "") != NULL /* PHP code in the URL */) + ndpi_set_risk(ndpi_struct, flow, NDPI_URL_POSSIBLE_RCE_INJECTION, "PHP code in URL"); + else if(strncmp(url, "/shell?", 7) == 0) + ndpi_set_risk(ndpi_struct, flow, NDPI_URL_POSSIBLE_RCE_INJECTION, "Possible WebShell detected"); + else if(strncmp(url, "/.", 2) == 0) + ndpi_set_risk(ndpi_struct, flow, NDPI_POSSIBLE_EXPLOIT, "URL starting with dot"); +} + +/* ************************************************************* */ + +#define MIN_APACHE_VERSION 2004000 /* 2.4.X [https://endoflife.date/apache] */ +#define MIN_NGINX_VERSION 1022000 /* 1.22.0 [https://endoflife.date/nginx] */ + +static void ndpi_check_http_server(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, + const char *server, u_int server_len) { + if(server_len > 7) { + u_int off; + + if(strncmp((const char *)server, "ntopng ", 7) == 0) { + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_NTOP, NDPI_PROTOCOL_HTTP, NDPI_CONFIDENCE_DPI); + NDPI_CLR_BIT(flow->risk, NDPI_KNOWN_PROTOCOL_ON_NON_STANDARD_PORT); + } else if((strncasecmp(server, "Apache/", off = 7) == 0) /* X.X.X */ + || (strncasecmp(server, "nginx/", off = 6) == 0) /* X.X.X */) { + u_int i, j, a, b, c; + char buf[16] = { '\0' }; + + for(i=off, j=0; (ipacket; + int ret; + + if(flow->http_detected && (flow->http.response_status_code != 0)) + return; + + if((flow->http.url == NULL) + && (packet->http_url_name.len > 0) + && (packet->host_line.len > 0)) { + int len = packet->http_url_name.len + packet->host_line.len + 1; + + if(isdigit(packet->host_line.ptr[0]) + && (packet->host_line.len < 21)) + ndpi_check_numeric_ip(ndpi_struct, flow, (char*)packet->host_line.ptr, packet->host_line.len); + + flow->http.url = ndpi_malloc(len); + if(flow->http.url) { + u_int offset = 0, host_end = 0; + + if(flow->detected_protocol_stack[0] == NDPI_PROTOCOL_HTTP_CONNECT) { + strncpy(flow->http.url, (char*)packet->http_url_name.ptr, + packet->http_url_name.len); + + flow->http.url[packet->http_url_name.len] = '\0'; + } else { + /* Check if we pass through a proxy (usually there is also the Via: ... header) */ + if(strncmp((char*)packet->http_url_name.ptr, "http://", 7) != 0) { + strncpy(flow->http.url, (char*)packet->host_line.ptr, offset = packet->host_line.len); + host_end = packet->host_line.len; + } + + if((packet->host_line.len == packet->http_url_name.len) + && (strncmp((char*)packet->host_line.ptr, + (char*)packet->http_url_name.ptr, packet->http_url_name.len) == 0)) + ; + else { + strncpy(&flow->http.url[offset], (char*)packet->http_url_name.ptr, + packet->http_url_name.len); + offset += packet->http_url_name.len; + } + + flow->http.url[offset] = '\0'; + } + + ndpi_check_http_url(ndpi_struct, flow, &flow->http.url[host_end]); + } + + flow->http.method = ndpi_http_str2method((const char*)packet->http_method.ptr, + (u_int16_t)packet->http_method.len); + + if((flow->http.method == NDPI_HTTP_METHOD_RPC_IN_DATA) + || (flow->http.method == NDPI_HTTP_METHOD_RPC_OUT_DATA)) { + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_RPC, flow->detected_protocol_stack[0], NDPI_CONFIDENCE_DPI); + check_content_type_and_change_protocol(ndpi_struct, flow); + } + } + + if(packet->server_line.ptr != NULL) + ndpi_check_http_server(ndpi_struct, flow, (const char *)packet->server_line.ptr, packet->server_line.len); + + if(packet->user_agent_line.ptr != NULL && packet->user_agent_line.len != 0) { + ret = http_process_user_agent(ndpi_struct, flow, packet->user_agent_line.ptr, packet->user_agent_line.len); + /* TODO: Is it correct to avoid setting ua, host_name,... if we have a (Netflix) subclassification? */ + if(ret != 0) + return; + } + + /* check for host line */ + if(packet->host_line.ptr != NULL) { + u_int len; + + NDPI_LOG_DBG2(ndpi_struct, "HOST line found %.*s\n", + packet->host_line.len, packet->host_line.ptr); + + /* Copy result for nDPI apps */ + ndpi_hostname_sni_set(flow, packet->host_line.ptr, packet->host_line.len); + + if(strlen(flow->host_server_name) > 0) { + if(ndpi_is_valid_hostname(flow->host_server_name, + strlen(flow->host_server_name)) == 0) { + char str[128]; + + snprintf(str, sizeof(str), "Invalid host %s", flow->host_server_name); + ndpi_set_risk(ndpi_struct, flow, NDPI_INVALID_CHARACTERS, str); + + /* This looks like an attack */ + ndpi_set_risk(ndpi_struct, flow, NDPI_POSSIBLE_EXPLOIT, NULL); + } + } + + if(packet->forwarded_line.ptr) { + if(flow->http.nat_ip == NULL) { + len = packet->forwarded_line.len; + flow->http.nat_ip = ndpi_malloc(len + 1); + if(flow->http.nat_ip != NULL) { + strncpy(flow->http.nat_ip, (char*)packet->forwarded_line.ptr, len); + flow->http.nat_ip[len] = '\0'; + } + } + } + + ndpi_http_parse_subprotocol(ndpi_struct, flow); + + if(strlen(flow->host_server_name) > 0) { + ndpi_check_dga_name(ndpi_struct, flow, flow->host_server_name, 1, 0); + } + + if((flow->detected_protocol_stack[0] == NDPI_PROTOCOL_UNKNOWN) + && (flow->http_detected) + && (packet->http_origin.len > 0)) { + ndpi_protocol_match_result ret_match; + + ndpi_match_host_subprotocol(ndpi_struct, flow, + (char *)packet->http_origin.ptr, + packet->http_origin.len, + &ret_match, + NDPI_PROTOCOL_HTTP); + } + + if(flow->detected_protocol_stack[1] != NDPI_PROTOCOL_UNKNOWN) { + if((flow->detected_protocol_stack[1] != NDPI_PROTOCOL_HTTP) + && (flow->detected_protocol_stack[1] != NDPI_PROTOCOL_HTTP_CONNECT) + && (flow->detected_protocol_stack[1] != NDPI_PROTOCOL_HTTP_PROXY)) { + NDPI_LOG_INFO(ndpi_struct, "found HTTP/%s\n", + ndpi_get_proto_name(ndpi_struct, flow->detected_protocol_stack[0])); + ndpi_int_http_add_connection(ndpi_struct, flow, flow->detected_protocol_stack[0], NDPI_PROTOCOL_CATEGORY_WEB); + return; /* We have identified a sub-protocol so we're done */ + } + } + } + + if(flow->guessed_protocol_id == NDPI_PROTOCOL_UNKNOWN) + flow->guessed_protocol_id = NDPI_PROTOCOL_HTTP; + + /* check for accept line */ + if(packet->accept_line.ptr != NULL) { + NDPI_LOG_DBG2(ndpi_struct, "Accept line found %.*s\n", + packet->accept_line.len, packet->accept_line.ptr); + } + + /* check for authorization line */ + if(packet->authorization_line.ptr != NULL) { + NDPI_LOG_DBG2(ndpi_struct, "Authorization line found %.*s\n", + packet->authorization_line.len, packet->authorization_line.ptr); + + if(ndpi_strncasestr((const char*)packet->authorization_line.ptr, + "Basic", packet->authorization_line.len) + || ndpi_strncasestr((const char*)packet->authorization_line.ptr, + "Digest", packet->authorization_line.len)) { + ndpi_set_risk(ndpi_struct, flow, NDPI_CLEAR_TEXT_CREDENTIALS, + "Found credentials in HTTP Auth Line"); + } + } + + if(packet->content_line.ptr != NULL && packet->content_line.len != 0) { + NDPI_LOG_DBG2(ndpi_struct, "Content Type line found %.*s\n", + packet->content_line.len, packet->content_line.ptr); + + if(flow->http.response_status_code == 0) { + /* Request */ + if((flow->http.request_content_type == NULL) && (packet->content_line.len > 0)) { + int len = packet->content_line.len + 1; + + flow->http.request_content_type = ndpi_malloc(len); + if(flow->http.request_content_type) { + strncpy(flow->http.request_content_type, (char*)packet->content_line.ptr, + packet->content_line.len); + flow->http.request_content_type[packet->content_line.len] = '\0'; + } + } + } else { + /* Response */ + if((flow->http.content_type == NULL) && (packet->content_line.len > 0)) { + int len = packet->content_line.len + 1; + + flow->http.content_type = ndpi_malloc(len); + if(flow->http.content_type) { + strncpy(flow->http.content_type, (char*)packet->content_line.ptr, + packet->content_line.len); + flow->http.content_type[packet->content_line.len] = '\0'; + + flow->guessed_category = flow->category = ndpi_http_check_content(ndpi_struct, flow); + } + } + + if((flow->http.server == NULL) && (packet->server_line.len > 0)) { + int len = packet->server_line.len + 1; + + flow->http.server = ndpi_malloc(len); + if(flow->http.server) { + strncpy(flow->http.server, (char*)packet->server_line.ptr, + packet->server_line.len); + flow->http.server[packet->server_line.len] = '\0'; + } + } + } + + if(flow->http_detected && packet->content_line.ptr && *(char*)packet->content_line.ptr) { + /* Matching on Content-Type. + OCSP: application/ocsp-request, application/ocsp-response + */ + if(packet->content_line.len > 17 && + strncmp((const char *)packet->content_line.ptr, "application/ocsp-", 17) == 0) { + NDPI_LOG_DBG2(ndpi_struct, "Found OCSP\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_OCSP, NDPI_PROTOCOL_HTTP, NDPI_CONFIDENCE_DPI); + } + } + } + + if(packet->user_agent_line.ptr != NULL && packet->user_agent_line.len != 0 && + flow->http.url) { + /* WindowsUpdate over some kind of CDN */ + if(flow->detected_protocol_stack[1] == NDPI_PROTOCOL_UNKNOWN && + flow->detected_protocol_stack[0] == NDPI_PROTOCOL_HTTP && + (strstr(flow->http.url, "delivery.mp.microsoft.com/") || + strstr(flow->http.url, "download.windowsupdate.com/")) && + ndpi_strnstr((const char *)packet->user_agent_line.ptr, "Microsoft-Delivery-Optimization/", + packet->user_agent_line.len) && + ndpi_isset_risk(ndpi_struct, flow, NDPI_HTTP_NUMERIC_IP_HOST)) { + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_WINDOWS_UPDATE, NDPI_PROTOCOL_HTTP, NDPI_CONFIDENCE_DPI); + } + } + + if(ndpi_get_http_method(ndpi_struct, flow) != NDPI_HTTP_METHOD_UNKNOWN) { + ndpi_int_http_add_connection(ndpi_struct, flow, flow->detected_protocol_stack[0], NDPI_PROTOCOL_CATEGORY_WEB); + } +} + +/* ************************************************************* */ + +static void check_http_payload(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { + /* Add here your payload code check */ +} + +/* ************************************************************* */ + +#ifdef NDPI_ENABLE_DEBUG_MESSAGES +static uint8_t non_ctrl(uint8_t c) { + return c < 32 ? '.':c; +} +#endif + +/* ************************************************************* */ + +/** + * Functions to check whether the packet begins with a valid http request + * @param ndpi_struct + * @returnvalue 0 if no valid request has been found + * @returnvalue >0 indicates start of filename but not necessarily in packet limit + */ + +#define STATIC_STRING_L(a) {.str=a, .len=sizeof(a)-1 } + +static struct l_string { + const char *str; + size_t len; +} http_methods[] = { + STATIC_STRING_L("GET "), + STATIC_STRING_L("POST "), + STATIC_STRING_L("OPTIONS "), + STATIC_STRING_L("HEAD "), + STATIC_STRING_L("PUT "), + STATIC_STRING_L("PATCH "), + STATIC_STRING_L("DELETE "), + STATIC_STRING_L("CONNECT "), + STATIC_STRING_L("PROPFIND "), + STATIC_STRING_L("REPORT "), + STATIC_STRING_L("RPC_IN_DATA "), STATIC_STRING_L("RPC_OUT_DATA ") +}; +static const char *http_fs = "CDGHOPR"; + +static u_int16_t http_request_url_offset(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + unsigned int i; + + NDPI_LOG_DBG2(ndpi_struct, "====>>>> HTTP: %c%c%c%c [len: %u]\n", + packet->payload_packet_len > 0 ? non_ctrl(packet->payload[0]) : '.', + packet->payload_packet_len > 1 ? non_ctrl(packet->payload[1]) : '.', + packet->payload_packet_len > 2 ? non_ctrl(packet->payload[2]) : '.', + packet->payload_packet_len > 3 ? non_ctrl(packet->payload[3]) : '.', + packet->payload_packet_len); + + /* Check first char */ + if(!packet->payload_packet_len || !strchr(http_fs,packet->payload[0])) + return 0; + + /** + FIRST PAYLOAD PACKET FROM CLIENT + **/ + for(i=0; i < sizeof(http_methods)/sizeof(http_methods[0]); i++) { + if(packet->payload_packet_len >= http_methods[i].len && + strncasecmp((const char*)packet->payload,http_methods[i].str,http_methods[i].len) == 0) { + size_t url_start = http_methods[i].len; + while (url_start < packet->payload_packet_len && + url_start < http_methods[i].len + 2048 && /* We assume 2048 chars as maximum for URLs. */ + packet->payload[url_start] == ' ') { url_start++; } + NDPI_LOG_DBG2(ndpi_struct, "HTTP: %sFOUND\n",http_methods[i].str); + return url_start; + } + } + return 0; +} + +static void http_bitmask_exclude_other(struct ndpi_flow_struct *flow) +{ + NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_XBOX); +} + +/* *********************************************************************************************** */ + +/* Trick to speed-up detection */ +static const char* suspicious_http_header_keys_A[] = { "Arch", NULL}; +static const char* suspicious_http_header_keys_C[] = { "Cores", NULL}; +static const char* suspicious_http_header_keys_M[] = { "Mem", NULL}; +static const char* suspicious_http_header_keys_O[] = { "Os", "Osname", "Osversion", NULL}; +static const char* suspicious_http_header_keys_R[] = { "Root", NULL}; +static const char* suspicious_http_header_keys_S[] = { "S", NULL}; +static const char* suspicious_http_header_keys_T[] = { "TLS_version", NULL}; +static const char* suspicious_http_header_keys_U[] = { "Uuid", NULL}; +static const char* suspicious_http_header_keys_X[] = { "X-Hire-Me", NULL}; + +static int is_a_suspicious_header(const char* suspicious_headers[], struct ndpi_int_one_line_struct packet_line){ + int i; + unsigned int header_len; + const u_int8_t* header_limit; + + if((header_limit = memchr(packet_line.ptr, ':', packet_line.len))) { + header_len = header_limit - packet_line.ptr; + for(i=0; suspicious_headers[i] != NULL; i++){ + if(!strncasecmp((const char*) packet_line.ptr, + suspicious_headers[i], header_len)) + return 1; + } + } + + return 0; +} + +/* *********************************************************************************************** */ + +static void ndpi_check_http_header(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + u_int32_t i; + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + for(i=0; (i < packet->parsed_lines) + && (packet->line[i].ptr != NULL) + && (packet->line[i].len > 0); i++) { + switch(packet->line[i].ptr[0]){ + case 'A': + if(is_a_suspicious_header(suspicious_http_header_keys_A, packet->line[i])) { + char str[64]; + + snprintf(str, sizeof(str), "Found %.*s", packet->line[i].len, packet->line[i].ptr); + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, str); + return; + } + break; + case 'C': + if(is_a_suspicious_header(suspicious_http_header_keys_C, packet->line[i])) { + char str[64]; + + snprintf(str, sizeof(str), "Found %.*s", packet->line[i].len, packet->line[i].ptr); + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, str); + return; + } + break; + case 'M': + if(is_a_suspicious_header(suspicious_http_header_keys_M, packet->line[i])) { + char str[64]; + + snprintf(str, sizeof(str), "Found %.*s", packet->line[i].len, packet->line[i].ptr); + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, str); + return; + } + break; + case 'O': + if(is_a_suspicious_header(suspicious_http_header_keys_O, packet->line[i])) { + char str[64]; + + snprintf(str, sizeof(str), "Found %.*s", packet->line[i].len, packet->line[i].ptr); + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, str); + return; + } + break; + case 'R': + if(is_a_suspicious_header(suspicious_http_header_keys_R, packet->line[i])) { + char str[64]; + + snprintf(str, sizeof(str), "Found %.*s", packet->line[i].len, packet->line[i].ptr); + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, str); + return; + } + break; + case 'S': + if(is_a_suspicious_header(suspicious_http_header_keys_S, packet->line[i])) { + char str[64]; + + snprintf(str, sizeof(str), "Found %.*s", packet->line[i].len, packet->line[i].ptr); + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, str); + return; + } + break; + case 'T': + if(is_a_suspicious_header(suspicious_http_header_keys_T, packet->line[i])) { + char str[64]; + + snprintf(str, sizeof(str), "Found %.*s", packet->line[i].len, packet->line[i].ptr); + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, str); + return; + } + break; + case 'U': + if(is_a_suspicious_header(suspicious_http_header_keys_U, packet->line[i])) { + char str[64]; + + snprintf(str, sizeof(str), "Found %.*s", packet->line[i].len, packet->line[i].ptr); + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, str); + return; + } + break; + case 'X': + if(is_a_suspicious_header(suspicious_http_header_keys_X, packet->line[i])) { + char str[64]; + + snprintf(str, sizeof(str), "Found %.*s", packet->line[i].len, packet->line[i].ptr); + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, str); + return; + } + + break; + } + } +} + +/*************************************************************************************************/ + +static void ndpi_check_http_tcp(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + u_int16_t filename_start; /* the filename in the request method line, e.g., "GET filename_start..."*/ + + packet->packet_lines_parsed_complete = 0; + + if(packet->http_check_content && (packet->payload_packet_len > 0)) { + ndpi_http_check_human_redeable_content(ndpi_struct, flow, packet->payload, packet->payload_packet_len); + packet->http_check_content = 0; /* One packet is enough */ + } + + /* Check if we so far detected the protocol in the request or not. */ + if((packet->payload_packet_len > 0) /* Needed in case of extra packet processing */ + && (flow->l4.tcp.http_stage == 0)) { + /* Expected a request */ + flow->http_detected = 0; + + NDPI_LOG_DBG2(ndpi_struct, "HTTP stage %d: \n", flow->l4.tcp.http_stage); + + filename_start = http_request_url_offset(ndpi_struct, flow); + + if(filename_start == 0) { /* not a regular request. In the HTTP first stage, may be a truncated flow or other protocols */ + NDPI_LOG_DBG2(ndpi_struct, "Filename HTTP not found, we look for possible truncate flow..\n"); + + if(packet->payload_packet_len >= 7 && strncasecmp((const char *)packet->payload, "HTTP/1.", 7) == 0) { + NDPI_LOG_INFO(ndpi_struct, "found HTTP response\n"); + + if(packet->payload_packet_len >= 12) { + char buf[4]; + + /* Set server HTTP response code */ + strncpy(buf, (char*)&packet->payload[9], 3); + buf[3] = '\0'; + + flow->http.response_status_code = atoi(buf); + + /* https://en.wikipedia.org/wiki/List_of_HTTP_status_codes */ + if((flow->http.response_status_code < 100) || (flow->http.response_status_code > 509)) + flow->http.response_status_code = 0; /* Out of range */ + else if(flow->http.response_status_code >= 400) { + char ec[48]; + + if(flow->http.url != NULL) { + /* Let's check for Wordpress */ + char *slash = strchr(flow->http.url, '/'); + + if(slash != NULL && + (((flow->http.method == NDPI_HTTP_METHOD_POST) && (strncmp(slash, "/wp-admin/", 10) == 0)) + || ((flow->http.method == NDPI_HTTP_METHOD_GET) && (strncmp(slash, "/wp-content/uploads/", 20) == 0)) + )) { + /* Example of popular exploits https://www.wordfence.com/blog/2022/05/millions-of-attacks-target-tatsu-builder-plugin/ */ + ndpi_set_risk(ndpi_struct, flow, NDPI_POSSIBLE_EXPLOIT, "Possible Wordpress Exploit"); + } + } + + snprintf(ec, sizeof(ec), "HTTP Error Code %u", flow->http.response_status_code); + ndpi_set_risk(ndpi_struct, flow, NDPI_ERROR_CODE_DETECTED, ec); + } + + if(flow->flow_payload) { + char *endl; + + flow->flow_payload[flow->flow_payload_len] = '\0'; + if((endl = strrchr(flow->flow_payload, '\r')) == NULL) + endl = strrchr(flow->flow_payload, '\n'); + + if(endl != NULL) { + endl[0] = '\0'; + flow->flow_payload_len = endl - flow->flow_payload; + } + } + } + + ndpi_parse_packet_line_info(ndpi_struct, flow); + check_content_type_and_change_protocol(ndpi_struct, flow); + ndpi_validate_http_content(ndpi_struct, flow); + ndpi_int_http_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_HTTP, NDPI_PROTOCOL_CATEGORY_WEB); + return; + } + + if((packet->payload_packet_len == 3) && memcmp(packet->payload, "HI\n", 3) == 0) { + /* This looks like Ookla: we don't give up with HTTP yet */ + flow->l4.tcp.http_stage = 1; + return; + } + + if((packet->payload_packet_len == 40) && (flow->l4.tcp.http_stage == 0)) { + /* + -> QR O06L0072-6L91-4O43-857J-K8OO172L6L51 + <- QNUUX 2.5 2017-08-15.1314.4jn12m5 + -> MXFWUXJM 31625365 + */ + + if((packet->payload[2] == ' ') + && (packet->payload[11] == '-') + && (packet->payload[16] == '-') + && (packet->payload[21] == '-') + && (packet->payload[26] == '-') + && (packet->payload[39] == 0x0A) + ) + flow->l4.tcp.http_stage = 1; + return; + } + + if((packet->payload_packet_len == 23) && (memcmp(packet->payload, "", 23) == 0)) { + /* + + + + + + */ + ookla_found: + ndpi_int_http_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_OOKLA, NDPI_PROTOCOL_CATEGORY_WEB); + + if(ndpi_struct->ookla_cache != NULL) { + if(packet->iph != NULL) { + if(packet->tcp->source == htons(8080)) + ndpi_lru_add_to_cache(ndpi_struct->ookla_cache, packet->iph->saddr, 1 /* dummy */, ndpi_get_current_time(flow)); + else + ndpi_lru_add_to_cache(ndpi_struct->ookla_cache, packet->iph->daddr, 1 /* dummy */, ndpi_get_current_time(flow)); + } else if(packet->iphv6 != NULL) { + u_int32_t h; + + if(packet->tcp->source == htons(8080)) + h = ndpi_quick_hash((unsigned char *)&packet->iphv6->ip6_src, sizeof(packet->iphv6->ip6_src)); + else + h = ndpi_quick_hash((unsigned char *)&packet->iphv6->ip6_dst, sizeof(packet->iphv6->ip6_dst)); + + ndpi_lru_add_to_cache(ndpi_struct->ookla_cache, h, 1 /* dummy */, ndpi_get_current_time(flow)); + } + } + + return; + } + + /* try to get some additional request header info even if the packet may not be HTTP */ + ndpi_parse_packet_line_info(ndpi_struct, flow); + if(packet->http_num_headers > 0) { + check_content_type_and_change_protocol(ndpi_struct, flow); + return; + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + http_bitmask_exclude_other(flow); + return; + } else { + /* This check is required as RTSP is pretty similiar to HTTP (prevent false-positives). */ + if (strncasecmp((const char *)packet->payload + filename_start, + "rtsp://", ndpi_min(7, packet->payload_packet_len - filename_start)) == 0) + { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } else { + ndpi_int_http_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_HTTP, NDPI_PROTOCOL_CATEGORY_WEB); + } + } + + NDPI_LOG_DBG2(ndpi_struct, + "Filename HTTP found: %d, we look for line info..\n", filename_start); + + ndpi_parse_packet_line_info(ndpi_struct, flow); + ndpi_check_http_header(ndpi_struct, flow); + + if(packet->parsed_lines <= 1) { + NDPI_LOG_DBG2(ndpi_struct, + "Found just one line, we will look further for the next packet...\n"); + + packet->http_method.ptr = packet->line[0].ptr; + packet->http_method.len = filename_start - 1; + + /* Encode the direction of the packet in the stage, so we will know when we need to look for the response packet. */ + flow->l4.tcp.http_stage = packet->packet_direction + 1; // packet_direction 0: stage 1, packet_direction 1: stage 2 + return; + } + + NDPI_LOG_DBG2(ndpi_struct, + "Found more than one line, we look further for the next packet...\n"); + + if(packet->line[0].len >= (9 + filename_start) + && strncasecmp((const char *)&packet->line[0].ptr[packet->line[0].len - 9], " HTTP/1.", 8) == 0) { + /* Request line complete. Ex. "GET / HTTP/1.1" */ + + packet->http_url_name.ptr = &packet->payload[filename_start]; + packet->http_url_name.len = packet->line[0].len - (filename_start + 9); + + packet->http_method.ptr = packet->line[0].ptr; + packet->http_method.len = filename_start - 1; + + // Set the HTTP requested version: 0=HTTP/1.0 and 1=HTTP/1.1 + if(memcmp(&packet->line[0].ptr[packet->line[0].len - 1], "1", 1) == 0) + flow->http.request_version = 1; + else + flow->http.request_version = 0; + + /* Check for Ookla */ + if((packet->referer_line.len > 0) + && ndpi_strnstr((const char *)packet->referer_line.ptr, "www.speedtest.net", packet->referer_line.len)) { + goto ookla_found; + } + + if((packet->http_url_name.len > 7) + && (!strncasecmp((const char*) packet->http_url_name.ptr, "http://", 7))) { + NDPI_LOG_INFO(ndpi_struct, "found HTTP_PROXY\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_UNKNOWN, NDPI_PROTOCOL_HTTP_PROXY, NDPI_CONFIDENCE_DPI); + check_content_type_and_change_protocol(ndpi_struct, flow); + flow->http_detected = 1; + flow->l4.tcp.http_stage = packet->packet_direction + 1; // packet_direction 0: stage 1, packet_direction 1: stage 2 + return; + } + + if(filename_start == 8 && (strncasecmp((const char *)packet->payload, "CONNECT ", 8) == 0)) { + NDPI_LOG_INFO(ndpi_struct, "found HTTP_CONNECT\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_UNKNOWN, NDPI_PROTOCOL_HTTP_CONNECT, NDPI_CONFIDENCE_DPI); + check_content_type_and_change_protocol(ndpi_struct, flow); + flow->http_detected = 1; + flow->l4.tcp.http_stage = packet->packet_direction + 1; // packet_direction 0: stage 1, packet_direction 1: stage 2 + return; + } + + NDPI_LOG_DBG2(ndpi_struct, + "HTTP START Found, we will look for sub-protocols (content and host)...\n"); + + if(packet->host_line.ptr != NULL) { + /** + nDPI is pretty scrupulous about HTTP so it waits until the + HTTP response is received just to check that it conforms + with the HTTP specs. However this might be a waste of time as + in 99.99% of the cases is like that. + */ + + /* if(!flow->http_detected) */ { + u_int proto = flow->detected_protocol_stack[1] ? flow->detected_protocol_stack[1] : flow->detected_protocol_stack[0]; + + if(proto == NDPI_PROTOCOL_UNKNOWN) proto = NDPI_PROTOCOL_HTTP; + ndpi_int_http_add_connection(ndpi_struct, flow, proto, NDPI_PROTOCOL_CATEGORY_WEB); + flow->http_detected = 1; + NDPI_LOG_DBG2(ndpi_struct, + "HTTP START Found, we will look further for the response...\n"); + flow->l4.tcp.http_stage = packet->packet_direction + 1; // packet_direction 0: stage 1, packet_direction 1: stage 2 + check_content_type_and_change_protocol(ndpi_struct, flow); + } + return; + } + } + + check_content_type_and_change_protocol(ndpi_struct, flow); + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + http_bitmask_exclude_other(flow); + } else if((flow->l4.tcp.http_stage == 1) || (flow->l4.tcp.http_stage == 2)) { + NDPI_LOG_DBG2(ndpi_struct, "HTTP stage %u: \n", flow->l4.tcp.http_stage); + + if((packet->payload_packet_len == 34) && (flow->l4.tcp.http_stage == 1)) { + if((packet->payload[5] == ' ') && (packet->payload[9] == ' ')) { + goto ookla_found; + } + } + + if((packet->payload_packet_len > 6) && memcmp(packet->payload, "HELLO ", 6) == 0) { + /* This looks like Ookla */ + goto ookla_found; + } else + NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_OOKLA); + + /** + At first check, if this is for sure a response packet + (in another direction. If not, if HTTP is detected do nothing now and return, + otherwise check the second packet for the HTTP request + */ + if((flow->l4.tcp.http_stage - packet->packet_direction) == 1) { /* Expected a response package */ + + if(flow->http_detected) + return; + + NDPI_LOG_DBG2(ndpi_struct, + " SECOND PAYLOAD TRAFFIC FROM CLIENT, FIRST PACKET MIGHT HAVE BEEN HTTP...UNKNOWN TRAFFIC, HERE FOR HTTP again.. \n"); + + ndpi_parse_packet_line_info(ndpi_struct, flow); + + if(packet->parsed_lines <= 1) { + /* wait some packets in case request is split over more than 2 packets */ + if(flow->packet_counter < 5) { + NDPI_LOG_DBG2(ndpi_struct, "line still not finished, search next packet\n"); + return; + } else { + /* stop parsing here */ + NDPI_LOG_DBG2(ndpi_struct, "exclude HTTP: PACKET DOES NOT HAVE A LINE STRUCTURE\n"); + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + http_bitmask_exclude_other(flow); + return; + } + } + // http://www.slideshare.net/DSPIP/rtsp-analysis-wireshark + if(packet->line[0].len >= 9 + && strncasecmp((const char *)&packet->line[0].ptr[packet->line[0].len - 9], " HTTP/1.", 8) == 0) { + + NDPI_LOG_INFO(ndpi_struct, "found HTTP\n"); + ndpi_int_http_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_HTTP, NDPI_PROTOCOL_CATEGORY_WEB); + check_content_type_and_change_protocol(ndpi_struct, flow); + + NDPI_LOG_DBG2(ndpi_struct, + "HTTP START Found in 2. packet, we will look further for the response....\n"); + flow->http_detected = 1; + } + + return; + } + + /** + This is a packet in another direction. Check if we find the proper response. + We have received a response for a previously identified partial HTTP request + */ + + /* response without headers + * TODO: Shouldn't it be below ndpi_parse_packet_line_info, line ~825 ? + */ + if((packet->parsed_lines == 1) && (packet->packet_direction == 1 /* server -> client */)) { + /* In Apache if you do "GET /\n\n" the response comes without any header */ + NDPI_LOG_INFO(ndpi_struct, "found HTTP. (apache)\n"); + ndpi_int_http_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_HTTP, NDPI_PROTOCOL_CATEGORY_WEB); + check_content_type_and_change_protocol(ndpi_struct, flow); + return; + } + + /* Parse packet line and we look for the subprotocols */ + ndpi_parse_packet_line_info(ndpi_struct, flow); + check_content_type_and_change_protocol(ndpi_struct, flow); + + if(packet->empty_line_position_set != 0 || flow->l4.tcp.http_empty_line_seen == 1) { + NDPI_LOG_DBG2(ndpi_struct, "empty line. check_http_payload\n"); + check_http_payload(ndpi_struct, flow); + } + + flow->l4.tcp.http_stage = 0; + return; + } +} + +/* ********************************* */ + +static void ndpi_search_http_tcp(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + /* Break after 20 packets. */ + if(flow->packet_counter > 20) { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + http_bitmask_exclude_other(flow); + return; + } + + NDPI_LOG_DBG(ndpi_struct, "search HTTP\n"); + ndpi_check_http_tcp(ndpi_struct, flow); +} + +/* ********************************* */ + +ndpi_http_method ndpi_get_http_method(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + if(!flow) { + ndpi_set_risk(ndpi_struct, flow, NDPI_MALFORMED_PACKET, (char*)"Unknown HTTP Method"); + return(NDPI_HTTP_METHOD_UNKNOWN); + } else + return(flow->http.method); +} + +/* ********************************* */ + +char* ndpi_get_http_url(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + if((!flow) || (!flow->http.url)) + return(""); + else + return(flow->http.url); +} + +/* ********************************* */ + +char* ndpi_get_http_content_type(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + if((!flow) || (!flow->http.content_type)) + return(""); + else + return(flow->http.content_type); +} + + +void init_http_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) { + ndpi_set_bitmask_protocol_detection("HTTP",ndpi_struct, *id, + NDPI_PROTOCOL_HTTP, + ndpi_search_http_tcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/i3d.c b/src/components/implementation/simple_nf/ndpi/i3d.c new file mode 100644 index 0000000000..ba292c3d73 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/i3d.c @@ -0,0 +1,89 @@ +/* + * i3d.c + * + * Copyright (C) 2022-23 - ntop.org + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_I3D + +#include "ndpi_api.h" + +static void ndpi_int_i3d_add_connection(struct ndpi_detection_module_struct * const ndpi_struct, + struct ndpi_flow_struct * const flow) +{ + NDPI_LOG_INFO(ndpi_struct, "found i3D\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, + NDPI_PROTOCOL_UNKNOWN, + NDPI_PROTOCOL_I3D, + NDPI_CONFIDENCE_DPI); +} + +static void ndpi_search_i3d(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct const * const packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "searching i3D\n"); + + /* + * i3D offers a lot of services. + * The patterns below are mostly used by dedicated game servers. + */ + + if (packet->payload_packet_len < 74) + { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + if ((ntohl(get_u_int32_t(packet->payload, 0)) == 0x00010046 || + ntohl(get_u_int32_t(packet->payload, 0)) == 0x00020046) && + ntohl(get_u_int32_t(packet->payload, 4)) == 0x0003cfa8) + { + ndpi_int_i3d_add_connection(ndpi_struct, flow); + return; + } + + if ((ntohs(get_u_int16_t(packet->payload, 0)) == 0x9078 || + ntohs(get_u_int16_t(packet->payload, 0)) == 0x9067) && + ntohl(get_u_int32_t(packet->payload, 8)) == 0x0003cfa9 && + ntohl(get_u_int32_t(packet->payload, 12)) == 0xbede0003) + { + ndpi_int_i3d_add_connection(ndpi_struct, flow); + return; + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; +} + +void init_i3d_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("i3D", ndpi_struct, *id, + NDPI_PROTOCOL_I3D, + ndpi_search_i3d, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK + ); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/iax.c b/src/components/implementation/simple_nf/ndpi/iax.c new file mode 100644 index 0000000000..d988fe772f --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/iax.c @@ -0,0 +1,108 @@ +/* + * iax.c + * + * Copyright (C) 2009-11 - ipoque GmbH + * Copyright (C) 2011-22 - ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_IAX + +#include "ndpi_api.h" + + +#define NDPI_IAX_MAX_INFORMATION_ELEMENTS 15 + +static void ndpi_int_iax_add_connection(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_IAX, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + +static void ndpi_search_setup_iax(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + u_int8_t i; + u_int16_t packet_len; + + if ( /* 1. iax is udp based, port 4569 */ + (packet->udp->source == htons(4569) || packet->udp->dest == htons(4569)) + /* check for iax new packet */ + && packet->payload_packet_len >= 12 + /* check for dst call id == 0, do not check for highest bit (packet retransmission) */ + // && (ntohs(get_u_int16_t(packet->payload, 2)) & 0x7FFF) == 0 + /* check full IAX packet */ + && (packet->payload[0] & 0x80) != 0 + /* outbound seq == 0 */ + && packet->payload[8] == 0 + /* inbound seq == 0 || 1 */ + && (packet->payload[9] == 0 || packet->payload[9] == 0x01) + /* */ + && packet->payload[10] == 0x06 + /* IAX type: 0-15 */ + && packet->payload[11] <= 15) { + + if (packet->payload_packet_len == 12) { + NDPI_LOG_INFO(ndpi_struct, "found IAX\n"); + ndpi_int_iax_add_connection(ndpi_struct, flow); + return; + } + + packet_len = 12; + for(i = 0; i < NDPI_IAX_MAX_INFORMATION_ELEMENTS; i++) { + if ((packet_len+1) >= packet->payload_packet_len) + break; + + packet_len = packet_len + 2 + packet->payload[packet_len + 1]; + if(packet_len == packet->payload_packet_len) { + NDPI_LOG_INFO(ndpi_struct, "found IAX\n"); + ndpi_int_iax_add_connection(ndpi_struct, flow); + return; + } + } + + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + +} + +static void ndpi_search_iax(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + if(packet->udp + && (flow->detected_protocol_stack[0] == NDPI_PROTOCOL_UNKNOWN)) + ndpi_search_setup_iax(ndpi_struct, flow); +} + + +void init_iax_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("IAX", ndpi_struct, *id, + NDPI_PROTOCOL_IAX, + ndpi_search_iax, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/icecast.c b/src/components/implementation/simple_nf/ndpi/icecast.c new file mode 100644 index 0000000000..354650233f --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/icecast.c @@ -0,0 +1,100 @@ +/* + * icecast.c + * + * Copyright (C) 2009-11 - ipoque GmbH + * Copyright (C) 2011-22 - ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_ICECAST + +#include "ndpi_api.h" + +static void ndpi_int_icecast_add_connection(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_ICECAST, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + +static void ndpi_search_icecast_tcp(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + u_int16_t i; + + NDPI_LOG_DBG(ndpi_struct, "search icecast\n"); + + if((packet->payload_packet_len < 500 && + packet->payload_packet_len >= 7 && memcmp(packet->payload, "SOURCE ", 7) == 0) + || flow->l4.tcp.icecast_stage) { + ndpi_parse_packet_line_info_any(ndpi_struct, flow); + NDPI_LOG_DBG2(ndpi_struct, "Icecast lines=%d\n", packet->parsed_lines); + for (i = 0; i < packet->parsed_lines; i++) { + if(packet->line[i].ptr != NULL && packet->line[i].len > 4 + && memcmp(packet->line[i].ptr, "ice-", 4) == 0) { + NDPI_LOG_INFO(ndpi_struct, "found Icecast\n"); + ndpi_int_icecast_add_connection(ndpi_struct, flow); + return; + } + } + + if(packet->parsed_lines < 1 && !flow->l4.tcp.icecast_stage) { + flow->l4.tcp.icecast_stage = 1; + return; + } + } + + if(ndpi_current_pkt_from_client_to_server(packet, flow) + && (flow->packet_counter < 10)) { + return; + } + + if(ndpi_current_pkt_from_server_to_client(packet, flow)) { + /* server answer, now test Server for Icecast */ + + ndpi_parse_packet_line_info(ndpi_struct, flow); + + if((packet->server_line.ptr != NULL) + && (packet->server_line.len > NDPI_STATICSTRING_LEN("Icecast")) + && memcmp(packet->server_line.ptr, "Icecast", + NDPI_STATICSTRING_LEN("Icecast")) == 0) { + /* TODO maybe store the previous protocol type as subtype? + * e.g. ogg or mpeg + */ + NDPI_LOG_INFO(ndpi_struct, "found Icecast\n"); + ndpi_int_icecast_add_connection(ndpi_struct, flow); + return; + } + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + + +void init_icecast_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("IceCast", ndpi_struct, *id, + NDPI_PROTOCOL_ICECAST, + ndpi_search_icecast_tcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/iec60870-5-104.c b/src/components/implementation/simple_nf/ndpi/iec60870-5-104.c new file mode 100644 index 0000000000..e03ea18d35 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/iec60870-5-104.c @@ -0,0 +1,83 @@ +/* + * iec60870-5-104.c + * Extension for industrial 104 protocol recognition + * + * Copyright (C) 2019-22 - ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_IEC60870 + +#include "ndpi_api.h" + +static void ndpi_search_iec60870_tcp(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + /* Check connection over TCP */ + NDPI_LOG_DBG(ndpi_struct, "search IEC60870\n"); + + if(packet->tcp) { + u_int16_t offset = 0, found = 0; + + while(offset + 1 < packet->payload_packet_len) { + /* The start byte of 104 is 0x68 */ + if(packet->payload[offset] == 0x68) { + u_int8_t len = packet->payload[offset+1]; + + if(len == 0) + break; + else { + u_int8_t len = packet->payload[offset+1]; + + if((len + offset + 2) == packet->payload_packet_len) { + found = 1; + break; + } + + offset += len + 2; + } + } else + break; + } + + if(found) { + NDPI_LOG_INFO(ndpi_struct, "Found IEC60870-104\n"); + + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_IEC60870, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + + +void init_104_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id) { + ndpi_set_bitmask_protocol_detection("IEC60870", ndpi_struct, *id, + NDPI_PROTOCOL_IEC60870, + ndpi_search_iec60870_tcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/imo.c b/src/components/implementation/simple_nf/ndpi/imo.c new file mode 100644 index 0000000000..d73d8a6e1d --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/imo.c @@ -0,0 +1,80 @@ +/* + * imo.c + * + * Copyright (C) 2019 - ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_IMO + +#include "ndpi_api.h" + +static void ndpi_int_imo_add_connection(struct ndpi_detection_module_struct + *ndpi_struct, struct ndpi_flow_struct *flow) { + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_IMO, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + +static void ndpi_search_imo(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search IMO\n"); + + if(packet->payload_packet_len == 1) { + /* Two one byte consecutive packets with the same payload */ + if((flow->l4.udp.imo_last_one_byte_pkt == 1) + && (flow->l4.udp.imo_last_byte == packet->payload[0])) + ndpi_int_imo_add_connection(ndpi_struct, flow); + else + flow->l4.udp.imo_last_one_byte_pkt = 1, flow->l4.udp.imo_last_byte = packet->payload[0]; + } else if(((packet->payload_packet_len == 10) + && (packet->payload[0] == 0x09) + && (packet->payload[1] == 0x02)) + || ((packet->payload_packet_len == 11) + && (packet->payload[0] == 0x00) + && (packet->payload[1] == 0x09) + && (packet->payload[2] == 0x03)) + || ((packet->payload_packet_len == 1099) + && (packet->payload[0] == 0x88) + && (packet->payload[1] == 0x49) + && (packet->payload[2] == 0x1a) + && (packet->payload[3] == 0x00))) { + NDPI_LOG_INFO(ndpi_struct, "found IMO\n"); + ndpi_int_imo_add_connection(ndpi_struct, flow); + } else { + if(flow->num_processed_pkts > 5) + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + else + flow->l4.udp.imo_last_one_byte_pkt = 0; + } +} + + +void init_imo_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id) { + ndpi_set_bitmask_protocol_detection("IMO", ndpi_struct, *id, + NDPI_PROTOCOL_IMO, + ndpi_search_imo, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + *id += 1; +} + diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_amazon_aws_match.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_amazon_aws_match.c new file mode 100644 index 0000000000..2671c93518 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_amazon_aws_match.c @@ -0,0 +1,7056 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ + +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { + { 0x03022200 /* 3.2.34.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03058C00 /* 3.5.140.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222540 /* 13.34.37.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224140 /* 13.34.65.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224200 /* 13.34.66.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224EA0 /* 13.34.78.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6DD00 /* 15.230.221.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B40000 /* 35.180.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D99AA /* 52.93.153.170/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2EA /* 52.93.178.234/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E4C00 /* 52.94.76.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F2400 /* 52.95.36.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBAA00 /* 52.219.170.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63572000 /* 99.87.32.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x78341660 /* 120.52.22.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE0B56 /* 150.222.11.86/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE5100 /* 150.222.81.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA36 /* 150.222.234.54/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022340 /* 3.2.35.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220B20 /* 13.34.11.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2218A0 /* 13.34.24.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223220 /* 13.34.50.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223460 /* 13.34.52.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224540 /* 13.34.69.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6273C /* 15.230.39.60/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E9809 /* 52.94.152.9/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBA800 /* 52.219.168.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE4E00 /* 150.222.78.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x036C0000 /* 3.108.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222BC0 /* 13.34.43.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223400 /* 13.34.52.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224020 /* 13.34.64.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5E800 /* 15.181.232.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627D0 /* 15.230.39.208/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D1100 /* 52.93.17.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FA3 /* 52.93.127.163/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF0A4 /* 52.93.240.164/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F9600 /* 52.95.150.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB3C00 /* 52.219.60.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A088 /* 142.4.160.136/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE666 /* 150.222.230.102/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03020000 /* 3.2.0.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222B60 /* 13.34.43.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223000 /* 13.34.48.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223EA0 /* 13.34.62.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224060 /* 13.34.64.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF83800 /* 13.248.56.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87500 /* 13.248.117.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDD2200 /* 15.221.34.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE68900 /* 15.230.137.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7E87 /* 52.93.126.135/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2DB /* 52.93.178.219/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF0BA /* 52.93.240.186/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E1800 /* 52.94.24.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60005000 /* 96.0.80.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03BB /* 150.222.3.187/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEC700 /* 150.222.199.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEFCF8 /* 150.222.252.248/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC9A00 /* 161.188.154.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224700 /* 13.34.71.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225380 /* 13.34.83.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225A20 /* 13.34.90.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6272C /* 15.230.39.44/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2BF92D00 /* 43.249.45.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34040000 /* 52.4.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D5C44 /* 52.93.92.68/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F1B /* 52.93.127.27/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490E3C0 /* 52.144.227.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490E540 /* 52.144.229.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE5800 /* 54.222.88.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC5100 /* 64.252.81.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A050 /* 142.4.160.80/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022FC0 /* 3.2.47.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2246E0 /* 13.34.70.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF84600 /* 13.248.70.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE649C0 /* 15.230.73.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x32100000 /* 50.16.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7494 /* 52.93.116.148/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F85 /* 52.93.127.133/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DC600 /* 52.93.198.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FD000 /* 52.95.208.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FE000 /* 52.95.224.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B68 /* 104.255.59.104/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B72 /* 104.255.59.114/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE5400 /* 150.222.84.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE81F4 /* 150.222.129.244/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED052 /* 150.222.208.82/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA32 /* 150.222.234.50/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCDFBF900 /* 205.251.249.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2207E0 /* 13.34.7.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222080 /* 13.34.32.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223100 /* 13.34.49.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224960 /* 13.34.73.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC10300 /* 15.193.3.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCC400 /* 15.220.196.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCD800 /* 15.220.216.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23477300 /* 35.71.115.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FA9 /* 52.93.127.169/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D9994 /* 52.93.153.148/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF400 /* 52.94.244.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3477D000 /* 52.119.208.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC1A /* 54.240.236.26/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A0E0 /* 142.4.160.224/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03BE /* 150.222.3.190/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE400 /* 150.222.228.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2222C0 /* 13.34.34.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC52200 /* 15.197.34.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FCD0000 /* 15.205.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6270A /* 15.230.39.10/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6FE02 /* 15.230.254.2/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C0600 /* 16.12.6.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3452A910 /* 52.82.169.16/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D2238 /* 52.93.34.56/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EC610 /* 52.94.198.16/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490E180 /* 52.144.225.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4500 /* 64.252.69.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4783C000 /* 71.131.192.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE7A68 /* 150.222.122.104/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221140 /* 13.34.17.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DEC0000 /* 13.236.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB16400 /* 15.177.100.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC52400 /* 15.197.36.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE69E00 /* 15.230.158.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C2000 /* 16.12.32.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2BCE0000 /* 43.206.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342EDC00 /* 52.46.220.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D3280 /* 52.93.50.128/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D328C /* 52.93.50.140/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D3800 /* 52.93.56.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB298 /* 52.93.178.152/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F2900 /* 52.95.41.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F6400 /* 52.95.100.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FE200 /* 52.95.226.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBCC00 /* 52.219.204.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634E9800 /* 99.78.152.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A038 /* 142.4.160.56/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A0B8 /* 142.4.160.184/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8700 /* 150.222.135.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DECA00 /* 150.222.202.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0207DF4 /* 176.32.125.244/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03040000 /* 3.4.0.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2235C0 /* 13.34.53.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223C80 /* 13.34.60.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15300 /* 15.177.83.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB90000 /* 15.185.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCFC00 /* 15.220.252.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDD2300 /* 15.221.35.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6271C /* 15.230.39.28/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FF81C00 /* 15.248.28.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D23D4 /* 52.93.35.212/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F76 /* 52.93.127.118/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2CD /* 52.93.178.205/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E1A00 /* 52.94.26.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E982C /* 52.94.152.44/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FB600 /* 52.95.182.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC36 /* 54.240.236.54/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F70000 /* 54.247.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F80000 /* 54.248.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022800 /* 3.2.40.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2229C0 /* 13.34.41.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2253A0 /* 13.34.83.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF84800 /* 13.248.72.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627C4 /* 15.230.39.196/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FFB0009 /* 15.251.0.9/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x1222F800 /* 18.34.248.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476300 /* 35.71.99.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3477FC00 /* 52.119.252.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBD400 /* 52.219.212.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36940000 /* 54.148.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x456B0710 /* 69.107.7.16/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8200 /* 99.77.130.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03B9 /* 150.222.3.185/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE0B4E /* 150.222.11.78/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE1B0C /* 150.222.27.12/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA34 /* 150.222.234.52/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA44 /* 150.222.234.68/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB4A33980 /* 180.163.57.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2232E0 /* 13.34.50.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE644C0 /* 15.230.68.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12C80000 /* 18.200.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D5B66 /* 52.93.91.102/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D8DD4 /* 52.93.141.212/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36CE0000 /* 54.206.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC45 /* 54.240.236.69/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63963800 /* 99.150.56.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6CAF3800 /* 108.175.56.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE6000 /* 150.222.96.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220F20 /* 13.34.15.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221DE0 /* 13.34.29.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2244A0 /* 13.34.68.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2245E0 /* 13.34.69.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224640 /* 13.34.70.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87C00 /* 13.248.124.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC10200 /* 15.193.2.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCDE00 /* 15.220.222.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64340 /* 15.230.67.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6D400 /* 15.230.212.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB288 /* 52.93.178.136/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBC000 /* 52.219.192.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8400 /* 99.77.132.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B52 /* 104.255.59.82/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE78F2 /* 150.222.120.242/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC9200 /* 161.188.146.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2253C0 /* 13.34.83.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225560 /* 13.34.85.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DCC0000 /* 13.204.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5F700 /* 15.181.247.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6C800 /* 15.230.200.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C1800 /* 16.12.24.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E80000 /* 18.232.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3452A900 /* 52.82.169.0/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7000 /* 52.93.112.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB28A /* 52.93.178.138/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF00E0 /* 54.239.0.224/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF3000 /* 54.239.48.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC7600 /* 64.252.118.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DF400 /* 99.77.244.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A090 /* 142.4.160.144/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2236E0 /* 13.34.54.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224FC0 /* 13.34.79.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2256A0 /* 13.34.86.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87700 /* 13.248.119.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC7800 /* 15.220.120.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627FE /* 15.230.39.254/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6B310 /* 15.230.179.16/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x33180000 /* 51.24.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D5100 /* 52.93.81.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF0AA /* 52.93.240.170/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x364A0000 /* 54.74.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE0F7C /* 150.222.15.124/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE7200 /* 150.222.114.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEF2D6 /* 150.222.242.214/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221B20 /* 13.34.27.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222720 /* 13.34.39.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCCF00 /* 15.220.207.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627CE /* 15.230.39.206/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627F4 /* 15.230.39.244/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12660000 /* 18.102.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x28B20000 /* 40.178.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34530000 /* 52.83.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D0E12 /* 52.93.14.18/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E0600 /* 52.94.6.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490C5C0 /* 52.144.197.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC7A00 /* 64.252.122.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x456B0738 /* 69.107.7.56/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE0200 /* 150.222.2.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03EA /* 150.222.3.234/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE1B12 /* 150.222.27.18/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEA4DC /* 150.222.164.220/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221700 /* 13.34.23.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225AC0 /* 13.34.90.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF84300 /* 13.248.67.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE68A00 /* 15.230.138.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6A906 /* 15.230.169.6/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342F0000 /* 52.47.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D1000 /* 52.93.16.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF990 /* 52.94.249.144/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F8800 /* 52.95.136.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FFF40 /* 52.95.255.64/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490C780 /* 52.144.199.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490E140 /* 52.144.225.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB8F00 /* 52.219.143.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC16 /* 54.240.236.22/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE33A0 /* 150.222.51.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x97942800 /* 151.148.40.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCCF6A800 /* 204.246.168.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2219F8 /* 13.34.25.248/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222640 /* 13.34.38.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2248A0 /* 13.34.72.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD00000 /* 13.208.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC10700 /* 15.193.7.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6276C /* 15.230.39.108/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64600 /* 15.230.70.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64A80 /* 15.230.74.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64C00 /* 15.230.76.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6FD00 /* 15.230.253.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D3288 /* 52.93.50.136/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D32A6 /* 52.93.50.166/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D6000 /* 52.93.96.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7ACB /* 52.93.122.203/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FC2 /* 52.93.127.194/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x369C0000 /* 54.156.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE5A00 /* 54.222.90.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EC0000 /* 54.236.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60002000 /* 96.0.32.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63960800 /* 99.150.8.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA12 /* 150.222.234.18/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA62 /* 150.222.234.98/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03052800 /* 3.5.40.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03058800 /* 3.5.136.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2203A0 /* 13.34.3.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225700 /* 13.34.87.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5A000 /* 15.181.160.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE61D00 /* 15.230.29.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6270E /* 15.230.39.14/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12BF0000 /* 18.191.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D200 /* 52.144.210.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D9F00 /* 99.77.159.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63536100 /* 99.83.97.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6F0DAB80 /* 111.13.171.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE858 /* 150.222.232.88/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221580 /* 13.34.21.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223700 /* 13.34.55.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15200 /* 15.177.82.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB55000 /* 15.181.80.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6F100 /* 15.230.241.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2F800000 /* 47.128.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F70 /* 52.93.127.112/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB286 /* 52.93.178.134/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF0A0 /* 52.93.240.160/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D3C4 /* 52.144.211.196/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB4800 /* 52.219.72.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36998000 /* 54.153.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE3A00 /* 54.222.58.0/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x7AF8C000 /* 122.248.192.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE7700 /* 150.222.119.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221340 /* 13.34.19.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2216A0 /* 13.34.22.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222740 /* 13.34.39.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF70000 /* 13.247.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6090C /* 15.230.9.12/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62722 /* 15.230.39.34/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6DA00 /* 15.230.218.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12C00000 /* 18.192.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23477200 /* 35.71.114.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7E84 /* 52.93.126.132/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F7E /* 52.93.127.126/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D85B1 /* 52.93.133.177/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2B7 /* 52.93.178.183/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D7C0 /* 52.144.215.192/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB4400 /* 52.219.68.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E50000 /* 54.229.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF0160 /* 54.239.1.96/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF66EA /* 54.239.102.234/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B67 /* 104.255.59.103/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE1C88 /* 150.222.28.136/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022280 /* 3.2.34.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223B60 /* 13.34.59.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2243E0 /* 13.34.67.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224A40 /* 13.34.74.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225920 /* 13.34.89.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86400 /* 13.248.100.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE68200 /* 15.230.130.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6B700 /* 15.230.183.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A00000 /* 18.160.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D0500 /* 52.93.5.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D3292 /* 52.93.50.146/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D329C /* 52.93.50.156/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D3792 /* 52.93.55.146/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D471E /* 52.93.71.30/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D78B2 /* 52.93.120.178/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F7C /* 52.93.127.124/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490C180 /* 52.144.193.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36FA0000 /* 54.250.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC5900 /* 64.252.89.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x456B0788 /* 69.107.7.136/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4CDFA800 /* 76.223.168.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6B140000 /* 107.20.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE1C82 /* 150.222.28.130/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE1C8C /* 150.222.28.140/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE813E /* 150.222.129.62/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305A000 /* 3.5.160.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220700 /* 13.34.7.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220D00 /* 13.34.13.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225800 /* 13.34.88.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDD2400 /* 15.221.36.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6092F /* 15.230.9.47/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62800 /* 15.230.40.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2E33C000 /* 46.51.192.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D32AE /* 52.93.50.174/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7300 /* 52.93.115.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2A1 /* 52.93.178.161/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DC1C8 /* 52.93.193.200/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FAE00 /* 52.95.174.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D9500 /* 99.77.149.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634E9C00 /* 99.78.156.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE7814 /* 150.222.120.20/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEDC00 /* 150.222.220.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03840000 /* 3.132.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2203E0 /* 13.34.3.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2227C0 /* 13.34.39.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDD0700 /* 15.221.7.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE604A4 /* 15.230.4.164/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE68400 /* 15.230.132.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6CA00 /* 15.230.202.0/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FFB001B /* 15.251.0.27/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2BD20000 /* 43.210.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342ED000 /* 52.46.208.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D331C /* 52.93.51.28/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E0C00 /* 52.94.12.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FBB00 /* 52.95.187.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3F200000 /* 63.32.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC5500 /* 64.252.85.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03F0 /* 150.222.3.240/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8186 /* 150.222.129.134/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222DA0 /* 13.34.45.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2247E0 /* 13.34.71.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D240000 /* 13.36.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62400 /* 15.230.36.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62736 /* 15.230.39.54/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C3000 /* 16.12.48.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D5B65 /* 52.93.91.101/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF0BC /* 52.93.240.188/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x46E85000 /* 70.232.80.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352B800 /* 99.82.184.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE1C6C /* 150.222.28.108/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE7900 /* 150.222.121.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA22 /* 150.222.234.34/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xAC606200 /* 172.96.98.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221400 /* 13.34.20.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2223A0 /* 13.34.35.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225A80 /* 13.34.90.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15E00 /* 15.177.94.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342EFC00 /* 52.46.252.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7EC6 /* 52.93.126.198/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E9843 /* 52.94.152.67/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FFF10 /* 52.95.255.16/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB8D00 /* 52.219.141.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC26 /* 54.240.236.38/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60002800 /* 96.0.40.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A0F8 /* 142.4.160.248/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03C6 /* 150.222.3.198/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223740 /* 13.34.55.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224720 /* 13.34.71.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2257E0 /* 13.34.87.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6000C /* 15.230.0.12/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE65700 /* 15.230.87.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12EC0000 /* 18.236.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x33140000 /* 51.20.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D328E /* 52.93.50.142/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F68 /* 52.93.127.104/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF0C0 /* 52.93.240.192/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF950 /* 52.94.249.80/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F8B00 /* 52.95.139.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0C600 /* 54.240.198.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4A00 /* 64.252.74.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DB700 /* 99.77.183.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE300 /* 150.222.227.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE682 /* 150.222.230.130/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221D80 /* 13.34.29.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223440 /* 13.34.52.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF82000 /* 13.248.32.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EC700 /* 52.94.199.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F8000 /* 52.95.128.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3477CE00 /* 52.119.206.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4F00 /* 64.252.79.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE1C6A /* 150.222.28.106/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC9400 /* 161.188.148.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0207DE6 /* 176.32.125.230/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCDFBFC00 /* 205.251.252.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220B80 /* 13.34.11.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221440 /* 13.34.20.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2217E0 /* 13.34.23.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224340 /* 13.34.67.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225520 /* 13.34.85.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87100 /* 13.248.113.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FBC0000 /* 15.188.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627DC /* 15.230.39.220/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6FB04 /* 15.230.251.4/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12740000 /* 18.116.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7EEB /* 52.93.126.235/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FDA /* 52.93.127.218/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FEF /* 52.93.127.239/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D8599 /* 52.93.133.153/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2E7 /* 52.93.178.231/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FB200 /* 52.95.178.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36C80000 /* 54.200.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF0110 /* 54.239.1.16/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB98F1000 /* 185.143.16.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCDFBF400 /* 205.251.244.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03052400 /* 3.5.36.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2226A0 /* 13.34.38.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224100 /* 13.34.65.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224400 /* 13.34.68.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6FB00 /* 15.230.251.0/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12222000 /* 18.34.32.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342E5C00 /* 52.46.92.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D32B2 /* 52.93.50.178/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D32BC /* 52.93.50.188/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DEC00 /* 52.93.236.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF6200 /* 54.239.98.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DEE00 /* 99.77.238.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0207DE4 /* 176.32.125.228/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221E80 /* 13.34.30.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x101A0000 /* 16.26.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2BB /* 52.93.178.187/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3477B000 /* 52.119.176.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x362E0000 /* 54.46.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36900000 /* 54.144.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36A90000 /* 54.169.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC4A /* 54.240.236.74/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3FF67100 /* 63.246.113.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8800 /* 99.77.136.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE08F0 /* 150.222.8.240/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE668 /* 150.222.230.104/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC9E00 /* 161.188.158.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221A60 /* 13.34.26.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225300 /* 13.34.83.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64AC0 /* 15.230.74.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64EC0 /* 15.230.78.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE65F00 /* 15.230.95.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23477600 /* 35.71.118.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F45 /* 52.93.127.69/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DC1C7 /* 52.93.193.199/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF094 /* 52.93.240.148/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F6800 /* 52.95.104.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3477F900 /* 52.119.249.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE5B00 /* 54.222.91.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4800 /* 64.252.72.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE5500 /* 150.222.85.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEF57A /* 150.222.245.122/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2223E0 /* 13.34.35.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224500 /* 13.34.69.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6B200 /* 15.230.178.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6C000 /* 15.230.192.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F79 /* 52.93.127.121/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF0C2 /* 52.93.240.194/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FA800 /* 52.95.168.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490E080 /* 52.144.224.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36C00000 /* 54.192.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF0010 /* 54.239.0.16/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF0060 /* 54.239.0.96/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D9400 /* 99.77.148.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222500 /* 13.34.37.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225260 /* 13.34.82.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86E00 /* 13.248.110.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC52000 /* 15.197.32.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62728 /* 15.230.39.40/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FFB0007 /* 15.251.0.7/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D4726 /* 52.93.71.38/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FF000 /* 52.95.240.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB1000 /* 52.219.16.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4B658000 /* 75.101.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60001000 /* 96.0.16.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03F2 /* 150.222.3.242/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE817A /* 150.222.129.122/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0207DEA /* 176.32.125.234/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCCF6AD00 /* 204.246.173.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03040300 /* 3.4.3.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2251A0 /* 13.34.81.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDE0000 /* 15.222.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D3E00 /* 52.93.62.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F7F /* 52.93.127.127/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EB000 /* 52.94.176.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x45EB8000 /* 69.235.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DF000 /* 99.77.240.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8195 /* 150.222.129.149/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA8E /* 150.222.234.142/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022900 /* 3.2.41.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2206E0 /* 13.34.6.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221860 /* 13.34.24.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222B80 /* 13.34.43.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223DE0 /* 13.34.61.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2249C0 /* 13.34.73.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2254E0 /* 13.34.84.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDD3200 /* 15.221.50.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D1400 /* 52.93.20.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F60 /* 52.93.127.96/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490C000 /* 52.144.192.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE7000 /* 150.222.112.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCCEC8000 /* 204.236.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305D000 /* 3.5.208.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221EA0 /* 13.34.30.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222240 /* 13.34.34.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222D40 /* 13.34.45.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222E00 /* 13.34.46.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14C00 /* 15.177.76.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE68700 /* 15.230.135.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x341E0000 /* 52.30.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D471B /* 52.93.71.27/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E0800 /* 52.94.8.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF940 /* 52.94.249.64/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x365C0000 /* 54.92.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x369A0000 /* 54.154.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4C00 /* 64.252.76.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x43CA0000 /* 67.202.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DFB00 /* 99.77.251.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x67F69400 /* 103.246.148.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE78E6 /* 150.222.120.230/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE65C /* 150.222.230.92/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE87B /* 150.222.232.123/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA38 /* 150.222.234.56/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC9C00 /* 161.188.156.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03031800 /* 3.3.24.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031E0000 /* 3.30.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221740 /* 13.34.23.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222000 /* 13.34.32.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225580 /* 13.34.85.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5FD00 /* 15.181.253.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC50000 /* 15.197.0.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12220000 /* 18.34.0.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23477700 /* 35.71.119.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2BF92F00 /* 43.249.47.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D379C /* 52.93.55.156/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E20000 /* 54.226.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E6C800 /* 54.230.200.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA2FAED00 /* 162.250.237.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03700000 /* 3.112.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03900000 /* 3.144.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220500 /* 13.34.5.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2231E0 /* 13.34.49.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224DC0 /* 13.34.77.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCA800 /* 15.220.168.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2A6 /* 52.93.178.166/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E8000 /* 52.94.128.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FF400 /* 52.95.244.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40BB8000 /* 64.187.128.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC6F00 /* 64.252.111.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352BC00 /* 99.82.188.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xAC606E00 /* 172.96.110.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022580 /* 3.2.37.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2238E0 /* 13.34.56.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224760 /* 13.34.71.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224F80 /* 13.34.79.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE61200 /* 15.230.18.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6950B /* 15.230.149.11/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E70000 /* 18.231.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FC9 /* 52.93.127.201/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D8DEA /* 52.93.141.234/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E98B6 /* 52.94.152.182/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36FC0000 /* 54.252.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x78FDF0C0 /* 120.253.240.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03B6 /* 150.222.3.182/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE1C8E /* 150.222.28.142/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE4F00 /* 150.222.79.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03E00000 /* 3.224.0.0/12 */, 12, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2228A0 /* 13.34.40.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF84400 /* 13.248.68.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62702 /* 15.230.39.2/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476800 /* 35.71.104.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23477500 /* 35.71.117.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D32A2 /* 52.93.50.162/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D32B8 /* 52.93.50.184/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DE595 /* 52.93.229.149/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF0B2 /* 52.93.240.178/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345ED800 /* 52.94.216.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490C0C0 /* 52.144.192.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490C4C0 /* 52.144.196.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DD0000 /* 54.221.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0CA00 /* 54.240.202.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36FF0000 /* 54.255.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A110 /* 142.4.161.16/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE66A /* 150.222.230.106/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222DE0 /* 13.34.45.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64800 /* 15.230.72.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D227E /* 52.93.34.126/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F9F /* 52.93.127.159/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D8DDC /* 52.93.141.220/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3477F800 /* 52.119.248.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490CD00 /* 52.144.205.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF0090 /* 54.239.0.144/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D3800 /* 99.77.56.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A028 /* 142.4.160.40/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE78F8 /* 150.222.120.248/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8184 /* 150.222.129.132/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221960 /* 13.34.25.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225440 /* 13.34.84.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225500 /* 13.34.85.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE40000 /* 15.228.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE60E12 /* 15.230.14.18/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D3900 /* 52.93.57.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F5D /* 52.93.127.93/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FFE /* 52.93.127.254/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F3F00 /* 52.95.63.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x456B0728 /* 69.107.7.40/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63536600 /* 99.83.102.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A008 /* 142.4.160.8/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03D4 /* 150.222.3.212/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x9DF10000 /* 157.241.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222020 /* 13.34.32.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2228C0 /* 13.34.40.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223940 /* 13.34.57.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB57000 /* 15.181.112.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE61014 /* 15.230.16.20/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6BD80 /* 15.230.189.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C0F00 /* 16.12.15.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D2228 /* 52.93.34.40/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7ED7 /* 52.93.126.215/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FB1 /* 52.93.127.177/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FC4 /* 52.93.127.196/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FD9 /* 52.93.127.217/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF0B4 /* 52.93.240.180/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF9D0 /* 52.94.249.208/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E90000 /* 54.233.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x44427000 /* 68.66.112.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x45E78000 /* 69.231.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DF800 /* 99.77.248.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352AC00 /* 99.82.172.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63977800 /* 99.151.120.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6C880000 /* 108.136.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x7481E280 /* 116.129.226.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE5200 /* 150.222.82.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221CA0 /* 13.34.28.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222300 /* 13.34.35.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222600 /* 13.34.38.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2233C0 /* 13.34.51.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224800 /* 13.34.72.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224AE0 /* 13.34.74.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12224800 /* 18.34.72.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B00000 /* 35.176.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DC1C3 /* 52.93.193.195/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF7000 /* 54.239.112.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x46E0C000 /* 70.224.192.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D9900 /* 99.77.153.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE6900 /* 150.222.105.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC8800 /* 161.188.136.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03040700 /* 3.4.7.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222BA0 /* 13.34.43.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223520 /* 13.34.53.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223820 /* 13.34.56.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223D20 /* 13.34.61.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDD0600 /* 15.221.6.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE613F8 /* 15.230.19.248/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64F40 /* 15.230.79.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C0A00 /* 16.12.10.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB9400 /* 52.219.148.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x456B0758 /* 69.107.7.88/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D9B00 /* 99.77.155.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A0C0 /* 142.4.160.192/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03B0 /* 150.222.3.176/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEFCFA /* 150.222.252.250/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x97942700 /* 151.148.39.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222860 /* 13.34.40.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222E20 /* 13.34.46.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2235A0 /* 13.34.53.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223900 /* 13.34.57.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224B60 /* 13.34.75.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225000 /* 13.34.80.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64300 /* 15.230.67.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FB3 /* 52.93.127.179/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2CE /* 52.93.178.206/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2E6 /* 52.93.178.230/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FFF20 /* 52.95.255.32/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490E500 /* 52.144.229.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBD300 /* 52.219.211.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x45E6C000 /* 69.230.192.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x82B00000 /* 130.176.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE0B54 /* 150.222.11.84/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE8B0 /* 150.222.232.176/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA70 /* 150.222.234.112/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA80 /* 150.222.234.128/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA0010000 /* 160.1.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03058000 /* 3.5.128.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224F60 /* 13.34.79.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5F100 /* 15.181.241.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE61500 /* 15.230.21.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64380 /* 15.230.67.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12D80000 /* 18.216.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22C00000 /* 34.192.0.0/12 */, 12, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D25DE /* 52.93.37.222/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2DC /* 52.93.178.220/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E4000 /* 52.94.64.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63536400 /* 99.83.100.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA4E /* 150.222.234.78/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03680000 /* 3.104.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223EC0 /* 13.34.62.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224CA0 /* 13.34.76.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB16300 /* 15.177.99.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC10500 /* 15.193.5.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC51000 /* 15.197.16.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC2000 /* 15.220.32.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62718 /* 15.230.39.24/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627A2 /* 15.230.39.162/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6B800 /* 15.230.184.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34500000 /* 52.80.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D472E /* 52.93.71.46/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EFA10 /* 52.94.250.16/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FD800 /* 52.95.216.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3477E800 /* 52.119.232.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490C980 /* 52.144.201.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC7900 /* 64.252.121.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63962000 /* 99.150.32.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6C9C0000 /* 108.156.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE6300 /* 150.222.99.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEDA00 /* 150.222.218.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA68 /* 150.222.234.104/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xAF298000 /* 175.41.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0207DFA /* 176.32.125.250/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223B80 /* 13.34.59.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627C2 /* 15.230.39.194/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE69800 /* 15.230.152.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x33760000 /* 51.118.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FA7 /* 52.93.127.167/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2D7 /* 52.93.178.215/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF6C00 /* 54.239.108.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4400 /* 64.252.68.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8500 /* 150.222.133.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC8200 /* 161.188.130.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222560 /* 13.34.37.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224C60 /* 13.34.76.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2255E0 /* 13.34.85.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6C100 /* 15.230.193.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E50000 /* 18.229.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D3294 /* 52.93.50.148/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FAE /* 52.93.127.174/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FEE /* 52.93.127.238/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2B6 /* 52.93.178.182/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E4400 /* 52.94.68.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FC000 /* 52.95.192.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490E6CC /* 52.144.230.204/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBC300 /* 52.219.195.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DB0000 /* 54.219.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE1C7A /* 150.222.28.122/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE87A /* 150.222.232.122/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03200000 /* 3.32.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2251E0 /* 13.34.81.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE60006 /* 15.230.0.6/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B60000 /* 35.182.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7AFF /* 52.93.122.255/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E6C000 /* 54.230.192.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x46E87C00 /* 70.232.124.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DBF00 /* 99.77.191.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03054800 /* 3.5.72.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221A00 /* 13.34.26.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223E20 /* 13.34.62.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DFA0000 /* 13.250.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62768 /* 15.230.39.104/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CC00000 /* 44.192.0.0/11 */, 11, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F11 /* 52.93.127.17/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F63 /* 52.93.127.99/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FA600 /* 52.95.166.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D802 /* 52.144.216.2/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8194 /* 150.222.129.148/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED042 /* 150.222.208.66/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221A40 /* 13.34.26.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223A20 /* 13.34.58.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224600 /* 13.34.70.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62788 /* 15.230.39.136/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627E2 /* 15.230.39.226/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FFB000A /* 15.251.0.10/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C1400 /* 16.12.20.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D700 /* 52.144.215.0/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D7C4 /* 52.144.215.196/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC4E /* 54.240.236.78/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC6600 /* 64.252.102.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC6C00 /* 64.252.108.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x456B06C8 /* 69.107.6.200/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x57EE5000 /* 87.238.80.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D9C00 /* 99.77.156.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DE900 /* 99.77.233.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC8C00 /* 161.188.140.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220200 /* 13.34.2.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220C40 /* 13.34.12.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222EC0 /* 13.34.46.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223CE0 /* 13.34.60.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64E40 /* 15.230.78.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6F300 /* 15.230.243.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D3281 /* 52.93.50.129/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB293 /* 52.93.178.147/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FA900 /* 52.95.169.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE0000 /* 54.222.0.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF0070 /* 54.239.0.112/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF0800 /* 54.239.8.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0CC00 /* 54.240.204.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63560000 /* 99.86.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DECB00 /* 150.222.203.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCFABB000 /* 207.171.176.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220DA0 /* 13.34.13.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221560 /* 13.34.21.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2256E0 /* 13.34.86.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA80000 /* 15.168.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE60EFC /* 15.230.14.252/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62000 /* 15.230.32.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627C0 /* 15.230.39.192/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64F00 /* 15.230.79.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2B3 /* 52.93.178.179/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC12 /* 54.240.236.18/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8A00 /* 99.77.138.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE0500 /* 150.222.5.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE783E /* 150.222.120.62/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA2FAEE00 /* 162.250.238.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB2EC0000 /* 178.236.0.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03059800 /* 3.5.152.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2225A0 /* 13.34.37.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62748 /* 15.230.39.72/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E00000 /* 18.224.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34380000 /* 52.56.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D37A2 /* 52.93.55.162/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D5C4A /* 52.93.92.74/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FF8 /* 52.93.127.248/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D9995 /* 52.93.153.149/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2AA /* 52.93.178.170/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2DF /* 52.93.178.223/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490E946 /* 52.144.233.70/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0D400 /* 54.240.212.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F50000 /* 54.245.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A000 /* 142.4.160.0/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE6400 /* 150.222.100.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2215A0 /* 13.34.21.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221840 /* 13.34.24.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221B00 /* 13.34.27.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222140 /* 13.34.33.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2230C0 /* 13.34.48.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224840 /* 13.34.72.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86900 /* 13.248.105.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C1000 /* 16.12.16.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E60000 /* 18.230.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x28B00000 /* 40.176.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x343A0000 /* 52.58.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D3282 /* 52.93.50.130/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D79C3 /* 52.93.121.195/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F19 /* 52.93.127.25/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DA0000 /* 52.218.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEB000 /* 150.222.176.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221E60 /* 13.34.30.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222880 /* 13.34.40.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223EE0 /* 13.34.62.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224A20 /* 13.34.74.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF80000 /* 13.248.0.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627AE /* 15.230.39.174/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627F0 /* 15.230.39.240/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x33600000 /* 51.96.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FDB /* 52.93.127.219/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D99B1 /* 52.93.153.177/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E983F /* 52.94.152.63/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F1D00 /* 52.95.29.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490E400 /* 52.144.228.0/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB8E00 /* 52.219.142.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D9800 /* 99.77.152.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED9F8 /* 150.222.217.248/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03830000 /* 3.131.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221D60 /* 13.34.29.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2235E0 /* 13.34.53.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223B40 /* 13.34.59.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223F00 /* 13.34.63.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224A60 /* 13.34.74.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC5000 /* 15.220.80.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6090A /* 15.230.9.10/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6279E /* 15.230.39.158/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64980 /* 15.230.73.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7ACA /* 52.93.122.202/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F12 /* 52.93.127.18/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FC3 /* 52.93.127.195/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB0000 /* 52.219.0.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0F800 /* 54.240.248.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x456B0678 /* 69.107.6.120/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED04A /* 150.222.208.74/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA01 /* 150.222.234.1/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0207DFC /* 176.32.125.252/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220720 /* 13.34.7.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225980 /* 13.34.89.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6851A /* 15.230.133.26/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB282 /* 52.93.178.130/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F0000 /* 52.95.0.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x62500000 /* 98.80.0.0/12 */, 12, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DEB00 /* 99.77.235.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A0E8 /* 142.4.160.232/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA05 /* 150.222.234.5/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x9D980000 /* 157.152.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCDFBF600 /* 205.251.246.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03600000 /* 3.96.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220A80 /* 13.34.10.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224EE0 /* 13.34.78.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2259C0 /* 13.34.89.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC3000 /* 15.220.48.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6C500 /* 15.230.197.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F6C /* 52.93.127.108/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB29D /* 52.93.178.157/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2A8 /* 52.93.178.168/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E2000 /* 52.94.32.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36D80000 /* 54.216.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x456B03B8 /* 69.107.3.184/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03E8 /* 150.222.3.232/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE7A6A /* 150.222.122.106/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE87E /* 150.222.232.126/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA06 /* 150.222.234.6/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305FC00 /* 3.5.252.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2212C0 /* 13.34.18.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225140 /* 13.34.81.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCE800 /* 15.220.232.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10340000 /* 16.52.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x17140000 /* 23.20.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342EA800 /* 52.46.168.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D5B73 /* 52.93.91.115/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D9700 /* 52.93.151.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF850 /* 52.94.248.80/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4000 /* 64.252.64.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8F00 /* 99.77.143.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B85 /* 104.255.59.133/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03040100 /* 3.4.1.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222AC0 /* 13.34.42.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223E40 /* 13.34.62.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D380000 /* 13.56.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCB800 /* 15.220.184.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE610C4 /* 15.230.16.196/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62704 /* 15.230.39.4/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6271E /* 15.230.39.30/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FFB001C /* 15.251.0.28/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12B80000 /* 18.184.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7D2B /* 52.93.125.43/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F83 /* 52.93.127.131/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2B9 /* 52.93.178.185/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF09A /* 52.93.240.154/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC2D /* 54.240.236.45/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4815C000 /* 72.21.192.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC8000 /* 161.188.128.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCDFBC800 /* 205.251.200.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220D20 /* 13.34.13.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224F00 /* 13.34.79.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6270C /* 15.230.39.12/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627F2 /* 15.230.39.242/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE68D00 /* 15.230.141.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6A200 /* 15.230.162.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6A800 /* 15.230.168.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6FB06 /* 15.230.251.6/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23A00000 /* 35.160.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2BC20000 /* 43.194.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34300000 /* 52.48.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7C61 /* 52.93.124.97/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E980B /* 52.94.152.11/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EC650 /* 52.94.198.80/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8900 /* 99.77.137.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE874 /* 150.222.232.116/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xDF474780 /* 223.71.71.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022680 /* 3.2.38.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D200000 /* 13.32.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224B00 /* 13.34.75.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224D40 /* 13.34.77.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225880 /* 13.34.88.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D700000 /* 13.112.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB59000 /* 15.181.144.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62742 /* 15.230.39.66/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE65900 /* 15.230.89.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476000 /* 35.71.96.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2BC80000 /* 43.200.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34440000 /* 52.68.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490E740 /* 52.144.231.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36430000 /* 54.67.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352AD00 /* 99.82.173.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223BE0 /* 13.34.59.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5FE00 /* 15.181.254.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE648C0 /* 15.230.72.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x123C0000 /* 18.60.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34390000 /* 52.57.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7E7B /* 52.93.126.123/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E7C00 /* 52.94.124.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D3C0 /* 52.144.211.192/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63975000 /* 99.151.80.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x78FDF580 /* 120.253.245.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03B4 /* 150.222.3.180/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE6200 /* 150.222.98.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE6500 /* 150.222.101.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE78EA /* 150.222.120.234/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03240000 /* 3.36.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220100 /* 13.34.1.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DE00000 /* 13.224.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D20B8 /* 52.93.32.184/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D32B0 /* 52.93.50.176/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D79C5 /* 52.93.121.197/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F18 /* 52.93.127.24/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2D1 /* 52.93.178.209/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3477F000 /* 52.119.240.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36740000 /* 54.116.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF0050 /* 54.239.0.80/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0D800 /* 54.240.216.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63528000 /* 99.82.128.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352A600 /* 99.82.166.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A0C8 /* 142.4.160.200/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA6E /* 150.222.234.110/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC8E00 /* 161.188.142.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223320 /* 13.34.51.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2249A0 /* 13.34.73.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86100 /* 13.248.97.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12BE0000 /* 18.190.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3452A800 /* 52.82.168.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D3798 /* 52.93.55.152/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB28F /* 52.93.178.143/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE3A30 /* 54.222.58.48/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B77 /* 104.255.59.119/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE81FC /* 150.222.129.252/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED528 /* 150.222.213.40/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEF254 /* 150.222.242.84/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA2D5E800 /* 162.213.232.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223F20 /* 13.34.63.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62712 /* 15.230.39.18/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6CC02 /* 15.230.204.2/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D5B60 /* 52.93.91.96/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B86 /* 104.255.59.134/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE0B5C /* 150.222.11.92/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2205E0 /* 13.34.5.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221660 /* 13.34.22.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221FC0 /* 13.34.31.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222760 /* 13.34.39.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2238A0 /* 13.34.56.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223E00 /* 13.34.62.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225200 /* 13.34.82.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225AE0 /* 13.34.90.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC50800 /* 15.197.8.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6279A /* 15.230.39.154/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE646C0 /* 15.230.70.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23474800 /* 35.71.72.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D4900 /* 52.93.73.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D5B69 /* 52.93.91.105/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D5C48 /* 52.93.92.72/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB289 /* 52.93.178.137/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EC690 /* 52.94.198.144/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345ED000 /* 52.94.208.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FE300 /* 52.95.227.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36440000 /* 54.68.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x365D0000 /* 54.93.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x46840000 /* 70.132.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE0B5A /* 150.222.11.90/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE67C /* 150.222.230.124/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA1A /* 150.222.234.26/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223800 /* 13.34.56.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223A00 /* 13.34.58.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224280 /* 13.34.66.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224420 /* 13.34.68.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D320000 /* 13.50.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE63F02 /* 15.230.63.2/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FFB000C /* 15.251.0.12/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342C0000 /* 52.44.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x344C8000 /* 52.76.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D3790 /* 52.93.55.144/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB2000 /* 52.219.32.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x365F0000 /* 54.95.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36D40000 /* 54.212.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63570400 /* 99.87.4.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03B1 /* 150.222.3.177/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE4500 /* 150.222.69.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA54 /* 150.222.234.84/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEFCF6 /* 150.222.252.246/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB8200000 /* 184.32.0.0/12 */, 12, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03023100 /* 3.2.49.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305E400 /* 3.5.228.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220380 /* 13.34.3.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221E40 /* 13.34.30.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223F80 /* 13.34.63.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2241A0 /* 13.34.65.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0F9E0000 /* 15.158.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5B000 /* 15.181.176.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FBE0800 /* 15.190.8.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCCA00 /* 15.220.202.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6130C /* 15.230.19.12/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE68510 /* 15.230.133.16/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE69508 /* 15.230.149.8/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D0800 /* 52.93.8.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D5B6F /* 52.93.91.111/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7BFF /* 52.93.123.255/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7CD5 /* 52.93.124.213/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E9841 /* 52.94.152.65/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60000000 /* 96.0.0.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6F0DABC0 /* 111.13.171.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A080 /* 142.4.160.128/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03EC /* 150.222.3.236/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x97942500 /* 151.148.37.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x037C0000 /* 3.124.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222F00 /* 13.34.47.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB53000 /* 15.181.48.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE60413 /* 15.230.4.19/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3452B000 /* 52.82.176.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF096 /* 52.93.240.150/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490C2C0 /* 52.144.194.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36B70000 /* 54.183.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC21 /* 54.240.236.33/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC31 /* 54.240.236.49/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63537800 /* 99.83.120.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A040 /* 142.4.160.64/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03180000 /* 3.24.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223A40 /* 13.34.58.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224460 /* 13.34.68.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC51200 /* 15.197.18.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6DB00 /* 15.230.219.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x33700000 /* 51.112.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D8585 /* 52.93.133.133/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F2200 /* 52.95.34.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490E100 /* 52.144.225.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC0A /* 54.240.236.10/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B82 /* 104.255.59.130/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE0D00 /* 150.222.13.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE78FC /* 150.222.120.252/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x97942900 /* 151.148.41.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCDFBF700 /* 205.251.247.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022700 /* 3.2.39.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220540 /* 13.34.5.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224D60 /* 13.34.77.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2252A0 /* 13.34.82.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225740 /* 13.34.87.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF90000 /* 13.249.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC10600 /* 15.193.6.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627D4 /* 15.230.39.212/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64100 /* 15.230.65.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23477100 /* 35.71.113.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FB6 /* 52.93.127.182/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E98B1 /* 52.94.152.177/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC6700 /* 64.252.103.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A018 /* 142.4.160.24/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE1C7E /* 150.222.28.126/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE7A66 /* 150.222.122.102/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA84 /* 150.222.234.132/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223860 /* 13.34.56.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225220 /* 13.34.82.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15600 /* 15.177.86.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDD0800 /* 15.221.8.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDD3100 /* 15.221.49.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64C80 /* 15.230.76.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE65B00 /* 15.230.91.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6D000 /* 15.230.208.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12900000 /* 18.144.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12EE0000 /* 18.238.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12F40000 /* 18.244.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345A0000 /* 52.90.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D5B72 /* 52.93.91.114/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7B06 /* 52.93.123.6/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F69 /* 52.93.127.105/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D8AFD /* 52.93.138.253/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2D5 /* 52.93.178.213/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E9000 /* 52.94.144.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F9D00 /* 52.95.157.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D0C0 /* 52.144.208.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6CAF3400 /* 108.175.52.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x88121200 /* 136.18.18.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03E2 /* 150.222.3.226/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED058 /* 150.222.208.88/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE8E0 /* 150.222.232.224/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221E00 /* 13.34.30.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222200 /* 13.34.34.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224C00 /* 13.34.76.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC4000 /* 15.220.64.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCB000 /* 15.220.176.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE604A6 /* 15.230.4.166/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6AD00 /* 15.230.173.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6BE80 /* 15.230.190.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FFB0000 /* 15.251.0.0/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34000000 /* 52.0.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3452B800 /* 52.82.184.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DC1C6 /* 52.93.193.198/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DFA00 /* 52.93.250.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FB000 /* 52.95.176.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FFD00 /* 52.95.253.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF7800 /* 54.239.120.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8CB30000 /* 140.179.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A078 /* 142.4.160.120/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03C8 /* 150.222.3.200/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCDFBD000 /* 205.251.208.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xD06E3000 /* 208.110.48.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022500 /* 3.2.37.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03212300 /* 3.33.35.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222D80 /* 13.34.45.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6FE04 /* 15.230.254.4/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D0C0C /* 52.93.12.12/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FFF80 /* 52.95.255.128/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34D00000 /* 52.208.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF00D0 /* 54.239.0.208/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D0000 /* 99.77.0.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DEA00 /* 99.77.234.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x67F69600 /* 103.246.150.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE0A00 /* 150.222.10.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA0E /* 150.222.234.14/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA7E /* 150.222.234.126/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x97942400 /* 151.148.36.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03031C00 /* 3.3.28.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2216C0 /* 13.34.22.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2230E0 /* 13.34.48.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2259E0 /* 13.34.89.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87800 /* 13.248.120.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6092D /* 15.230.9.45/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627AA /* 15.230.39.170/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64C40 /* 15.230.76.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x103E0000 /* 16.62.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34360000 /* 52.54.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D0300 /* 52.93.3.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D379E /* 52.93.55.158/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D99B3 /* 52.93.153.179/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FE600 /* 52.95.230.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE5000 /* 54.222.80.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0E100 /* 54.240.225.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC55 /* 54.240.236.85/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634ED400 /* 99.78.212.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B8A /* 104.255.59.138/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03D0 /* 150.222.3.208/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE6A00 /* 150.222.106.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8176 /* 150.222.129.118/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE66C /* 150.222.230.108/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03053000 /* 3.5.48.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF84900 /* 13.248.73.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC9800 /* 15.220.152.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64D40 /* 15.230.77.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6A500 /* 15.230.165.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6B100 /* 15.230.177.0/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FFB0005 /* 15.251.0.5/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x344A0000 /* 52.74.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D32B6 /* 52.93.50.182/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36A80000 /* 54.168.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF3600 /* 54.239.54.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE819A /* 150.222.129.154/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED9FA /* 150.222.217.250/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220BC0 /* 13.34.11.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221FA0 /* 13.34.31.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223660 /* 13.34.54.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224040 /* 13.34.64.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15900 /* 15.177.89.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6049C /* 15.230.4.156/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE60E11 /* 15.230.14.17/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x129C0000 /* 18.156.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3452AA00 /* 52.82.170.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7EF4 /* 52.93.126.244/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D8581 /* 52.93.133.129/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F1800 /* 52.95.24.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F8C00 /* 52.95.140.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3477C400 /* 52.119.196.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490DA40 /* 52.144.218.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC7100 /* 64.252.113.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4F7D0000 /* 79.125.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8600 /* 99.77.134.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634E9000 /* 99.78.144.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022980 /* 3.2.41.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221658 /* 13.34.22.88/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2223C0 /* 13.34.35.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD60000 /* 13.214.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14D00 /* 15.177.77.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15A00 /* 15.177.90.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342EE000 /* 52.46.224.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D5B64 /* 52.93.91.100/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7E92 /* 52.93.126.146/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F9C00 /* 52.95.156.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36B40000 /* 54.180.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DFD00 /* 99.77.253.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE4700 /* 150.222.71.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE78E4 /* 150.222.120.228/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03040600 /* 3.4.6.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221080 /* 13.34.16.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223CA0 /* 13.34.60.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14F00 /* 15.177.79.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCD080 /* 15.220.208.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6277A /* 15.230.39.122/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE68512 /* 15.230.133.18/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6D200 /* 15.230.210.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C0200 /* 16.12.2.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D32BE /* 52.93.50.190/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FA000 /* 52.95.160.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36400000 /* 54.64.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6708AC00 /* 103.8.172.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE7A5C /* 150.222.122.92/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE662 /* 150.222.230.98/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0220000 /* 176.34.0.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220520 /* 13.34.5.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221940 /* 13.34.25.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2224E0 /* 13.34.36.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222C00 /* 13.34.44.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225180 /* 13.34.81.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62798 /* 15.230.39.152/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627B8 /* 15.230.39.184/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6D700 /* 15.230.215.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23477800 /* 35.71.120.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23500000 /* 35.80.0.0/12 */, 12, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2C2 /* 52.93.178.194/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2D2 /* 52.93.178.210/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB3E00 /* 52.219.62.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x456B06D8 /* 69.107.6.216/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D9300 /* 99.77.147.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DEC00 /* 99.77.236.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED04C /* 150.222.208.76/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221CE0 /* 13.34.28.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221DA0 /* 13.34.29.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2224A0 /* 13.34.36.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222D00 /* 13.34.45.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2242A0 /* 13.34.66.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2247A0 /* 13.34.71.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224900 /* 13.34.73.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224FA0 /* 13.34.79.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225420 /* 13.34.84.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC9000 /* 15.220.144.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62776 /* 15.230.39.118/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64140 /* 15.230.65.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2B8 /* 52.93.178.184/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF0B6 /* 52.93.240.182/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DF0000 /* 54.223.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF0030 /* 54.239.0.48/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF01E0 /* 54.239.1.224/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF4000 /* 54.239.64.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x41098000 /* 65.9.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8100 /* 99.77.129.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6CAF3C00 /* 108.175.60.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03BA /* 150.222.3.186/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE7A5E /* 150.222.122.94/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA6C /* 150.222.234.108/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2240C0 /* 13.34.64.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCC800 /* 15.220.200.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6272E /* 15.230.39.46/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62744 /* 15.230.39.68/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE68516 /* 15.230.133.22/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23478000 /* 35.71.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2BCC0000 /* 43.204.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2E33E000 /* 46.51.224.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x33540000 /* 51.84.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D4728 /* 52.93.71.40/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7C60 /* 52.93.124.96/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7CD4 /* 52.93.124.212/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F6F00 /* 52.95.111.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36B30000 /* 54.179.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0CB00 /* 54.240.203.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x43DCF000 /* 67.220.240.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x82B08000 /* 130.176.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8600 /* 150.222.134.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030226C0 /* 3.2.38.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03030800 /* 3.3.8.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221060 /* 13.34.16.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223200 /* 13.34.50.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223500 /* 13.34.53.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87F00 /* 13.248.127.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490E040 /* 52.144.224.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36AA0000 /* 54.170.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352AB00 /* 99.82.171.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x97942100 /* 151.148.33.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305A400 /* 3.5.164.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC6000 /* 15.220.96.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDD2100 /* 15.221.33.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6275C /* 15.230.39.92/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE63300 /* 15.230.51.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64000 /* 15.230.64.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64BC0 /* 15.230.75.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE65100 /* 15.230.81.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476200 /* 35.71.98.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB29F /* 52.93.178.159/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2BD /* 52.93.178.189/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF0A6 /* 52.93.240.166/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F9700 /* 52.95.151.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490C840 /* 52.144.200.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D380 /* 52.144.211.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490E9C0 /* 52.144.233.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x46E85800 /* 70.232.88.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8300 /* 99.77.131.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B7A /* 104.255.59.122/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03B2 /* 150.222.3.178/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8170 /* 150.222.129.112/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305F000 /* 3.5.240.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221F40 /* 13.34.31.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62786 /* 15.230.39.134/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE63100 /* 15.230.49.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23477000 /* 35.71.112.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23990000 /* 35.153.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x343D0000 /* 52.61.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x344F0000 /* 52.79.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D472C /* 52.93.71.44/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F71 /* 52.93.127.113/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D8900 /* 52.93.137.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E70000 /* 54.231.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63963000 /* 99.150.48.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE5900 /* 150.222.89.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEA4DE /* 150.222.164.222/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222D60 /* 13.34.45.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86000 /* 13.248.96.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDD2000 /* 15.221.32.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6277E /* 15.230.39.126/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64180 /* 15.230.65.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6B900 /* 15.230.185.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6BC80 /* 15.230.188.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7EFA /* 52.93.126.250/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F9B /* 52.93.127.155/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F9E00 /* 52.95.158.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490C080 /* 52.144.192.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490E980 /* 52.144.233.128/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34D80000 /* 52.216.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC22 /* 54.240.236.34/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63529000 /* 99.82.144.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352A900 /* 99.82.169.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A0D8 /* 142.4.160.216/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE5000 /* 150.222.80.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA64 /* 150.222.234.100/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCE400 /* 15.220.228.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE640C0 /* 15.230.64.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C3A00 /* 16.12.58.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x340C0000 /* 52.12.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D472D /* 52.93.71.45/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7EF5 /* 52.93.126.245/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D85AF /* 52.93.133.175/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF0CA /* 52.93.240.202/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DC0000 /* 52.220.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF0180 /* 54.239.1.128/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA2FAEC00 /* 162.250.236.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03040800 /* 3.4.8.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223280 /* 13.34.50.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2243A0 /* 13.34.67.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224B40 /* 13.34.75.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224E40 /* 13.34.78.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6278C /* 15.230.39.140/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FFB0002 /* 15.251.0.2/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A30000 /* 18.163.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342EFA00 /* 52.46.250.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D227A /* 52.93.34.122/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF0A8 /* 52.93.240.168/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E0500 /* 52.94.5.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490E480 /* 52.144.228.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490E6CE /* 52.144.230.206/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBD200 /* 52.219.210.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36C70000 /* 54.199.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8D00 /* 150.222.141.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DECD00 /* 150.222.205.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2210A0 /* 13.34.16.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62732 /* 15.230.39.50/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62792 /* 15.230.39.146/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64540 /* 15.230.69.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x128E0000 /* 18.142.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2E89C000 /* 46.137.192.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D5B70 /* 52.93.91.112/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2B5 /* 52.93.178.181/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34C80000 /* 52.200.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB6000 /* 52.219.96.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DF0000 /* 52.223.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE2000 /* 54.222.32.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC7B00 /* 64.252.123.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63977000 /* 99.151.112.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEA4D0 /* 150.222.164.208/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED90C /* 150.222.217.12/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCDFBE800 /* 205.251.232.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2233E0 /* 13.34.51.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224180 /* 13.34.65.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224D20 /* 13.34.77.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62720 /* 15.230.39.32/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6D600 /* 15.230.214.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12224000 /* 18.34.64.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22E00000 /* 34.224.0.0/12 */, 12, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x344B0000 /* 52.75.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3452A000 /* 52.82.160.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D7C2 /* 52.144.215.194/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60005800 /* 96.0.88.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634E8000 /* 99.78.128.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352A400 /* 99.82.164.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03EE /* 150.222.3.238/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE1C84 /* 150.222.28.132/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221F60 /* 13.34.31.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64840 /* 15.230.72.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7E8A /* 52.93.126.138/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D8DE4 /* 52.93.141.228/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D9950 /* 52.93.153.80/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB680 /* 52.93.182.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F9400 /* 52.95.148.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3AFE8A00 /* 58.254.138.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x88123200 /* 136.18.50.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222100 /* 13.34.33.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225820 /* 13.34.88.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14200 /* 15.177.66.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE68514 /* 15.230.133.20/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FDD /* 52.93.127.221/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF8E0 /* 52.94.248.224/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FA200 /* 52.95.162.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FFF30 /* 52.95.255.48/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DA0000 /* 54.218.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED700 /* 150.222.215.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03054C00 /* 3.5.76.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222800 /* 13.34.40.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222940 /* 13.34.41.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223680 /* 13.34.54.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC50400 /* 15.197.4.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6FE00 /* 15.230.254.0/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10A80000 /* 16.168.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D859B /* 52.93.133.155/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D8DD5 /* 52.93.141.213/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E1000 /* 52.94.16.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490C300 /* 52.144.195.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4E00 /* 64.252.78.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222580 /* 13.34.37.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB50000 /* 15.181.0.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6A400 /* 15.230.164.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C2400 /* 16.12.36.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2BFAC000 /* 43.250.192.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7CD3 /* 52.93.124.211/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7E85 /* 52.93.126.133/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF66E8 /* 54.239.102.232/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF7100 /* 54.239.113.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC7500 /* 64.252.117.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63976800 /* 99.151.104.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63978000 /* 99.151.128.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0207000 /* 176.32.112.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223FE0 /* 13.34.63.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224260 /* 13.34.66.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE69900 /* 15.230.153.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476600 /* 35.71.102.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D32A4 /* 52.93.50.164/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D78B3 /* 52.93.120.179/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF0C4 /* 52.93.240.196/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D1C0 /* 52.144.209.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490DA00 /* 52.144.218.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC05 /* 54.240.236.5/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63500000 /* 99.80.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03052C00 /* 3.5.44.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2229E0 /* 13.34.41.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222A40 /* 13.34.42.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222CE0 /* 13.34.44.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222F40 /* 13.34.47.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225680 /* 13.34.86.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6277C /* 15.230.39.124/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627C8 /* 15.230.39.200/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D4000 /* 52.93.64.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D5000 /* 52.93.80.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F46 /* 52.93.127.70/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E4500 /* 52.94.69.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E7800 /* 52.94.120.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34908520 /* 52.144.133.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF2898 /* 54.239.40.152/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC01 /* 54.240.236.1/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DBC00 /* 99.77.188.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE1C12 /* 150.222.28.18/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221540 /* 13.34.21.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221D40 /* 13.34.29.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222FE0 /* 13.34.47.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224F40 /* 13.34.79.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87900 /* 13.248.121.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627A6 /* 15.230.39.166/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2C0 /* 52.93.178.192/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E0A00 /* 52.94.10.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352AA00 /* 99.82.170.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221360 /* 13.34.19.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222320 /* 13.34.35.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223D40 /* 13.34.61.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2252E0 /* 13.34.82.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225340 /* 13.34.83.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87A00 /* 13.248.122.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FF82400 /* 15.248.36.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D3794 /* 52.93.55.148/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D471D /* 52.93.71.29/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F8B /* 52.93.127.139/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2C3 /* 52.93.178.195/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2DE /* 52.93.178.222/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FF900 /* 52.95.249.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E6D000 /* 54.230.208.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F40000 /* 54.244.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC5700 /* 64.252.87.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60006400 /* 96.0.100.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352AE00 /* 99.82.174.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B7B /* 104.255.59.123/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03F4 /* 150.222.3.244/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03FA /* 150.222.3.250/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8198 /* 150.222.129.152/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED9E4 /* 150.222.217.228/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA4A /* 150.222.234.74/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220BE0 /* 13.34.11.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223640 /* 13.34.54.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223BA0 /* 13.34.59.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225A40 /* 13.34.90.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2E89E000 /* 46.137.224.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F2A00 /* 52.95.42.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBB400 /* 52.219.180.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x41000000 /* 65.0.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63529C00 /* 99.82.156.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63965000 /* 99.150.80.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B7E /* 104.255.59.126/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03A00000 /* 3.160.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222040 /* 13.34.32.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223F60 /* 13.34.63.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F74 /* 52.93.127.116/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB285 /* 52.93.178.133/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2E0 /* 52.93.178.224/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3FF67000 /* 63.246.112.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3FF67700 /* 63.246.119.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x478D0800 /* 71.141.8.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE7A60 /* 150.222.122.96/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA8C /* 150.222.234.140/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222C40 /* 13.34.44.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223720 /* 13.34.55.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224DA0 /* 13.34.77.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6100C /* 15.230.16.12/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6B308 /* 15.230.179.8/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x32130000 /* 50.19.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F6B /* 52.93.127.107/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF098 /* 52.93.240.152/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF0C6 /* 52.93.240.198/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E9803 /* 52.94.152.3/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634F0000 /* 99.79.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x7481E200 /* 116.129.226.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE4900 /* 150.222.73.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEA4D3 /* 150.222.164.211/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2224C0 /* 13.34.36.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2242C0 /* 13.34.66.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FFB0003 /* 15.251.0.3/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CE00000 /* 44.224.0.0/11 */, 11, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34510000 /* 52.81.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D78B1 /* 52.93.120.177/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D87C3 /* 52.93.135.195/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DE8000 /* 52.222.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x478D0000 /* 71.141.0.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE6800 /* 150.222.104.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8113 /* 150.222.129.19/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222160 /* 13.34.33.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222680 /* 13.34.38.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223D00 /* 13.34.61.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDD0400 /* 15.221.4.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6276E /* 15.230.39.110/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64640 /* 15.230.70.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6DF04 /* 15.230.223.4/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FA1 /* 52.93.127.161/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FAC /* 52.93.127.172/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D340 /* 52.144.211.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE6D00 /* 150.222.109.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED044 /* 150.222.208.68/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03020300 /* 3.2.3.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2205C0 /* 13.34.5.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221D00 /* 13.34.29.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC50C00 /* 15.197.12.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A40000 /* 18.164.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7E89 /* 52.93.126.137/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D99B0 /* 52.93.153.176/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2C8 /* 52.93.178.200/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03D6 /* 150.222.3.214/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62600 /* 15.230.38.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62758 /* 15.230.39.88/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE68500 /* 15.230.133.0/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476700 /* 35.71.103.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x332C0000 /* 51.44.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7E8B /* 52.93.126.139/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F44 /* 52.93.127.68/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FAC00 /* 52.95.172.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4900 /* 64.252.73.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63974800 /* 99.151.72.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xAE810000 /* 174.129.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022B00 /* 3.2.43.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221C60 /* 13.34.28.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222060 /* 13.34.32.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225940 /* 13.34.89.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6AE00 /* 15.230.174.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FFB0014 /* 15.251.0.20/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476E00 /* 35.71.110.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D2278 /* 52.93.34.120/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FC6 /* 52.93.127.198/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D86B5 /* 52.93.134.181/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D8DEE /* 52.93.141.238/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2D3 /* 52.93.178.211/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FFF50 /* 52.95.255.80/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC6500 /* 64.252.101.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE5700 /* 150.222.87.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE818C /* 150.222.129.140/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA04 /* 150.222.234.4/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA50 /* 150.222.234.80/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022A40 /* 3.2.42.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2200A0 /* 13.34.0.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2213C0 /* 13.34.19.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222660 /* 13.34.38.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE61F00 /* 15.230.31.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D471F /* 52.93.71.31/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D99A9 /* 52.93.153.169/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2A9 /* 52.93.178.169/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E1600 /* 52.94.22.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FFF70 /* 52.95.255.112/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC02 /* 54.240.236.2/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60000C00 /* 96.0.12.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63535400 /* 99.83.84.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE81F8 /* 150.222.129.248/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA24 /* 150.222.234.36/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA2A /* 150.222.234.42/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022080 /* 3.2.32.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221C40 /* 13.34.28.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2220A0 /* 13.34.32.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225160 /* 13.34.81.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87600 /* 13.248.118.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5E000 /* 15.181.224.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCE300 /* 15.220.227.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE604A2 /* 15.230.4.162/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12D00000 /* 18.208.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7E83 /* 52.93.126.131/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF0CC /* 52.93.240.204/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FF500 /* 52.95.245.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8E00 /* 99.77.142.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DBB00 /* 99.77.187.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634EE800 /* 99.78.232.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022F00 /* 3.2.47.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2254C0 /* 13.34.84.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14900 /* 15.177.73.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDD3300 /* 15.221.51.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6BD00 /* 15.230.189.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6FA00 /* 15.230.250.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2E33D800 /* 46.51.216.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F61 /* 52.93.127.97/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FFD /* 52.93.127.253/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E983C /* 52.94.152.60/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490DF80 /* 52.144.223.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE78E2 /* 150.222.120.226/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8174 /* 150.222.129.116/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA56 /* 150.222.234.86/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEFCF4 /* 150.222.252.244/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0207DFE /* 176.32.125.254/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03054000 /* 3.5.64.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62700 /* 15.230.39.0/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE68600 /* 15.230.134.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE68C00 /* 15.230.140.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2BF92C00 /* 43.249.44.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D4B00 /* 52.93.75.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7B62 /* 52.93.123.98/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F65 /* 52.93.127.101/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F72 /* 52.93.127.114/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E98B4 /* 52.94.152.180/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF820 /* 52.94.248.32/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490E944 /* 52.144.233.68/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB2800 /* 52.219.40.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB8800 /* 52.219.136.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DC0000 /* 54.220.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634EF000 /* 99.78.240.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x64140000 /* 100.20.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE4A00 /* 150.222.74.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE87D /* 150.222.232.125/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0207DEC /* 176.32.125.236/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221880 /* 13.34.24.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D5B6C /* 52.93.91.108/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7EC7 /* 52.93.126.199/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F6A /* 52.93.127.106/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F7A /* 52.93.127.122/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF8A0 /* 52.94.248.160/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36970000 /* 54.151.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222B00 /* 13.34.43.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223420 /* 13.34.52.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223620 /* 13.34.54.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223A80 /* 13.34.58.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA10000 /* 15.161.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D815F /* 52.93.129.95/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D8DD6 /* 52.93.141.214/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DC1C4 /* 52.93.193.196/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E8400 /* 52.94.132.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE3400 /* 54.222.52.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC6E00 /* 64.252.110.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D9E00 /* 99.77.158.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DF100 /* 99.77.241.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6F0DB920 /* 111.13.185.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222340 /* 13.34.35.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12BC0000 /* 18.188.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12FC0000 /* 18.252.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2E338000 /* 46.51.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D8DE8 /* 52.93.141.232/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2A5 /* 52.93.178.165/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC6B00 /* 64.252.107.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC8000 /* 64.252.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63529800 /* 99.82.152.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352A700 /* 99.82.167.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE0E48 /* 150.222.14.72/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE6C00 /* 150.222.108.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE78F6 /* 150.222.120.246/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED048 /* 150.222.208.72/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0207D80 /* 176.32.125.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCDFBFE00 /* 205.251.254.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222A60 /* 13.34.42.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DE80000 /* 13.232.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC0000 /* 15.220.0.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FF81000 /* 15.248.16.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D32B4 /* 52.93.50.180/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB28E /* 52.93.178.142/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DE594 /* 52.93.229.148/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FF300 /* 52.95.243.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE1C74 /* 150.222.28.116/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED054 /* 150.222.208.84/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03058400 /* 3.5.132.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225840 /* 13.34.88.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D350000 /* 13.53.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87200 /* 13.248.114.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15800 /* 15.177.88.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB80000 /* 15.184.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC3800 /* 15.220.56.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6851C /* 15.230.133.28/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D472A /* 52.93.71.42/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB29C /* 52.93.178.156/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2B4 /* 52.93.178.180/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E3000 /* 52.94.48.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E6E000 /* 54.230.224.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC3D /* 54.240.236.61/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634EBC00 /* 99.78.188.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03FE /* 150.222.3.254/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE0F82 /* 150.222.15.130/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE819C /* 150.222.129.156/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA3E /* 150.222.234.62/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB8488000 /* 184.72.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCDFBF800 /* 205.251.248.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221FE0 /* 13.34.31.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC1000 /* 15.220.16.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F73 /* 52.93.127.115/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x456B0748 /* 69.107.7.72/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03F6 /* 150.222.3.246/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC8600 /* 161.188.134.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022940 /* 3.2.41.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220080 /* 13.34.0.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220120 /* 13.34.1.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2229A0 /* 13.34.41.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223380 /* 13.34.51.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223980 /* 13.34.57.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D330000 /* 13.51.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62726 /* 15.230.39.38/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627A8 /* 15.230.39.168/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627CC /* 15.230.39.204/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FC5 /* 52.93.127.197/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FCF /* 52.93.127.207/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E5000 /* 52.94.80.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EC670 /* 52.94.198.112/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0C500 /* 54.240.197.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x47980000 /* 71.152.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60000800 /* 96.0.8.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63534C00 /* 99.83.76.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63535000 /* 99.83.80.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B65 /* 104.255.59.101/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6CA6E800 /* 108.166.232.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE7A64 /* 150.222.122.100/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xD8892000 /* 216.137.32.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220EA0 /* 13.34.14.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222260 /* 13.34.34.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B50000 /* 35.181.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D8AFC /* 52.93.138.252/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D99AB /* 52.93.153.171/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FBE00 /* 52.95.190.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36500000 /* 54.80.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36D60000 /* 54.214.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36FE0000 /* 54.254.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634EB000 /* 99.78.176.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B7C /* 104.255.59.124/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8B7C /* 150.222.139.124/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86200 /* 13.248.98.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62710 /* 15.230.39.16/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6274E /* 15.230.39.78/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64D80 /* 15.230.77.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE68E00 /* 15.230.142.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6C900 /* 15.230.201.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34140000 /* 52.20.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EC900 /* 52.94.201.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF8D0 /* 52.94.248.208/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB1800 /* 52.219.24.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x456B06A8 /* 69.107.6.168/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4CDFAC00 /* 76.223.172.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352A100 /* 99.82.161.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE78FA /* 150.222.120.250/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCCF6AC00 /* 204.246.172.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224C40 /* 13.34.76.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225020 /* 13.34.80.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225720 /* 13.34.87.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF40000 /* 13.244.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2C5 /* 52.93.178.197/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF830 /* 52.94.248.48/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F20000 /* 54.242.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DFC00 /* 99.77.252.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63975800 /* 99.151.88.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA18 /* 150.222.234.24/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB148F000 /* 177.72.240.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xD8B6EE00 /* 216.182.238.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305A800 /* 3.5.168.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2206C0 /* 13.34.6.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223020 /* 13.34.48.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223180 /* 13.34.49.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224BE0 /* 13.34.75.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE60004 /* 15.230.0.4/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE61011 /* 15.230.16.17/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6A700 /* 15.230.167.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A80000 /* 18.168.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22D00000 /* 34.208.0.0/12 */, 12, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x340F0000 /* 52.15.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FED /* 52.93.127.237/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2E2 /* 52.93.178.226/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D180 /* 52.144.209.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC7C00 /* 64.252.124.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63536500 /* 99.83.101.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE000 /* 150.222.224.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221F20 /* 13.34.31.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223FA0 /* 13.34.63.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224660 /* 13.34.70.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDD1000 /* 15.221.16.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE604A0 /* 15.230.4.160/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6275E /* 15.230.39.94/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64040 /* 15.230.64.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D8DDA /* 52.93.141.218/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E6000 /* 52.94.96.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EC000 /* 52.94.192.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B76 /* 104.255.59.118/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6CAF3000 /* 108.175.48.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC9000 /* 161.188.144.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220840 /* 13.34.8.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220FA0 /* 13.34.15.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221760 /* 13.34.23.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222F20 /* 13.34.47.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225040 /* 13.34.80.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE61000 /* 15.230.16.0/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62724 /* 15.230.39.36/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE69400 /* 15.230.148.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12AC0000 /* 18.172.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12BD0000 /* 18.189.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23474000 /* 35.71.64.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D79BD /* 52.93.121.189/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7ADA /* 52.93.122.218/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2CC /* 52.93.178.204/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF0AE /* 52.93.240.174/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F3400 /* 52.95.52.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FB100 /* 52.95.177.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x456B0780 /* 69.107.7.128/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DB800 /* 99.77.184.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED05E /* 150.222.208.94/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE85D /* 150.222.232.93/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA60 /* 150.222.234.96/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03400000 /* 3.64.0.0/12 */, 12, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220220 /* 13.34.2.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220C60 /* 13.34.12.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6AA00 /* 15.230.170.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12580000 /* 18.88.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FB2 /* 52.93.127.178/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DFE00 /* 52.93.254.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FAF00 /* 52.95.175.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBA400 /* 52.219.164.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x46E84000 /* 70.232.64.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352AF00 /* 99.82.175.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63535800 /* 99.83.88.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63571000 /* 99.87.16.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x78342780 /* 120.52.39.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE1C78 /* 150.222.28.120/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE8A0 /* 150.222.232.160/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA2D5EA00 /* 162.213.234.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2237C0 /* 13.34.55.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223960 /* 13.34.57.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC8800 /* 15.220.136.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x1222F400 /* 18.34.244.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12C90000 /* 18.201.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D99A8 /* 52.93.153.168/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2BF /* 52.93.178.191/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FBA00 /* 52.95.186.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3477D600 /* 52.119.214.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D7CA /* 52.144.215.202/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36978000 /* 54.151.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE7000 /* 54.222.112.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC49 /* 54.240.236.73/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63570000 /* 99.87.0.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x76C16140 /* 118.193.97.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03FC /* 150.222.3.252/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA4C /* 150.222.234.76/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xD0565800 /* 208.86.88.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221460 /* 13.34.20.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225640 /* 13.34.86.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE60EF8 /* 15.230.14.248/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6274A /* 15.230.39.74/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627BA /* 15.230.39.186/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE65A00 /* 15.230.90.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12AF0000 /* 18.175.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x33640000 /* 51.100.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342ED800 /* 52.46.216.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FCB /* 52.93.127.203/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36D00000 /* 54.208.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E40000 /* 54.228.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC0D /* 54.240.236.13/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A030 /* 142.4.160.48/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED05A /* 150.222.208.90/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED529 /* 150.222.213.41/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x97942300 /* 151.148.35.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2241C0 /* 13.34.65.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC9200 /* 15.220.146.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7ECD /* 52.93.126.205/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F93 /* 52.93.127.147/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D85B5 /* 52.93.133.181/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FF600 /* 52.95.246.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D702 /* 52.144.215.2/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF0150 /* 54.239.1.80/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63534000 /* 99.83.64.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA40 /* 150.222.234.64/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225460 /* 13.34.84.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225480 /* 13.34.84.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2257C0 /* 13.34.87.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D300000 /* 13.48.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62738 /* 15.230.39.56/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627B6 /* 15.230.39.182/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627E6 /* 15.230.39.230/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FF84000 /* 15.248.64.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34400000 /* 52.64.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D4729 /* 52.93.71.41/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FEF00 /* 52.95.239.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3477D200 /* 52.119.210.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B84 /* 104.255.59.132/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8145 /* 150.222.129.69/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xC3110000 /* 195.17.0.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220580 /* 13.34.5.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2221A0 /* 13.34.33.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225860 /* 13.34.88.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDD1800 /* 15.221.24.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627BC /* 15.230.39.188/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627EC /* 15.230.39.236/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE63600 /* 15.230.54.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12DC0000 /* 18.220.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34240000 /* 52.36.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB28D /* 52.93.178.141/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E7000 /* 52.94.112.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x365E0000 /* 54.94.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x456B06A0 /* 69.107.6.160/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634EB800 /* 99.78.184.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A0A8 /* 142.4.160.168/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8140 /* 150.222.129.64/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DECF00 /* 150.222.207.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEED00 /* 150.222.237.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224160 /* 13.34.65.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2248C0 /* 13.34.72.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0F980000 /* 15.152.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCE200 /* 15.220.226.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64CC0 /* 15.230.76.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64D00 /* 15.230.77.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6A904 /* 15.230.169.4/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FB4 /* 52.93.127.180/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DC1C5 /* 52.93.193.197/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF800 /* 52.93.248.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EC630 /* 52.94.198.48/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FE400 /* 52.95.228.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE8000 /* 54.222.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x607F0000 /* 96.127.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x88121400 /* 136.18.20.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC8400 /* 161.188.132.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03041000 /* 3.4.16.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2219C0 /* 13.34.25.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2225C0 /* 13.34.37.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDD3500 /* 15.221.53.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE65500 /* 15.230.85.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D3290 /* 52.93.50.144/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FF6 /* 52.93.127.246/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D8DF0 /* 52.93.141.240/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2E3 /* 52.93.178.227/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EE000 /* 52.94.224.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF01F0 /* 54.239.1.240/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x444F0000 /* 68.79.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x456B0750 /* 69.107.7.80/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x456B0768 /* 69.107.7.104/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x62820000 /* 98.130.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8000 /* 99.77.128.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE5800 /* 150.222.88.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA8A /* 150.222.234.138/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xDF474760 /* 223.71.71.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305F800 /* 3.5.248.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D12B3 /* 52.93.18.179/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7E93 /* 52.93.126.147/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E983E /* 52.94.152.62/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EC400 /* 52.94.196.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36D70000 /* 54.215.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A0D0 /* 142.4.160.208/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE200 /* 150.222.226.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE670 /* 150.222.230.112/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224740 /* 13.34.71.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225320 /* 13.34.83.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225780 /* 13.34.87.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6F000 /* 15.230.240.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12B60000 /* 18.182.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2BDA0000 /* 43.218.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2AF /* 52.93.178.175/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490E6D0 /* 52.144.230.208/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36980000 /* 54.152.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DF300 /* 99.77.243.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x97942000 /* 151.148.32.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0207DF0 /* 176.32.125.240/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03020800 /* 3.2.8.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2210C0 /* 13.34.16.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221AC0 /* 13.34.26.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12B20000 /* 18.178.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D4725 /* 52.93.71.37/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7EEA /* 52.93.126.234/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB283 /* 52.93.178.131/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2D9 /* 52.93.178.217/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FA400 /* 52.95.164.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D080 /* 52.144.208.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D540 /* 52.144.213.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36CA0000 /* 54.202.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0D000 /* 54.240.208.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63967800 /* 99.150.120.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DECC00 /* 150.222.204.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE8C0 /* 150.222.232.192/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA14 /* 150.222.234.20/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220EE0 /* 13.34.14.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221280 /* 13.34.18.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221C20 /* 13.34.28.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222D20 /* 13.34.45.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF84700 /* 13.248.71.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB58000 /* 15.181.128.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6278A /* 15.230.39.138/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627E0 /* 15.230.39.224/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64500 /* 15.230.69.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6D900 /* 15.230.217.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C0800 /* 16.12.8.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x109C0000 /* 16.156.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10AA0000 /* 16.170.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12840000 /* 18.132.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34460000 /* 52.70.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D74FA /* 52.93.116.250/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2D6 /* 52.93.178.214/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF800 /* 52.94.248.0/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3477D400 /* 52.119.212.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D80A /* 52.144.216.10/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF6300 /* 54.239.99.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60003800 /* 96.0.56.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6CA6E000 /* 108.166.224.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE33C0 /* 150.222.51.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE676 /* 150.222.230.118/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223080 /* 13.34.48.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223C20 /* 13.34.60.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224A00 /* 13.34.74.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCCC00 /* 15.220.204.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE609F8 /* 15.230.9.248/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64280 /* 15.230.66.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6FF00 /* 15.230.255.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D471C /* 52.93.71.28/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7B0B /* 52.93.123.11/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FE8 /* 52.93.127.232/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F6E00 /* 52.95.110.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC3E /* 54.240.236.62/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE7300 /* 150.222.115.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE633 /* 150.222.230.51/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA82 /* 150.222.234.130/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220EC0 /* 13.34.14.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14600 /* 15.177.70.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62762 /* 15.230.39.98/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627F8 /* 15.230.39.248/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64E80 /* 15.230.78.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FEC0000 /* 15.236.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x129A0000 /* 18.154.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D32A8 /* 52.93.50.168/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F13 /* 52.93.127.19/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FD8 /* 52.93.127.216/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FF7 /* 52.93.127.247/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB287 /* 52.93.178.135/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D3C6 /* 52.144.211.198/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBA000 /* 52.219.160.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE4700 /* 54.222.71.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC5400 /* 64.252.84.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60005400 /* 96.0.84.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DFE00 /* 99.77.254.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB8480000 /* 184.72.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224E60 /* 13.34.78.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2250E0 /* 13.34.80.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D7D0000 /* 13.125.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF81800 /* 13.248.24.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86700 /* 13.248.103.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC51C00 /* 15.197.28.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62734 /* 15.230.39.52/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627A0 /* 15.230.39.160/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64580 /* 15.230.69.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x109A0000 /* 16.154.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476400 /* 35.71.100.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2BC30000 /* 43.195.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D37A0 /* 52.93.55.160/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D000 /* 52.144.208.0/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36C10000 /* 54.193.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE3B00 /* 54.222.59.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x39680000 /* 57.104.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x46E85C00 /* 70.232.92.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DF700 /* 99.77.247.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8C00 /* 150.222.140.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA20 /* 150.222.234.32/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022040 /* 3.2.32.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220900 /* 13.34.9.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627DA /* 15.230.39.218/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6FB02 /* 15.230.251.2/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D4727 /* 52.93.71.39/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D99AE /* 52.93.153.174/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F3D00 /* 52.95.61.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB7C00 /* 52.219.124.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBE800 /* 52.219.232.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC52 /* 54.240.236.82/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0F100 /* 54.240.241.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC5800 /* 64.252.88.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA30 /* 150.222.234.48/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA7A /* 150.222.234.122/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEB00 /* 150.222.235.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0207DE8 /* 176.32.125.232/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF81000 /* 13.248.16.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5F500 /* 15.181.245.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62752 /* 15.230.39.82/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627D2 /* 15.230.39.210/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF09C /* 52.93.240.156/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D002 /* 52.144.208.2/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F08000 /* 54.240.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC06 /* 54.240.236.6/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63976000 /* 99.151.96.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B58 /* 104.255.59.88/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE0C00 /* 150.222.12.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE7400 /* 150.222.116.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCDFBFA00 /* 205.251.250.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB16100 /* 15.177.97.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627D8 /* 15.230.39.216/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE68518 /* 15.230.133.24/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6950A /* 15.230.149.10/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6F700 /* 15.230.247.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23474400 /* 35.71.68.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34080000 /* 52.8.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D5C40 /* 52.93.92.64/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D79C4 /* 52.93.121.196/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7E91 /* 52.93.126.145/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7ECC /* 52.93.126.204/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E9844 /* 52.94.152.68/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF9C0 /* 52.94.249.192/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F9800 /* 52.95.152.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FF700 /* 52.95.247.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBAC00 /* 52.219.172.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC5300 /* 64.252.83.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA88 /* 150.222.234.136/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220F00 /* 13.34.15.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223AA0 /* 13.34.58.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14000 /* 15.177.64.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC10900 /* 15.193.9.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62714 /* 15.230.39.20/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FFB0019 /* 15.251.0.25/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2E33D000 /* 46.51.208.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34560000 /* 52.86.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FF4 /* 52.93.127.244/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2BC /* 52.93.178.188/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2C9 /* 52.93.178.201/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF01A0 /* 54.239.1.160/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF01D0 /* 54.239.1.208/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x39B40000 /* 57.180.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC5000 /* 64.252.80.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A058 /* 142.4.160.88/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03DA /* 150.222.3.218/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEB400 /* 150.222.180.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB4A33900 /* 180.163.57.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222520 /* 13.34.37.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2253E0 /* 13.34.83.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12880000 /* 18.136.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x32700000 /* 50.112.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D5B71 /* 52.93.91.113/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D6100 /* 52.93.97.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FCE /* 52.93.127.206/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D8BFA /* 52.93.139.250/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA0A /* 150.222.234.10/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022140 /* 3.2.33.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030223C0 /* 3.2.35.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022B40 /* 3.2.43.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03031000 /* 3.3.16.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222840 /* 13.34.40.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2255C0 /* 13.34.85.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD40000 /* 13.212.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC58000 /* 15.197.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCE900 /* 15.220.233.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62772 /* 15.230.39.114/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62796 /* 15.230.39.150/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64740 /* 15.230.71.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12B30000 /* 18.179.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FA2 /* 52.93.127.162/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D9C00 /* 52.93.156.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E8800 /* 52.94.136.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F8A00 /* 52.95.138.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBC800 /* 52.219.200.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC6400 /* 64.252.100.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE78E8 /* 150.222.120.232/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE65E /* 150.222.230.94/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCDFBE000 /* 205.251.224.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305D800 /* 3.5.216.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03820000 /* 3.130.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2238C0 /* 13.34.56.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D390000 /* 13.57.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D7E0000 /* 13.126.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DCA0000 /* 13.202.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB54000 /* 15.181.64.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE643C0 /* 15.230.67.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FFB000D /* 15.251.0.13/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FFB001D /* 15.251.0.29/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10190000 /* 16.25.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D99AF /* 52.93.153.175/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF0AC /* 52.93.240.172/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBCA00 /* 52.219.202.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF0400 /* 54.239.4.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x46E86000 /* 70.232.96.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8C00 /* 99.77.140.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B7F /* 104.255.59.127/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03B7 /* 150.222.3.183/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE33E0 /* 150.222.51.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE880 /* 150.222.232.128/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022780 /* 3.2.39.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627DE /* 15.230.39.222/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10100000 /* 16.16.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E0E00 /* 52.94.14.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EC640 /* 52.94.198.64/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3477D800 /* 52.119.216.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE5900 /* 54.222.89.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE81F2 /* 150.222.129.242/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE672 /* 150.222.230.114/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220B00 /* 13.34.11.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224080 /* 13.34.64.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224560 /* 13.34.69.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224BC0 /* 13.34.75.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224E20 /* 13.34.78.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FCE0000 /* 15.206.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6CC03 /* 15.230.204.3/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x32120000 /* 50.18.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x340E0000 /* 52.14.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342E0000 /* 52.46.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342E5800 /* 52.46.88.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60004800 /* 96.0.72.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03CA /* 150.222.3.202/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE81E2 /* 150.222.129.226/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE678 /* 150.222.230.120/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xDF470B00 /* 223.71.11.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03030600 /* 3.3.6.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2210E0 /* 13.34.16.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2240E0 /* 13.34.64.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE61012 /* 15.230.16.18/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64400 /* 15.230.68.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6CC00 /* 15.230.204.0/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D3F00 /* 52.93.63.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D78B0 /* 52.93.120.176/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2A7 /* 52.93.178.167/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36AC0000 /* 54.172.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x47890000 /* 71.137.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x88121500 /* 136.18.21.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE0B58 /* 150.222.11.88/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEF00 /* 150.222.239.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0224000 /* 176.34.64.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03059200 /* 3.5.146.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2225E0 /* 13.34.37.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2249E0 /* 13.34.73.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF88000 /* 13.248.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6A000 /* 15.230.160.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476D00 /* 35.71.109.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34528000 /* 52.82.128.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D79BB /* 52.93.121.187/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F5E /* 52.93.127.94/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FC8 /* 52.93.127.200/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E98B7 /* 52.94.152.183/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FFF60 /* 52.95.255.96/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DF900 /* 99.77.249.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63536200 /* 99.83.98.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63965800 /* 99.150.88.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A010 /* 142.4.160.16/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE5300 /* 150.222.83.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED046 /* 150.222.208.70/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223C00 /* 13.34.60.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224680 /* 13.34.70.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE69C00 /* 15.230.156.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FFB000E /* 15.251.0.14/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12CC0000 /* 18.204.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B20000 /* 35.178.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D5B6E /* 52.93.91.110/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F81 /* 52.93.127.129/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2C4 /* 52.93.178.196/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E0900 /* 52.94.9.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345ECC00 /* 52.94.204.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FB400 /* 52.95.180.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36580000 /* 54.88.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4B020000 /* 75.2.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634EC000 /* 99.78.192.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03CE /* 150.222.3.206/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222960 /* 13.34.41.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224A80 /* 13.34.74.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E7400 /* 52.94.116.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D7C8 /* 52.144.215.200/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC7700 /* 64.252.119.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED400 /* 150.222.212.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xD0565A00 /* 208.86.90.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224440 /* 13.34.68.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2248E0 /* 13.34.72.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224DE0 /* 13.34.77.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5F800 /* 15.181.248.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62716 /* 15.230.39.22/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627FC /* 15.230.39.252/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6BC00 /* 15.230.188.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FFB0015 /* 15.251.0.21/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x1222FC00 /* 18.34.252.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x341D0000 /* 52.29.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F5C /* 52.93.127.92/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FAF /* 52.93.127.175/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E0F00 /* 52.94.15.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F2300 /* 52.95.35.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F3E00 /* 52.95.62.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F9000 /* 52.95.144.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490C240 /* 52.144.194.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D100 /* 52.144.209.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC39 /* 54.240.236.57/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B83 /* 104.255.59.131/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE664 /* 150.222.230.100/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA72 /* 150.222.234.114/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222B40 /* 13.34.43.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D340000 /* 13.52.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE63B00 /* 15.230.59.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE63F06 /* 15.230.63.6/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C0900 /* 16.12.9.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10B00000 /* 16.176.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12B40000 /* 18.180.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2E898000 /* 46.137.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D0200 /* 52.93.2.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D3286 /* 52.93.50.134/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FB7 /* 52.93.127.183/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D8BF8 /* 52.93.139.248/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB280 /* 52.93.178.128/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF8B0 /* 52.94.248.176/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FB800 /* 52.95.184.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E60000 /* 54.230.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E68000 /* 54.230.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE1C68 /* 150.222.28.104/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE66E /* 150.222.230.110/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA76 /* 150.222.234.118/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03020200 /* 3.2.2.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030220C0 /* 3.2.32.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220440 /* 13.34.4.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221A20 /* 13.34.26.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221C80 /* 13.34.28.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222780 /* 13.34.39.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2230A0 /* 13.34.48.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF60000 /* 13.246.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDD0200 /* 15.221.2.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6049A /* 15.230.4.154/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64F80 /* 15.230.79.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE69504 /* 15.230.149.4/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D6300 /* 52.93.99.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F47 /* 52.93.127.71/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D8DF4 /* 52.93.141.244/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF9F0 /* 52.94.249.240/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F2800 /* 52.95.40.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FFE00 /* 52.95.254.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490E4C0 /* 52.144.228.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC6800 /* 64.252.104.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x456B06D0 /* 69.107.6.208/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE860 /* 150.222.232.96/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE8E2 /* 150.222.232.226/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0204000 /* 176.32.64.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221780 /* 13.34.23.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222980 /* 13.34.41.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222FC0 /* 13.34.47.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D360000 /* 13.54.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DC80000 /* 13.200.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF83000 /* 13.248.48.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6F600 /* 15.230.246.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FF81800 /* 15.248.24.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D3283 /* 52.93.50.131/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DC1CA /* 52.93.193.202/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F8E00 /* 52.95.142.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FEB00 /* 52.95.235.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FF100 /* 52.95.241.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490E940 /* 52.144.233.64/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF8000 /* 54.239.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4200 /* 64.252.66.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC5200 /* 64.252.82.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D9000 /* 99.77.144.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634EA000 /* 99.78.160.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6397BC00 /* 99.151.188.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x82B0E000 /* 130.176.224.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A0F0 /* 142.4.160.240/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE0B4A /* 150.222.11.74/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE1C80 /* 150.222.28.128/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE4800 /* 150.222.72.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE78E0 /* 150.222.120.224/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE872 /* 150.222.232.114/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030C0000 /* 3.12.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D7C0000 /* 13.124.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6092E /* 15.230.9.46/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE69000 /* 15.230.144.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE69D00 /* 15.230.157.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6B500 /* 15.230.181.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476F00 /* 35.71.111.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2467E880 /* 36.103.232.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34540000 /* 52.84.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7A83 /* 52.93.122.131/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FFF /* 52.93.127.255/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D8583 /* 52.93.133.131/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E1200 /* 52.94.18.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF890 /* 52.94.248.144/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34C00000 /* 52.192.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBC200 /* 52.219.194.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63964800 /* 99.150.72.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE6E00 /* 150.222.110.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA0C /* 150.222.234.12/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03030500 /* 3.3.5.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222EA0 /* 13.34.46.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225280 /* 13.34.82.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE60E14 /* 15.230.14.20/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE63F00 /* 15.230.63.0/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D2239 /* 52.93.34.57/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2A2 /* 52.93.178.162/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E0D00 /* 52.94.13.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490E942 /* 52.144.233.66/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x364E0000 /* 54.78.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8B00 /* 99.77.139.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352A000 /* 99.82.160.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE0F80 /* 150.222.15.128/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE819E /* 150.222.129.158/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE81FA /* 150.222.129.250/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED911 /* 150.222.217.17/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x97940800 /* 151.148.8.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCCF6A000 /* 204.246.160.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222B20 /* 13.34.43.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223F40 /* 13.34.63.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224820 /* 13.34.72.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC10400 /* 15.193.4.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64700 /* 15.230.71.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6CB00 /* 15.230.203.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23477400 /* 35.71.116.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D5C46 /* 52.93.92.70/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF09E /* 52.93.240.158/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF6A00 /* 54.239.106.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x47840000 /* 71.132.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63962800 /* 99.150.40.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE78F0 /* 150.222.120.240/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE876 /* 150.222.232.118/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022180 /* 3.2.33.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305D400 /* 3.5.212.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305DC00 /* 3.5.220.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2205A0 /* 13.34.5.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2233A0 /* 13.34.51.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2243C0 /* 13.34.67.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2257A0 /* 13.34.87.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14800 /* 15.177.72.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62740 /* 15.230.39.64/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62A00 /* 15.230.42.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE63700 /* 15.230.55.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34020000 /* 52.2.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D4720 /* 52.93.71.32/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F7D /* 52.93.127.125/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E9842 /* 52.94.152.66/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D680 /* 52.144.214.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE4C00 /* 54.222.76.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC6A00 /* 64.252.106.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x67040800 /* 103.4.8.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B69 /* 104.255.59.105/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03E4 /* 150.222.3.228/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE1C11 /* 150.222.28.17/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0206000 /* 176.32.96.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB8484000 /* 184.72.64.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030229C0 /* 3.2.41.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2222A0 /* 13.34.34.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222EE0 /* 13.34.46.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86C00 /* 13.248.108.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE609FC /* 15.230.9.252/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FFB000F /* 15.251.0.15/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7C0E /* 52.93.124.14/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7ECE /* 52.93.126.206/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF092 /* 52.93.240.146/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F6C00 /* 52.95.108.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490C100 /* 52.144.193.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634EA800 /* 99.78.168.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6CA6F800 /* 108.166.248.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8FCC0000 /* 143.204.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE5B00 /* 150.222.91.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221100 /* 13.34.17.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2213E0 /* 13.34.19.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222AE0 /* 13.34.42.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224300 /* 13.34.67.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225120 /* 13.34.81.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2251C0 /* 13.34.81.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5C000 /* 15.181.192.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D37A6 /* 52.93.55.166/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7B88 /* 52.93.123.136/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB290 /* 52.93.178.144/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB29A /* 52.93.178.154/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF0A2 /* 52.93.240.162/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E1700 /* 52.94.23.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F3000 /* 52.95.48.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB7800 /* 52.219.120.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE4200 /* 54.222.66.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0E800 /* 54.240.232.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x456B0730 /* 69.107.7.48/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DBE00 /* 99.77.190.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634EE400 /* 99.78.228.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03BD /* 150.222.3.189/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8F00 /* 150.222.143.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA1C /* 150.222.234.28/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022380 /* 3.2.35.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223840 /* 13.34.56.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86A00 /* 13.248.106.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE68511 /* 15.230.133.17/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6CC01 /* 15.230.204.1/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6DC00 /* 15.230.220.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FFD0000 /* 15.253.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F6F /* 52.93.127.111/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3477E000 /* 52.119.224.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB4000 /* 52.219.64.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EE0000 /* 54.238.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63961000 /* 99.150.16.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE1C6E /* 150.222.28.110/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE7500 /* 150.222.117.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xD8B6E800 /* 216.182.232.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03780000 /* 3.120.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2239A0 /* 13.34.57.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5FC00 /* 15.181.252.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12C60000 /* 18.198.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34090000 /* 52.9.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D2600 /* 52.93.38.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E9845 /* 52.94.152.69/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D804 /* 52.144.216.4/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB8000 /* 52.219.128.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x456B0700 /* 69.107.7.0/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8D00 /* 99.77.141.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEC400 /* 150.222.196.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03212C00 /* 3.33.44.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222400 /* 13.34.36.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222AA0 /* 13.34.42.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FF81400 /* 15.248.20.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FFB0008 /* 15.251.0.8/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x1B000000 /* 27.0.0.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342EB400 /* 52.46.180.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D6200 /* 52.93.98.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D9205 /* 52.93.146.5/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB292 /* 52.93.178.146/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E980C /* 52.94.152.12/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490E982 /* 52.144.233.130/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC29 /* 54.240.236.41/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x456B0770 /* 69.107.7.112/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03880000 /* 3.136.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86300 /* 13.248.99.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC9400 /* 15.220.148.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE60E0C /* 15.230.14.12/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE65300 /* 15.230.83.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2BC00000 /* 43.192.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D25DF /* 52.93.37.223/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D79BC /* 52.93.121.188/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2B2 /* 52.93.178.178/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF8C0 /* 52.94.248.192/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC5E /* 54.240.236.94/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEDF00 /* 150.222.223.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222C20 /* 13.34.44.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225A00 /* 13.34.90.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87000 /* 13.248.112.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6271A /* 15.230.39.26/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE69100 /* 15.230.145.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36140000 /* 54.20.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF7300 /* 54.239.115.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC7800 /* 64.252.120.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6397B800 /* 99.151.184.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03B3 /* 150.222.3.179/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03C0 /* 150.222.3.192/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE1C8A /* 150.222.28.138/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03059000 /* 3.5.144.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222360 /* 13.34.35.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE60E16 /* 15.230.14.22/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE68300 /* 15.230.131.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6B600 /* 15.230.182.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6DE00 /* 15.230.222.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10180000 /* 16.24.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D328A /* 52.93.50.138/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D5C42 /* 52.93.92.66/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F5F /* 52.93.127.95/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F94 /* 52.93.127.148/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF870 /* 52.94.248.112/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x90DC0000 /* 144.220.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA10 /* 150.222.234.16/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA1E /* 150.222.234.30/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223CC0 /* 13.34.60.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223D60 /* 13.34.61.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2246A0 /* 13.34.70.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5F200 /* 15.181.242.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC50200 /* 15.197.2.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDD1400 /* 15.221.20.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64680 /* 15.230.70.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE65C00 /* 15.230.92.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6F500 /* 15.230.245.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FF80800 /* 15.248.8.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D3298 /* 52.93.50.152/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D8DE2 /* 52.93.141.226/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2B0 /* 52.93.178.176/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EC620 /* 52.94.198.32/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E80000 /* 54.232.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x783499C0 /* 120.52.153.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE67E /* 150.222.230.126/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xC77FE800 /* 199.127.232.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220F80 /* 13.34.15.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222A00 /* 13.34.42.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223C60 /* 13.34.60.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2241E0 /* 13.34.65.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2245A0 /* 13.34.69.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14E00 /* 15.177.78.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC10000 /* 15.193.0.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6000E /* 15.230.0.14/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE61312 /* 15.230.19.18/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6274C /* 15.230.39.76/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE647C0 /* 15.230.71.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34420000 /* 52.66.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FFA /* 52.93.127.250/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF0B8 /* 52.93.240.184/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBDA00 /* 52.219.218.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF0040 /* 54.239.0.64/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352B000 /* 99.82.176.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE660 /* 150.222.230.96/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCCECC000 /* 204.236.192.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222CC0 /* 13.34.44.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2247C0 /* 13.34.71.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE65000 /* 15.230.80.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23A80000 /* 35.168.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34408000 /* 52.64.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F78 /* 52.93.127.120/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B88 /* 104.255.59.136/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA03 /* 150.222.234.3/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220AA0 /* 13.34.10.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222E80 /* 13.34.46.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2237E0 /* 13.34.55.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225100 /* 13.34.81.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2258A0 /* 13.34.88.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225900 /* 13.34.89.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD10000 /* 13.209.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB52800 /* 15.181.40.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12223000 /* 18.34.48.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x1222E800 /* 18.34.232.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x128C0000 /* 18.140.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x343C0000 /* 52.60.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x344E0000 /* 52.78.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7495 /* 52.93.116.149/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB281 /* 52.93.178.129/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB291 /* 52.93.178.145/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DC1C0 /* 52.93.193.192/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBDC00 /* 52.219.220.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x456B03B0 /* 69.107.3.176/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x482C2000 /* 72.44.32.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE1C69 /* 150.222.28.105/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCDFBEC00 /* 205.251.236.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2234C0 /* 13.34.52.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB51000 /* 15.181.16.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB56000 /* 15.181.96.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCC000 /* 15.220.192.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDD0300 /* 15.221.3.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FF82000 /* 15.248.32.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345C0000 /* 52.92.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FCA /* 52.93.127.202/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC2E /* 54.240.236.46/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63967000 /* 99.150.112.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D3A0000 /* 13.58.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D331D /* 52.93.51.29/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2C7 /* 52.93.178.199/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34779800 /* 52.119.152.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36C20000 /* 54.194.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0F400 /* 54.240.244.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x456B0760 /* 69.107.7.96/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4CDFAA00 /* 76.223.170.0/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE6600 /* 150.222.102.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2215C0 /* 13.34.21.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224360 /* 13.34.67.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D0100 /* 52.93.1.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D32A0 /* 52.93.50.160/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D379A /* 52.93.55.154/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D83D9 /* 52.93.131.217/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E1E00 /* 52.94.30.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC35 /* 54.240.236.53/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC4D /* 54.240.236.77/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC5D /* 54.240.236.93/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03620000 /* 3.98.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221120 /* 13.34.17.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2246C0 /* 13.34.70.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62784 /* 15.230.39.132/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D3284 /* 52.93.50.132/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36420000 /* 54.66.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DF200 /* 99.77.242.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A0A0 /* 142.4.160.160/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A108 /* 142.4.161.8/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE0F7E /* 150.222.15.126/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE81FF /* 150.222.129.255/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA74 /* 150.222.234.116/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEC00 /* 150.222.236.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA2DE9400 /* 162.222.148.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03040200 /* 3.4.2.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220460 /* 13.34.4.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2207C0 /* 13.34.7.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221F00 /* 13.34.31.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14B00 /* 15.177.75.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCF000 /* 15.220.240.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE61800 /* 15.230.24.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62782 /* 15.230.39.130/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34180000 /* 52.24.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342EAA00 /* 52.46.170.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F3800 /* 52.95.56.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3477A000 /* 52.119.160.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DE0000 /* 52.222.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4100 /* 64.252.65.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x7793B600 /* 119.147.182.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220920 /* 13.34.9.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223E60 /* 13.34.62.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF84100 /* 13.248.65.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FFB0017 /* 15.251.0.23/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D4500 /* 52.93.69.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D8DF2 /* 52.93.141.242/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB297 /* 52.93.178.151/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D2C0 /* 52.144.210.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490E986 /* 52.144.233.134/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF0190 /* 54.239.1.144/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x78E8EC00 /* 120.232.236.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA28 /* 150.222.234.40/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03023000 /* 3.2.48.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030D0000 /* 3.13.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03F80000 /* 3.248.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2254A0 /* 13.34.84.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627B4 /* 15.230.39.180/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x365C8000 /* 54.92.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF0000 /* 54.239.0.0/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8500 /* 99.77.133.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF380B /* 104.255.56.11/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B53 /* 104.255.59.83/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE900 /* 150.222.233.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA3A /* 150.222.234.58/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03023200 /* 3.2.50.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223140 /* 13.34.49.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224320 /* 13.34.67.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224880 /* 13.34.72.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD20000 /* 13.210.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D37A4 /* 52.93.55.164/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FFB /* 52.93.127.251/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB28C /* 52.93.178.140/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2AE /* 52.93.178.174/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E1100 /* 52.94.17.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F9A00 /* 52.95.154.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FD400 /* 52.95.212.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34779C00 /* 52.119.156.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF00F0 /* 54.239.0.240/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F10000 /* 54.241.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D9700 /* 99.77.151.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DEF00 /* 99.77.239.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B5B /* 104.255.59.91/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B73 /* 104.255.59.115/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6F0DB940 /* 111.13.185.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEA4D2 /* 150.222.164.210/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB8A98000 /* 184.169.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xD8B6E000 /* 216.182.224.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222900 /* 13.34.41.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223D80 /* 13.34.61.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE60600 /* 15.230.6.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6F800 /* 15.230.248.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23480000 /* 35.72.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D5B62 /* 52.93.91.98/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E98B2 /* 52.94.152.178/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC41 /* 54.240.236.65/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x456B06E0 /* 69.107.6.224/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63961800 /* 99.150.24.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B55 /* 104.255.59.85/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE680 /* 150.222.230.128/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA7C /* 150.222.234.124/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03080000 /* 3.8.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF83C00 /* 13.248.60.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12F60000 /* 18.246.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FA0 /* 52.93.127.160/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D857F /* 52.93.133.127/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D8BFC /* 52.93.139.252/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D8DE6 /* 52.93.141.230/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2E8 /* 52.93.178.232/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EC600 /* 52.94.198.0/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBB000 /* 52.219.176.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36CC0000 /* 54.204.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x456B0708 /* 69.107.7.8/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE4300 /* 150.222.67.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE78FF /* 150.222.120.255/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE816E /* 150.222.129.110/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE870 /* 150.222.232.112/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224B80 /* 13.34.75.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627CA /* 15.230.39.202/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6B400 /* 15.230.180.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C0C00 /* 16.12.12.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FCC /* 52.93.127.204/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB284 /* 52.93.178.132/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34C20000 /* 52.194.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x369B0000 /* 54.155.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36C40000 /* 54.196.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634EAA00 /* 99.78.170.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A0B0 /* 142.4.160.176/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0207DE2 /* 176.32.125.226/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03055000 /* 3.5.80.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222A20 /* 13.34.42.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FBE1000 /* 15.190.16.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6049E /* 15.230.4.158/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6272A /* 15.230.39.42/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627FA /* 15.230.39.250/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6A900 /* 15.230.169.0/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x1222F000 /* 18.34.240.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476100 /* 35.71.97.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23980000 /* 35.152.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F77 /* 52.93.127.119/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F99 /* 52.93.127.153/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EFC00 /* 52.94.252.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D7C6 /* 52.144.215.198/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB9C00 /* 52.219.156.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE3900 /* 54.222.57.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63538000 /* 99.83.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63960000 /* 99.150.0.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8192 /* 150.222.129.146/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022600 /* 3.2.38.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223580 /* 13.34.53.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223780 /* 13.34.55.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2239C0 /* 13.34.57.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2242E0 /* 13.34.66.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87B00 /* 13.248.123.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62300 /* 15.230.35.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F64 /* 52.93.127.100/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF900 /* 52.93.249.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE817E /* 150.222.129.126/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA16 /* 150.222.234.22/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA48 /* 150.222.234.72/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCFABA000 /* 207.171.160.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223360 /* 13.34.51.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223AC0 /* 13.34.58.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225760 /* 13.34.87.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225A60 /* 13.34.90.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62708 /* 15.230.39.8/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E0700 /* 52.94.7.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F3C00 /* 52.95.60.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x88121700 /* 136.18.23.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221980 /* 13.34.25.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221D20 /* 13.34.29.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224480 /* 13.34.68.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224E80 /* 13.34.78.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCDC00 /* 15.220.220.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDD3000 /* 15.221.48.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x239C0000 /* 35.156.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D12B2 /* 52.93.18.178/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2B1 /* 52.93.178.177/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D140 /* 52.144.209.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF66A2 /* 54.239.102.162/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x88121300 /* 136.18.19.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE5C00 /* 150.222.92.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC8A00 /* 161.188.138.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03100000 /* 3.16.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221E20 /* 13.34.30.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222820 /* 13.34.40.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE60008 /* 15.230.0.8/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627A4 /* 15.230.39.164/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FFB0006 /* 15.251.0.6/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12820000 /* 18.130.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34480000 /* 52.72.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3452B400 /* 52.82.180.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D23D5 /* 52.93.35.213/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D8DDE /* 52.93.141.222/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36B60000 /* 54.182.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE4600 /* 54.222.70.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3AFE8A80 /* 58.254.138.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D1800 /* 99.77.24.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63974000 /* 99.151.64.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x78FDF5C0 /* 120.253.245.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED050 /* 150.222.208.80/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE890 /* 150.222.232.144/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2236C0 /* 13.34.54.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223A60 /* 13.34.58.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x343E0000 /* 52.62.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D0000 /* 52.93.0.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D13ED /* 52.93.19.237/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7ED4 /* 52.93.126.212/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D8DEC /* 52.93.141.236/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF9E0 /* 52.94.249.224/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB2C00 /* 52.219.44.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE5C00 /* 54.222.92.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EFC000 /* 54.239.192.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352A200 /* 99.82.162.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE1C76 /* 150.222.28.118/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE4600 /* 150.222.70.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE7A74 /* 150.222.122.116/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0207DC0 /* 176.32.125.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0207DEE /* 176.32.125.238/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220560 /* 13.34.5.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE63C00 /* 15.230.60.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C0E00 /* 16.12.14.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10320000 /* 16.50.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D85B3 /* 52.93.133.179/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E98B0 /* 52.94.152.176/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D3C8 /* 52.144.211.200/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB3800 /* 52.219.56.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36A00000 /* 54.160.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE7600 /* 150.222.118.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE833 /* 150.222.232.51/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA26 /* 150.222.234.38/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x9DAF0000 /* 157.175.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0222000 /* 176.34.32.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221680 /* 13.34.22.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222420 /* 13.34.36.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224220 /* 13.34.66.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87D00 /* 13.248.125.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627EA /* 15.230.39.234/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64200 /* 15.230.66.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7E82 /* 52.93.126.130/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FA4 /* 52.93.127.164/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF500 /* 52.93.245.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E98B3 /* 52.94.152.179/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F1000 /* 52.95.16.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EA0000 /* 54.234.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A120 /* 142.4.161.32/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222180 /* 13.34.33.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224C20 /* 13.34.76.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCF800 /* 15.220.248.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62774 /* 15.230.39.116/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE63A00 /* 15.230.58.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12440000 /* 18.68.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D4300 /* 52.93.67.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F4000 /* 52.95.64.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FE100 /* 52.95.225.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBA900 /* 52.219.169.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC42 /* 54.240.236.66/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D2000 /* 99.77.32.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D9A00 /* 99.77.154.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DF500 /* 99.77.245.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE0B00 /* 150.222.11.0/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE0B50 /* 150.222.11.80/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xAC606100 /* 172.96.97.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030E0000 /* 3.14.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15100 /* 15.177.81.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C0000 /* 16.12.0.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12400000 /* 18.64.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E40000 /* 18.228.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34100000 /* 52.16.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7E7A /* 52.93.126.122/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FC7 /* 52.93.127.199/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F1C00 /* 52.95.28.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F9200 /* 52.95.146.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FF200 /* 52.95.242.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D4C0 /* 52.144.212.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBB800 /* 52.219.184.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x78340C40 /* 120.52.12.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE1BEA /* 150.222.27.234/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED056 /* 150.222.208.86/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BD0000 /* 161.189.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2232C0 /* 13.34.50.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225080 /* 13.34.80.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15400 /* 15.177.84.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCFA00 /* 15.220.250.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D20B4 /* 52.93.32.180/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D5760 /* 52.93.87.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F66 /* 52.93.127.102/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF9B0 /* 52.94.249.176/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EFE00 /* 52.94.254.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36990000 /* 54.153.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x47884000 /* 71.136.64.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60003C00 /* 96.0.60.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A100 /* 142.4.161.0/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222620 /* 13.34.38.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222A80 /* 13.34.42.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222F80 /* 13.34.47.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224F20 /* 13.34.79.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB16200 /* 15.177.98.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC80000 /* 15.200.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCEC00 /* 15.220.236.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62780 /* 15.230.39.128/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x239A0000 /* 35.154.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34520000 /* 52.82.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FB9 /* 52.93.127.185/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D99AC /* 52.93.153.172/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF920 /* 52.94.249.32/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF00A0 /* 54.239.0.160/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0E300 /* 54.240.227.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B66 /* 104.255.59.102/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8182 /* 150.222.129.130/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022400 /* 3.2.36.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221A80 /* 13.34.26.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224580 /* 13.34.69.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627B0 /* 15.230.39.176/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE65200 /* 15.230.82.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6FC00 /* 15.230.252.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FFB0016 /* 15.251.0.22/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476B00 /* 35.71.107.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D9500 /* 52.93.149.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB296 /* 52.93.178.150/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2A4 /* 52.93.178.164/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2C6 /* 52.93.178.198/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2CB /* 52.93.178.203/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EFA20 /* 52.94.250.32/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490E440 /* 52.144.228.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DA8000 /* 52.218.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4CDF0000 /* 76.223.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63540000 /* 99.84.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8B74 /* 150.222.139.116/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223BC0 /* 13.34.59.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627C6 /* 15.230.39.198/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE63400 /* 15.230.52.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64880 /* 15.230.72.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE65600 /* 15.230.86.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7CD2 /* 52.93.124.210/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F9D /* 52.93.127.157/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EA000 /* 52.94.160.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490E402 /* 52.144.228.2/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0C700 /* 54.240.199.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC7300 /* 64.252.115.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DA100 /* 99.77.161.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA67 /* 150.222.234.103/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022740 /* 3.2.39.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220860 /* 13.34.8.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2217A0 /* 13.34.23.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223160 /* 13.34.49.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2256C0 /* 13.34.86.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE68800 /* 15.230.136.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F82 /* 52.93.127.130/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF700 /* 52.93.247.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63537000 /* 99.83.112.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B57 /* 104.255.59.87/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B8B /* 104.255.59.139/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED05C /* 150.222.208.92/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2218C0 /* 13.34.24.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222120 /* 13.34.33.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2234E0 /* 13.34.52.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5F900 /* 15.181.249.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCCD00 /* 15.220.205.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62750 /* 15.230.39.80/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64440 /* 15.230.68.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6DF00 /* 15.230.223.0/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34580000 /* 52.88.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D20B0 /* 52.93.32.176/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DC1C2 /* 52.93.193.194/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBE000 /* 52.219.224.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x456B0740 /* 69.107.7.64/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305F400 /* 3.5.244.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDD2800 /* 15.221.40.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62790 /* 15.230.39.144/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE69500 /* 15.230.149.0/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6CE00 /* 15.230.206.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C1200 /* 16.12.18.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12FD0000 /* 18.253.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342EC000 /* 52.46.192.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3452BB00 /* 52.82.187.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7E4C /* 52.93.126.76/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D8BFD /* 52.93.139.253/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB28B /* 52.93.178.139/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF970 /* 52.94.249.112/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB8C00 /* 52.219.140.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC15 /* 54.240.236.21/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xC6630200 /* 198.99.2.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2212E0 /* 13.34.18.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222FA0 /* 13.34.47.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D79C6 /* 52.93.121.198/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D9600 /* 52.93.150.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F7000 /* 52.95.112.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FBC00 /* 52.95.188.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3FF67800 /* 63.246.120.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634EC400 /* 99.78.196.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B6A /* 104.255.59.106/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x82B0C000 /* 130.176.192.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2203C0 /* 13.34.3.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221C00 /* 13.34.28.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE61016 /* 15.230.16.22/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE68F00 /* 15.230.143.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12990000 /* 18.153.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12CA0000 /* 18.202.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2E5 /* 52.93.178.229/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EFA30 /* 52.94.250.48/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF0130 /* 54.239.1.48/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC19 /* 54.240.236.25/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE700 /* 150.222.231.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0206800 /* 176.32.104.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223600 /* 13.34.54.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6276A /* 15.230.39.106/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6C600 /* 15.230.198.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7ECF /* 52.93.126.207/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FF9 /* 52.93.127.249/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB29E /* 52.93.178.158/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FA300 /* 52.95.163.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC32 /* 54.240.236.50/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC6200 /* 64.252.98.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634EDC00 /* 99.78.220.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE817C /* 150.222.129.124/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xD8B6EC00 /* 216.182.236.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03052000 /* 3.5.32.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03D00000 /* 3.208.0.0/12 */, 12, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225AA0 /* 13.34.90.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF84000 /* 13.248.64.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDD0000 /* 15.221.0.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE60005 /* 15.230.0.5/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62730 /* 15.230.39.48/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627EE /* 15.230.39.238/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6A600 /* 15.230.166.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE4000 /* 54.222.64.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC3A /* 54.240.236.58/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D9D00 /* 99.77.157.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63536300 /* 99.83.99.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x82B0FE00 /* 130.176.254.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A048 /* 142.4.160.72/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A098 /* 142.4.160.152/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03BC /* 150.222.3.188/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB9307800 /* 185.48.120.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224D00 /* 13.34.77.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225360 /* 13.34.83.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F8A /* 52.93.127.138/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D99AD /* 52.93.153.173/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2AD /* 52.93.178.173/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345ECE00 /* 52.94.206.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E98000 /* 54.233.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A068 /* 142.4.160.104/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE7A6E /* 150.222.122.110/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8114 /* 150.222.129.20/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE81F0 /* 150.222.129.240/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8B78 /* 150.222.139.120/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE8D0 /* 150.222.232.208/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCB53DC00 /* 203.83.220.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCC2D0000 /* 204.45.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225060 /* 13.34.80.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCCE00 /* 15.220.206.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDD3400 /* 15.221.52.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6279C /* 15.230.39.156/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64DC0 /* 15.230.77.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D5B67 /* 52.93.91.103/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F92 /* 52.93.127.146/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F5000 /* 52.95.80.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB8400 /* 52.219.132.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8196 /* 150.222.129.150/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED041 /* 150.222.208.65/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED9EA /* 150.222.217.234/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC9800 /* 161.188.152.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0207C80 /* 176.32.124.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB8490000 /* 184.73.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224980 /* 13.34.73.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2259A0 /* 13.34.89.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86D00 /* 13.248.109.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA00000 /* 15.160.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15000 /* 15.177.80.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE68100 /* 15.230.129.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C3800 /* 16.12.56.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2BC40000 /* 43.196.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D222A /* 52.93.34.42/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F1A /* 52.93.127.26/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490E0C0 /* 52.144.224.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB5000 /* 52.219.80.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36AE0000 /* 54.174.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC5A /* 54.240.236.90/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A118 /* 142.4.161.24/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA2E /* 150.222.234.46/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220CE0 /* 13.34.12.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222380 /* 13.34.35.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DE60000 /* 13.230.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86F00 /* 13.248.111.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE60500 /* 15.230.5.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6C400 /* 15.230.196.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2BF92E00 /* 43.249.46.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D0400 /* 52.93.4.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D3B00 /* 52.93.59.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F6D /* 52.93.127.109/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EC660 /* 52.94.198.96/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF9A0 /* 52.94.249.160/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490C280 /* 52.144.194.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490C940 /* 52.144.201.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D280 /* 52.144.210.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D3CA /* 52.144.211.202/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB7000 /* 52.219.112.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E00000 /* 54.224.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF2000 /* 54.239.32.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE78F4 /* 150.222.120.244/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223120 /* 13.34.49.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225660 /* 13.34.86.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225960 /* 13.34.89.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF81C00 /* 13.248.28.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCEA00 /* 15.220.234.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64A00 /* 15.230.74.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12B00000 /* 18.176.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F9A /* 52.93.127.154/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB9000 /* 52.219.144.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF3800 /* 54.239.56.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC11 /* 54.240.236.17/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC5600 /* 64.252.86.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352A500 /* 99.82.165.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6397BA00 /* 99.151.186.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03C2 /* 150.222.3.194/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03CC /* 150.222.3.204/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE0600 /* 150.222.6.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE1C86 /* 150.222.28.134/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03140000 /* 3.20.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222CA0 /* 13.34.44.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0F9C0000 /* 15.156.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE610FC /* 15.230.16.252/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627F6 /* 15.230.39.246/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FFE0000 /* 15.254.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12C40000 /* 18.196.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D32C2 /* 52.93.50.194/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D4200 /* 52.93.66.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x364C0000 /* 54.76.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60006000 /* 96.0.96.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03D2 /* 150.222.3.210/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE1C7C /* 150.222.28.124/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCDFBC000 /* 205.251.192.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03500000 /* 3.80.0.0/12 */, 12, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03650000 /* 3.101.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222F60 /* 13.34.47.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627E4 /* 15.230.39.228/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE65D00 /* 15.230.93.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34280000 /* 52.40.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D329A /* 52.93.50.154/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7C0F /* 52.93.124.15/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7ED5 /* 52.93.126.213/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E9840 /* 52.94.152.64/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FAA00 /* 52.95.170.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x347C8000 /* 52.124.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC1D /* 54.240.236.29/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03E0 /* 150.222.3.224/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE4D00 /* 150.222.77.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE5A00 /* 150.222.90.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224B20 /* 13.34.75.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6275A /* 15.230.39.90/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2BC60000 /* 43.198.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E0B00 /* 52.94.11.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490C880 /* 52.144.200.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0C400 /* 54.240.196.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63966800 /* 99.150.104.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE4200 /* 150.222.66.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE81F6 /* 150.222.129.246/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCCF6A400 /* 204.246.164.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222BE0 /* 13.34.43.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224000 /* 13.34.64.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2250C0 /* 13.34.80.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE61C00 /* 15.230.28.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476500 /* 35.71.101.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FA5 /* 52.93.127.165/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EC680 /* 52.94.198.128/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FF800 /* 52.95.248.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBE400 /* 52.219.228.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF00B0 /* 54.239.0.176/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF6780 /* 54.239.103.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x389C0000 /* 56.156.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4600 /* 64.252.70.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC7400 /* 64.252.116.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60006800 /* 96.0.104.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE08F2 /* 150.222.8.242/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA2C /* 150.222.234.44/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA52 /* 150.222.234.82/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221AA0 /* 13.34.26.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D230000 /* 13.35.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627B2 /* 15.230.39.178/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64B40 /* 15.230.75.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6C200 /* 15.230.194.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6CF00 /* 15.230.207.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C0400 /* 16.12.4.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12588000 /* 18.88.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22F00000 /* 34.240.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D0E13 /* 52.93.14.19/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2DA /* 52.93.178.218/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DC1C1 /* 52.93.193.193/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF810 /* 52.94.248.16/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF960 /* 52.94.249.96/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D808 /* 52.144.216.8/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0C800 /* 54.240.200.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36FD0000 /* 54.253.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE0F7F /* 150.222.15.127/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA42 /* 150.222.234.66/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221160 /* 13.34.17.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221DC0 /* 13.34.29.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64900 /* 15.230.73.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A20000 /* 18.162.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D8DE0 /* 52.93.141.224/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E9200 /* 52.94.146.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F1E00 /* 52.95.30.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F6000 /* 52.95.96.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F9100 /* 52.95.145.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490DF40 /* 52.144.223.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEDB00 /* 150.222.219.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0207DF6 /* 176.32.125.246/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030222C0 /* 3.2.34.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022300 /* 3.2.35.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03030000 /* 3.3.0.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220740 /* 13.34.7.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2214C0 /* 13.34.20.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223AE0 /* 13.34.58.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224CC0 /* 13.34.76.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10B60000 /* 16.182.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34200000 /* 52.32.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7E90 /* 52.93.126.144/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB29B /* 52.93.178.155/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FFC00 /* 52.95.252.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3477C000 /* 52.119.192.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE2400 /* 54.222.36.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8188 /* 150.222.129.136/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8E00 /* 150.222.142.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEDE00 /* 150.222.222.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221B40 /* 13.34.27.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FFB0018 /* 15.251.0.24/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D79BE /* 52.93.121.190/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F6E /* 52.93.127.110/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FB5 /* 52.93.127.181/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FF5 /* 52.93.127.245/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF840 /* 52.94.248.64/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FE500 /* 52.95.229.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36480000 /* 54.72.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03B8 /* 150.222.3.184/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03BF /* 150.222.3.191/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8180 /* 150.222.129.128/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA46 /* 150.222.234.70/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022A00 /* 3.2.42.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03053800 /* 3.5.56.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220CC0 /* 13.34.12.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222700 /* 13.34.39.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6092C /* 15.230.9.44/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE610C6 /* 15.230.16.198/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6BA00 /* 15.230.186.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7ED6 /* 52.93.126.214/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FAD /* 52.93.127.173/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D8A0C /* 52.93.138.12/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2CA /* 52.93.178.202/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FFA00 /* 52.95.250.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D300 /* 52.144.211.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4300 /* 64.252.67.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x82B0FF00 /* 130.176.255.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03E6 /* 150.222.3.230/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE7100 /* 150.222.113.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03059400 /* 3.5.148.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224AC0 /* 13.34.74.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6A300 /* 15.230.163.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6B102 /* 15.230.177.2/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F75 /* 52.93.127.117/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F9C /* 52.93.127.156/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBD800 /* 52.219.216.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36C60000 /* 54.198.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4D00 /* 64.252.77.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE7A6C /* 150.222.122.108/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221EC0 /* 13.34.30.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222220 /* 13.34.34.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225600 /* 13.34.86.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA40000 /* 15.164.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE613FA /* 15.230.19.250/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE69600 /* 15.230.150.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FFB0001 /* 15.251.0.1/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12590000 /* 18.89.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342E6000 /* 52.46.96.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342E8000 /* 52.46.128.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3452AB00 /* 52.82.171.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FA6 /* 52.93.127.166/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2E4 /* 52.93.178.228/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF0080 /* 54.239.0.128/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF0120 /* 54.239.1.32/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0207DF2 /* 176.32.125.242/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0228000 /* 176.34.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2221E0 /* 13.34.33.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE63F04 /* 15.230.63.4/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x28B40000 /* 40.180.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F80 /* 52.93.127.128/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FCD /* 52.93.127.205/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2D8 /* 52.93.178.216/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E98B5 /* 52.94.152.181/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF00C0 /* 54.239.0.192/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63536000 /* 99.83.96.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022000 /* 3.2.32.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2212A0 /* 13.34.18.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2228E0 /* 13.34.40.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223480 /* 13.34.52.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2240A0 /* 13.34.64.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDD0100 /* 15.221.1.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627D6 /* 15.230.39.214/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64480 /* 15.230.68.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2BD00000 /* 43.208.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D472B /* 52.93.71.43/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D5B6D /* 52.93.91.109/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F7B /* 52.93.127.123/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED200 /* 150.222.210.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA3C /* 150.222.234.60/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022AC0 /* 3.2.42.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2221C0 /* 13.34.33.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223B00 /* 13.34.59.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2245C0 /* 13.34.69.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DB80000 /* 13.184.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB10000 /* 15.177.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5F400 /* 15.181.244.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE63500 /* 15.230.53.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64A40 /* 15.230.74.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12C20000 /* 18.194.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342E4000 /* 52.46.64.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D32BA /* 52.93.50.186/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7E88 /* 52.93.126.136/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2D4 /* 52.93.178.212/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EC500 /* 52.94.197.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF980 /* 52.94.249.128/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490C140 /* 52.144.193.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36B80000 /* 54.184.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF1000 /* 54.239.16.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352A300 /* 99.82.163.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A060 /* 142.4.160.96/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE0000 /* 150.222.0.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE0B60 /* 150.222.11.96/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE65D /* 150.222.230.93/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03060000 /* 3.6.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222C80 /* 13.34.44.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222DC0 /* 13.34.45.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225540 /* 13.34.85.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB57800 /* 15.181.120.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC10100 /* 15.193.1.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62760 /* 15.230.39.96/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FFB000B /* 15.251.0.11/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476C00 /* 35.71.108.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342E5000 /* 52.46.80.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342EB800 /* 52.46.184.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34430000 /* 52.67.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D2B00 /* 52.93.43.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D4E00 /* 52.93.78.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF7400 /* 54.239.116.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE1C70 /* 150.222.28.112/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED9E8 /* 150.222.217.232/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224BA0 /* 13.34.75.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE604B0 /* 15.230.4.176/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE61600 /* 15.230.22.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE63E00 /* 15.230.62.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE645C0 /* 15.230.69.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x128A0000 /* 18.138.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7EFB /* 52.93.126.251/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DC1C9 /* 52.93.193.201/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF930 /* 52.94.249.48/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FFF90 /* 52.95.255.144/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF01B0 /* 54.239.1.176/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF01C0 /* 54.239.1.192/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3FF67200 /* 63.246.114.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DF600 /* 99.77.246.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCCF6AE00 /* 204.246.174.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030221C0 /* 3.2.33.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221040 /* 13.34.16.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2214E0 /* 13.34.20.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2216E0 /* 13.34.22.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221EE0 /* 13.34.30.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224CE0 /* 13.34.76.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224E00 /* 13.34.78.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87300 /* 13.248.115.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE69A00 /* 15.230.154.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34340000 /* 52.52.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D20B3 /* 52.93.32.179/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490C580 /* 52.144.197.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB9800 /* 52.219.152.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E94000 /* 54.233.64.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x46E87800 /* 70.232.120.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8190 /* 150.222.129.144/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE81E0 /* 150.222.129.224/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC9600 /* 161.188.150.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03220000 /* 3.34.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2232A0 /* 13.34.50.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223540 /* 13.34.53.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2239E0 /* 13.34.57.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224380 /* 13.34.67.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14A00 /* 15.177.74.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC50300 /* 15.197.3.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE63800 /* 15.230.56.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64B80 /* 15.230.75.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6A903 /* 15.230.169.3/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23477900 /* 35.71.121.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342EAC00 /* 52.46.172.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34410000 /* 52.65.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D13EC /* 52.93.19.236/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EC800 /* 52.94.200.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3477BC00 /* 52.119.188.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490C200 /* 52.144.194.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36960000 /* 54.150.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE0700 /* 150.222.7.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED04E /* 150.222.208.78/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE878 /* 150.222.232.120/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224120 /* 13.34.65.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224620 /* 13.34.70.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224780 /* 13.34.71.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225240 /* 13.34.82.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D280000 /* 13.40.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86800 /* 13.248.104.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB16000 /* 15.177.96.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5FB00 /* 15.181.251.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C2800 /* 16.12.40.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22F80000 /* 34.248.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DED00 /* 52.93.237.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E9400 /* 52.94.148.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490E984 /* 52.144.233.132/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC6D00 /* 64.252.109.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x45EAC000 /* 69.234.192.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A020 /* 142.4.160.32/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A070 /* 142.4.160.112/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BCA000 /* 161.188.160.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03050000 /* 3.5.0.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDD8000 /* 15.221.128.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64940 /* 15.230.73.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64E00 /* 15.230.78.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2467E800 /* 36.103.232.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342EA400 /* 52.46.164.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36B20000 /* 54.178.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x43DCE000 /* 67.220.224.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352A800 /* 99.82.168.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B89 /* 104.255.59.137/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6C800000 /* 108.128.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03D8 /* 150.222.3.216/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE0F84 /* 150.222.15.132/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEDD00 /* 150.222.221.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE87C /* 150.222.232.124/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224AA0 /* 13.34.74.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87E00 /* 13.248.126.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62778 /* 15.230.39.120/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FFB001A /* 15.251.0.26/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12640000 /* 18.100.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D5B6A /* 52.93.91.106/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3477CD00 /* 52.119.205.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490E340 /* 52.144.227.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF0140 /* 54.239.1.64/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC0E /* 54.240.236.14/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC1E /* 54.240.236.30/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60004000 /* 96.0.64.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x7793B680 /* 119.147.182.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA08 /* 150.222.234.8/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA86 /* 150.222.234.134/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222920 /* 13.34.41.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2237A0 /* 13.34.55.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223DA0 /* 13.34.61.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224C80 /* 13.34.76.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF84200 /* 13.248.66.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15700 /* 15.177.87.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE63200 /* 15.230.50.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6F900 /* 15.230.249.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E0400 /* 52.94.4.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E4800 /* 52.94.72.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EFA00 /* 52.94.250.0/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE3000 /* 54.222.48.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0E400 /* 54.240.228.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4700 /* 64.252.71.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC7200 /* 64.252.114.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF380C /* 104.255.56.12/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA6A /* 150.222.234.106/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0207800 /* 176.32.120.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221F80 /* 13.34.31.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15500 /* 15.177.85.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5F600 /* 15.181.246.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64B00 /* 15.230.75.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D32AA /* 52.93.50.170/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D32C0 /* 52.93.50.192/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2E9 /* 52.93.178.233/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E983D /* 52.94.152.61/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FFB00 /* 52.95.251.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF66EC /* 54.239.102.236/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x48290000 /* 72.41.0.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60001800 /* 96.0.24.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60002400 /* 96.0.36.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x76C16180 /* 118.193.97.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x88121600 /* 136.18.22.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8142 /* 150.222.129.66/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2219A0 /* 13.34.25.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223060 /* 13.34.48.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223260 /* 13.34.50.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223760 /* 13.34.55.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224940 /* 13.34.73.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15B00 /* 15.177.91.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62766 /* 15.230.39.102/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62900 /* 15.230.41.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6DF02 /* 15.230.223.2/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6F200 /* 15.230.242.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x239B0000 /* 35.155.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D8DD8 /* 52.93.141.216/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FB500 /* 52.95.181.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490E600 /* 52.144.230.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36D20000 /* 54.210.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF0200 /* 54.239.2.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC46 /* 54.240.236.70/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4B00 /* 64.252.75.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63978800 /* 99.151.136.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03B5 /* 150.222.3.181/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03F8 /* 150.222.3.248/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE4C00 /* 150.222.76.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220D80 /* 13.34.13.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222440 /* 13.34.36.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222E40 /* 13.34.46.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224240 /* 13.34.66.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87400 /* 13.248.116.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5F000 /* 15.181.240.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x344C0000 /* 52.76.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D3000 /* 52.93.48.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7D2A /* 52.93.125.42/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DC1CB /* 52.93.193.203/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF0C8 /* 52.93.240.200/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D806 /* 52.144.216.6/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBD000 /* 52.219.208.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0DC00 /* 54.240.220.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D1C00 /* 99.77.28.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x78E8EC80 /* 120.232.236.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE1C72 /* 150.222.28.114/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221720 /* 13.34.23.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2217C0 /* 13.34.23.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221B60 /* 13.34.27.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221B80 /* 13.34.27.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222280 /* 13.34.34.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF84500 /* 13.248.69.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6090E /* 15.230.9.14/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34120000 /* 52.18.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D150E /* 52.93.21.14/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D4C00 /* 52.93.76.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D5B63 /* 52.93.91.99/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F62 /* 52.93.127.98/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2AB /* 52.93.178.171/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E1300 /* 52.94.19.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE4400 /* 54.222.68.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF0170 /* 54.239.1.112/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF3400 /* 54.239.52.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6BB00000 /* 107.176.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6CA6F000 /* 108.166.240.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xAF29C000 /* 175.41.192.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCDFBE400 /* 205.251.228.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2202A0 /* 13.34.2.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222480 /* 13.34.36.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC2C00 /* 15.220.44.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6C300 /* 15.230.195.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FF83000 /* 15.248.48.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF0020 /* 54.239.0.32/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63979000 /* 99.151.144.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B51 /* 104.255.59.81/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03C4 /* 150.222.3.196/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE7A72 /* 150.222.122.114/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D22094C /* 13.34.9.76/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2231C0 /* 13.34.49.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627AC /* 15.230.39.172/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6CD00 /* 15.230.205.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x340A0000 /* 52.10.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3452A400 /* 52.82.164.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FB8 /* 52.93.127.184/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB295 /* 52.93.178.149/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0E600 /* 54.240.230.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4B4F0000 /* 75.79.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x64180000 /* 100.24.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B7D /* 104.255.59.125/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x97942200 /* 151.148.34.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2227E0 /* 13.34.39.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223FC0 /* 13.34.63.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225620 /* 13.34.86.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62706 /* 15.230.39.6/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6B000 /* 15.230.176.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FF82800 /* 15.248.40.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F95 /* 52.93.127.149/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D040 /* 52.144.208.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634EAC00 /* 99.78.172.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE818A /* 150.222.129.138/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8800 /* 150.222.136.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03040400 /* 3.4.4.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03218000 /* 3.33.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FFB0004 /* 15.251.0.4/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342EF900 /* 52.46.249.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FDC /* 52.93.127.220/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF0BE /* 52.93.240.190/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D800 /* 52.144.216.0/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF0100 /* 54.239.1.0/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DED00 /* 99.77.237.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63964000 /* 99.150.64.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8172 /* 150.222.129.114/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED9E2 /* 150.222.217.226/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA2D5E900 /* 162.213.233.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224860 /* 13.34.72.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86500 /* 13.248.101.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62754 /* 15.230.39.84/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627BE /* 15.230.39.190/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6A100 /* 15.230.161.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D5B61 /* 52.93.91.97/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D5B6B /* 52.93.91.107/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FFF00 /* 52.95.255.0/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36B00000 /* 54.176.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F60000 /* 54.246.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC7000 /* 64.252.112.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63534800 /* 99.83.72.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03DE /* 150.222.3.222/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8178 /* 150.222.129.120/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE60498 /* 15.230.4.152/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6A902 /* 15.230.169.2/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10A20000 /* 16.162.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FA8 /* 52.93.127.168/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3477B800 /* 52.119.184.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D3C2 /* 52.144.211.194/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF6800 /* 54.239.104.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC56 /* 54.240.236.86/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D1000 /* 99.77.16.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCCF6B000 /* 204.246.176.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220280 /* 13.34.2.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223E80 /* 13.34.62.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB52000 /* 15.181.32.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB57400 /* 15.181.116.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC51800 /* 15.197.24.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62B00 /* 15.230.43.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476A00 /* 35.71.106.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F98 /* 52.93.127.152/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2D0 /* 52.93.178.208/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBC400 /* 52.219.196.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE6000 /* 54.222.96.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x41080000 /* 65.8.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE7A70 /* 150.222.122.112/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE674 /* 150.222.230.116/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220BA0 /* 13.34.11.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223040 /* 13.34.48.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15D00 /* 15.177.93.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5F300 /* 15.181.243.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE61700 /* 15.230.23.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6278E /* 15.230.39.142/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2AC /* 52.93.178.172/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2E1 /* 52.93.178.225/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E1400 /* 52.94.20.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC25 /* 54.240.236.37/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DBD00 /* 99.77.189.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x88080000 /* 136.8.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE7A62 /* 150.222.122.98/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305E800 /* 3.5.232.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031C0000 /* 3.28.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222C60 /* 13.34.44.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2234A0 /* 13.34.52.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224EC0 /* 13.34.78.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE63D00 /* 15.230.61.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE65800 /* 15.230.88.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x104E0000 /* 16.78.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x33100000 /* 51.16.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D3A20 /* 52.93.58.32/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2BE /* 52.93.178.190/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490E6D2 /* 52.144.230.210/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x364F0000 /* 54.79.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC2A /* 54.240.236.42/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36FB0000 /* 54.251.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B56 /* 104.255.59.86/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE0B5E /* 150.222.11.94/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DECE00 /* 150.222.206.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xD136B000 /* 209.54.176.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03800000 /* 3.128.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2227A0 /* 13.34.39.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223880 /* 13.34.56.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2252C0 /* 13.34.82.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86B00 /* 13.248.107.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62746 /* 15.230.39.70/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE627E8 /* 15.230.39.232/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE63900 /* 15.230.57.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12FE0000 /* 18.254.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2BC10000 /* 43.193.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D32AC /* 52.93.50.172/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF000 /* 52.94.240.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D240 /* 52.144.210.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC6900 /* 64.252.105.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60005C00 /* 96.0.92.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE0B4C /* 150.222.11.76/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE0F7D /* 150.222.15.125/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8A00 /* 150.222.138.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA02 /* 150.222.234.2/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03041800 /* 3.4.24.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223DC0 /* 13.34.61.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCE000 /* 15.220.224.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE61E00 /* 15.230.30.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64080 /* 15.230.64.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE65400 /* 15.230.84.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7E86 /* 52.93.126.134/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490D440 /* 52.144.212.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36CF0000 /* 54.207.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x41090000 /* 65.9.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x456B0670 /* 69.107.6.112/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D9100 /* 99.77.145.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63966000 /* 99.150.96.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6C8A0000 /* 108.138.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x78FDF1A0 /* 120.253.241.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA78 /* 150.222.234.120/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224520 /* 13.34.69.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FBE3000 /* 15.190.48.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC51400 /* 15.197.20.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476900 /* 35.71.105.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x341C0000 /* 52.28.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342EA600 /* 52.46.166.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342EB000 /* 52.46.176.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D20B7 /* 52.93.32.183/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2EB /* 52.93.178.235/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63570800 /* 99.87.8.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222E60 /* 13.34.46.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2231A0 /* 13.34.49.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2236A0 /* 13.34.54.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224920 /* 13.34.73.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F67 /* 52.93.127.103/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2A3 /* 52.93.178.163/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2C1 /* 52.93.178.193/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E0000 /* 52.94.0.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D3000 /* 99.77.48.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE8197 /* 150.222.129.151/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCDFBF000 /* 205.251.240.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03000000 /* 3.0.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03212200 /* 3.33.34.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220E80 /* 13.34.14.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223560 /* 13.34.53.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223920 /* 13.34.57.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224FE0 /* 13.34.79.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86600 /* 13.248.102.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC7000 /* 15.220.112.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE613FC /* 15.230.19.252/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6C700 /* 15.230.199.0/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2BFAC100 /* 43.250.193.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x344D0000 /* 52.77.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D150F /* 52.93.21.15/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2A0 /* 52.93.178.160/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2CF /* 52.93.178.207/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC6300 /* 64.252.99.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x456B0720 /* 69.107.7.32/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE818E /* 150.222.129.142/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305EC00 /* 3.5.236.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D220760 /* 13.34.7.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5FA00 /* 15.181.250.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FBE0000 /* 15.190.0.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC10A00 /* 15.193.10.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE65E00 /* 15.230.94.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6851E /* 15.230.133.30/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D74FB /* 52.93.116.251/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D99B2 /* 52.93.153.178/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3490C040 /* 52.144.192.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0C000 /* 54.240.192.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC09 /* 54.240.236.9/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63979800 /* 99.151.152.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE6100 /* 150.222.97.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE85E /* 150.222.232.94/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA00 /* 150.222.234.0/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223240 /* 13.34.50.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6273A /* 15.230.39.58/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62764 /* 15.230.39.100/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62770 /* 15.230.39.112/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6F400 /* 15.230.244.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A60000 /* 18.166.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342EF000 /* 52.46.240.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345C8000 /* 52.92.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D472F /* 52.93.71.47/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB294 /* 52.93.178.148/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DF0B0 /* 52.93.240.176/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E1C00 /* 52.94.28.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF880 /* 52.94.248.128/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF6400 /* 54.239.100.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DA000 /* 99.77.160.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DFA00 /* 99.77.250.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED600 /* 150.222.214.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0207DF8 /* 176.32.125.248/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221420 /* 13.34.20.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D222460 /* 13.34.36.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223340 /* 13.34.51.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D224D80 /* 13.34.77.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2255A0 /* 13.34.85.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC8000 /* 15.220.128.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6273E /* 15.230.39.62/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6B300 /* 15.230.179.0/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12B70000 /* 18.183.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2E890000 /* 46.137.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D227C /* 52.93.34.124/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D3C00 /* 52.93.60.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F84 /* 52.93.127.132/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7F9E /* 52.93.127.158/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x46E87000 /* 70.232.112.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8700 /* 99.77.135.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6397A800 /* 99.151.168.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3B87 /* 104.255.59.135/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x97942600 /* 151.148.38.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223B20 /* 13.34.59.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15C00 /* 15.177.92.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC10800 /* 15.193.8.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC51E00 /* 15.197.30.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCA000 /* 15.220.160.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6B104 /* 15.230.177.4/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3452C000 /* 52.82.192.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D0C0D /* 52.93.12.13/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D3296 /* 52.93.50.150/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D5B68 /* 52.93.91.104/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7B63 /* 52.93.123.99/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2BA /* 52.93.178.186/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF6000 /* 54.239.96.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0E200 /* 54.240.226.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC51 /* 54.240.236.81/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634ED800 /* 99.78.216.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE4B00 /* 150.222.75.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE500 /* 150.222.229.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0207DE0 /* 176.32.125.224/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03030200 /* 3.3.2.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03058600 /* 3.5.134.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2222E0 /* 13.34.34.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DE40000 /* 13.228.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC2800 /* 15.220.40.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62756 /* 15.230.39.86/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FB0 /* 52.93.127.176/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB2DD /* 52.93.178.221/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF860 /* 52.94.248.96/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34778000 /* 52.119.128.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34779000 /* 52.119.144.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34C40000 /* 52.196.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F0EC59 /* 54.240.236.89/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D9600 /* 99.77.150.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634ED000 /* 99.78.208.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE03DC /* 150.222.3.220/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEE67A /* 150.222.230.122/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xD136B800 /* 209.54.184.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03053400 /* 3.5.52.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305E000 /* 3.5.224.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223300 /* 13.34.51.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE62794 /* 15.230.39.148/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3452BC00 /* 52.82.188.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DB299 /* 52.93.178.153/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE3A20 /* 54.222.58.32/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x456B0778 /* 69.107.7.120/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60003000 /* 96.0.48.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DBA00 /* 99.77.186.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04B100 /* 142.4.177.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED060 /* 150.222.208.96/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEEA66 /* 150.222.234.102/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0207D00 /* 176.32.125.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D221CC0 /* 13.34.28.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D223C40 /* 13.34.60.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2250A0 /* 13.34.80.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D225400 /* 13.34.84.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14400 /* 15.177.68.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE64780 /* 15.230.71.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE6BE00 /* 15.230.190.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x335C0000 /* 51.92.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D329E /* 52.93.50.158/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D7FFC /* 52.93.127.252/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DED040 /* 150.222.208.64/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB1478000 /* 177.71.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xC01A1900 /* 192.26.25.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DF400 /* 99.77.244.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DEE00 /* 99.77.238.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DF000 /* 99.77.240.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DFB00 /* 99.77.251.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DF800 /* 99.77.248.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DE900 /* 99.77.233.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DEB00 /* 99.77.235.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DEA00 /* 99.77.234.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DFD00 /* 99.77.253.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DEC00 /* 99.77.236.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DF100 /* 99.77.241.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DFC00 /* 99.77.252.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DF300 /* 99.77.243.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DFE00 /* 99.77.254.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DF700 /* 99.77.247.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DF900 /* 99.77.249.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DF200 /* 99.77.242.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DEF00 /* 99.77.239.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DF500 /* 99.77.245.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DF600 /* 99.77.246.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DED00 /* 99.77.237.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DFA00 /* 99.77.250.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB10000 /* 15.177.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03058C00 /* 3.5.140.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBAA00 /* 52.219.170.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBA800 /* 52.219.168.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F9600 /* 52.95.150.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB3C00 /* 52.219.60.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C0600 /* 16.12.6.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C2000 /* 16.12.32.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBCC00 /* 52.219.204.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4CDF6600 /* 76.223.102.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FB600 /* 52.95.182.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x1222F800 /* 18.34.248.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBD400 /* 52.219.212.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4CDF6000 /* 76.223.96.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6CAF3800 /* 108.175.56.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBC000 /* 52.219.192.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C1800 /* 16.12.24.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F8800 /* 52.95.136.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB8F00 /* 52.219.143.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03052800 /* 3.5.40.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03058800 /* 3.5.136.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB4800 /* 52.219.72.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB4400 /* 52.219.68.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305A000 /* 3.5.160.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF8E600 /* 13.248.230.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FAE00 /* 52.95.174.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FBB00 /* 52.95.187.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C3000 /* 16.12.48.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB8D00 /* 52.219.141.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F8B00 /* 52.95.139.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F8000 /* 52.95.128.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FB200 /* 52.95.178.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03052400 /* 3.5.36.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12222000 /* 18.34.32.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FA800 /* 52.95.168.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB1000 /* 52.219.16.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305D000 /* 3.5.208.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12220000 /* 18.34.0.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C0F00 /* 16.12.15.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12224800 /* 18.34.72.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C0A00 /* 16.12.10.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB9400 /* 52.219.148.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBD300 /* 52.219.211.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03058000 /* 3.5.128.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBC300 /* 52.219.195.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03054800 /* 3.5.72.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FA600 /* 52.95.166.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C1400 /* 16.12.20.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FA900 /* 52.95.169.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03059800 /* 3.5.152.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C1000 /* 16.12.16.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DA0000 /* 52.218.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB8E00 /* 52.219.142.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB0000 /* 52.219.0.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305FC00 /* 3.5.252.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF8E700 /* 13.248.231.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4CDF6800 /* 76.223.104.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB2000 /* 52.219.32.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305E400 /* 3.5.228.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F9D00 /* 52.95.157.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6CAF3400 /* 108.175.52.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FB000 /* 52.95.176.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4CDF6300 /* 76.223.99.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03053000 /* 3.5.48.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F8C00 /* 52.95.140.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F9C00 /* 52.95.156.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C0200 /* 16.12.2.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FA000 /* 52.95.160.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB3E00 /* 52.219.62.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6CAF3C00 /* 108.175.60.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF8E100 /* 13.248.225.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305A400 /* 3.5.164.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F9700 /* 52.95.151.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305F000 /* 3.5.240.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF8E500 /* 13.248.229.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E70000 /* 54.231.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F9E00 /* 52.95.158.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34D80000 /* 52.216.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C3A00 /* 16.12.58.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBD200 /* 52.219.210.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB6000 /* 52.219.96.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12224000 /* 18.34.64.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F9400 /* 52.95.148.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FA200 /* 52.95.162.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4CDF6100 /* 76.223.97.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03054C00 /* 3.5.76.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C2400 /* 16.12.36.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03052C00 /* 3.5.44.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF8E400 /* 13.248.228.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBB400 /* 52.219.180.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FAC00 /* 52.95.172.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03054000 /* 3.5.64.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB2800 /* 52.219.40.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB8800 /* 52.219.136.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE3400 /* 54.222.52.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03058400 /* 3.5.132.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FBE00 /* 52.95.190.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB1800 /* 52.219.24.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305A800 /* 3.5.168.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6CAF3000 /* 108.175.48.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FB100 /* 52.95.177.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF8E000 /* 13.248.224.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FAF00 /* 52.95.175.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBA400 /* 52.219.164.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x1222F400 /* 18.34.244.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FBA00 /* 52.95.186.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE7000 /* 54.222.112.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4CDF5F00 /* 76.223.95.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF8E300 /* 13.248.227.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305F800 /* 3.5.248.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FA400 /* 52.95.164.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C0800 /* 16.12.8.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4CDF6500 /* 76.223.101.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBA000 /* 52.219.160.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB7C00 /* 52.219.124.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBE800 /* 52.219.232.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F9800 /* 52.95.152.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBAC00 /* 52.219.172.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F8A00 /* 52.95.138.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBC800 /* 52.219.200.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305D800 /* 3.5.216.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBCA00 /* 52.219.202.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03059200 /* 3.5.146.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FB400 /* 52.95.180.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x1222FC00 /* 18.34.252.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F9000 /* 52.95.144.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C0900 /* 16.12.9.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FB800 /* 52.95.184.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4CDF6400 /* 76.223.100.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F8E00 /* 52.95.142.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBC200 /* 52.219.194.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305D400 /* 3.5.212.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305DC00 /* 3.5.220.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB7800 /* 52.219.120.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB4000 /* 52.219.64.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB8000 /* 52.219.128.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03059000 /* 3.5.144.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBDA00 /* 52.219.218.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12223000 /* 18.34.48.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x1222E800 /* 18.34.232.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBDC00 /* 52.219.220.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345C0000 /* 52.92.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F9A00 /* 52.95.154.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBB000 /* 52.219.176.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C0C00 /* 16.12.12.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4CDF6700 /* 76.223.103.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03055000 /* 3.5.80.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x1222F000 /* 18.34.240.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB9C00 /* 52.219.156.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4CDF6200 /* 76.223.98.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB2C00 /* 52.219.44.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C0E00 /* 16.12.14.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB3800 /* 52.219.56.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBA900 /* 52.219.169.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C0000 /* 16.12.0.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F9200 /* 52.95.146.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBB800 /* 52.219.184.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DA8000 /* 52.218.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBE000 /* 52.219.224.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305F400 /* 3.5.244.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C1200 /* 16.12.18.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB8C00 /* 52.219.140.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FBC00 /* 52.95.188.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF8E800 /* 13.248.232.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FA300 /* 52.95.163.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03052000 /* 3.5.32.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB8400 /* 52.219.132.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C3800 /* 16.12.56.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB5000 /* 52.219.80.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB7000 /* 52.219.112.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB9000 /* 52.219.144.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FAA00 /* 52.95.170.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBE400 /* 52.219.228.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C0400 /* 16.12.4.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F9100 /* 52.95.145.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10B60000 /* 16.182.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03053800 /* 3.5.56.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03059400 /* 3.5.148.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBD800 /* 52.219.216.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DB9800 /* 52.219.152.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C2800 /* 16.12.40.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03050000 /* 3.5.0.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE3000 /* 54.222.48.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FB500 /* 52.95.181.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF8E200 /* 13.248.226.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBD000 /* 52.219.208.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3452A400 /* 52.82.164.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DBC400 /* 52.219.196.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE6000 /* 54.222.96.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305E800 /* 3.5.232.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305EC00 /* 3.5.236.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345C8000 /* 52.92.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF8E900 /* 13.248.233.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03058600 /* 3.5.134.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03053400 /* 3.5.52.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305E000 /* 3.5.224.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3452BC00 /* 52.82.188.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E1800 /* 52.94.24.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF84600 /* 13.248.70.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23477300 /* 35.71.115.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E1A00 /* 52.94.26.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF84800 /* 13.248.72.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476300 /* 35.71.99.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3477FC00 /* 52.119.252.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E0600 /* 52.94.6.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF84300 /* 13.248.67.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03DAB400 /* 3.218.180.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23477200 /* 35.71.114.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E0C00 /* 52.94.12.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23477600 /* 35.71.118.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3477F900 /* 52.119.249.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E0800 /* 52.94.8.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23477700 /* 35.71.119.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF84400 /* 13.248.68.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476800 /* 35.71.104.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23477500 /* 35.71.117.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3477F800 /* 52.119.248.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3477E800 /* 52.119.232.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476000 /* 35.71.96.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3477F000 /* 52.119.240.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23474800 /* 35.71.72.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23477100 /* 35.71.113.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF84900 /* 13.248.73.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23477800 /* 35.71.120.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476200 /* 35.71.98.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23477000 /* 35.71.112.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E0500 /* 52.94.5.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E1000 /* 52.94.16.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476600 /* 35.71.102.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E0A00 /* 52.94.10.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476700 /* 35.71.103.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476E00 /* 35.71.110.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E1600 /* 52.94.22.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23474000 /* 35.71.64.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF84700 /* 13.248.71.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476400 /* 35.71.100.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23474400 /* 35.71.68.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E0E00 /* 52.94.14.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476D00 /* 35.71.109.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E0900 /* 52.94.9.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E0F00 /* 52.94.15.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476F00 /* 35.71.111.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E1200 /* 52.94.18.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E0D00 /* 52.94.13.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23477400 /* 35.71.116.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E1700 /* 52.94.23.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3477E000 /* 52.119.224.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E1E00 /* 52.94.30.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF84100 /* 13.248.65.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E1100 /* 52.94.17.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476100 /* 35.71.97.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE3900 /* 54.222.57.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E0700 /* 52.94.7.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476B00 /* 35.71.107.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3452BB00 /* 52.82.187.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF84000 /* 13.248.64.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E0B00 /* 52.94.11.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476500 /* 35.71.101.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476C00 /* 35.71.108.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23477900 /* 35.71.121.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF84200 /* 13.248.66.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E0400 /* 52.94.4.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF84500 /* 13.248.69.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E1300 /* 52.94.19.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476A00 /* 35.71.106.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E1400 /* 52.94.20.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476900 /* 35.71.105.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E0000 /* 52.94.0.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E1C00 /* 52.94.28.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022200 /* 3.2.34.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03058C00 /* 3.5.140.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B40000 /* 35.180.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022340 /* 3.2.35.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x036C0000 /* 3.108.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5E800 /* 15.181.232.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A088 /* 142.4.160.136/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03020000 /* 3.2.0.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60005000 /* 96.0.80.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC9A00 /* 161.188.154.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34040000 /* 52.4.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE5800 /* 54.222.88.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC5100 /* 64.252.81.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A050 /* 142.4.160.80/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022FC0 /* 3.2.47.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x32100000 /* 50.16.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FE000 /* 52.95.224.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC10300 /* 15.193.3.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCC400 /* 15.220.196.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCD800 /* 15.220.216.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23477300 /* 35.71.115.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A0E0 /* 142.4.160.224/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FCD0000 /* 15.205.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4500 /* 64.252.69.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4783C000 /* 71.131.192.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DEC0000 /* 13.236.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB16400 /* 15.177.100.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2BCE0000 /* 43.206.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FE200 /* 52.95.226.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A038 /* 142.4.160.56/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A0B8 /* 142.4.160.184/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03040000 /* 3.4.0.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15300 /* 15.177.83.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB90000 /* 15.185.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCFC00 /* 15.220.252.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F70000 /* 54.247.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F80000 /* 54.248.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022800 /* 3.2.40.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x1222F800 /* 18.34.248.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476300 /* 35.71.99.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36940000 /* 54.148.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8200 /* 99.77.130.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12C80000 /* 18.200.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36CE0000 /* 54.206.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63963800 /* 99.150.56.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6CAF3800 /* 108.175.56.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC10200 /* 15.193.2.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCDE00 /* 15.220.222.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8400 /* 99.77.132.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC9200 /* 161.188.146.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5F700 /* 15.181.247.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E80000 /* 18.232.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3452A900 /* 52.82.169.0/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC7600 /* 64.252.118.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DF400 /* 99.77.244.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A090 /* 142.4.160.144/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC7800 /* 15.220.120.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x364A0000 /* 54.74.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCCF00 /* 15.220.207.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12660000 /* 18.102.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34530000 /* 52.83.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC7A00 /* 64.252.122.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342F0000 /* 52.47.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF990 /* 52.94.249.144/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FFF40 /* 52.95.255.64/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x97942800 /* 151.148.40.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD00000 /* 13.208.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC10700 /* 15.193.7.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x369C0000 /* 54.156.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EC0000 /* 54.236.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60002000 /* 96.0.32.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63960800 /* 99.150.8.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03052800 /* 3.5.40.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03058800 /* 3.5.136.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5A000 /* 15.181.160.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12BF0000 /* 18.191.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D9F00 /* 99.77.159.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15200 /* 15.177.82.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB55000 /* 15.181.80.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2F800000 /* 47.128.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36998000 /* 54.153.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x7AF8C000 /* 122.248.192.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF70000 /* 13.247.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12C00000 /* 18.192.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23477200 /* 35.71.114.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E50000 /* 54.229.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022280 /* 3.2.34.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36FA0000 /* 54.250.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC5900 /* 64.252.89.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6B140000 /* 107.20.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305A000 /* 3.5.160.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2E33C000 /* 46.51.192.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D9500 /* 99.77.149.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03840000 /* 3.132.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3F200000 /* 63.32.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC5500 /* 64.252.85.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D240000 /* 13.36.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15E00 /* 15.177.94.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FFF10 /* 52.95.255.16/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60002800 /* 96.0.40.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A0F8 /* 142.4.160.248/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12EC0000 /* 18.236.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF950 /* 52.94.249.80/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4A00 /* 64.252.74.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DB700 /* 99.77.183.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4F00 /* 64.252.79.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC9400 /* 161.188.148.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FBC0000 /* 15.188.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12740000 /* 18.116.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36C80000 /* 54.200.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03052400 /* 3.5.36.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12222000 /* 18.34.32.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DEE00 /* 99.77.238.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36900000 /* 54.144.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36A90000 /* 54.169.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3FF67100 /* 63.246.113.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8800 /* 99.77.136.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC9E00 /* 161.188.158.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23477600 /* 35.71.118.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4800 /* 64.252.72.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D9400 /* 99.77.148.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FF000 /* 52.95.240.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4B658000 /* 75.101.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60001000 /* 96.0.16.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D3703 /* 99.77.55.3/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03040300 /* 3.4.3.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDE0000 /* 15.222.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x45EB8000 /* 69.235.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DF000 /* 99.77.240.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022900 /* 3.2.41.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCCEC8000 /* 204.236.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305D000 /* 3.5.208.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14C00 /* 15.177.76.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x341E0000 /* 52.30.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF940 /* 52.94.249.64/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x365C0000 /* 54.92.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x369A0000 /* 54.154.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4C00 /* 64.252.76.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x43CA0000 /* 67.202.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DFB00 /* 99.77.251.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC9C00 /* 161.188.156.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031E0000 /* 3.30.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5FD00 /* 15.181.253.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12220000 /* 18.34.0.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23477700 /* 35.71.119.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E20000 /* 54.226.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA2FAED00 /* 162.250.237.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03700000 /* 3.112.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03900000 /* 3.144.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCA800 /* 15.220.168.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FF400 /* 52.95.244.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40BB8000 /* 64.187.128.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC6F00 /* 64.252.111.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022580 /* 3.2.37.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E70000 /* 18.231.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36FC0000 /* 54.252.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03E00000 /* 3.224.0.0/12 */, 12, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476800 /* 35.71.104.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23477500 /* 35.71.117.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DD0000 /* 54.221.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36FF0000 /* 54.255.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A110 /* 142.4.161.16/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A028 /* 142.4.160.40/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE40000 /* 15.228.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A008 /* 142.4.160.8/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x9DF10000 /* 157.241.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB57000 /* 15.181.112.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF9D0 /* 52.94.249.208/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E90000 /* 54.233.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x44427000 /* 68.66.112.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x45E78000 /* 69.231.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DF800 /* 99.77.248.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63977800 /* 99.151.120.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6C880000 /* 108.136.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12224800 /* 18.34.72.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B00000 /* 35.176.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x46E0C000 /* 70.224.192.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D9900 /* 99.77.153.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC8800 /* 161.188.136.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03040700 /* 3.4.7.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D9B00 /* 99.77.155.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A0C0 /* 142.4.160.192/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x97942700 /* 151.148.39.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FFF20 /* 52.95.255.32/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x45E6C000 /* 69.230.192.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA0010000 /* 160.1.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03058000 /* 3.5.128.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5F100 /* 15.181.241.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12D80000 /* 18.216.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22C00000 /* 34.192.0.0/12 */, 12, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03680000 /* 3.104.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB16300 /* 15.177.99.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC10500 /* 15.193.5.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC2000 /* 15.220.32.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34500000 /* 52.80.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EFA10 /* 52.94.250.16/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC7900 /* 64.252.121.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63962000 /* 99.150.32.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xAF298000 /* 175.41.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4400 /* 64.252.68.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC8200 /* 161.188.130.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E50000 /* 18.229.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DB0000 /* 54.219.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03200000 /* 3.32.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B60000 /* 35.182.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x46E87C00 /* 70.232.124.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DBF00 /* 99.77.191.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03054800 /* 3.5.72.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DFA0000 /* 13.250.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CC00000 /* 44.192.0.0/11 */, 11, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC6600 /* 64.252.102.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC6C00 /* 64.252.108.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D9C00 /* 99.77.156.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DE900 /* 99.77.233.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC8C00 /* 161.188.140.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA80000 /* 15.168.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D3718 /* 99.77.55.24/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8A00 /* 99.77.138.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA2FAEE00 /* 162.250.238.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03059800 /* 3.5.152.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E00000 /* 18.224.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34380000 /* 52.56.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F50000 /* 54.245.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A000 /* 142.4.160.0/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E60000 /* 18.230.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x28B00000 /* 40.176.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x343A0000 /* 52.58.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x46E8567D /* 70.232.86.125/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D9800 /* 99.77.152.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03830000 /* 3.131.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC5000 /* 15.220.80.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DEB00 /* 99.77.235.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A0E8 /* 142.4.160.232/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03600000 /* 3.96.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC3000 /* 15.220.48.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36D80000 /* 54.216.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305FC00 /* 3.5.252.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCE800 /* 15.220.232.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x17140000 /* 23.20.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF850 /* 52.94.248.80/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4000 /* 64.252.64.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D371A /* 99.77.55.26/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8F00 /* 99.77.143.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03040100 /* 3.4.1.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D380000 /* 13.56.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCB800 /* 15.220.184.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12B80000 /* 18.184.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC8000 /* 161.188.128.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23A00000 /* 35.160.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34300000 /* 52.48.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8900 /* 99.77.137.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022680 /* 3.2.38.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D700000 /* 13.112.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB59000 /* 15.181.144.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476000 /* 35.71.96.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2BC80000 /* 43.200.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34440000 /* 52.68.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36430000 /* 54.67.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5FE00 /* 15.181.254.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x123C0000 /* 18.60.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34390000 /* 52.57.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63975000 /* 99.151.80.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03240000 /* 3.36.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A0C8 /* 142.4.160.200/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC8E00 /* 161.188.142.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12BE0000 /* 18.190.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3452A800 /* 52.82.168.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA2D5E800 /* 162.213.232.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23474800 /* 35.71.72.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FE300 /* 52.95.227.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36440000 /* 54.68.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x365D0000 /* 54.93.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D320000 /* 13.50.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342C0000 /* 52.44.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x344C8000 /* 52.76.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x365F0000 /* 54.95.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36D40000 /* 54.212.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305E400 /* 3.5.228.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5B000 /* 15.181.176.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCCA00 /* 15.220.202.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60000000 /* 96.0.0.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A080 /* 142.4.160.128/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x97942500 /* 151.148.37.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x037C0000 /* 3.124.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB53000 /* 15.181.48.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3452B000 /* 52.82.176.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36B70000 /* 54.183.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A040 /* 142.4.160.64/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03180000 /* 3.24.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x97942900 /* 151.148.41.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022700 /* 3.2.39.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC10600 /* 15.193.6.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23477100 /* 35.71.113.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC6700 /* 64.252.103.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A018 /* 142.4.160.24/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15600 /* 15.177.86.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12900000 /* 18.144.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345A0000 /* 52.90.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E9000 /* 52.94.144.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC4000 /* 15.220.64.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCB000 /* 15.220.176.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34000000 /* 52.0.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3452B800 /* 52.82.184.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FFD00 /* 52.95.253.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8CB30000 /* 140.179.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A078 /* 142.4.160.120/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xD06E3000 /* 208.110.48.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022500 /* 3.2.37.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03212300 /* 3.33.35.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FFF80 /* 52.95.255.128/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34D00000 /* 52.208.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DEA00 /* 99.77.234.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x97942400 /* 151.148.36.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x103E0000 /* 16.62.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34360000 /* 52.54.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FE600 /* 52.95.230.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03053000 /* 3.5.48.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC9800 /* 15.220.152.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x344A0000 /* 52.74.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36A80000 /* 54.168.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15900 /* 15.177.89.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x129C0000 /* 18.156.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3452AA00 /* 52.82.170.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC7100 /* 64.252.113.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4F7D0000 /* 79.125.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8600 /* 99.77.134.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022980 /* 3.2.41.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD60000 /* 13.214.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14D00 /* 15.177.77.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15A00 /* 15.177.90.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36B40000 /* 54.180.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DFD00 /* 99.77.253.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634EEEFF /* 99.78.238.255/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03040600 /* 3.4.6.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14F00 /* 15.177.79.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCD080 /* 15.220.208.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36400000 /* 54.64.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0220000 /* 176.34.0.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23477800 /* 35.71.120.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23500000 /* 35.80.0.0/12 */, 12, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D9300 /* 99.77.147.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DEC00 /* 99.77.236.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC9000 /* 15.220.144.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DF0000 /* 54.223.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8100 /* 99.77.129.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6CAF3C00 /* 108.175.60.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCC800 /* 15.220.200.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2BCC0000 /* 43.204.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2E33E000 /* 46.51.224.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36B30000 /* 54.179.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D37FE /* 99.77.55.254/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030226C0 /* 3.2.38.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36AA0000 /* 54.170.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x97942100 /* 151.148.33.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305A400 /* 3.5.164.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC6000 /* 15.220.96.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476200 /* 35.71.98.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8300 /* 99.77.131.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305F000 /* 3.5.240.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23477000 /* 35.71.112.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23990000 /* 35.153.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x343D0000 /* 52.61.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x344F0000 /* 52.79.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63963000 /* 99.150.48.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A0D8 /* 142.4.160.216/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCE400 /* 15.220.228.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x340C0000 /* 52.12.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DC0000 /* 52.220.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634EEEFD /* 99.78.238.253/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA2FAEC00 /* 162.250.236.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03040800 /* 3.4.8.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A30000 /* 18.163.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36C70000 /* 54.199.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x128E0000 /* 18.142.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2E89C000 /* 46.137.192.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34C80000 /* 52.200.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE2000 /* 54.222.32.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC7B00 /* 64.252.123.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D3719 /* 99.77.55.25/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63977000 /* 99.151.112.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12224000 /* 18.34.64.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22E00000 /* 34.224.0.0/12 */, 12, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x344B0000 /* 52.75.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60005800 /* 96.0.88.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x88123200 /* 136.18.50.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14200 /* 15.177.66.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF8E0 /* 52.94.248.224/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FFF30 /* 52.95.255.48/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DA0000 /* 54.218.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03054C00 /* 3.5.76.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10A80000 /* 16.168.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4E00 /* 64.252.78.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634EEEFB /* 99.78.238.251/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB50000 /* 15.181.0.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC7500 /* 64.252.117.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63976800 /* 99.151.104.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63978000 /* 99.151.128.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476600 /* 35.71.102.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63500000 /* 99.80.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03052C00 /* 3.5.44.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FF900 /* 52.95.249.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F40000 /* 54.244.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC5700 /* 64.252.87.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60006400 /* 96.0.100.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2E89E000 /* 46.137.224.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x41000000 /* 65.0.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63965000 /* 99.150.80.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3FF67000 /* 63.246.112.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3FF67700 /* 63.246.119.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x478D0800 /* 71.141.8.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x32130000 /* 50.19.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634F0000 /* 99.79.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CE00000 /* 44.224.0.0/11 */, 11, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34510000 /* 52.81.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x478D0000 /* 71.141.0.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03020300 /* 3.2.3.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476700 /* 35.71.103.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4900 /* 64.252.73.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63974800 /* 99.151.72.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xAE810000 /* 174.129.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022B00 /* 3.2.43.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476E00 /* 35.71.110.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FFF50 /* 52.95.255.80/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC6500 /* 64.252.101.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022A40 /* 3.2.42.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FFF70 /* 52.95.255.112/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60000C00 /* 96.0.12.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022080 /* 3.2.32.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5E000 /* 15.181.224.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCE300 /* 15.220.227.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12D00000 /* 18.208.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FF500 /* 52.95.245.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8E00 /* 99.77.142.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DBB00 /* 99.77.187.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022F00 /* 3.2.47.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14900 /* 15.177.73.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2E33D800 /* 46.51.216.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03054000 /* 3.5.64.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF820 /* 52.94.248.32/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DC0000 /* 54.220.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x64140000 /* 100.20.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF8A0 /* 52.94.248.160/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36970000 /* 54.151.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA10000 /* 15.161.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE3400 /* 54.222.52.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC6E00 /* 64.252.110.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D9E00 /* 99.77.158.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DF100 /* 99.77.241.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12BC0000 /* 18.188.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12FC0000 /* 18.252.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2E338000 /* 46.51.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC6B00 /* 64.252.107.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DE80000 /* 13.232.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC0000 /* 15.220.0.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FF300 /* 52.95.243.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03058400 /* 3.5.132.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D350000 /* 13.53.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15800 /* 15.177.88.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB80000 /* 15.184.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC3800 /* 15.220.56.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB8488000 /* 184.72.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC1000 /* 15.220.16.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC8600 /* 161.188.134.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022940 /* 3.2.41.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D330000 /* 13.51.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60000800 /* 96.0.8.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B50000 /* 35.181.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36500000 /* 54.80.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36D60000 /* 54.214.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36FE0000 /* 54.254.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34140000 /* 52.20.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EC900 /* 52.94.201.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF8D0 /* 52.94.248.208/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF40000 /* 13.244.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF830 /* 52.94.248.48/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F20000 /* 54.242.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DFC00 /* 99.77.252.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63975800 /* 99.151.88.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xD8B6EE00 /* 216.182.238.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305A800 /* 3.5.168.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A80000 /* 18.168.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22D00000 /* 34.208.0.0/12 */, 12, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x340F0000 /* 52.15.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC7C00 /* 64.252.124.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC9000 /* 161.188.144.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12BD0000 /* 18.189.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23474000 /* 35.71.64.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DB800 /* 99.77.184.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03400000 /* 3.64.0.0/12 */, 12, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12580000 /* 18.88.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA2D5EA00 /* 162.213.234.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC8800 /* 15.220.136.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x1222F400 /* 18.34.244.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12C90000 /* 18.201.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36978000 /* 54.151.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xD0565800 /* 208.86.88.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12AF0000 /* 18.175.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36D00000 /* 54.208.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E40000 /* 54.228.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A030 /* 142.4.160.48/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x97942300 /* 151.148.35.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC9200 /* 15.220.146.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FF600 /* 52.95.246.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D300000 /* 13.48.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34400000 /* 52.64.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FEF00 /* 52.95.239.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xC3110000 /* 195.17.0.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12DC0000 /* 18.220.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34240000 /* 52.36.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x365E0000 /* 54.94.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A0A8 /* 142.4.160.168/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0F980000 /* 15.152.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCE200 /* 15.220.226.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FE400 /* 52.95.228.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE8000 /* 54.222.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x607F0000 /* 96.127.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC8400 /* 161.188.132.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03041000 /* 3.4.16.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x444F0000 /* 68.79.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8000 /* 99.77.128.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305F800 /* 3.5.248.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36D70000 /* 54.215.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A0D0 /* 142.4.160.208/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12B60000 /* 18.182.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2BDA0000 /* 43.218.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36980000 /* 54.152.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D370E /* 99.77.55.14/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DF300 /* 99.77.243.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x97942000 /* 151.148.32.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12B20000 /* 18.178.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36CA0000 /* 54.202.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63967800 /* 99.150.120.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB58000 /* 15.181.128.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10AA0000 /* 16.170.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12840000 /* 18.132.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34460000 /* 52.70.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF800 /* 52.94.248.0/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60003800 /* 96.0.56.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCCC00 /* 15.220.204.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14600 /* 15.177.70.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FEC0000 /* 15.236.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC5400 /* 64.252.84.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60005400 /* 96.0.84.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DFE00 /* 99.77.254.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB8480000 /* 184.72.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D7D0000 /* 13.125.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476400 /* 35.71.100.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36C10000 /* 54.193.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE3B00 /* 54.222.59.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x46E85C00 /* 70.232.92.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D3700 /* 99.77.55.0/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DF700 /* 99.77.247.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022040 /* 3.2.32.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC5800 /* 64.252.88.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D3702 /* 99.77.55.2/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5F500 /* 15.181.245.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63976000 /* 99.151.96.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB16100 /* 15.177.97.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23474400 /* 35.71.68.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34080000 /* 52.8.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF9C0 /* 52.94.249.192/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FF700 /* 52.95.247.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC5300 /* 64.252.83.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D37FD /* 99.77.55.253/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14000 /* 15.177.64.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC10900 /* 15.193.9.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2E33D000 /* 46.51.208.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34560000 /* 52.86.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x39B40000 /* 57.180.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC5000 /* 64.252.80.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A058 /* 142.4.160.88/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12880000 /* 18.136.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x32700000 /* 50.112.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022140 /* 3.2.33.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030223C0 /* 3.2.35.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022B40 /* 3.2.43.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD40000 /* 13.212.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCE900 /* 15.220.233.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12B30000 /* 18.179.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC6400 /* 64.252.100.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305D800 /* 3.5.216.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03820000 /* 3.130.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D390000 /* 13.57.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D7E0000 /* 13.126.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB54000 /* 15.181.64.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8C00 /* 99.77.140.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022780 /* 3.2.39.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10100000 /* 16.16.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE5900 /* 54.222.89.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FCE0000 /* 15.206.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x32120000 /* 50.18.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x340E0000 /* 52.14.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60004800 /* 96.0.72.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36AC0000 /* 54.172.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x47890000 /* 71.137.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0224000 /* 176.34.64.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03059200 /* 3.5.146.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476D00 /* 35.71.109.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FFF60 /* 52.95.255.96/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DF900 /* 99.77.249.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63965800 /* 99.150.88.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A010 /* 142.4.160.16/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12CC0000 /* 18.204.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B20000 /* 35.178.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36580000 /* 54.88.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E7400 /* 52.94.116.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC7700 /* 64.252.119.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xD0565A00 /* 208.86.90.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5F800 /* 15.181.248.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x1222FC00 /* 18.34.252.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x341D0000 /* 52.29.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D340000 /* 13.52.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12B40000 /* 18.180.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2E898000 /* 46.137.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF8B0 /* 52.94.248.176/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03020200 /* 3.2.2.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030220C0 /* 3.2.32.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF60000 /* 13.246.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF9F0 /* 52.94.249.240/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FFE00 /* 52.95.254.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC6800 /* 64.252.104.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0204000 /* 176.32.64.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D360000 /* 13.54.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DC80000 /* 13.200.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FEB00 /* 52.95.235.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FF100 /* 52.95.241.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4200 /* 64.252.66.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC5200 /* 64.252.82.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D9000 /* 99.77.144.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6397BC00 /* 99.151.188.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A0F0 /* 142.4.160.240/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030C0000 /* 3.12.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D7C0000 /* 13.124.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476F00 /* 35.71.111.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF890 /* 52.94.248.144/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34C00000 /* 52.192.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63964800 /* 99.150.72.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03030500 /* 3.3.5.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x364E0000 /* 54.78.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8B00 /* 99.77.139.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC10400 /* 15.193.4.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23477400 /* 35.71.116.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x47840000 /* 71.132.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63962800 /* 99.150.40.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022180 /* 3.2.33.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305D400 /* 3.5.212.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305DC00 /* 3.5.220.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14800 /* 15.177.72.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34020000 /* 52.2.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC6A00 /* 64.252.106.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x67040800 /* 103.4.8.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB8484000 /* 184.72.64.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030229C0 /* 3.2.41.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D3701 /* 99.77.55.1/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5C000 /* 15.181.192.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022380 /* 3.2.35.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FFD0000 /* 15.253.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EE0000 /* 54.238.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63961000 /* 99.150.16.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xD8B6E800 /* 216.182.232.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03780000 /* 3.120.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5FC00 /* 15.181.252.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12C60000 /* 18.198.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34090000 /* 52.9.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8D00 /* 99.77.141.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342EB400 /* 52.46.180.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03880000 /* 3.136.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC9400 /* 15.220.148.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2BC00000 /* 43.192.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF8C0 /* 52.94.248.192/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC7800 /* 64.252.120.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6397B800 /* 99.151.184.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03059000 /* 3.5.144.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10180000 /* 16.24.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF870 /* 52.94.248.112/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5F200 /* 15.181.242.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E80000 /* 54.232.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14E00 /* 15.177.78.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC10000 /* 15.193.0.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34420000 /* 52.66.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCCECC000 /* 204.236.192.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23A80000 /* 35.168.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34408000 /* 52.64.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD10000 /* 13.209.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB52800 /* 15.181.40.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12223000 /* 18.34.48.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x1222E800 /* 18.34.232.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x128C0000 /* 18.140.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x343C0000 /* 52.60.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x344E0000 /* 52.78.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x482C2000 /* 72.44.32.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB51000 /* 15.181.16.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB56000 /* 15.181.96.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCC000 /* 15.220.192.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63967000 /* 99.150.112.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D3A0000 /* 13.58.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36C20000 /* 54.194.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03620000 /* 3.98.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36420000 /* 54.66.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DF200 /* 99.77.242.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A0A0 /* 142.4.160.160/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A108 /* 142.4.161.8/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA2DE9400 /* 162.222.148.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03040200 /* 3.4.2.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14B00 /* 15.177.75.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCF000 /* 15.220.240.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34180000 /* 52.24.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DE0000 /* 52.222.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4100 /* 64.252.65.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030D0000 /* 3.13.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03F80000 /* 3.248.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x365C8000 /* 54.92.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8500 /* 99.77.133.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD20000 /* 13.210.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F10000 /* 54.241.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D9700 /* 99.77.151.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DEF00 /* 99.77.239.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB8A98000 /* 184.169.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xD8B6E000 /* 216.182.224.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23480000 /* 35.72.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63961800 /* 99.150.24.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03080000 /* 3.8.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12F60000 /* 18.246.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36CC0000 /* 54.204.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34C20000 /* 52.194.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x369B0000 /* 54.155.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36C40000 /* 54.196.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A0B0 /* 142.4.160.176/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03055000 /* 3.5.80.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x1222F000 /* 18.34.240.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476100 /* 35.71.97.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23980000 /* 35.152.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63960000 /* 99.150.0.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022600 /* 3.2.38.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCDC00 /* 15.220.220.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x239C0000 /* 35.156.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC8A00 /* 161.188.138.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03100000 /* 3.16.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12820000 /* 18.130.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34480000 /* 52.72.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3452B400 /* 52.82.180.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63974000 /* 99.151.64.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x343E0000 /* 52.62.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF9E0 /* 52.94.249.224/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10320000 /* 16.50.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36A00000 /* 54.160.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x9DAF0000 /* 157.175.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0222000 /* 176.34.32.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EA0000 /* 54.234.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x46E8567E /* 70.232.86.126/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A120 /* 142.4.161.32/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCF800 /* 15.220.248.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FE100 /* 52.95.225.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D9A00 /* 99.77.154.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DF500 /* 99.77.245.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030E0000 /* 3.14.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15100 /* 15.177.81.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E40000 /* 18.228.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34100000 /* 52.16.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FF200 /* 52.95.242.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BD0000 /* 161.189.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15400 /* 15.177.84.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCFA00 /* 15.220.250.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF9B0 /* 52.94.249.176/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36990000 /* 54.153.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x47884000 /* 71.136.64.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60003C00 /* 96.0.60.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A100 /* 142.4.161.0/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB16200 /* 15.177.98.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC80000 /* 15.200.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCEC00 /* 15.220.236.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x239A0000 /* 35.154.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34520000 /* 52.82.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF920 /* 52.94.249.32/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022400 /* 3.2.36.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476B00 /* 35.71.107.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EFA20 /* 52.94.250.32/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC7300 /* 64.252.115.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DA100 /* 99.77.161.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022740 /* 3.2.39.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5F900 /* 15.181.249.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCCD00 /* 15.220.205.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34580000 /* 52.88.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305F400 /* 3.5.244.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12FD0000 /* 18.253.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF970 /* 52.94.249.112/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xC6630200 /* 198.99.2.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12990000 /* 18.153.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12CA0000 /* 18.202.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EFA30 /* 52.94.250.48/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC6200 /* 64.252.98.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xD8B6EC00 /* 216.182.236.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03052000 /* 3.5.32.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03D00000 /* 3.208.0.0/12 */, 12, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE4000 /* 54.222.64.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x46E8567C /* 70.232.86.124/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D9D00 /* 99.77.157.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A048 /* 142.4.160.72/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A098 /* 142.4.160.152/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB9307800 /* 185.48.120.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E98000 /* 54.233.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A068 /* 142.4.160.104/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCC2D0000 /* 204.45.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCCE00 /* 15.220.206.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC9800 /* 161.188.152.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB8490000 /* 184.73.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA00000 /* 15.160.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15000 /* 15.177.80.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2BC40000 /* 43.196.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36AE0000 /* 54.174.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A118 /* 142.4.161.24/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DE60000 /* 13.230.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF9A0 /* 52.94.249.160/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E00000 /* 54.224.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCEA00 /* 15.220.234.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12B00000 /* 18.176.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC5600 /* 64.252.86.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6397BA00 /* 99.151.186.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03140000 /* 3.20.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0F9C0000 /* 15.156.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FFE0000 /* 15.254.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12C40000 /* 18.196.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x364C0000 /* 54.76.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60006000 /* 96.0.96.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03500000 /* 3.80.0.0/12 */, 12, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03650000 /* 3.101.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34280000 /* 52.40.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2BC60000 /* 43.198.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63966800 /* 99.150.104.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476500 /* 35.71.101.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FF800 /* 52.95.248.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF6780 /* 54.239.103.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4600 /* 64.252.70.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC7400 /* 64.252.116.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60006800 /* 96.0.104.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12588000 /* 18.88.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22F00000 /* 34.240.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF810 /* 52.94.248.16/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF960 /* 52.94.249.96/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36FD0000 /* 54.253.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A20000 /* 18.162.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345E9200 /* 52.94.146.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030222C0 /* 3.2.34.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022300 /* 3.2.35.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34200000 /* 52.32.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FFC00 /* 52.95.252.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE2400 /* 54.222.36.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF840 /* 52.94.248.64/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FE500 /* 52.95.229.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36480000 /* 54.72.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022A00 /* 3.2.42.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03053800 /* 3.5.56.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FFA00 /* 52.95.250.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4300 /* 64.252.67.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03059400 /* 3.5.148.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36C60000 /* 54.198.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4D00 /* 64.252.77.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA40000 /* 15.164.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12590000 /* 18.89.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D370F /* 99.77.55.15/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0228000 /* 176.34.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022000 /* 3.2.32.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03022AC0 /* 3.2.42.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB10000 /* 15.177.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5F400 /* 15.181.244.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12C20000 /* 18.194.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF980 /* 52.94.249.128/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36B80000 /* 54.184.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A060 /* 142.4.160.96/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03060000 /* 3.6.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB57800 /* 15.181.120.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC10100 /* 15.193.1.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476C00 /* 35.71.108.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342EB800 /* 52.46.184.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34430000 /* 52.67.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x128A0000 /* 18.138.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF930 /* 52.94.249.48/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FFF90 /* 52.95.255.144/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DF600 /* 99.77.246.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030221C0 /* 3.2.33.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34340000 /* 52.52.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E94000 /* 54.233.64.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BC9600 /* 161.188.150.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03220000 /* 3.34.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14A00 /* 15.177.74.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23477900 /* 35.71.121.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34410000 /* 52.65.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36960000 /* 54.150.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D280000 /* 13.40.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB16000 /* 15.177.96.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5FB00 /* 15.181.251.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22F80000 /* 34.248.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC6D00 /* 64.252.109.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x45EAC000 /* 69.234.192.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A020 /* 142.4.160.32/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04A070 /* 142.4.160.112/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BCA000 /* 161.188.160.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03050000 /* 3.5.0.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36B20000 /* 54.178.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D370C /* 99.77.55.12/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D371B /* 99.77.55.27/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6C800000 /* 108.128.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12640000 /* 18.100.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3477CD00 /* 52.119.205.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60004000 /* 96.0.64.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15700 /* 15.177.87.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EFA00 /* 52.94.250.0/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4700 /* 64.252.71.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC7200 /* 64.252.114.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15500 /* 15.177.85.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5F600 /* 15.181.246.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FFB00 /* 52.95.251.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x48290000 /* 72.41.0.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60001800 /* 96.0.24.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60002400 /* 96.0.36.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15B00 /* 15.177.91.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x239B0000 /* 35.155.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36D20000 /* 54.210.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4B00 /* 64.252.75.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63978800 /* 99.151.136.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5F000 /* 15.181.240.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x344C0000 /* 52.76.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34120000 /* 52.18.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6BB00000 /* 107.176.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xAF29C000 /* 175.41.192.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC2C00 /* 15.220.44.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63979000 /* 99.151.144.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x340A0000 /* 52.10.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3452A400 /* 52.82.164.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x64180000 /* 100.24.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x97942200 /* 151.148.34.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03040400 /* 3.4.4.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DED00 /* 99.77.237.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63964000 /* 99.150.64.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA2D5E900 /* 162.213.233.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345FFF00 /* 52.95.255.0/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36B00000 /* 54.176.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F60000 /* 54.246.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC7000 /* 64.252.112.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10A20000 /* 16.162.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB52000 /* 15.181.32.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB57400 /* 15.181.116.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476A00 /* 35.71.106.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15D00 /* 15.177.93.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5F300 /* 15.181.243.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305E800 /* 3.5.232.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031C0000 /* 3.28.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x33100000 /* 51.16.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x364F0000 /* 54.79.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36FB0000 /* 54.251.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03800000 /* 3.128.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12FE0000 /* 18.254.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2BC10000 /* 43.193.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC6900 /* 64.252.105.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60005C00 /* 96.0.92.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03041800 /* 3.4.24.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCE000 /* 15.220.224.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36CF0000 /* 54.207.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D9100 /* 99.77.145.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63966000 /* 99.150.96.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476900 /* 35.71.105.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x341C0000 /* 52.28.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03000000 /* 3.0.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03212200 /* 3.33.34.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC7000 /* 15.220.112.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x344D0000 /* 52.77.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC6300 /* 64.252.99.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D37FF /* 99.77.55.255/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305EC00 /* 3.5.236.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB5FA00 /* 15.181.250.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC10A00 /* 15.193.10.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63979800 /* 99.151.152.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A60000 /* 18.166.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF880 /* 52.94.248.128/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D370D /* 99.77.55.13/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DA000 /* 99.77.160.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DFA00 /* 99.77.250.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC8000 /* 15.220.128.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12B70000 /* 18.183.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2E890000 /* 46.137.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8700 /* 99.77.135.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6397A800 /* 99.151.168.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x97942600 /* 151.148.38.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15C00 /* 15.177.92.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC10800 /* 15.193.8.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDCA000 /* 15.220.160.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03030200 /* 3.3.2.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03058600 /* 3.5.134.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DE40000 /* 13.228.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDC2800 /* 15.220.40.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EF860 /* 52.94.248.96/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34C40000 /* 52.196.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D9600 /* 99.77.150.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03053400 /* 3.5.52.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0305E000 /* 3.5.224.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36DE3A20 /* 54.222.58.32/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x60003000 /* 96.0.48.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DBA00 /* 99.77.186.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8E04B100 /* 142.4.177.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14400 /* 15.177.68.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB1478000 /* 177.71.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xC01A1900 /* 192.26.25.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345F6E00 /* 52.95.110.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCDFBC000 /* 205.251.192.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3FF67200 /* 63.246.114.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x78341660 /* 120.52.22.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCDFBF900 /* 205.251.249.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB4A33980 /* 180.163.57.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCCF6A800 /* 204.246.168.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6F0DAB80 /* 111.13.171.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A00000 /* 18.160.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCDFBFC00 /* 205.251.252.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36C00000 /* 54.192.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCCF6AD00 /* 204.246.173.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E6C800 /* 54.230.200.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x78FDF0C0 /* 120.253.240.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x7481E280 /* 116.129.226.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x82B00000 /* 130.176.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6C9C0000 /* 108.156.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63560000 /* 99.86.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCDFBC800 /* 205.251.200.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xDF474780 /* 223.71.71.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D200000 /* 13.32.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x78FDF580 /* 120.253.245.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DE00000 /* 13.224.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x46840000 /* 70.132.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0F9E0000 /* 15.158.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6F0DABC0 /* 111.13.171.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF90000 /* 13.249.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12EE0000 /* 18.238.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12F40000 /* 18.244.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCDFBD000 /* 205.251.208.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x41098000 /* 65.9.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x82B08000 /* 130.176.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3AFE8A00 /* 58.254.138.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E6D000 /* 54.230.208.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03A00000 /* 3.160.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x7481E200 /* 116.129.226.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DE8000 /* 52.222.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A40000 /* 18.164.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6F0DB920 /* 111.13.185.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC8000 /* 64.252.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCDFBFE00 /* 205.251.254.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E6E000 /* 54.230.224.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x47980000 /* 71.152.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xD8892000 /* 216.137.32.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCCF6AC00 /* 204.246.172.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12AC0000 /* 18.172.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x78342780 /* 120.52.39.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x76C16140 /* 118.193.97.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xDF474760 /* 223.71.71.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x129A0000 /* 18.154.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F08000 /* 54.240.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCDFBFA00 /* 205.251.250.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB4A33900 /* 180.163.57.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342E0000 /* 52.46.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xDF470B00 /* 223.71.11.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34528000 /* 52.82.128.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E60000 /* 54.230.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E68000 /* 54.230.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF8000 /* 54.239.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x82B0E000 /* 130.176.224.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2467E880 /* 36.103.232.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34540000 /* 52.84.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8FCC0000 /* 143.204.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x90DC0000 /* 144.220.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x783499C0 /* 120.52.153.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x7793B600 /* 119.147.182.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x78E8EC00 /* 120.232.236.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6F0DB940 /* 111.13.185.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36B60000 /* 54.182.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3AFE8A80 /* 58.254.138.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x78FDF5C0 /* 120.253.245.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EFC000 /* 54.239.192.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12440000 /* 18.68.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12400000 /* 18.64.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x78340C40 /* 120.52.12.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63540000 /* 99.84.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x82B0C000 /* 130.176.192.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x347C8000 /* 52.124.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCCF6A400 /* 204.246.164.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D230000 /* 13.35.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCCF6AE00 /* 204.246.174.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2467E800 /* 36.103.232.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x7793B680 /* 119.147.182.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x76C16180 /* 118.193.97.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x78E8EC80 /* 120.232.236.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCCF6B000 /* 204.246.176.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x41080000 /* 65.8.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x41090000 /* 65.9.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6C8A0000 /* 108.138.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x78FDF1A0 /* 120.253.241.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87500 /* 13.248.117.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC52200 /* 15.197.34.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC52400 /* 15.197.36.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87C00 /* 13.248.124.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87700 /* 13.248.119.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86400 /* 13.248.100.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87100 /* 13.248.113.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86E00 /* 13.248.110.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC52000 /* 15.197.32.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC50000 /* 15.197.0.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63536600 /* 99.83.102.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352AC00 /* 99.82.172.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63536400 /* 99.83.100.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC51000 /* 15.197.16.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E6C000 /* 54.230.192.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86900 /* 13.248.105.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352AD00 /* 99.82.173.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352A600 /* 99.82.166.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86100 /* 13.248.97.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC50800 /* 15.197.8.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC51200 /* 15.197.18.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87800 /* 13.248.120.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23478000 /* 35.71.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03030800 /* 3.3.8.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87F00 /* 13.248.127.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352AB00 /* 99.82.171.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86000 /* 13.248.96.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352A900 /* 99.82.169.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DF0000 /* 52.223.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352A400 /* 99.82.164.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC50400 /* 15.197.4.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DBC00 /* 99.77.188.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87900 /* 13.248.121.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352AA00 /* 99.82.170.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87A00 /* 13.248.122.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352AE00 /* 99.82.174.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63529C00 /* 99.82.156.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC50C00 /* 15.197.12.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87600 /* 13.248.118.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352A700 /* 99.82.167.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87200 /* 13.248.114.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86200 /* 13.248.98.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352A100 /* 99.82.161.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63536500 /* 99.83.101.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352AF00 /* 99.82.175.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03020800 /* 3.2.8.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86700 /* 13.248.103.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC51C00 /* 15.197.28.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC58000 /* 15.197.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03030600 /* 3.3.6.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF88000 /* 13.248.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63536200 /* 99.83.98.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4B020000 /* 75.2.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352A000 /* 99.82.160.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86C00 /* 13.248.108.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DBE00 /* 99.77.190.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86A00 /* 13.248.106.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86300 /* 13.248.99.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87000 /* 13.248.112.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC50200 /* 15.197.2.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63538000 /* 99.83.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87B00 /* 13.248.123.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352A200 /* 99.82.162.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87D00 /* 13.248.125.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4CDF0000 /* 76.223.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3FF67800 /* 63.246.120.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63536300 /* 99.83.99.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86D00 /* 13.248.109.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86F00 /* 13.248.111.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352A500 /* 99.82.165.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03030000 /* 3.3.0.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63536000 /* 99.83.96.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352A300 /* 99.82.163.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87300 /* 13.248.115.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC50300 /* 15.197.3.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86800 /* 13.248.104.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6352A800 /* 99.82.168.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87E00 /* 13.248.126.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF87400 /* 13.248.116.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03218000 /* 3.33.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86500 /* 13.248.101.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC51800 /* 15.197.24.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634DBD00 /* 99.77.189.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86B00 /* 13.248.107.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC51400 /* 15.197.20.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF86600 /* 13.248.102.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC51E00 /* 15.197.30.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC10000 /* 15.193.0.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC10000 /* 15.193.0.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB16400 /* 15.177.100.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15300 /* 15.177.83.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15200 /* 15.177.82.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15E00 /* 15.177.94.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14C00 /* 15.177.76.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB16300 /* 15.177.99.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15600 /* 15.177.86.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15900 /* 15.177.89.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14D00 /* 15.177.77.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15A00 /* 15.177.90.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14F00 /* 15.177.79.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14200 /* 15.177.66.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14900 /* 15.177.73.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15800 /* 15.177.88.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14600 /* 15.177.70.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB16100 /* 15.177.97.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14000 /* 15.177.64.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14800 /* 15.177.72.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14E00 /* 15.177.78.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14B00 /* 15.177.75.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15100 /* 15.177.81.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15400 /* 15.177.84.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB16200 /* 15.177.98.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15000 /* 15.177.80.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14A00 /* 15.177.74.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB16000 /* 15.177.96.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15700 /* 15.177.87.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15500 /* 15.177.85.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15B00 /* 15.177.91.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15D00 /* 15.177.93.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB15C00 /* 15.177.92.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB14400 /* 15.177.68.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4000 /* 64.252.64.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4000 /* 64.252.64.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8000 /* 99.77.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634D8000 /* 99.77.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x82B05800 /* 130.176.88.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF8600 /* 54.239.134.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34528600 /* 52.82.134.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x82B05600 /* 130.176.86.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x82B08C00 /* 130.176.140.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x82B00000 /* 130.176.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EFCC00 /* 54.239.204.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x82B0A000 /* 130.176.160.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x46840000 /* 70.132.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0F9E0000 /* 15.158.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x82B08800 /* 130.176.136.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EFAA00 /* 54.239.170.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342E0000 /* 52.46.0.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x82B06000 /* 130.176.96.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36B6B800 /* 54.182.184.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCCF6A600 /* 204.246.166.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x82B04000 /* 130.176.64.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36B6AC00 /* 54.182.172.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xCDFBDA00 /* 205.251.218.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342E0400 /* 52.46.4.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x82B09000 /* 130.176.144.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36B6B000 /* 54.182.176.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x82B04E00 /* 130.176.78.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36B6F800 /* 54.182.248.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC8000 /* 64.252.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36B69A00 /* 54.182.154.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x40FC4000 /* 64.252.64.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36B69000 /* 54.182.144.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36B6E000 /* 54.182.224.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x82B08000 /* 130.176.128.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342E2000 /* 52.46.32.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34528000 /* 52.82.128.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12440000 /* 18.68.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36B69C00 /* 54.182.156.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36B6A000 /* 54.182.160.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36B6F000 /* 54.182.240.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x82B0C000 /* 130.176.192.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x82B04C00 /* 130.176.76.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342E1000 /* 52.46.16.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EFD000 /* 54.239.208.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36B6BC00 /* 54.182.188.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x82B05000 /* 130.176.80.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36B68000 /* 54.182.128.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x82B04800 /* 130.176.72.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8CB30140 /* 140.179.1.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8CB30160 /* 140.179.1.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8CB371F8 /* 140.179.113.248/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8CB39080 /* 140.179.144.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8CB30F00 /* 140.179.15.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8CB30F40 /* 140.179.15.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8CB3B000 /* 140.179.176.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8CB32410 /* 140.179.36.16/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8CB32420 /* 140.179.36.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8CB32440 /* 140.179.36.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8CB33900 /* 140.179.57.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8CB33A00 /* 140.179.58.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8CB33A58 /* 140.179.58.88/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8CB33B00 /* 140.179.59.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8CB34FA0 /* 140.179.79.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8CB34FC0 /* 140.179.79.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8CB34FF4 /* 140.179.79.244/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8CB34F40 /* 140.179.79.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2BC40340 /* 43.196.3.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3450C500 /* 52.80.197.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3450C580 /* 52.80.197.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3450C600 /* 52.80.198.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3450C688 /* 52.80.198.136/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345033C8 /* 52.80.51.200/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345033D0 /* 52.80.51.208/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345033D8 /* 52.80.51.216/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345033E0 /* 52.80.51.224/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345033F0 /* 52.80.51.240/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345033F8 /* 52.80.51.248/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34517120 /* 52.81.113.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34517140 /* 52.81.113.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34517160 /* 52.81.113.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34517C00 /* 52.81.124.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34518780 /* 52.81.135.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34518900 /* 52.81.137.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34519700 /* 52.81.151.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3451A780 /* 52.81.167.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3451A7C0 /* 52.81.167.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3451D800 /* 52.81.216.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3451E800 /* 52.81.232.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4783C480 /* 71.131.196.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BD9400 /* 161.189.148.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BD1700 /* 161.189.23.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BD1720 /* 161.189.23.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BD4280 /* 161.189.66.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA1BD42C0 /* 161.189.66.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34520100 /* 52.82.1.0/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34527F00 /* 52.82.127.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34525C00 /* 52.82.92.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34531980 /* 52.83.25.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345319A0 /* 52.83.25.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34531A00 /* 52.83.26.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34531AC0 /* 52.83.26.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34531AE0 /* 52.83.26.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34531A40 /* 52.83.26.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34532168 /* 52.83.33.104/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34532170 /* 52.83.33.112/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34532148 /* 52.83.33.72/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34532150 /* 52.83.33.80/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34532158 /* 52.83.33.88/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34532160 /* 52.83.33.96/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34532280 /* 52.83.34.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34532248 /* 52.83.34.72/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34532250 /* 52.83.34.80/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34532258 /* 52.83.34.88/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34532260 /* 52.83.34.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34532300 /* 52.83.35.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34532380 /* 52.83.35.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34530500 /* 52.83.5.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34533A00 /* 52.83.58.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x444F02F4 /* 68.79.2.244/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x444F02F8 /* 68.79.2.248/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x444F0240 /* 68.79.2.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x45E6DB00 /* 69.230.219.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x45E6E200 /* 69.230.226.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x45E6E300 /* 69.230.227.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x45E6E400 /* 69.230.228.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x45EAC5C0 /* 69.234.197.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x45EAC548 /* 69.234.197.72/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x45EBA200 /* 69.235.162.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x45EBAA00 /* 69.235.170.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12FC7E00 /* 18.252.126.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12FC919C /* 18.252.145.156/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12FC91A0 /* 18.252.145.160/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12FC91A8 /* 18.252.145.168/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12FC91C0 /* 18.252.145.192/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12FC91D0 /* 18.252.145.208/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12FCA500 /* 18.252.165.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12FCA58C /* 18.252.165.140/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12FC0400 /* 18.252.4.0/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12FC0410 /* 18.252.4.16/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12FC3800 /* 18.252.56.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12FC3A00 /* 18.252.58.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12FDBA00 /* 18.253.186.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12FE1740 /* 18.254.23.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12FE3D80 /* 18.254.61.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12FE4400 /* 18.254.68.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC88D00 /* 15.200.141.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC89600 /* 15.200.150.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC8B080 /* 15.200.176.128/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC8B0C0 /* 15.200.176.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC81CF0 /* 15.200.28.240/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC81C50 /* 15.200.28.80/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC81C58 /* 15.200.28.88/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FCD5200 /* 15.205.82.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FCD5400 /* 15.205.84.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA0018000 /* 160.1.128.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031E8100 /* 3.30.129.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031E8200 /* 3.30.130.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031ECC00 /* 3.30.204.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031E2854 /* 3.30.40.84/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031E6280 /* 3.30.98.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031E6240 /* 3.30.98.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03208B00 /* 3.32.139.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0320BE00 /* 3.32.190.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0320BEF4 /* 3.32.190.244/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0320BEF8 /* 3.32.190.248/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x343DC100 /* 52.61.193.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x343D2868 /* 52.61.40.104/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF47900 /* 13.244.121.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF479C4 /* 13.244.121.196/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF47A00 /* 13.244.122.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF48400 /* 13.244.132.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF4A5C0 /* 13.244.165.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF4B080 /* 13.244.176.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF4B040 /* 13.244.176.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF4CA28 /* 13.244.202.40/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF4F4C0 /* 13.244.244.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF4F4E0 /* 13.244.244.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF42100 /* 13.244.33.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF42180 /* 13.244.33.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF42140 /* 13.244.33.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF42380 /* 13.244.35.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF423C0 /* 13.244.35.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF50120 /* 13.245.1.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF57000 /* 13.245.112.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF57100 /* 13.245.113.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF57200 /* 13.245.114.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF57FE8 /* 13.245.127.232/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF59B80 /* 13.245.155.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF59BE0 /* 13.245.155.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF5A680 /* 13.245.166.128/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF5A684 /* 13.245.166.132/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF5A6B0 /* 13.245.166.176/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF5F140 /* 13.245.241.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF55D8C /* 13.245.93.140/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF55DA0 /* 13.245.93.160/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF55DB0 /* 13.245.93.176/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF55DC0 /* 13.245.93.192/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF66C00 /* 13.246.108.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF67800 /* 13.246.120.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF64600 /* 13.246.70.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10A2A260 /* 16.162.162.96/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10A23400 /* 16.162.52.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10A3C400 /* 16.163.196.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10A3CE00 /* 16.163.206.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10A33F40 /* 16.163.63.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A27F00 /* 18.162.127.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A27F20 /* 18.162.127.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A27F40 /* 18.162.127.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A2BD00 /* 18.162.189.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A2DD80 /* 18.162.221.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A2DDA0 /* 18.162.221.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A2DDC0 /* 18.162.221.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A38B20 /* 18.163.139.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A3C900 /* 18.163.201.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A3C960 /* 18.163.201.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A3CC00 /* 18.163.204.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A34200 /* 18.163.66.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A34400 /* 18.163.68.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A61480 /* 18.166.20.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A614C0 /* 18.166.20.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A61440 /* 18.166.20.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A6ED80 /* 18.166.237.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A6ED40 /* 18.166.237.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A6ED60 /* 18.166.237.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A76F00 /* 18.167.111.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A77000 /* 18.167.112.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A77100 /* 18.167.113.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A75870 /* 18.167.88.112/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A75848 /* 18.167.88.72/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A75850 /* 18.167.88.80/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A75860 /* 18.167.88.96/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D70BFB8 /* 13.112.191.184/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D71C440 /* 13.113.196.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D71CB00 /* 13.113.203.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DE61580 /* 13.230.21.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DE615E0 /* 13.230.21.224/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DE615F0 /* 13.230.21.240/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DE70668 /* 13.231.6.104/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DE70670 /* 13.231.6.112/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DE706C0 /* 13.231.6.192/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DE706D0 /* 13.231.6.208/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DE70640 /* 13.231.6.64/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DE70648 /* 13.231.6.72/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DE70650 /* 13.231.6.80/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DE70658 /* 13.231.6.88/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12B0CB78 /* 18.176.203.120/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12B19CC0 /* 18.177.156.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12B33080 /* 18.179.48.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12B33060 /* 18.179.48.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12B4B200 /* 18.180.178.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12B4B400 /* 18.180.180.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12B45800 /* 18.180.88.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12B5CC80 /* 18.181.204.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12B5CCC0 /* 18.181.204.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12B5F200 /* 18.181.242.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12B66040 /* 18.182.96.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12B72500 /* 18.183.37.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0370A200 /* 3.112.162.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03701700 /* 3.112.23.0/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03704000 /* 3.112.64.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03705560 /* 3.112.85.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03706000 /* 3.112.96.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03706080 /* 3.112.96.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x037060A0 /* 3.112.96.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03706040 /* 3.112.96.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0371DA00 /* 3.113.218.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0371DA70 /* 3.113.218.112/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0371DA80 /* 3.113.218.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0371DA44 /* 3.113.218.68/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0371DA48 /* 3.113.218.72/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0371DA4C /* 3.113.218.76/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0372A400 /* 3.114.164.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2348A4D4 /* 35.72.164.212/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2348A4E8 /* 35.72.164.232/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2348A4F0 /* 35.72.164.240/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2348FF00 /* 35.72.255.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2348248C /* 35.72.36.140/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2348248E /* 35.72.36.142/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23482490 /* 35.72.36.144/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23482494 /* 35.72.36.148/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x234824C0 /* 35.72.36.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x234824E0 /* 35.72.36.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23482500 /* 35.72.37.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23482580 /* 35.72.37.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23497300 /* 35.73.115.0/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23497380 /* 35.73.115.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23490400 /* 35.73.4.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x234A4DF0 /* 35.74.77.240/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x234B8200 /* 35.75.130.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x234B8300 /* 35.75.131.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x234B8350 /* 35.75.131.80/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x234CFC00 /* 35.76.252.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x234D0080 /* 35.77.0.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x234D7000 /* 35.77.112.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x234D7C00 /* 35.77.124.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34C77FC0 /* 52.199.127.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F8DC00 /* 54.248.220.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36FAFB00 /* 54.250.251.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36FAFDC0 /* 54.250.253.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D7C9168 /* 13.124.145.104/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D7C9170 /* 13.124.145.112/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D7C9178 /* 13.124.145.120/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D7C9110 /* 13.124.145.16/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D7C9118 /* 13.124.145.24/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D7C9140 /* 13.124.145.64/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D7C9148 /* 13.124.145.72/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D7C9150 /* 13.124.145.80/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D7C9158 /* 13.124.145.88/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D7C9160 /* 13.124.145.96/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D7CC700 /* 13.124.199.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D7CC700 /* 13.124.199.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D7CF700 /* 13.124.247.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD10100 /* 13.209.1.0/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD10138 /* 13.209.1.56/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD10108 /* 13.209.1.8/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD10160 /* 13.209.1.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD14780 /* 13.209.71.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD147E0 /* 13.209.71.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA49C00 /* 15.164.156.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA4F300 /* 15.164.243.0/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA4F3C0 /* 15.164.243.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA4F3E0 /* 15.164.243.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA4F320 /* 15.164.243.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA5C180 /* 15.165.193.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA5C140 /* 15.165.193.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA5E000 /* 15.165.224.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x032265C0 /* 3.34.101.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0322E400 /* 3.34.228.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0322E440 /* 3.34.228.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03222500 /* 3.34.37.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03222600 /* 3.34.38.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x032259C0 /* 3.34.89.192/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x032259C4 /* 3.34.89.196/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03225940 /* 3.34.89.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03238280 /* 3.35.130.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0323A000 /* 3.35.160.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0324A780 /* 3.36.167.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0324A71C /* 3.36.167.28/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0324A730 /* 3.36.167.48/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0324A740 /* 3.36.167.64/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0324A750 /* 3.36.167.80/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0324BE00 /* 3.36.190.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0324C000 /* 3.36.192.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0324C200 /* 3.36.194.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0324CA00 /* 3.36.202.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0324F5CC /* 3.36.245.204/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0324F5E8 /* 3.36.245.232/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x032403A0 /* 3.36.3.160/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x032403C0 /* 3.36.3.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x032403E0 /* 3.36.3.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03240360 /* 3.36.3.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x032683C0 /* 3.38.131.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0326E500 /* 3.38.229.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0326F800 /* 3.38.248.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03265A08 /* 3.38.90.8/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03277100 /* 3.39.113.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03277200 /* 3.39.114.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03277400 /* 3.39.116.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03275280 /* 3.39.82.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x344EF780 /* 52.78.247.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36B4B800 /* 54.180.184.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD08300 /* 13.208.131.0/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD08380 /* 13.208.131.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD08310 /* 13.208.131.16/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD083A0 /* 13.208.131.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD083C0 /* 13.208.131.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD083E0 /* 13.208.131.224/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD083E4 /* 13.208.131.228/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD083E8 /* 13.208.131.232/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD08318 /* 13.208.131.24/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD08320 /* 13.208.131.32/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD08328 /* 13.208.131.40/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD08308 /* 13.208.131.8/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD0AA00 /* 13.208.170.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD0B1E0 /* 13.208.177.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD0B400 /* 13.208.180.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD0C200 /* 13.208.194.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD0D940 /* 13.208.217.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD0D960 /* 13.208.217.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD0E300 /* 13.208.227.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD0E380 /* 13.208.227.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD0E400 /* 13.208.228.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD0E480 /* 13.208.228.128/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD0E488 /* 13.208.228.136/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD02110 /* 13.208.33.16/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD02118 /* 13.208.33.24/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD02108 /* 13.208.33.8/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0F980A00 /* 15.152.10.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0F988570 /* 15.152.133.112/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0F988580 /* 15.152.133.128/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0F98AE00 /* 15.152.174.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0F98B000 /* 15.152.176.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0F981800 /* 15.152.24.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0F981880 /* 15.152.24.128/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0F9818C0 /* 15.152.24.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0F981820 /* 15.152.24.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0F981840 /* 15.152.24.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0F9808C0 /* 15.152.8.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA82800 /* 15.168.40.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA82880 /* 15.168.40.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D7E1788 /* 13.126.23.136/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D7E1790 /* 13.126.23.144/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D7E1798 /* 13.126.23.152/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D7E17A0 /* 13.126.23.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D7E17C0 /* 13.126.23.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D7EF300 /* 13.126.243.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D7F4680 /* 13.127.70.128/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D7F4688 /* 13.127.70.136/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D7F4690 /* 13.127.70.144/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D7F4698 /* 13.127.70.152/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D7F46A0 /* 13.127.70.160/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DE84380 /* 13.232.67.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DE843A0 /* 13.232.67.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DE9B100 /* 13.233.177.0/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DE9B1C0 /* 13.233.177.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DE9B120 /* 13.233.177.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DEADD88 /* 13.234.221.136/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DEADDC0 /* 13.234.221.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DEA0800 /* 13.234.8.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DEBC560 /* 13.235.197.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DEBE400 /* 13.235.228.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DEB0600 /* 13.235.6.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FCE8980 /* 15.206.137.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FCE89C0 /* 15.206.137.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FCF0D00 /* 15.207.13.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FCF0D80 /* 15.207.13.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FCFD580 /* 15.207.213.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x036C0D7C /* 3.108.13.124/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x036D4800 /* 3.109.72.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x036D4898 /* 3.109.72.152/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x036E3900 /* 3.110.57.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x036E4700 /* 3.110.71.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x036F6E00 /* 3.111.110.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x036FFB00 /* 3.111.251.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x036F5A00 /* 3.111.90.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03064680 /* 3.6.70.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0306464C /* 3.6.70.76/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03070A00 /* 3.7.10.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03071930 /* 3.7.25.48/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3442C280 /* 52.66.194.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4100C0B0 /* 65.0.192.176/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4100C0E0 /* 65.0.192.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4100EA00 /* 65.0.234.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x410167C0 /* 65.1.103.192/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x410167C8 /* 65.1.103.200/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x410167D0 /* 65.1.103.208/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x410167E0 /* 65.1.103.224/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x41019C00 /* 65.1.156.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4101AA00 /* 65.1.170.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4101AC00 /* 65.1.172.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4101AE00 /* 65.1.174.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x41020E00 /* 65.2.14.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x41021000 /* 65.2.16.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4102C000 /* 65.2.192.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x123C7D00 /* 18.60.125.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x123C7F00 /* 18.60.127.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x123C8000 /* 18.60.128.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x123C9700 /* 18.60.151.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x123C9780 /* 18.60.151.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x123C9800 /* 18.60.152.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x123CC000 /* 18.60.192.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x123C40C0 /* 18.60.64.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x123C4400 /* 18.60.68.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x123C4440 /* 18.60.68.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x123C4C00 /* 18.60.76.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x123C4EC0 /* 18.60.78.192/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x123C4ED0 /* 18.60.78.208/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD48400 /* 13.212.132.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD4D180 /* 13.212.209.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD4D15E /* 13.212.209.94/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD4D160 /* 13.212.209.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD40380 /* 13.212.3.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD40340 /* 13.212.3.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD51484 /* 13.213.20.132/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD51488 /* 13.213.20.136/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD51490 /* 13.213.20.144/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD514A0 /* 13.213.20.160/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD51500 /* 13.213.21.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD51600 /* 13.213.22.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD51800 /* 13.213.24.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD54BE0 /* 13.213.75.224/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD67600 /* 13.214.118.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD67C80 /* 13.214.124.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD6E000 /* 13.214.224.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD6E400 /* 13.214.228.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD75C00 /* 13.215.92.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD75D00 /* 13.215.93.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD75D80 /* 13.215.93.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DE44500 /* 13.228.69.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DE5BBC0 /* 13.229.187.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DE5BBE8 /* 13.229.187.232/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DFABA00 /* 13.250.186.0/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DFABA80 /* 13.250.186.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DFABA10 /* 13.250.186.16/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DFABAA0 /* 13.250.186.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DFABAC0 /* 13.250.186.192/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DFABAC8 /* 13.250.186.200/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DFABAD0 /* 13.250.186.208/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DFABA08 /* 13.250.186.8/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DFB7140 /* 13.251.113.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DFB7400 /* 13.251.116.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x128801C0 /* 18.136.1.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x128801E0 /* 18.136.1.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x128A8680 /* 18.138.134.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x128AF400 /* 18.138.244.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x128BCCB0 /* 18.139.204.176/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x128BCCC0 /* 18.139.204.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x128CB100 /* 18.140.177.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x128CB140 /* 18.140.177.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x128D9400 /* 18.141.148.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x128D9480 /* 18.141.148.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x128D9600 /* 18.141.150.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x128D9800 /* 18.141.152.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x128D9A00 /* 18.141.154.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x128DE200 /* 18.141.226.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x128DEE00 /* 18.141.238.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x128DEE44 /* 18.141.238.68/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x128D42F8 /* 18.141.66.248/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x128D42FC /* 18.141.66.252/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030005E0 /* 3.0.5.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03000520 /* 3.0.5.32/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DCBF00 /* 52.220.191.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34DDDD80 /* 52.221.221.128/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x344C7F00 /* 52.76.127.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36FB1F80 /* 54.251.31.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36FFFEC0 /* 54.255.254.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD202C0 /* 13.210.2.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD24380 /* 13.210.67.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD30CA0 /* 13.211.12.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD30CC0 /* 13.211.12.192/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD30CC8 /* 13.211.12.200/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD30CD0 /* 13.211.12.208/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD30CD8 /* 13.211.12.216/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD30CF8 /* 13.211.12.248/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD3A6C0 /* 13.211.166.192/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DD3A6C8 /* 13.211.166.200/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DEC0800 /* 13.236.8.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DEC5280 /* 13.236.82.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DEC5260 /* 13.236.82.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DEF9E00 /* 13.239.158.0/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D363F80 /* 13.54.63.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D37FFD8 /* 13.55.255.216/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03685200 /* 3.104.82.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0369AC00 /* 3.105.172.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03690500 /* 3.105.5.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03690520 /* 3.105.5.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031801D0 /* 3.24.1.208/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0318E3C0 /* 3.24.227.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03198A00 /* 3.25.138.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03198A40 /* 3.25.138.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0319B280 /* 3.25.178.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0319F800 /* 3.25.248.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03192580 /* 3.25.37.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03192540 /* 3.25.37.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03192600 /* 3.25.38.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03192800 /* 3.25.40.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03192B00 /* 3.25.43.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03192C00 /* 3.25.44.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03192F1C /* 3.25.47.28/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03192F20 /* 3.25.47.32/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031A6DD8 /* 3.26.109.216/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031A7F18 /* 3.26.127.24/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031A8900 /* 3.26.137.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031A8A00 /* 3.26.138.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031A8C40 /* 3.26.140.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031AF600 /* 3.26.246.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031AF800 /* 3.26.248.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031A3AE0 /* 3.26.58.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031A5100 /* 3.26.81.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031A5120 /* 3.26.81.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031A52EC /* 3.26.82.236/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031A52F0 /* 3.26.82.240/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031A5300 /* 3.26.83.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031A5400 /* 3.26.84.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031A5600 /* 3.26.86.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031A5800 /* 3.26.88.0/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031A5810 /* 3.26.88.16/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3699FE00 /* 54.153.254.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36FCFEC0 /* 54.252.254.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36FC4F80 /* 54.252.79.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6C887A00 /* 108.136.122.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6C887A40 /* 108.136.122.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6C889700 /* 108.136.151.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6C889A10 /* 108.136.154.16/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6C889A20 /* 108.136.154.32/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6C889A30 /* 108.136.154.48/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6C88DD00 /* 108.136.221.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6C8826C0 /* 108.136.38.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6C897200 /* 108.137.114.0/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6C897240 /* 108.137.114.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6C893A00 /* 108.137.58.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6C893A80 /* 108.137.58.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6C893AC0 /* 108.137.58.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6C893A40 /* 108.137.58.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10329000 /* 16.50.144.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10329080 /* 16.50.144.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x1032A100 /* 16.50.161.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10324300 /* 16.50.67.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10324380 /* 16.50.67.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10324340 /* 16.50.67.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x103245C0 /* 16.50.69.192/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x103245D0 /* 16.50.69.208/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10324600 /* 16.50.70.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0F9C2600 /* 15.156.38.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0F9C2640 /* 15.156.38.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDE1020 /* 15.222.16.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDE1008 /* 15.222.16.8/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDE1060 /* 15.222.16.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDE2B00 /* 15.222.43.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDE2B80 /* 15.222.43.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDE2B20 /* 15.222.43.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDE2B40 /* 15.222.43.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDF6400 /* 15.223.100.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDF6600 /* 15.223.102.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FDF3400 /* 15.223.52.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03608F80 /* 3.96.143.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03608FC0 /* 3.96.143.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03600244 /* 3.96.2.68/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03600248 /* 3.96.2.72/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03605400 /* 3.96.84.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0361C070 /* 3.97.192.112/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0361C080 /* 3.97.192.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03611400 /* 3.97.20.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0361D900 /* 3.97.217.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0361DA00 /* 3.97.218.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0361DB00 /* 3.97.219.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0361E600 /* 3.97.230.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03613180 /* 3.97.49.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03616380 /* 3.97.99.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x036163A0 /* 3.97.99.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03616340 /* 3.97.99.64/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03616360 /* 3.97.99.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0362ABC4 /* 3.98.171.196/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0362ABE0 /* 3.98.171.224/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0362AB5C /* 3.98.171.92/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03621800 /* 3.98.24.0/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03621810 /* 3.98.24.16/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03625600 /* 3.98.86.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03637C00 /* 3.99.124.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0363C200 /* 3.99.194.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0363C400 /* 3.99.196.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B60ED0 /* 35.182.14.208/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B60ED8 /* 35.182.14.216/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B60E30 /* 35.182.14.48/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B7FF00 /* 35.183.255.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B72600 /* 35.183.38.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B72620 /* 35.183.38.32/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B72628 /* 35.183.38.40/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B72630 /* 35.183.38.48/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B72638 /* 35.183.38.56/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B72640 /* 35.183.38.64/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B75CB0 /* 35.183.92.176/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634F7E00 /* 99.79.126.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634FA900 /* 99.79.169.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634F14C0 /* 99.79.20.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634F14E0 /* 99.79.20.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x634F2200 /* 99.79.34.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x129C3400 /* 18.156.52.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x129C3600 /* 18.156.54.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x129DED80 /* 18.157.237.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x129DEDC0 /* 18.157.237.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x129D47C0 /* 18.157.71.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12B88AE0 /* 18.184.138.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12B80280 /* 18.184.2.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12B8CB80 /* 18.184.203.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12C08E00 /* 18.192.142.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12C0D800 /* 18.192.216.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12C4A100 /* 18.196.161.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12C4A1B8 /* 18.196.161.184/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12C4A1C0 /* 18.196.161.192/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12C4A1C8 /* 18.196.161.200/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12C4A120 /* 18.196.161.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12C4A150 /* 18.196.161.80/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12C4A158 /* 18.196.161.88/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0378B5E0 /* 3.120.181.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0378B528 /* 3.120.181.40/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x037A8000 /* 3.122.128.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x037B0CC0 /* 3.123.12.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x037B0E00 /* 3.123.14.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x037B0F00 /* 3.123.15.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x037B2C00 /* 3.123.44.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x037B2C80 /* 3.123.44.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x037B2CA0 /* 3.123.44.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x037B2C50 /* 3.123.44.80/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x037B2C60 /* 3.123.44.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x037F3080 /* 3.127.48.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x037F30F4 /* 3.127.48.244/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x037F30F8 /* 3.127.48.248/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x037F4A00 /* 3.127.74.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03400100 /* 3.64.1.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03400180 /* 3.64.1.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x034001C0 /* 3.64.1.192/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x034001C8 /* 3.64.1.200/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03400140 /* 3.64.1.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0340E2E8 /* 3.64.226.232/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0340E2F0 /* 3.64.226.240/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0341F600 /* 3.65.246.0/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0341F610 /* 3.65.246.16/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0342AC00 /* 3.66.172.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0344FBB0 /* 3.68.251.176/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0344FBE8 /* 3.68.251.232/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0346C380 /* 3.70.195.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0346C340 /* 3.70.195.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0346D300 /* 3.70.211.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0346D480 /* 3.70.212.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03476800 /* 3.71.104.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03477800 /* 3.71.120.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0348A800 /* 3.72.168.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03482180 /* 3.72.33.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x034A9480 /* 3.74.148.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x034B7000 /* 3.75.112.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x239D7FF8 /* 35.157.127.248/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x239E7F40 /* 35.158.127.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x239E8800 /* 35.158.136.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3439FE00 /* 52.57.254.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x343B7F00 /* 52.59.127.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x103E8C00 /* 16.62.140.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x103E8C80 /* 16.62.140.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x103E8D00 /* 16.62.141.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x103EB780 /* 16.62.183.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x103E3600 /* 16.62.54.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x103E3640 /* 16.62.54.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x103E38E0 /* 16.62.56.224/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x103E38F0 /* 16.62.56.240/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x103E07C0 /* 16.62.7.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x103E4600 /* 16.62.70.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D30BA80 /* 13.48.186.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D30BAA0 /* 13.48.186.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D30BAC0 /* 13.48.186.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D302000 /* 13.48.32.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D300480 /* 13.48.4.128/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D300490 /* 13.48.4.144/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D3004A0 /* 13.48.4.160/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D3004C0 /* 13.48.4.192/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D3004C8 /* 13.48.4.200/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D3004D0 /* 13.48.4.208/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D3004D8 /* 13.48.4.216/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D3004E0 /* 13.48.4.224/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D304A00 /* 13.48.74.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D317E80 /* 13.49.126.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D318F00 /* 13.49.143.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D318F40 /* 13.49.143.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D31FDE0 /* 13.49.253.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D312840 /* 13.49.40.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D312A00 /* 13.49.42.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D320CC0 /* 13.50.12.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D325900 /* 13.50.89.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D337800 /* 13.51.120.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D33FD50 /* 13.51.253.80/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D331D00 /* 13.51.29.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D331D20 /* 13.51.29.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D334798 /* 13.51.71.152/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D3347A0 /* 13.51.71.160/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D3347B0 /* 13.51.71.176/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D3347C0 /* 13.51.71.192/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D335F00 /* 13.51.95.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D336000 /* 13.51.96.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D336100 /* 13.51.97.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D35B400 /* 13.53.180.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D353F80 /* 13.53.63.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D353FA0 /* 13.53.63.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D353FC0 /* 13.53.63.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10100200 /* 16.16.2.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10AAC700 /* 16.170.199.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10AB3000 /* 16.171.48.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA03770 /* 15.160.55.112/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA05A40 /* 15.160.90.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA18700 /* 15.161.135.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA187A4 /* 15.161.135.164/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA18740 /* 15.161.135.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA18760 /* 15.161.135.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA18800 /* 15.161.136.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA18C00 /* 15.161.140.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA1A480 /* 15.161.164.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA1C000 /* 15.161.192.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA1C0F0 /* 15.161.192.240/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA1C040 /* 15.161.192.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA1F780 /* 15.161.247.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA1F740 /* 15.161.247.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA1F760 /* 15.161.247.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA14200 /* 15.161.66.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA14280 /* 15.161.66.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA14240 /* 15.161.66.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA14480 /* 15.161.68.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FA144C0 /* 15.161.68.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12660200 /* 18.102.2.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23984A80 /* 35.152.74.128/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23984A88 /* 35.152.74.136/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23984A90 /* 35.152.74.144/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23984AA0 /* 35.152.74.160/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23985600 /* 35.152.86.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23985700 /* 35.152.87.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23985800 /* 35.152.88.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x1264A000 /* 18.100.160.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x1264B800 /* 18.100.184.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x1264B880 /* 18.100.184.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12644080 /* 18.100.64.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x126440C0 /* 18.100.64.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12644100 /* 18.100.65.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12644780 /* 18.100.71.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12644A00 /* 18.100.74.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6C80A000 /* 108.128.160.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6C80A200 /* 108.128.162.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB0229FC0 /* 176.34.159.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12C8D400 /* 18.200.212.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12CAD830 /* 18.202.216.48/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03F8B000 /* 3.248.176.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03F8B480 /* 3.248.180.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03F8B428 /* 3.248.180.40/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03F8B440 /* 3.248.180.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03F8BA00 /* 3.248.186.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03F8BA80 /* 3.248.186.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03F8BA20 /* 3.248.186.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03F8BA40 /* 3.248.186.64/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03F8BA5C /* 3.248.186.92/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03F8D820 /* 3.248.216.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03F8F400 /* 3.248.244.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03F8F4F0 /* 3.248.244.240/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03F8F500 /* 3.248.245.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03F8F600 /* 3.248.246.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03F91C00 /* 3.249.28.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03FAD1C0 /* 3.250.209.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03FAD200 /* 3.250.210.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03FAF340 /* 3.250.243.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03FAF400 /* 3.250.244.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03FB6800 /* 3.251.104.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03FB6880 /* 3.251.104.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03FB6900 /* 3.251.105.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03FB6980 /* 3.251.105.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03FB6A80 /* 3.251.106.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03FB6D5C /* 3.251.109.92/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03FB6ED0 /* 3.251.110.208/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03FB6EE0 /* 3.251.110.224/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03FB9000 /* 3.251.144.0/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03FB9478 /* 3.251.148.120/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03FB982C /* 3.251.152.44/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03FBD7C0 /* 3.251.215.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03FBD800 /* 3.251.216.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03FB3800 /* 3.251.56.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03FB3E80 /* 3.251.62.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03FB5E00 /* 3.251.94.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03FB5F80 /* 3.251.95.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03FB5F60 /* 3.251.95.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03FC3240 /* 3.252.50.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22F29980 /* 34.242.153.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22F299E0 /* 34.242.153.224/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22F299F0 /* 34.242.153.240/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22F5CD00 /* 34.245.205.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22F5CD80 /* 34.245.205.128/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22F5CDA0 /* 34.245.205.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22F5CD40 /* 34.245.205.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22F5CD60 /* 34.245.205.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22F55200 /* 34.245.82.0/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22F55210 /* 34.245.82.16/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22F55220 /* 34.245.82.32/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22F55230 /* 34.245.82.48/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22FA3FF8 /* 34.250.63.248/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34137C00 /* 52.19.124.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34D4F800 /* 52.212.248.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34D7DA70 /* 52.215.218.112/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34D7DA40 /* 52.215.218.64/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E41000 /* 54.228.16.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3F223C00 /* 63.34.60.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63502280 /* 99.80.34.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63502230 /* 99.80.34.48/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63502240 /* 99.80.34.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63505800 /* 99.80.88.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63505840 /* 99.80.88.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2801C0 /* 13.40.1.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D28CA00 /* 13.40.202.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D28CC00 /* 13.40.204.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D2901A0 /* 13.41.1.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12825B90 /* 18.130.91.144/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12825B94 /* 18.130.91.148/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x128492C0 /* 18.132.146.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12841500 /* 18.132.21.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12841600 /* 18.132.22.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12852D00 /* 18.133.45.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12852D40 /* 18.133.45.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x1286FFA0 /* 18.134.255.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x1286FFC0 /* 18.134.255.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x1286FFE0 /* 18.134.255.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12864400 /* 18.134.68.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x1287E2C0 /* 18.135.226.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A88500 /* 18.168.133.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A82100 /* 18.168.33.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A82200 /* 18.168.34.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A82400 /* 18.168.36.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A82500 /* 18.168.37.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A82588 /* 18.168.37.136/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A82590 /* 18.168.37.144/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A825A0 /* 18.168.37.160/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A825B0 /* 18.168.37.176/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A82520 /* 18.168.37.32/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A82530 /* 18.168.37.48/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A82540 /* 18.168.37.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A9E688 /* 18.169.230.136/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12A9E6C8 /* 18.169.230.200/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030A7F20 /* 3.10.127.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030A1100 /* 3.10.17.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030A1180 /* 3.10.17.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030AC980 /* 3.10.201.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030AC9C0 /* 3.10.201.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030AC940 /* 3.10.201.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030B3500 /* 3.11.53.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0308A800 /* 3.8.168.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03082518 /* 3.8.37.24/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03082560 /* 3.8.37.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03099F40 /* 3.9.159.64/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03099F44 /* 3.9.159.68/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03099F48 /* 3.9.159.72/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03092900 /* 3.9.41.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03092920 /* 3.9.41.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03092940 /* 3.9.41.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03095E00 /* 3.9.94.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B02000 /* 35.176.32.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B05C20 /* 35.176.92.32/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B19A80 /* 35.177.154.128/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B19A90 /* 35.177.154.144/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B19AA0 /* 35.177.154.160/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B19AB0 /* 35.177.154.176/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B19AB8 /* 35.177.154.184/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B19AC0 /* 35.177.154.192/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B32A00 /* 35.179.42.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34387F00 /* 52.56.127.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D249B00 /* 13.36.155.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D241200 /* 13.36.18.0/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D241220 /* 13.36.18.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D241240 /* 13.36.18.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D244C00 /* 13.36.76.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D244D00 /* 13.36.77.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D244E00 /* 13.36.78.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D245470 /* 13.36.84.112/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D245418 /* 13.36.84.24/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D245420 /* 13.36.84.32/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D24542C /* 13.36.84.44/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D245430 /* 13.36.84.48/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D245440 /* 13.36.84.64/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D250140 /* 13.37.1.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D268400 /* 13.38.132.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D268C00 /* 13.38.140.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D26CA40 /* 13.38.202.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FBC6600 /* 15.188.102.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FBCB800 /* 15.188.184.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FBCD200 /* 15.188.210.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FBCD280 /* 15.188.210.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FBCD2C4 /* 15.188.210.196/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FBCD2C8 /* 15.188.210.200/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FBCD220 /* 15.188.210.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FBCD240 /* 15.188.210.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FEC9BC0 /* 15.236.155.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FECE700 /* 15.236.231.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FECE740 /* 15.236.231.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FEC5000 /* 15.236.80.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B40110 /* 35.180.1.16/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B40118 /* 35.180.1.24/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B40120 /* 35.180.1.32/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B40128 /* 35.180.1.40/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B40130 /* 35.180.1.48/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B40138 /* 35.180.1.56/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B40108 /* 35.180.1.8/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B47080 /* 35.180.112.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B470A0 /* 35.180.112.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B47050 /* 35.180.112.80/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B4F400 /* 35.180.244.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23B58000 /* 35.181.128.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342F8B00 /* 52.47.139.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342F49A0 /* 52.47.73.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342F4948 /* 52.47.73.72/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031CD380 /* 3.28.211.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031CE500 /* 3.28.229.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031CFF80 /* 3.28.255.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031CFF50 /* 3.28.255.80/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031C3F80 /* 3.28.63.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031C3FC0 /* 3.28.63.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031C4100 /* 3.28.65.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031C4670 /* 3.28.70.112/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031C4630 /* 3.28.70.48/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031C4660 /* 3.28.70.96/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031C4800 /* 3.28.72.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x031D0380 /* 3.29.3.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB80180 /* 15.184.1.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB80140 /* 15.184.1.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB87D00 /* 15.184.125.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB87D80 /* 15.184.125.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB87DE0 /* 15.184.125.224/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB87DE8 /* 15.184.125.232/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB87DF0 /* 15.184.125.240/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB87D40 /* 15.184.125.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB89900 /* 15.184.153.0/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB8B860 /* 15.184.184.96/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB846C8 /* 15.184.70.200/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB846E0 /* 15.184.70.224/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB98DA0 /* 15.185.141.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB98DC0 /* 15.185.141.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB99000 /* 15.185.144.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB9F500 /* 15.185.245.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB9FB00 /* 15.185.251.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB921C0 /* 15.185.33.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB92120 /* 15.185.33.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB92140 /* 15.185.33.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB92160 /* 15.185.33.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB95600 /* 15.185.86.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB95B20 /* 15.185.91.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x9DAF6680 /* 157.175.102.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x9DAF66A0 /* 157.175.102.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x9DAF6660 /* 157.175.102.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x9DAF8C00 /* 157.175.140.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x9DAFFF00 /* 157.175.255.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x9DF10200 /* 157.241.2.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x9DF11900 /* 157.241.25.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE40180 /* 15.228.1.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE401C0 /* 15.228.1.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE40140 /* 15.228.1.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE467F0 /* 15.228.103.240/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE46800 /* 15.228.104.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE46900 /* 15.228.105.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE46A00 /* 15.228.106.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE46B00 /* 15.228.107.0/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE46B10 /* 15.228.107.16/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE47EC8 /* 15.228.126.200/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE47E30 /* 15.228.126.48/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE47E48 /* 15.228.126.72/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE48100 /* 15.228.129.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE49000 /* 15.228.144.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE49680 /* 15.228.150.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE49700 /* 15.228.151.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE44000 /* 15.228.64.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE44840 /* 15.228.72.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE45CC0 /* 15.228.92.192/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE45CD0 /* 15.228.92.208/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE45CE0 /* 15.228.92.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE46100 /* 15.228.97.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE52400 /* 15.229.36.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE52800 /* 15.229.40.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xB147CF80 /* 177.71.207.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E40100 /* 18.228.1.0/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E40110 /* 18.228.1.16/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E40108 /* 18.228.1.8/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E4F600 /* 18.228.246.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E44620 /* 18.228.70.32/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E56400 /* 18.229.100.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E56470 /* 18.229.100.112/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E56474 /* 18.229.100.116/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E56480 /* 18.229.100.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E564A0 /* 18.229.100.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E564C0 /* 18.229.100.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E5DC80 /* 18.229.220.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E5DCC0 /* 18.229.220.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E52500 /* 18.229.37.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E52520 /* 18.229.37.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E54660 /* 18.229.70.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E56300 /* 18.229.99.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E66700 /* 18.230.103.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E66800 /* 18.230.104.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E62E00 /* 18.230.46.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E62E80 /* 18.230.46.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E62E20 /* 18.230.46.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E63600 /* 18.230.54.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E76900 /* 18.231.105.0/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E76980 /* 18.231.105.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E769A0 /* 18.231.105.160/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E769A8 /* 18.231.105.168/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E769B0 /* 18.231.105.176/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E769B8 /* 18.231.105.184/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E7C208 /* 18.231.194.8/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E82840 /* 54.232.40.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E9CC00 /* 54.233.204.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36E9FF80 /* 54.233.255.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x6B17FF00 /* 107.23.255.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12CE6BA0 /* 18.206.107.160/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12CE6B18 /* 18.206.107.24/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12D171F0 /* 18.209.113.240/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12D17140 /* 18.209.113.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12D59C60 /* 18.213.156.96/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E80180 /* 18.232.1.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E801C0 /* 18.232.1.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E80120 /* 18.232.1.32/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E80124 /* 18.232.1.36/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E80128 /* 18.232.1.40/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E8012C /* 18.232.1.44/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E80130 /* 18.232.1.48/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12E80140 /* 18.232.1.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03D048B0 /* 3.208.72.176/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03D1CA30 /* 3.209.202.48/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03D15300 /* 3.209.83.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03D15390 /* 3.209.83.144/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03D153A0 /* 3.209.83.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03D153C0 /* 3.209.83.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03D15320 /* 3.209.83.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03D15340 /* 3.209.83.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03D15360 /* 3.209.83.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03D15400 /* 3.209.84.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03D15480 /* 3.209.84.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03D15500 /* 3.209.85.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03D15580 /* 3.209.85.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03D155A0 /* 3.209.85.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03D155C0 /* 3.209.85.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03D15700 /* 3.209.87.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03D15780 /* 3.209.87.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03D88700 /* 3.216.135.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03D88800 /* 3.216.136.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03D89000 /* 3.216.144.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03D89400 /* 3.216.148.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03D863A0 /* 3.216.99.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03D9E400 /* 3.217.228.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03DAB400 /* 3.218.180.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03DAB480 /* 3.218.180.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03DAB500 /* 3.218.181.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03DAB580 /* 3.218.181.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03DAB600 /* 3.218.182.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03DAB680 /* 3.218.182.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03DAB700 /* 3.218.183.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03DAB780 /* 3.218.183.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03E3FA80 /* 3.227.250.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03E30400 /* 3.227.4.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03E4AA00 /* 3.228.170.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03E4AA80 /* 3.228.170.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03E4AA40 /* 3.228.170.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03E4AB00 /* 3.228.171.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03E4AB80 /* 3.228.171.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03E4AC00 /* 3.228.172.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03E4AC80 /* 3.228.172.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03E4AD00 /* 3.228.173.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03E4AD80 /* 3.228.173.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03E4ADC0 /* 3.228.173.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03E4B500 /* 3.228.181.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03E4B600 /* 3.228.182.0/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03E4B60A /* 3.228.182.10/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03E4B664 /* 3.228.182.100/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03E4B62E /* 3.228.182.46/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03E4B630 /* 3.228.182.48/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03E4B605 /* 3.228.182.5/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03E4B606 /* 3.228.182.6/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03E4B640 /* 3.228.182.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03E4B608 /* 3.228.182.8/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03E4B660 /* 3.228.182.96/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03E70200 /* 3.231.2.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EAE8E0 /* 3.234.232.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EAF8C0 /* 3.234.248.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EB7000 /* 3.235.112.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EBBD64 /* 3.235.189.100/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EBBD60 /* 3.235.189.96/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EBCA80 /* 3.235.202.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EB1A00 /* 3.235.26.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EB2000 /* 3.235.32.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03ECA900 /* 3.236.169.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03ECA9C0 /* 3.236.169.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EC2000 /* 3.236.32.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EC3000 /* 3.236.48.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EC5E80 /* 3.236.94.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03ED6B00 /* 3.237.107.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EEA600 /* 3.238.166.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EEA700 /* 3.238.167.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EEB264 /* 3.238.178.100/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EEB268 /* 3.238.178.104/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EEB270 /* 3.238.178.112/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EEB278 /* 3.238.178.120/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EEB280 /* 3.238.178.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EEB2A0 /* 3.238.178.160/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EEB2A8 /* 3.238.178.168/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EEB2C5 /* 3.238.178.197/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EEB2C6 /* 3.238.178.198/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EEB2C8 /* 3.238.178.200/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EEB2D0 /* 3.238.178.208/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EEB2E0 /* 3.238.178.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EECF00 /* 3.238.207.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EECF80 /* 3.238.207.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EED000 /* 3.238.208.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EED080 /* 3.238.208.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EED100 /* 3.238.209.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EED180 /* 3.238.209.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EED200 /* 3.238.210.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EED400 /* 3.238.212.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EED880 /* 3.238.216.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EF9800 /* 3.239.152.0/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EF980C /* 3.239.152.12/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EF9880 /* 3.239.152.128/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EF9888 /* 3.239.152.136/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EF982E /* 3.239.152.46/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EF9830 /* 3.239.152.48/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EF9805 /* 3.239.152.5/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EF9806 /* 3.239.152.6/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EF9840 /* 3.239.152.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EF9808 /* 3.239.152.8/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EF9900 /* 3.239.153.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EF9A00 /* 3.239.154.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EF9B00 /* 3.239.155.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EF9C00 /* 3.239.156.0/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EF9C0A /* 3.239.156.10/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EF9C64 /* 3.239.156.100/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EF9C68 /* 3.239.156.104/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EF9C70 /* 3.239.156.112/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EF9DBC /* 3.239.157.188/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EF9D13 /* 3.239.157.19/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EF9DC0 /* 3.239.157.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EF9D02 /* 3.239.157.2/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EF9D14 /* 3.239.157.20/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EF9D18 /* 3.239.157.24/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EF9D20 /* 3.239.157.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EF9D04 /* 3.239.157.4/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EF9D40 /* 3.239.157.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EF9D08 /* 3.239.157.8/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EF9D60 /* 3.239.157.96/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03EFE800 /* 3.239.232.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0353A800 /* 3.83.168.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x035BAB80 /* 3.91.171.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22C3FC00 /* 34.195.252.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22E26AB4 /* 34.226.106.180/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22E20E00 /* 34.226.14.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22E404D0 /* 34.228.4.208/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22E772CD /* 34.231.114.205/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22E7D515 /* 34.231.213.21/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22ECF12C /* 34.236.241.44/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22EEBC00 /* 34.238.188.0/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23A8E7D8 /* 35.168.231.216/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23AA5300 /* 35.170.83.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23AA5390 /* 35.170.83.144/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23AA53A0 /* 35.170.83.160/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23AA53B0 /* 35.170.83.176/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23AA53C0 /* 35.170.83.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23AB6400 /* 35.171.100.0/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23AB6480 /* 35.171.100.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23AB64D0 /* 35.171.100.208/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23AB64E0 /* 35.171.100.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23AB6440 /* 35.171.100.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23AC9BC0 /* 35.172.155.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23AC9B60 /* 35.172.155.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CC086F0 /* 44.192.134.240/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CC08700 /* 44.192.135.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CC08780 /* 44.192.135.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CC08C70 /* 44.192.140.112/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CC08C80 /* 44.192.140.128/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CC08C40 /* 44.192.140.64/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CC0F5A0 /* 44.192.245.160/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CC0FF80 /* 44.192.255.128/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CC26FE0 /* 44.194.111.224/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CC7B400 /* 44.199.180.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CC7DE80 /* 44.199.222.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CCA4F80 /* 44.202.79.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CCE0400 /* 44.206.4.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CD15400 /* 44.209.84.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CD2C900 /* 44.210.201.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CD2CA00 /* 44.210.202.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CD2F640 /* 44.210.246.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CD24000 /* 44.210.64.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CD4B000 /* 44.212.176.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CD4B200 /* 44.212.178.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CD4B400 /* 44.212.180.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CD4B600 /* 44.212.182.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CD44FC0 /* 44.212.79.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CD53D80 /* 44.213.61.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CD54E00 /* 44.213.78.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34173D00 /* 52.23.61.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x34173E00 /* 52.23.62.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3437BFE0 /* 52.55.191.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F31FC0 /* 54.243.31.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D3BFA00 /* 13.59.250.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x1275EF44 /* 18.117.239.68/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12BC0900 /* 18.188.9.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12BC0920 /* 18.188.9.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12BC0940 /* 18.188.9.64/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12BC0950 /* 18.188.9.80/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12BC0958 /* 18.188.9.88/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12D8AA80 /* 18.216.170.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12D929C0 /* 18.217.41.192/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12D929C8 /* 18.217.41.200/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12D929D0 /* 18.217.41.208/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12D929D8 /* 18.217.41.216/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12D92940 /* 18.217.41.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030CD800 /* 3.12.216.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030C1780 /* 3.12.23.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030C1758 /* 3.12.23.88/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030C175C /* 3.12.23.92/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03803880 /* 3.128.56.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x038038C0 /* 3.128.56.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03803840 /* 3.128.56.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03805D00 /* 3.128.93.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0386D700 /* 3.134.215.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x038B8880 /* 3.139.136.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x038B88B8 /* 3.139.136.184/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x038B88C0 /* 3.139.136.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x038C8880 /* 3.140.136.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x038D66B8 /* 3.141.102.184/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x038D66C0 /* 3.141.102.192/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x038D66D0 /* 3.141.102.208/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x038D66E0 /* 3.141.102.224/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x038FCE68 /* 3.143.206.104/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03908DC0 /* 3.144.141.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0391DC00 /* 3.145.220.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0391E600 /* 3.145.230.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0391E8C0 /* 3.145.232.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03911F00 /* 3.145.31.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03911F80 /* 3.145.31.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030F2300 /* 3.15.35.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030F2400 /* 3.15.36.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x030F2440 /* 3.15.36.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03109200 /* 3.16.146.0/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03118800 /* 3.17.136.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03128400 /* 3.18.132.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03128440 /* 3.18.132.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03139300 /* 3.19.147.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03139380 /* 3.19.147.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03155600 /* 3.21.86.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x340F7F80 /* 52.15.127.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x340FF7D0 /* 52.15.247.208/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D340100 /* 13.52.1.0/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D340110 /* 13.52.1.16/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D340120 /* 13.52.1.32/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D346EC0 /* 13.52.110.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D347600 /* 13.52.118.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D349280 /* 13.52.146.128/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D3492C0 /* 13.52.146.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D34C8A0 /* 13.52.200.160/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D34C900 /* 13.52.201.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D34CA00 /* 13.52.202.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D34E8E0 /* 13.52.232.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D342060 /* 13.52.32.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D340670 /* 13.52.6.112/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D3870A8 /* 13.56.112.168/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D3820C8 /* 13.56.32.200/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D39B4B0 /* 13.57.180.176/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D39B4B8 /* 13.57.180.184/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D39B4D0 /* 13.57.180.208/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D39B4D8 /* 13.57.180.216/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D39B440 /* 13.57.180.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12909E00 /* 18.144.158.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12909E40 /* 18.144.158.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x1290B800 /* 18.144.184.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12904C80 /* 18.144.76.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12904C20 /* 18.144.76.32/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03656480 /* 3.101.100.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03657200 /* 3.101.114.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03657240 /* 3.101.114.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x036591C0 /* 3.101.145.192/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x036591E0 /* 3.101.145.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03659C00 /* 3.101.156.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03659D80 /* 3.101.157.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03659E00 /* 3.101.158.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0365A0F0 /* 3.101.160.240/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0365A02C /* 3.101.160.44/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0365A030 /* 3.101.160.48/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0365A100 /* 3.101.161.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0365A180 /* 3.101.161.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0365A200 /* 3.101.162.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0365A300 /* 3.101.163.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0365A340 /* 3.101.163.64/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0365A350 /* 3.101.163.80/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0365A360 /* 3.101.163.96/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0365A400 /* 3.101.164.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0365B000 /* 3.101.176.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0365B114 /* 3.101.177.20/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0365B130 /* 3.101.177.48/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0365C280 /* 3.101.194.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0365C800 /* 3.101.200.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0365C980 /* 3.101.201.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0365CA00 /* 3.101.202.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0365D000 /* 3.101.208.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0365D100 /* 3.101.209.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x036534D0 /* 3.101.52.208/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x036534D4 /* 3.101.52.212/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03655700 /* 3.101.87.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3434BF80 /* 52.52.191.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36B7FF80 /* 54.183.255.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F12040 /* 54.241.32.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12EC3D00 /* 18.236.61.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12ED8CA0 /* 18.237.140.160/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22D8E288 /* 34.216.226.136/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22D8E290 /* 34.216.226.144/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22D8E2C0 /* 34.216.226.192/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22D8E2D0 /* 34.216.226.208/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22D8E2E0 /* 34.216.226.224/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22D8E2E8 /* 34.216.226.232/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22D8E2F0 /* 34.216.226.240/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22D83300 /* 34.216.51.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22D98D00 /* 34.217.141.0/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22D98D10 /* 34.217.141.16/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22D98DE0 /* 34.217.141.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22D98D20 /* 34.217.141.32/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DA7770 /* 34.218.119.112/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DA7780 /* 34.218.119.128/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DA7790 /* 34.218.119.144/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DA7720 /* 34.218.119.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DA7750 /* 34.218.119.80/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DA7760 /* 34.218.119.96/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DAD8A0 /* 34.218.216.160/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DAD8B0 /* 34.218.216.176/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DAD8D0 /* 34.218.216.208/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DAD8F0 /* 34.218.216.240/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DDB7E0 /* 34.221.183.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DDB720 /* 34.221.183.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DE4240 /* 34.222.66.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DF7000 /* 34.223.112.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DF7080 /* 34.223.112.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DF7040 /* 34.223.112.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DF0CE0 /* 34.223.12.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DF15C0 /* 34.223.21.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DF16B0 /* 34.223.22.176/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DF1800 /* 34.223.24.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DF25E0 /* 34.223.37.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DF2D00 /* 34.223.45.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DF2D80 /* 34.223.45.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DF2E00 /* 34.223.46.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DF2E80 /* 34.223.46.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DF2F00 /* 34.223.47.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DF2F80 /* 34.223.47.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DF3180 /* 34.223.49.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DF3300 /* 34.223.51.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DF40E0 /* 34.223.64.224/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DF4400 /* 34.223.68.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DF4800 /* 34.223.72.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DF4A00 /* 34.223.74.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DF50C0 /* 34.223.80.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DF5C00 /* 34.223.92.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DF5FB0 /* 34.223.95.176/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x22DF6000 /* 34.223.96.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23A23FC0 /* 35.162.63.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23A7BF80 /* 35.167.191.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23502300 /* 35.80.35.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x235024C0 /* 35.80.36.192/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x235024D0 /* 35.80.36.208/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x235024E0 /* 35.80.36.224/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23505800 /* 35.80.88.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23505C00 /* 35.80.92.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x235288C0 /* 35.82.136.192/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2353F828 /* 35.83.248.40/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23542400 /* 35.84.36.0/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2356BB80 /* 35.86.187.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23564200 /* 35.86.66.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23594800 /* 35.89.72.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x235A67C0 /* 35.90.103.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x235A8400 /* 35.90.132.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x235C7CC0 /* 35.92.124.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x235C1A00 /* 35.92.26.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x235D7C00 /* 35.93.124.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CE3B200 /* 44.227.178.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CE93600 /* 44.233.54.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CEA6A00 /* 44.234.106.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CEA6C80 /* 44.234.108.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CEA7140 /* 44.234.113.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CEA7B80 /* 44.234.123.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CEA7B40 /* 44.234.123.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CEA1680 /* 44.234.22.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CEA1C00 /* 44.234.28.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CEA3600 /* 44.234.54.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CEA4974 /* 44.234.73.116/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CEA4978 /* 44.234.73.120/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CEA5AFC /* 44.234.90.252/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CF28FB4 /* 44.242.143.180/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CF28FE0 /* 44.242.143.224/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CF28FF2 /* 44.242.143.242/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CF28FF4 /* 44.242.143.244/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CF28FF8 /* 44.242.143.248/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CF28FFA /* 44.242.143.250/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CF28FFC /* 44.242.143.252/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CF2A100 /* 44.242.161.0/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CF2A10A /* 44.242.161.10/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CF2A10C /* 44.242.161.12/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CF2A110 /* 44.242.161.16/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CF2A114 /* 44.242.161.20/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CF2A104 /* 44.242.161.4/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CF2A106 /* 44.242.161.6/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CF2A108 /* 44.242.161.8/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CF2B0C0 /* 44.242.176.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CF2B100 /* 44.242.177.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CF2B180 /* 44.242.177.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CF2B140 /* 44.242.177.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CF2B200 /* 44.242.178.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CF2B300 /* 44.242.179.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CF2B400 /* 44.242.180.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CF2B500 /* 44.242.181.0/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CF2B520 /* 44.242.181.32/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2CF2B880 /* 44.242.184.128/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x342B4C58 /* 52.43.76.88/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36BEC620 /* 54.190.198.32/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F42E00 /* 54.244.46.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F434C0 /* 54.244.52.192/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36F5A800 /* 54.245.168.0/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_alibaba.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_alibaba.c new file mode 100644 index 0000000000..160a74a7d3 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_alibaba.c @@ -0,0 +1,72 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ + +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_alibaba_protocol_list[] = { + { 0x08D17A00 /* 8.209.122.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, + { 0x08D3E400 /* 8.211.228.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, + { 0x08D42000 /* 8.212.32.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, + { 0x08D45D00 /* 8.212.93.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, + { 0x08D46400 /* 8.212.100.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, + { 0x08D4B800 /* 8.212.184.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, + { 0x08D6A000 /* 8.214.160.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, + { 0x08D84C00 /* 8.216.76.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, + { 0x0E017000 /* 14.1.112.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, + { 0x2D5D1200 /* 45.93.18.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, + { 0x2D869200 /* 45.134.146.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, + { 0x2EC75800 /* 46.199.88.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, + { 0x2F39C500 /* 47.57.197.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, + { 0x2F5AAC00 /* 47.90.172.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, + { 0x2FEB1100 /* 47.235.17.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, + { 0x2FEB1A00 /* 47.235.26.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, + { 0x2FF59C00 /* 47.245.156.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, + { 0x2FF65A00 /* 47.246.90.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, + { 0x2FF66400 /* 47.246.100.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, + { 0x2FF68200 /* 47.246.130.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, + { 0x2FF68600 /* 47.246.134.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, + { 0x2FF69C00 /* 47.246.156.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, + { 0x2FF6A300 /* 47.246.163.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, + { 0x2FFA4000 /* 47.250.64.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, + { 0x2FFB8000 /* 47.251.128.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, + { 0x3E3CE000 /* 62.60.224.0/19 */, 19, NDPI_PROTOCOL_ALIBABA }, + { 0x67CE2800 /* 103.206.40.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, + { 0x80006B00 /* 128.0.107.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, + { 0x938BFC00 /* 147.139.252.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, + { 0xAA210000 /* 170.33.0.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, + { 0xAA210800 /* 170.33.8.0/21 */, 21, NDPI_PROTOCOL_ALIBABA }, + { 0xAA211000 /* 170.33.16.0/20 */, 20, NDPI_PROTOCOL_ALIBABA }, + { 0xAA212000 /* 170.33.32.0/20 */, 20, NDPI_PROTOCOL_ALIBABA }, + { 0xAA214000 /* 170.33.64.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, + { 0xAA214200 /* 170.33.66.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, + { 0xAA214400 /* 170.33.68.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, + { 0xAA214800 /* 170.33.72.0/21 */, 21, NDPI_PROTOCOL_ALIBABA }, + { 0xAA215000 /* 170.33.80.0/21 */, 21, NDPI_PROTOCOL_ALIBABA }, + { 0xAA215800 /* 170.33.88.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, + { 0xAA215C00 /* 170.33.92.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, + { 0xAA216000 /* 170.33.96.0/21 */, 21, NDPI_PROTOCOL_ALIBABA }, + { 0xAA216800 /* 170.33.104.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, + { 0xC60B9000 /* 198.11.144.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, + { 0xCB6B3000 /* 203.107.48.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_apple.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_apple.c new file mode 100644 index 0000000000..5b037d712e --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_apple.c @@ -0,0 +1,37 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ + +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_apple_protocol_list[] = { + { 0x11000000 /* 17.0.0.0/8 */, 8, NDPI_PROTOCOL_APPLE }, + { 0x39660000 /* 57.102.0.0/15 */, 15, NDPI_PROTOCOL_APPLE }, + { 0x39700000 /* 57.112.0.0/12 */, 12, NDPI_PROTOCOL_APPLE }, + { 0x3F5CE000 /* 63.92.224.0/19 */, 19, NDPI_PROTOCOL_APPLE }, + { 0x41C71600 /* 65.199.22.0/23 */, 23, NDPI_PROTOCOL_APPLE }, + { 0x8BB28000 /* 139.178.128.0/18 */, 18, NDPI_PROTOCOL_APPLE }, + { 0x90B20000 /* 144.178.0.0/19 */, 19, NDPI_PROTOCOL_APPLE }, + { 0x90B22000 /* 144.178.32.0/24 */, 24, NDPI_PROTOCOL_APPLE }, + { 0x90B23000 /* 144.178.48.0/20 */, 20, NDPI_PROTOCOL_APPLE }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_avast.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_avast.c new file mode 100644 index 0000000000..5db262bb70 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_avast.c @@ -0,0 +1,63 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_avast_protocol_list[] = { + { 0x052D3800 /* 5.45.56.0/21 */, 21, NDPI_PROTOCOL_AVAST }, + { 0x053E1000 /* 5.62.16.0/22 */, 22, NDPI_PROTOCOL_AVAST }, + { 0x053E1400 /* 5.62.20.0/24 */, 24, NDPI_PROTOCOL_AVAST }, + { 0x053E1900 /* 5.62.25.0/24 */, 24, NDPI_PROTOCOL_AVAST }, + { 0x053E2000 /* 5.62.32.0/24 */, 24, NDPI_PROTOCOL_AVAST }, + { 0x053E2400 /* 5.62.36.0/22 */, 22, NDPI_PROTOCOL_AVAST }, + { 0x053E2800 /* 5.62.40.0/21 */, 21, NDPI_PROTOCOL_AVAST }, + { 0x053E3000 /* 5.62.48.0/23 */, 23, NDPI_PROTOCOL_AVAST }, + { 0x053E3200 /* 5.62.50.0/24 */, 24, NDPI_PROTOCOL_AVAST }, + { 0x053E3400 /* 5.62.52.0/22 */, 22, NDPI_PROTOCOL_AVAST }, + { 0x053E3800 /* 5.62.56.0/21 */, 21, NDPI_PROTOCOL_AVAST }, + { 0x259CBB00 /* 37.156.187.0/24 */, 24, NDPI_PROTOCOL_AVAST }, + { 0x455E4000 /* 69.94.64.0/24 */, 24, NDPI_PROTOCOL_AVAST }, + { 0x455E4300 /* 69.94.67.0/24 */, 24, NDPI_PROTOCOL_AVAST }, + { 0x455E4400 /* 69.94.68.0/23 */, 23, NDPI_PROTOCOL_AVAST }, + { 0x455E4800 /* 69.94.72.0/21 */, 21, NDPI_PROTOCOL_AVAST }, + { 0x4DEA2800 /* 77.234.40.0/22 */, 22, NDPI_PROTOCOL_AVAST }, + { 0x4DEA2C00 /* 77.234.44.0/23 */, 23, NDPI_PROTOCOL_AVAST }, + { 0x4DEA2E00 /* 77.234.46.0/24 */, 24, NDPI_PROTOCOL_AVAST }, + { 0x5BD58F00 /* 91.213.143.0/24 */, 24, NDPI_PROTOCOL_AVAST }, + { 0x5F8E7000 /* 95.142.112.0/24 */, 24, NDPI_PROTOCOL_AVAST }, + { 0x5F8E7300 /* 95.142.115.0/24 */, 24, NDPI_PROTOCOL_AVAST }, + { 0x5F8E7600 /* 95.142.118.0/24 */, 24, NDPI_PROTOCOL_AVAST }, + { 0x5F8E7900 /* 95.142.121.0/24 */, 24, NDPI_PROTOCOL_AVAST }, + { 0x5F8E7C00 /* 95.142.124.0/24 */, 24, NDPI_PROTOCOL_AVAST }, + { 0x5F8E7F00 /* 95.142.127.0/24 */, 24, NDPI_PROTOCOL_AVAST }, + { 0x9FF2E300 /* 159.242.227.0/24 */, 24, NDPI_PROTOCOL_AVAST }, + { 0x9FF2EA00 /* 159.242.234.0/24 */, 24, NDPI_PROTOCOL_AVAST }, + { 0x9FF2EF00 /* 159.242.239.0/24 */, 24, NDPI_PROTOCOL_AVAST }, + { 0xB933E400 /* 185.51.228.0/23 */, 23, NDPI_PROTOCOL_AVAST }, + { 0xB933E600 /* 185.51.230.0/24 */, 24, NDPI_PROTOCOL_AVAST }, + { 0xB936E600 /* 185.54.230.0/24 */, 24, NDPI_PROTOCOL_AVAST }, + { 0xB9A74000 /* 185.167.64.0/24 */, 24, NDPI_PROTOCOL_AVAST }, + { 0xB9BD5C00 /* 185.189.92.0/22 */, 22, NDPI_PROTOCOL_AVAST }, + { 0xC2631C00 /* 194.99.28.0/22 */, 22, NDPI_PROTOCOL_AVAST }, + { 0xC34A4C00 /* 195.74.76.0/24 */, 24, NDPI_PROTOCOL_AVAST }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_bloomberg.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_bloomberg.c new file mode 100644 index 0000000000..4bfe3841d2 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_bloomberg.c @@ -0,0 +1,70 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_bloomberg_protocol_list[] = { + { 0x3F580300 /* 63.88.3.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, + { 0x4173E200 /* 65.115.226.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45BB1000 /* 69.187.16.0/21 */, 21, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45BB1800 /* 69.187.24.0/22 */, 22, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45BB1D00 /* 69.187.29.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45BB1F00 /* 69.187.31.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45BB2000 /* 69.187.32.0/23 */, 23, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45BB4900 /* 69.187.73.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45BF5000 /* 69.191.80.0/21 */, 21, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45BF8800 /* 69.191.136.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45BFB000 /* 69.191.176.0/21 */, 21, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45BFB800 /* 69.191.184.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45BFBA00 /* 69.191.186.0/23 */, 23, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45BFBC00 /* 69.191.188.0/22 */, 22, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45BFC000 /* 69.191.192.0/22 */, 22, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45BFC600 /* 69.191.198.0/23 */, 23, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45BFC800 /* 69.191.200.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45BFCA00 /* 69.191.202.0/23 */, 23, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45BFCC00 /* 69.191.204.0/22 */, 22, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45BFD000 /* 69.191.208.0/22 */, 22, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45BFD400 /* 69.191.212.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45BFD600 /* 69.191.214.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45BFD800 /* 69.191.216.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45BFDA00 /* 69.191.218.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45BFDC00 /* 69.191.220.0/23 */, 23, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45BFE200 /* 69.191.226.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45BFE500 /* 69.191.229.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45BFE600 /* 69.191.230.0/23 */, 23, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45BFE900 /* 69.191.233.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45BFEA00 /* 69.191.234.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45BFED00 /* 69.191.237.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45BFEE00 /* 69.191.238.0/23 */, 23, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45BFF000 /* 69.191.240.0/20 */, 20, NDPI_PROTOCOL_BLOOMBERG }, + { 0x67FBCC00 /* 103.251.204.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, + { 0x67FBCE00 /* 103.251.206.0/23 */, 23, NDPI_PROTOCOL_BLOOMBERG }, + { 0xA02BFA00 /* 160.43.250.0/23 */, 23, NDPI_PROTOCOL_BLOOMBERG }, + { 0xA02BFD00 /* 160.43.253.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, + { 0xB90A7400 /* 185.10.116.0/23 */, 23, NDPI_PROTOCOL_BLOOMBERG }, + { 0xC7ACA900 /* 199.172.169.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, + { 0xCCB3F000 /* 204.179.240.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, + { 0xCDD87000 /* 205.216.112.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, + { 0xCE9C3500 /* 206.156.53.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, + { 0xD0163800 /* 208.22.56.0/23 */, 23, NDPI_PROTOCOL_BLOOMBERG }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_citrix.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_citrix.c new file mode 100644 index 0000000000..dacba47233 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_citrix.c @@ -0,0 +1,90 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_citrix_protocol_list[] = { + { 0x17EFE300 /* 23.239.227.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0x404A1100 /* 64.74.17.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0x404A1200 /* 64.74.18.0/23 */, 23, NDPI_PROTOCOL_CITRIX }, + { 0x43D94400 /* 67.217.68.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0x43D94600 /* 67.217.70.0/23 */, 23, NDPI_PROTOCOL_CITRIX }, + { 0x43D94800 /* 67.217.72.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0x43D94B00 /* 67.217.75.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0x43D94C00 /* 67.217.76.0/23 */, 23, NDPI_PROTOCOL_CITRIX }, + { 0x43D94E00 /* 67.217.78.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0x43D95000 /* 67.217.80.0/23 */, 23, NDPI_PROTOCOL_CITRIX }, + { 0x43D95200 /* 67.217.82.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0x43D95400 /* 67.217.84.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0x43D95600 /* 67.217.86.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0x43D95800 /* 67.217.88.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0x43D95A00 /* 67.217.90.0/23 */, 23, NDPI_PROTOCOL_CITRIX }, + { 0x43D95C00 /* 67.217.92.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0x43D95E00 /* 67.217.94.0/23 */, 23, NDPI_PROTOCOL_CITRIX }, + { 0x44400000 /* 68.64.0.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0x44400800 /* 68.64.8.0/23 */, 23, NDPI_PROTOCOL_CITRIX }, + { 0x44400A00 /* 68.64.10.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0x44400C00 /* 68.64.12.0/23 */, 23, NDPI_PROTOCOL_CITRIX }, + { 0x44400E00 /* 68.64.14.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0x44401100 /* 68.64.17.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0x44401200 /* 68.64.18.0/23 */, 23, NDPI_PROTOCOL_CITRIX }, + { 0x44401400 /* 68.64.20.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0x44401600 /* 68.64.22.0/23 */, 23, NDPI_PROTOCOL_CITRIX }, + { 0x44401800 /* 68.64.24.0/23 */, 23, NDPI_PROTOCOL_CITRIX }, + { 0x44401B00 /* 68.64.27.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0x44401C00 /* 68.64.28.0/23 */, 23, NDPI_PROTOCOL_CITRIX }, + { 0x44401E00 /* 68.64.30.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0x4E6C7400 /* 78.108.116.0/22 */, 22, NDPI_PROTOCOL_CITRIX }, + { 0x4E6C7800 /* 78.108.120.0/23 */, 23, NDPI_PROTOCOL_CITRIX }, + { 0x4E6C7E00 /* 78.108.126.0/23 */, 23, NDPI_PROTOCOL_CITRIX }, + { 0xADC70000 /* 173.199.0.0/21 */, 21, NDPI_PROTOCOL_CITRIX }, + { 0xADC70C00 /* 173.199.12.0/23 */, 23, NDPI_PROTOCOL_CITRIX }, + { 0xADC70F00 /* 173.199.15.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0xADC71100 /* 173.199.17.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0xADC71200 /* 173.199.18.0/23 */, 23, NDPI_PROTOCOL_CITRIX }, + { 0xADC71400 /* 173.199.20.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0xADC71700 /* 173.199.23.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0xADC71A00 /* 173.199.26.0/23 */, 23, NDPI_PROTOCOL_CITRIX }, + { 0xADC71E00 /* 173.199.30.0/23 */, 23, NDPI_PROTOCOL_CITRIX }, + { 0xADC72000 /* 173.199.32.0/23 */, 23, NDPI_PROTOCOL_CITRIX }, + { 0xADC72B00 /* 173.199.43.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0xADC72C00 /* 173.199.44.0/22 */, 22, NDPI_PROTOCOL_CITRIX }, + { 0xADC73200 /* 173.199.50.0/23 */, 23, NDPI_PROTOCOL_CITRIX }, + { 0xADC73400 /* 173.199.52.0/22 */, 22, NDPI_PROTOCOL_CITRIX }, + { 0xADC73C00 /* 173.199.60.0/22 */, 22, NDPI_PROTOCOL_CITRIX }, + { 0xBC422B00 /* 188.66.43.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0xCAAD1900 /* 202.173.25.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0xCEB76400 /* 206.183.100.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0xD873D000 /* 216.115.208.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0xD873D200 /* 216.115.210.0/23 */, 23, NDPI_PROTOCOL_CITRIX }, + { 0xD873D500 /* 216.115.213.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0xD873D600 /* 216.115.214.0/23 */, 23, NDPI_PROTOCOL_CITRIX }, + { 0xD873D900 /* 216.115.217.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0xD873DA00 /* 216.115.218.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0xD873DD00 /* 216.115.221.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0xD873DE00 /* 216.115.222.0/23 */, 23, NDPI_PROTOCOL_CITRIX }, + { 0xD8DB7200 /* 216.219.114.0/23 */, 23, NDPI_PROTOCOL_CITRIX }, + { 0xD8DB7400 /* 216.219.116.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0xD8DB7700 /* 216.219.119.0/24 */, 24, NDPI_PROTOCOL_CITRIX }, + { 0xD8DB7800 /* 216.219.120.0/22 */, 22, NDPI_PROTOCOL_CITRIX }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_discord.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_discord.c new file mode 100644 index 0000000000..68100fffc7 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_discord.c @@ -0,0 +1,94 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_discord_protocol_list[] = { + { 0x05C80000 /* 5.200.0.0/19 */, 19, NDPI_PROTOCOL_DISCORD }, + { 0x1FCC8000 /* 31.204.128.0/19 */, 19, NDPI_PROTOCOL_DISCORD }, + { 0x2BEF8800 /* 43.239.136.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, + { 0x2D53C800 /* 45.83.200.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, + { 0x2D7C8400 /* 45.124.132.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, + { 0x4216C400 /* 66.22.196.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, + { 0x4216C800 /* 66.22.200.0/21 */, 21, NDPI_PROTOCOL_DISCORD }, + { 0x4216D000 /* 66.22.208.0/20 */, 20, NDPI_PROTOCOL_DISCORD }, + { 0x4216E000 /* 66.22.224.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, + { 0x4216E600 /* 66.22.230.0/23 */, 23, NDPI_PROTOCOL_DISCORD }, + { 0x4216E800 /* 66.22.232.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, + { 0x4216EC00 /* 66.22.236.0/23 */, 23, NDPI_PROTOCOL_DISCORD }, + { 0x4216EE00 /* 66.22.238.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, + { 0x4216F000 /* 66.22.240.0/21 */, 21, NDPI_PROTOCOL_DISCORD }, + { 0x4216F800 /* 66.22.248.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, + { 0x45A8EA00 /* 69.168.234.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, + { 0x559F7200 /* 85.159.114.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, + { 0x5968A000 /* 89.104.160.0/21 */, 21, NDPI_PROTOCOL_DISCORD }, + { 0x5BC3EA00 /* 91.195.234.0/23 */, 23, NDPI_PROTOCOL_DISCORD }, + { 0x5BC69800 /* 91.198.152.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, + { 0x5BD8CF00 /* 91.216.207.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, + { 0x677DD800 /* 103.125.216.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, + { 0x677DDB00 /* 103.125.219.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, + { 0x679F7A00 /* 103.159.122.0/23 */, 23, NDPI_PROTOCOL_DISCORD }, + { 0x67C2A400 /* 103.194.164.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, + { 0x68995400 /* 104.153.84.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, + { 0x6DC8C000 /* 109.200.192.0/19 */, 19, NDPI_PROTOCOL_DISCORD }, + { 0x8A808800 /* 138.128.136.0/21 */, 21, NDPI_PROTOCOL_DISCORD }, + { 0x92F74C00 /* 146.247.76.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, + { 0xA2F43400 /* 162.244.52.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, + { 0xA2F5CC00 /* 162.245.204.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, + { 0xB2F89B00 /* 178.248.155.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, + { 0xB9298C00 /* 185.41.140.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, + { 0xB9326800 /* 185.50.104.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, + { 0xB9340C00 /* 185.52.12.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, + { 0xB9462F00 /* 185.70.47.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, + { 0xB94DD000 /* 185.77.208.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, + { 0xB9729C00 /* 185.114.156.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, + { 0xB9782300 /* 185.120.35.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, + { 0xB9A23800 /* 185.162.56.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, + { 0xB9ABF000 /* 185.171.240.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, + { 0xB9AC8400 /* 185.172.132.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, + { 0xB9B3C800 /* 185.179.200.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, + { 0xB9B9D400 /* 185.185.212.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, + { 0xB9BDB400 /* 185.189.180.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, + { 0xB9BFF000 /* 185.191.240.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, + { 0xB9C51800 /* 185.197.24.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, + { 0xB9C91100 /* 185.201.17.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, + { 0xB9DAA400 /* 185.218.164.0/23 */, 23, NDPI_PROTOCOL_DISCORD }, + { 0xB9DAA600 /* 185.218.166.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, + { 0xB9E28A00 /* 185.226.138.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, + { 0xB9E52000 /* 185.229.32.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, + { 0xBC7A4000 /* 188.122.64.0/19 */, 19, NDPI_PROTOCOL_DISCORD }, + { 0xC12BDA00 /* 193.43.218.0/23 */, 23, NDPI_PROTOCOL_DISCORD }, + { 0xC12E5000 /* 193.46.80.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, + { 0xC23D3B00 /* 194.61.59.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, + { 0xC71BD400 /* 199.27.212.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, + { 0xCB841800 /* 203.132.24.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, + { 0xD412E600 /* 212.18.230.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, + { 0xD413E000 /* 212.19.224.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, + { 0xD468C800 /* 212.104.200.0/23 */, 23, NDPI_PROTOCOL_DISCORD }, + { 0xD468CA00 /* 212.104.202.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, + { 0xD468CC00 /* 212.104.204.0/23 */, 23, NDPI_PROTOCOL_DISCORD }, + { 0xD5A34000 /* 213.163.64.0/19 */, 19, NDPI_PROTOCOL_DISCORD }, + { 0xD5B3C000 /* 213.179.192.0/19 */, 19, NDPI_PROTOCOL_DISCORD }, + { 0xD5BE1600 /* 213.190.22.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, + { 0xDC9ED800 /* 220.158.216.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_dropbox.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_dropbox.c new file mode 100644 index 0000000000..8b67ff36e5 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_dropbox.c @@ -0,0 +1,34 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_dropbox_protocol_list[] = { + { 0x2D3A4000 /* 45.58.64.0/20 */, 20, NDPI_PROTOCOL_DROPBOX }, + { 0x40700D00 /* 64.112.13.0/24 */, 24, NDPI_PROTOCOL_DROPBOX }, + { 0x6CA0A000 /* 108.160.160.0/20 */, 20, NDPI_PROTOCOL_DROPBOX }, + { 0xA27D0000 /* 162.125.0.0/16 */, 16, NDPI_PROTOCOL_DROPBOX }, + { 0xB92D0800 /* 185.45.8.0/22 */, 22, NDPI_PROTOCOL_DROPBOX }, + { 0xB969A400 /* 185.105.164.0/24 */, 24, NDPI_PROTOCOL_DROPBOX }, + { 0xC0BDC800 /* 192.189.200.0/23 */, 23, NDPI_PROTOCOL_DROPBOX }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_edgecast.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_edgecast.c new file mode 100644 index 0000000000..d87b3b1249 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_edgecast.c @@ -0,0 +1,200 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_edgecast_protocol_list[] = { + { 0x05684000 /* 5.104.64.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x05684200 /* 5.104.66.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x05684400 /* 5.104.68.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x2E164200 /* 46.22.66.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x2E164400 /* 46.22.68.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, + { 0x2E164800 /* 46.22.72.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x2E164A00 /* 46.22.74.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x2E164C00 /* 46.22.76.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x31E77E00 /* 49.231.126.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x400C0000 /* 64.12.0.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x400C1000 /* 64.12.16.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x400C2000 /* 64.12.32.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x400C3000 /* 64.12.48.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x400C4000 /* 64.12.64.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, + { 0x400C4400 /* 64.12.68.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x400C4700 /* 64.12.71.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x400C4800 /* 64.12.72.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x400C8000 /* 64.12.128.0/21 */, 21, NDPI_PROTOCOL_EDGECAST }, + { 0x400C8800 /* 64.12.136.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, + { 0x400C8C00 /* 64.12.140.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x400C8F00 /* 64.12.143.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x400C9000 /* 64.12.144.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, + { 0x400C9400 /* 64.12.148.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x400C9600 /* 64.12.150.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x400C9800 /* 64.12.152.0/21 */, 21, NDPI_PROTOCOL_EDGECAST }, + { 0x400CA000 /* 64.12.160.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x400CA200 /* 64.12.162.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x400CA400 /* 64.12.164.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x400CA600 /* 64.12.166.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x400CA800 /* 64.12.168.0/21 */, 21, NDPI_PROTOCOL_EDGECAST }, + { 0x400CB000 /* 64.12.176.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, + { 0x400CB400 /* 64.12.180.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x400CFF00 /* 64.12.255.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x44E82000 /* 68.232.32.0/21 */, 21, NDPI_PROTOCOL_EDGECAST }, + { 0x44E82800 /* 68.232.40.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x44E82A00 /* 68.232.42.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x44E82C00 /* 68.232.44.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, + { 0x48155000 /* 72.21.80.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x48155400 /* 72.21.84.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, + { 0x48155A00 /* 72.21.90.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x48155C00 /* 72.21.92.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x48155E00 /* 72.21.94.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x5DB8D700 /* 93.184.215.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x5DB8D800 /* 93.184.216.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x5DB8DA00 /* 93.184.218.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x5DB8DC00 /* 93.184.220.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, + { 0x6CA1F000 /* 108.161.240.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x6CA1F500 /* 108.161.245.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x6CA1F700 /* 108.161.247.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x6CA1FD00 /* 108.161.253.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x6CA1FE00 /* 108.161.254.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x6EA42400 /* 110.164.36.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x6EE8B000 /* 110.232.176.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x6EE8B200 /* 110.232.178.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x7512E800 /* 117.18.232.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x7512ED00 /* 117.18.237.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x7512EE00 /* 117.18.238.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x772E5500 /* 119.46.85.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x88E49000 /* 136.228.144.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x98C30400 /* 152.195.4.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x98C30600 /* 152.195.6.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x98C30800 /* 152.195.8.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x98C30B00 /* 152.195.11.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x98C30C00 /* 152.195.12.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, + { 0x98C31000 /* 152.195.16.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, + { 0x98C31500 /* 152.195.21.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x98C31600 /* 152.195.22.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x98C31900 /* 152.195.25.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x98C31A00 /* 152.195.26.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x98C31C00 /* 152.195.28.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x98C32000 /* 152.195.32.0/21 */, 21, NDPI_PROTOCOL_EDGECAST }, + { 0x98C33200 /* 152.195.50.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x98C33400 /* 152.195.52.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, + { 0x98C33800 /* 152.195.56.0/21 */, 21, NDPI_PROTOCOL_EDGECAST }, + { 0x98C34000 /* 152.195.64.0/18 */, 18, NDPI_PROTOCOL_EDGECAST }, + { 0x98C38000 /* 152.195.128.0/21 */, 21, NDPI_PROTOCOL_EDGECAST }, + { 0x98C38800 /* 152.195.136.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, + { 0x98C38C00 /* 152.195.140.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x98C39000 /* 152.195.144.0/21 */, 21, NDPI_PROTOCOL_EDGECAST }, + { 0x98C39800 /* 152.195.152.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, + { 0x98C39C00 /* 152.195.156.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x98C3A400 /* 152.195.164.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x98C3A600 /* 152.195.166.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x98C3B300 /* 152.195.179.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x98C3B500 /* 152.195.181.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x98C3B600 /* 152.195.182.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x98C3B800 /* 152.195.184.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x98C3BA00 /* 152.195.186.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x98C3BC00 /* 152.195.188.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x98C3C400 /* 152.195.196.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, + { 0x98C3CA00 /* 152.195.202.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x98C3CC00 /* 152.195.204.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, + { 0x98C3D000 /* 152.195.208.0/21 */, 21, NDPI_PROTOCOL_EDGECAST }, + { 0x98C3DB00 /* 152.195.219.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x98C3DC00 /* 152.195.220.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x98C3DF00 /* 152.195.223.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x98C3E000 /* 152.195.224.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x98C3E400 /* 152.195.228.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, + { 0x98C3E800 /* 152.195.232.0/21 */, 21, NDPI_PROTOCOL_EDGECAST }, + { 0x98C3F000 /* 152.195.240.0/20 */, 20, NDPI_PROTOCOL_EDGECAST }, + { 0x98C70000 /* 152.199.0.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, + { 0x98C70400 /* 152.199.4.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x98C70600 /* 152.199.6.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x98C71000 /* 152.199.16.0/21 */, 21, NDPI_PROTOCOL_EDGECAST }, + { 0x98C71800 /* 152.199.24.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x98C72000 /* 152.199.32.0/21 */, 21, NDPI_PROTOCOL_EDGECAST }, + { 0x98C72800 /* 152.199.40.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, + { 0x98C72C00 /* 152.199.44.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x98C73000 /* 152.199.48.0/21 */, 21, NDPI_PROTOCOL_EDGECAST }, + { 0x98C73800 /* 152.199.56.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x98C75A00 /* 152.199.90.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x98C75D00 /* 152.199.93.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x98C75E00 /* 152.199.94.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x98C76000 /* 152.199.96.0/19 */, 19, NDPI_PROTOCOL_EDGECAST }, + { 0x98C79B00 /* 152.199.155.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x98C7BF00 /* 152.199.191.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC0100100 /* 192.16.1.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC0100200 /* 192.16.2.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0xC0100600 /* 192.16.6.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0xC0100E00 /* 192.16.14.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0xC0101000 /* 192.16.16.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC0101200 /* 192.16.18.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0xC0101800 /* 192.16.24.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0xC0102000 /* 192.16.32.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, + { 0xC0102400 /* 192.16.36.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0xC0102600 /* 192.16.38.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC0102A00 /* 192.16.42.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0xC0102E00 /* 192.16.46.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC0103000 /* 192.16.48.0/21 */, 21, NDPI_PROTOCOL_EDGECAST }, + { 0xC0103A00 /* 192.16.58.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0xC0103C00 /* 192.16.60.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC0103F00 /* 192.16.63.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC01E1800 /* 192.30.24.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E58000 /* 192.229.128.0/21 */, 21, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E58800 /* 192.229.136.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E58C00 /* 192.229.140.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E58E00 /* 192.229.142.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E59000 /* 192.229.144.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E59500 /* 192.229.149.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E59600 /* 192.229.150.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E59800 /* 192.229.152.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E59C00 /* 192.229.156.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5A200 /* 192.229.162.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5A900 /* 192.229.169.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5AA00 /* 192.229.170.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5AD00 /* 192.229.173.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5B200 /* 192.229.178.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5B600 /* 192.229.182.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5BD00 /* 192.229.189.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5BE00 /* 192.229.190.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5C200 /* 192.229.194.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5C600 /* 192.229.198.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5CA00 /* 192.229.202.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5D000 /* 192.229.208.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5D500 /* 192.229.213.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5DA00 /* 192.229.218.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5DC00 /* 192.229.220.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5E000 /* 192.229.224.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5E300 /* 192.229.227.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5E400 /* 192.229.228.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5E700 /* 192.229.231.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5E800 /* 192.229.232.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5EA00 /* 192.229.234.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5EC00 /* 192.229.236.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5F200 /* 192.229.242.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5F400 /* 192.229.244.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5F800 /* 192.229.248.0/21 */, 21, NDPI_PROTOCOL_EDGECAST }, + { 0xC6071000 /* 198.7.16.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, + { 0xC6071400 /* 198.7.20.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC6071600 /* 198.7.22.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC6071B00 /* 198.7.27.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC6071D00 /* 198.7.29.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xD5AF5000 /* 213.175.80.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_facebook.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_facebook.c new file mode 100644 index 0000000000..fc1eb7708b --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_facebook.c @@ -0,0 +1,78 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_facebook_protocol_list[] = { + { 0x1F0D1800 /* 31.13.24.0/21 */, 21, NDPI_PROTOCOL_FACEBOOK }, + { 0x1F0D4000 /* 31.13.64.0/18 */, 18, NDPI_PROTOCOL_FACEBOOK }, + { 0x2D402800 /* 45.64.40.0/22 */, 22, NDPI_PROTOCOL_FACEBOOK }, + { 0x42DC9000 /* 66.220.144.0/20 */, 20, NDPI_PROTOCOL_FACEBOOK }, + { 0x453FB000 /* 69.63.176.0/20 */, 20, NDPI_PROTOCOL_FACEBOOK }, + { 0x45ABE000 /* 69.171.224.0/19 */, 19, NDPI_PROTOCOL_FACEBOOK }, + { 0x4A774C00 /* 74.119.76.0/22 */, 22, NDPI_PROTOCOL_FACEBOOK }, + { 0x66846000 /* 102.132.96.0/20 */, 20, NDPI_PROTOCOL_FACEBOOK }, + { 0x66847000 /* 102.132.112.0/21 */, 21, NDPI_PROTOCOL_FACEBOOK }, + { 0x66847800 /* 102.132.120.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, + { 0x66847A00 /* 102.132.122.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, + { 0x66847C00 /* 102.132.124.0/22 */, 22, NDPI_PROTOCOL_FACEBOOK }, + { 0x66DDBC00 /* 102.221.188.0/23 */, 23, NDPI_PROTOCOL_FACEBOOK }, + { 0x67046000 /* 103.4.96.0/22 */, 22, NDPI_PROTOCOL_FACEBOOK }, + { 0x81860000 /* 129.134.0.0/17 */, 17, NDPI_PROTOCOL_FACEBOOK }, + { 0x81868000 /* 129.134.128.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, + { 0x81868200 /* 129.134.130.0/23 */, 23, NDPI_PROTOCOL_FACEBOOK }, + { 0x81868400 /* 129.134.132.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, + { 0x81868700 /* 129.134.135.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, + { 0x81868800 /* 129.134.136.0/22 */, 22, NDPI_PROTOCOL_FACEBOOK }, + { 0x81868C00 /* 129.134.140.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, + { 0x81868F00 /* 129.134.143.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, + { 0x81869000 /* 129.134.144.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, + { 0x81869300 /* 129.134.147.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, + { 0x81869400 /* 129.134.148.0/23 */, 23, NDPI_PROTOCOL_FACEBOOK }, + { 0x81869600 /* 129.134.150.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, + { 0x81869A00 /* 129.134.154.0/23 */, 23, NDPI_PROTOCOL_FACEBOOK }, + { 0x81869C00 /* 129.134.156.0/22 */, 22, NDPI_PROTOCOL_FACEBOOK }, + { 0x8186A000 /* 129.134.160.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, + { 0x8186A300 /* 129.134.163.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, + { 0x8186A400 /* 129.134.164.0/23 */, 23, NDPI_PROTOCOL_FACEBOOK }, + { 0x8186A800 /* 129.134.168.0/21 */, 21, NDPI_PROTOCOL_FACEBOOK }, + { 0x8186B000 /* 129.134.176.0/23 */, 23, NDPI_PROTOCOL_FACEBOOK }, + { 0x9DF00000 /* 157.240.0.0/17 */, 17, NDPI_PROTOCOL_FACEBOOK }, + { 0x9DF09C00 /* 157.240.156.0/23 */, 23, NDPI_PROTOCOL_FACEBOOK }, + { 0x9DF09F00 /* 157.240.159.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, + { 0x9DF0AC00 /* 157.240.172.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, + { 0x9DF0AE00 /* 157.240.174.0/23 */, 23, NDPI_PROTOCOL_FACEBOOK }, + { 0x9DF0B000 /* 157.240.176.0/23 */, 23, NDPI_PROTOCOL_FACEBOOK }, + { 0x9DF0B300 /* 157.240.179.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, + { 0x9DF0B400 /* 157.240.180.0/23 */, 23, NDPI_PROTOCOL_FACEBOOK }, + { 0x9DF0B600 /* 157.240.182.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, + { 0x9DF0C000 /* 157.240.192.0/18 */, 18, NDPI_PROTOCOL_FACEBOOK }, + { 0xA3728000 /* 163.114.128.0/20 */, 20, NDPI_PROTOCOL_FACEBOOK }, + { 0xADFC4000 /* 173.252.64.0/18 */, 18, NDPI_PROTOCOL_FACEBOOK }, + { 0xB33CC000 /* 179.60.192.0/22 */, 22, NDPI_PROTOCOL_FACEBOOK }, + { 0xB93CD800 /* 185.60.216.0/22 */, 22, NDPI_PROTOCOL_FACEBOOK }, + { 0xB959DA00 /* 185.89.218.0/23 */, 23, NDPI_PROTOCOL_FACEBOOK }, + { 0xC4314400 /* 196.49.68.0/23 */, 23, NDPI_PROTOCOL_FACEBOOK }, + { 0xC7C94000 /* 199.201.64.0/22 */, 22, NDPI_PROTOCOL_FACEBOOK }, + { 0xCC0F1400 /* 204.15.20.0/22 */, 22, NDPI_PROTOCOL_FACEBOOK }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_github.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_github.c new file mode 100644 index 0000000000..90566e5a41 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_github.c @@ -0,0 +1,30 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_github_protocol_list[] = { + { 0x8C527000 /* 140.82.112.0/20 */, 20, NDPI_PROTOCOL_GITHUB }, + { 0x8F374000 /* 143.55.64.0/20 */, 20, NDPI_PROTOCOL_GITHUB }, + { 0xC01EFC00 /* 192.30.252.0/22 */, 22, NDPI_PROTOCOL_GITHUB }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_goto.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_goto.c new file mode 100644 index 0000000000..357e746731 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_goto.c @@ -0,0 +1,90 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_goto_protocol_list[] = { + { 0x17EFE300 /* 23.239.227.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0x404A1100 /* 64.74.17.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0x404A1200 /* 64.74.18.0/23 */, 23, NDPI_PROTOCOL_GOTO }, + { 0x43D94400 /* 67.217.68.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0x43D94600 /* 67.217.70.0/23 */, 23, NDPI_PROTOCOL_GOTO }, + { 0x43D94800 /* 67.217.72.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0x43D94B00 /* 67.217.75.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0x43D94C00 /* 67.217.76.0/23 */, 23, NDPI_PROTOCOL_GOTO }, + { 0x43D94E00 /* 67.217.78.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0x43D95000 /* 67.217.80.0/23 */, 23, NDPI_PROTOCOL_GOTO }, + { 0x43D95200 /* 67.217.82.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0x43D95400 /* 67.217.84.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0x43D95600 /* 67.217.86.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0x43D95800 /* 67.217.88.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0x43D95A00 /* 67.217.90.0/23 */, 23, NDPI_PROTOCOL_GOTO }, + { 0x43D95C00 /* 67.217.92.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0x43D95E00 /* 67.217.94.0/23 */, 23, NDPI_PROTOCOL_GOTO }, + { 0x44400000 /* 68.64.0.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0x44400800 /* 68.64.8.0/23 */, 23, NDPI_PROTOCOL_GOTO }, + { 0x44400A00 /* 68.64.10.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0x44400C00 /* 68.64.12.0/23 */, 23, NDPI_PROTOCOL_GOTO }, + { 0x44400E00 /* 68.64.14.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0x44401100 /* 68.64.17.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0x44401200 /* 68.64.18.0/23 */, 23, NDPI_PROTOCOL_GOTO }, + { 0x44401400 /* 68.64.20.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0x44401600 /* 68.64.22.0/23 */, 23, NDPI_PROTOCOL_GOTO }, + { 0x44401800 /* 68.64.24.0/23 */, 23, NDPI_PROTOCOL_GOTO }, + { 0x44401B00 /* 68.64.27.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0x44401C00 /* 68.64.28.0/23 */, 23, NDPI_PROTOCOL_GOTO }, + { 0x44401E00 /* 68.64.30.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0x4E6C7400 /* 78.108.116.0/22 */, 22, NDPI_PROTOCOL_GOTO }, + { 0x4E6C7800 /* 78.108.120.0/23 */, 23, NDPI_PROTOCOL_GOTO }, + { 0x4E6C7E00 /* 78.108.126.0/23 */, 23, NDPI_PROTOCOL_GOTO }, + { 0xADC70000 /* 173.199.0.0/21 */, 21, NDPI_PROTOCOL_GOTO }, + { 0xADC70C00 /* 173.199.12.0/23 */, 23, NDPI_PROTOCOL_GOTO }, + { 0xADC70F00 /* 173.199.15.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0xADC71100 /* 173.199.17.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0xADC71200 /* 173.199.18.0/23 */, 23, NDPI_PROTOCOL_GOTO }, + { 0xADC71400 /* 173.199.20.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0xADC71700 /* 173.199.23.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0xADC71A00 /* 173.199.26.0/23 */, 23, NDPI_PROTOCOL_GOTO }, + { 0xADC71E00 /* 173.199.30.0/23 */, 23, NDPI_PROTOCOL_GOTO }, + { 0xADC72000 /* 173.199.32.0/23 */, 23, NDPI_PROTOCOL_GOTO }, + { 0xADC72B00 /* 173.199.43.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0xADC72C00 /* 173.199.44.0/22 */, 22, NDPI_PROTOCOL_GOTO }, + { 0xADC73200 /* 173.199.50.0/23 */, 23, NDPI_PROTOCOL_GOTO }, + { 0xADC73400 /* 173.199.52.0/22 */, 22, NDPI_PROTOCOL_GOTO }, + { 0xADC73C00 /* 173.199.60.0/22 */, 22, NDPI_PROTOCOL_GOTO }, + { 0xBC422B00 /* 188.66.43.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0xCAAD1900 /* 202.173.25.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0xCEB76400 /* 206.183.100.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0xD873D000 /* 216.115.208.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0xD873D200 /* 216.115.210.0/23 */, 23, NDPI_PROTOCOL_GOTO }, + { 0xD873D500 /* 216.115.213.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0xD873D600 /* 216.115.214.0/23 */, 23, NDPI_PROTOCOL_GOTO }, + { 0xD873D900 /* 216.115.217.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0xD873DA00 /* 216.115.218.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0xD873DD00 /* 216.115.221.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0xD873DE00 /* 216.115.222.0/23 */, 23, NDPI_PROTOCOL_GOTO }, + { 0xD8DB7200 /* 216.219.114.0/23 */, 23, NDPI_PROTOCOL_GOTO }, + { 0xD8DB7400 /* 216.219.116.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0xD8DB7700 /* 216.219.119.0/24 */, 24, NDPI_PROTOCOL_GOTO }, + { 0xD8DB7800 /* 216.219.120.0/22 */, 22, NDPI_PROTOCOL_GOTO }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_hotspotshield.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_hotspotshield.c new file mode 100644 index 0000000000..d6e08358d2 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_hotspotshield.c @@ -0,0 +1,27 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_hotspot_shield_protocol_list[] = { + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_line.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_line.c new file mode 100644 index 0000000000..fbb4408bfb --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_line.c @@ -0,0 +1,40 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_line_protocol_list[] = { + { 0x2BDF0000 /* 43.223.0.0/16 */, 16, NDPI_PROTOCOL_LINE }, + { 0x67021C00 /* 103.2.28.0/24 */, 24, NDPI_PROTOCOL_LINE }, + { 0x67021E00 /* 103.2.30.0/23 */, 23, NDPI_PROTOCOL_LINE }, + { 0x77EBE000 /* 119.235.224.0/24 */, 24, NDPI_PROTOCOL_LINE }, + { 0x77EBE800 /* 119.235.232.0/24 */, 24, NDPI_PROTOCOL_LINE }, + { 0x77EBEB00 /* 119.235.235.0/24 */, 24, NDPI_PROTOCOL_LINE }, + { 0x77EBEC00 /* 119.235.236.0/23 */, 23, NDPI_PROTOCOL_LINE }, + { 0x935C8000 /* 147.92.128.0/17 */, 17, NDPI_PROTOCOL_LINE }, + { 0xCB688000 /* 203.104.128.0/20 */, 20, NDPI_PROTOCOL_LINE }, + { 0xCB689000 /* 203.104.144.0/21 */, 21, NDPI_PROTOCOL_LINE }, + { 0xCB689800 /* 203.104.152.0/22 */, 22, NDPI_PROTOCOL_LINE }, + { 0xCB689C00 /* 203.104.156.0/23 */, 23, NDPI_PROTOCOL_LINE }, + { 0xCB689E00 /* 203.104.158.0/24 */, 24, NDPI_PROTOCOL_LINE }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_netflix.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_netflix.c new file mode 100644 index 0000000000..493cdc3382 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_netflix.c @@ -0,0 +1,41 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_netflix_protocol_list[] = { + { 0x17F60000 /* 23.246.0.0/18 */, 18, NDPI_PROTOCOL_NETFLIX }, + { 0x254DB800 /* 37.77.184.0/21 */, 21, NDPI_PROTOCOL_NETFLIX }, + { 0x2D390000 /* 45.57.0.0/17 */, 17, NDPI_PROTOCOL_NETFLIX }, + { 0x40788000 /* 64.120.128.0/17 */, 17, NDPI_PROTOCOL_NETFLIX }, + { 0x42C58000 /* 66.197.128.0/17 */, 17, NDPI_PROTOCOL_NETFLIX }, + { 0x4535E000 /* 69.53.224.0/19 */, 19, NDPI_PROTOCOL_NETFLIX }, + { 0x6CAF2000 /* 108.175.32.0/20 */, 20, NDPI_PROTOCOL_NETFLIX }, + { 0xB902DC00 /* 185.2.220.0/22 */, 22, NDPI_PROTOCOL_NETFLIX }, + { 0xB909BC00 /* 185.9.188.0/22 */, 22, NDPI_PROTOCOL_NETFLIX }, + { 0xC0AD4000 /* 192.173.64.0/18 */, 18, NDPI_PROTOCOL_NETFLIX }, + { 0xC6266000 /* 198.38.96.0/19 */, 19, NDPI_PROTOCOL_NETFLIX }, + { 0xC62D3000 /* 198.45.48.0/20 */, 20, NDPI_PROTOCOL_NETFLIX }, + { 0xCF2D4800 /* 207.45.72.0/22 */, 22, NDPI_PROTOCOL_NETFLIX }, + { 0xD04B4C00 /* 208.75.76.0/22 */, 22, NDPI_PROTOCOL_NETFLIX }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_opendns.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_opendns.c new file mode 100644 index 0000000000..0b1b26a5b5 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_opendns.c @@ -0,0 +1,147 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_opendns_protocol_list[] = { + { 0x43D74000 /* 67.215.64.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x43D74200 /* 67.215.66.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x43D74500 /* 67.215.69.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x43D74600 /* 67.215.70.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x43D74900 /* 67.215.73.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x43D74B00 /* 67.215.75.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x43D74C00 /* 67.215.76.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, + { 0x43D75000 /* 67.215.80.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x43D75200 /* 67.215.82.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x43D75400 /* 67.215.84.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x43D75600 /* 67.215.86.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x43D75800 /* 67.215.88.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x43D75A00 /* 67.215.90.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x43D75C00 /* 67.215.92.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x43D75E00 /* 67.215.94.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x92700000 /* 146.112.0.0/21 */, 21, NDPI_PROTOCOL_OPENDNS }, + { 0x92700800 /* 146.112.8.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x92700B00 /* 146.112.11.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x92700C00 /* 146.112.12.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x92700E00 /* 146.112.14.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x92701000 /* 146.112.16.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x92701200 /* 146.112.18.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x92701400 /* 146.112.20.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, + { 0x92701800 /* 146.112.24.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x92701A00 /* 146.112.26.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x92701C00 /* 146.112.28.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x92701F00 /* 146.112.31.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x92702100 /* 146.112.33.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x92702200 /* 146.112.34.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x92702400 /* 146.112.36.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x92702600 /* 146.112.38.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x92702800 /* 146.112.40.0/21 */, 21, NDPI_PROTOCOL_OPENDNS }, + { 0x92703000 /* 146.112.48.0/20 */, 20, NDPI_PROTOCOL_OPENDNS }, + { 0x92704000 /* 146.112.64.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, + { 0x92704800 /* 146.112.72.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x92704E00 /* 146.112.78.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x92705100 /* 146.112.81.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x92705200 /* 146.112.82.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x92705400 /* 146.112.84.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x92705600 /* 146.112.86.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x92705C00 /* 146.112.92.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, + { 0x92706000 /* 146.112.96.0/20 */, 20, NDPI_PROTOCOL_OPENDNS }, + { 0x92707000 /* 146.112.112.0/21 */, 21, NDPI_PROTOCOL_OPENDNS }, + { 0x92707800 /* 146.112.120.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x92708000 /* 146.112.128.0/19 */, 19, NDPI_PROTOCOL_OPENDNS }, + { 0x9270A000 /* 146.112.160.0/20 */, 20, NDPI_PROTOCOL_OPENDNS }, + { 0x9270B000 /* 146.112.176.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, + { 0x9270B800 /* 146.112.184.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, + { 0x9270BE00 /* 146.112.190.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x9270C000 /* 146.112.192.0/21 */, 21, NDPI_PROTOCOL_OPENDNS }, + { 0x9270C800 /* 146.112.200.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x9270CB00 /* 146.112.203.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9270CC00 /* 146.112.204.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, + { 0x9270D000 /* 146.112.208.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9270D200 /* 146.112.210.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x9270D400 /* 146.112.212.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9270D600 /* 146.112.214.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x9270D800 /* 146.112.216.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x9270DB00 /* 146.112.219.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9270DD00 /* 146.112.221.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9270DE00 /* 146.112.222.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x9270E000 /* 146.112.224.0/19 */, 19, NDPI_PROTOCOL_OPENDNS }, + { 0x97BA0300 /* 151.186.3.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x97BA0500 /* 151.186.5.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x97BA0600 /* 151.186.6.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBE0000 /* 155.190.0.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBE0800 /* 155.190.8.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBE0F00 /* 155.190.15.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBE1100 /* 155.190.17.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBE1200 /* 155.190.18.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBE1400 /* 155.190.20.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBE1600 /* 155.190.22.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBE1C00 /* 155.190.28.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBE2100 /* 155.190.33.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBE2200 /* 155.190.34.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBE2400 /* 155.190.36.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBE2A00 /* 155.190.42.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBE2C00 /* 155.190.44.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBE3000 /* 155.190.48.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBE3500 /* 155.190.53.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBE3600 /* 155.190.54.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBE4200 /* 155.190.66.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBE4400 /* 155.190.68.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBE4600 /* 155.190.70.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBE5300 /* 155.190.83.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBE5400 /* 155.190.84.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBE5800 /* 155.190.88.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBE7300 /* 155.190.115.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBE7400 /* 155.190.116.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBE8000 /* 155.190.128.0/21 */, 21, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBE8800 /* 155.190.136.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBE8C00 /* 155.190.140.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBEA000 /* 155.190.160.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBEC000 /* 155.190.192.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBEC400 /* 155.190.196.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBEC600 /* 155.190.198.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBEC800 /* 155.190.200.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBECA00 /* 155.190.202.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBECC00 /* 155.190.204.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBED000 /* 155.190.208.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBED300 /* 155.190.211.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBED400 /* 155.190.212.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBEDA00 /* 155.190.218.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBEDD00 /* 155.190.221.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBEDF00 /* 155.190.223.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBEE200 /* 155.190.226.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBEE500 /* 155.190.229.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBEE800 /* 155.190.232.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBEEE00 /* 155.190.238.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBEF800 /* 155.190.248.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBEFA00 /* 155.190.250.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBEFE00 /* 155.190.254.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0xB93C5400 /* 185.60.84.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0xB93C5600 /* 185.60.86.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0xCCC2E800 /* 204.194.232.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0xCCC2EA00 /* 204.194.234.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0xCCC2ED00 /* 204.194.237.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0xCCC2EE00 /* 204.194.238.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0xD043D800 /* 208.67.216.0/21 */, 21, NDPI_PROTOCOL_OPENDNS }, + { 0xD0452000 /* 208.69.32.0/21 */, 21, NDPI_PROTOCOL_OPENDNS }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_riotgames.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_riotgames.c new file mode 100644 index 0000000000..12c10a6770 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_riotgames.c @@ -0,0 +1,43 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_riotgames_protocol_list[] = { + { 0x2BE54000 /* 43.229.64.0/22 */, 22, NDPI_PROTOCOL_RIOTGAMES }, + { 0x2D072400 /* 45.7.36.0/23 */, 23, NDPI_PROTOCOL_RIOTGAMES }, + { 0x2D072700 /* 45.7.39.0/24 */, 24, NDPI_PROTOCOL_RIOTGAMES }, + { 0x2DFAD000 /* 45.250.208.0/22 */, 22, NDPI_PROTOCOL_RIOTGAMES }, + { 0x67DB8000 /* 103.219.128.0/24 */, 24, NDPI_PROTOCOL_RIOTGAMES }, + { 0x67F0E000 /* 103.240.224.0/22 */, 22, NDPI_PROTOCOL_RIOTGAMES }, + { 0x68A08000 /* 104.160.128.0/19 */, 19, NDPI_PROTOCOL_RIOTGAMES }, + { 0x8A000C00 /* 138.0.12.0/22 */, 22, NDPI_PROTOCOL_RIOTGAMES }, + { 0x976AF800 /* 151.106.248.0/22 */, 22, NDPI_PROTOCOL_RIOTGAMES }, + { 0x976AFC00 /* 151.106.252.0/24 */, 24, NDPI_PROTOCOL_RIOTGAMES }, + { 0x976AFE00 /* 151.106.254.0/23 */, 23, NDPI_PROTOCOL_RIOTGAMES }, + { 0xA2F94800 /* 162.249.72.0/21 */, 21, NDPI_PROTOCOL_RIOTGAMES }, + { 0xB6A27800 /* 182.162.120.0/21 */, 21, NDPI_PROTOCOL_RIOTGAMES }, + { 0xB9284000 /* 185.40.64.0/22 */, 22, NDPI_PROTOCOL_RIOTGAMES }, + { 0xC040A800 /* 192.64.168.0/21 */, 21, NDPI_PROTOCOL_RIOTGAMES }, + { 0xC0CF0000 /* 192.207.0.0/24 */, 24, NDPI_PROTOCOL_RIOTGAMES }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_starcraft.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_starcraft.c new file mode 100644 index 0000000000..50d88f307a --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_starcraft.c @@ -0,0 +1,61 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_starcraft_protocol_list[] = { + { 0x052AA800 /* 5.42.168.0/21 */, 21, NDPI_PROTOCOL_STARCRAFT }, + { 0x052AB000 /* 5.42.176.0/20 */, 20, NDPI_PROTOCOL_STARCRAFT }, + { 0x18690000 /* 24.105.0.0/19 */, 19, NDPI_PROTOCOL_STARCRAFT }, + { 0x18692000 /* 24.105.32.0/20 */, 20, NDPI_PROTOCOL_STARCRAFT }, + { 0x18693000 /* 24.105.48.0/21 */, 21, NDPI_PROTOCOL_STARCRAFT }, + { 0x18693800 /* 24.105.56.0/22 */, 22, NDPI_PROTOCOL_STARCRAFT }, + { 0x18693D00 /* 24.105.61.0/24 */, 24, NDPI_PROTOCOL_STARCRAFT }, + { 0x18693E00 /* 24.105.62.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, + { 0x25F40000 /* 37.244.0.0/19 */, 19, NDPI_PROTOCOL_STARCRAFT }, + { 0x25F42000 /* 37.244.32.0/20 */, 20, NDPI_PROTOCOL_STARCRAFT }, + { 0x25F43000 /* 37.244.48.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, + { 0x25F43200 /* 37.244.50.0/24 */, 24, NDPI_PROTOCOL_STARCRAFT }, + { 0x25F43400 /* 37.244.52.0/22 */, 22, NDPI_PROTOCOL_STARCRAFT }, + { 0x25F43800 /* 37.244.56.0/21 */, 21, NDPI_PROTOCOL_STARCRAFT }, + { 0x3B992800 /* 59.153.40.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, + { 0x67C62000 /* 103.198.32.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, + { 0x6E2DD000 /* 110.45.208.0/24 */, 24, NDPI_PROTOCOL_STARCRAFT }, + { 0x75340600 /* 117.52.6.0/24 */, 24, NDPI_PROTOCOL_STARCRAFT }, + { 0x75341A00 /* 117.52.26.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, + { 0x75341C00 /* 117.52.28.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, + { 0x75342100 /* 117.52.33.0/24 */, 24, NDPI_PROTOCOL_STARCRAFT }, + { 0x75342200 /* 117.52.34.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, + { 0x75342400 /* 117.52.36.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, + { 0x79FE8900 /* 121.254.137.0/24 */, 24, NDPI_PROTOCOL_STARCRAFT }, + { 0x79FECE00 /* 121.254.206.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, + { 0x79FEDA00 /* 121.254.218.0/24 */, 24, NDPI_PROTOCOL_STARCRAFT }, + { 0x89DD4000 /* 137.221.64.0/19 */, 19, NDPI_PROTOCOL_STARCRAFT }, + { 0x89DD6000 /* 137.221.96.0/20 */, 20, NDPI_PROTOCOL_STARCRAFT }, + { 0x9E73C000 /* 158.115.192.0/20 */, 20, NDPI_PROTOCOL_STARCRAFT }, + { 0x9E73D800 /* 158.115.216.0/21 */, 21, NDPI_PROTOCOL_STARCRAFT }, + { 0xB6A21F00 /* 182.162.31.0/24 */, 24, NDPI_PROTOCOL_STARCRAFT }, + { 0xB93C7000 /* 185.60.112.0/22 */, 22, NDPI_PROTOCOL_STARCRAFT }, + { 0xC64A2000 /* 198.74.32.0/22 */, 22, NDPI_PROTOCOL_STARCRAFT }, + { 0xC64A2400 /* 198.74.36.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_steam.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_steam.c new file mode 100644 index 0000000000..152e10b0a5 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_steam.c @@ -0,0 +1,48 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_steam_protocol_list[] = { + { 0x670A7C00 /* 103.10.124.0/23 */, 23, NDPI_PROTOCOL_STEAM }, + { 0x671C3600 /* 103.28.54.0/24 */, 24, NDPI_PROTOCOL_STEAM }, + { 0x92429800 /* 146.66.152.0/24 */, 24, NDPI_PROTOCOL_STEAM }, + { 0x92429B00 /* 146.66.155.0/24 */, 24, NDPI_PROTOCOL_STEAM }, + { 0x99FE5600 /* 153.254.86.0/24 */, 24, NDPI_PROTOCOL_STEAM }, + { 0x9B85E200 /* 155.133.226.0/23 */, 23, NDPI_PROTOCOL_STEAM }, + { 0x9B85E600 /* 155.133.230.0/24 */, 24, NDPI_PROTOCOL_STEAM }, + { 0x9B85E800 /* 155.133.232.0/23 */, 23, NDPI_PROTOCOL_STEAM }, + { 0x9B85EA00 /* 155.133.234.0/24 */, 24, NDPI_PROTOCOL_STEAM }, + { 0x9B85EC00 /* 155.133.236.0/22 */, 22, NDPI_PROTOCOL_STEAM }, + { 0x9B85F000 /* 155.133.240.0/23 */, 23, NDPI_PROTOCOL_STEAM }, + { 0x9B85F500 /* 155.133.245.0/24 */, 24, NDPI_PROTOCOL_STEAM }, + { 0x9B85F600 /* 155.133.246.0/23 */, 23, NDPI_PROTOCOL_STEAM }, + { 0x9B85F800 /* 155.133.248.0/21 */, 21, NDPI_PROTOCOL_STEAM }, + { 0xA2FEC000 /* 162.254.192.0/21 */, 21, NDPI_PROTOCOL_STEAM }, + { 0xB919B600 /* 185.25.182.0/23 */, 23, NDPI_PROTOCOL_STEAM }, + { 0xBED92100 /* 190.217.33.0/24 */, 24, NDPI_PROTOCOL_STEAM }, + { 0xC0456000 /* 192.69.96.0/22 */, 22, NDPI_PROTOCOL_STEAM }, + { 0xCDC40600 /* 205.196.6.0/24 */, 24, NDPI_PROTOCOL_STEAM }, + { 0xD040C800 /* 208.64.200.0/22 */, 22, NDPI_PROTOCOL_STEAM }, + { 0xD04EA400 /* 208.78.164.0/22 */, 22, NDPI_PROTOCOL_STEAM }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_teamviewer.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_teamviewer.c new file mode 100644 index 0000000000..04385902bc --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_teamviewer.c @@ -0,0 +1,34 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_teamviewer_protocol_list[] = { + { 0x2D936C00 /* 45.147.108.0/22 */, 22, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xB9BC2000 /* 185.188.32.0/23 */, 23, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xB9BC2200 /* 185.188.34.0/24 */, 24, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xB9F51C00 /* 185.245.28.0/22 */, 22, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xC120E100 /* 193.32.225.0/24 */, 24, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xC120E200 /* 193.32.226.0/23 */, 23, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xC13A6400 /* 193.58.100.0/23 */, 23, NDPI_PROTOCOL_TEAMVIEWER }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_telegram.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_telegram.c new file mode 100644 index 0000000000..be3b4e6a50 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_telegram.c @@ -0,0 +1,35 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_telegram_protocol_list[] = { + { 0x5B69C000 /* 91.105.192.0/23 */, 23, NDPI_PROTOCOL_TELEGRAM }, + { 0x5B6C0400 /* 91.108.4.0/22 */, 22, NDPI_PROTOCOL_TELEGRAM }, + { 0x5B6C0800 /* 91.108.8.0/21 */, 21, NDPI_PROTOCOL_TELEGRAM }, + { 0x5B6C1000 /* 91.108.16.0/21 */, 21, NDPI_PROTOCOL_TELEGRAM }, + { 0x5B6C3800 /* 91.108.56.0/22 */, 22, NDPI_PROTOCOL_TELEGRAM }, + { 0x5FA14000 /* 95.161.64.0/20 */, 20, NDPI_PROTOCOL_TELEGRAM }, + { 0x959AA000 /* 149.154.160.0/20 */, 20, NDPI_PROTOCOL_TELEGRAM }, + { 0xB94C9700 /* 185.76.151.0/24 */, 24, NDPI_PROTOCOL_TELEGRAM }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_tencent.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_tencent.c new file mode 100644 index 0000000000..c7048dfbb8 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_tencent.c @@ -0,0 +1,210 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_tencent_protocol_list[] = { + { 0x010C0000 /* 1.12.0.0/14 */, 14, NDPI_PROTOCOL_TENCENT }, + { 0x01740000 /* 1.116.0.0/15 */, 15, NDPI_PROTOCOL_TENCENT }, + { 0x01C9B800 /* 1.201.184.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x01C9BC00 /* 1.201.188.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2ABB8000 /* 42.187.128.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, + { 0x2AC00000 /* 42.192.0.0/15 */, 15, NDPI_PROTOCOL_TENCENT }, + { 0x2AC28000 /* 42.194.128.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, + { 0x2B800000 /* 43.128.0.0/15 */, 15, NDPI_PROTOCOL_TENCENT }, + { 0x2B820000 /* 43.130.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x2B830000 /* 43.131.0.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, + { 0x2B838000 /* 43.131.128.0/19 */, 19, NDPI_PROTOCOL_TENCENT }, + { 0x2B83C000 /* 43.131.192.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, + { 0x2B840000 /* 43.132.0.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, + { 0x2B844400 /* 43.132.68.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2B844600 /* 43.132.70.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2B845400 /* 43.132.84.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2B845E00 /* 43.132.94.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2B846000 /* 43.132.96.0/19 */, 19, NDPI_PROTOCOL_TENCENT }, + { 0x2B848000 /* 43.132.128.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, + { 0x2B850000 /* 43.133.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x2B860000 /* 43.134.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x2B870000 /* 43.135.0.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, + { 0x2B878000 /* 43.135.128.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, + { 0x2B87C000 /* 43.135.192.0/19 */, 19, NDPI_PROTOCOL_TENCENT }, + { 0x2B880000 /* 43.136.0.0/13 */, 13, NDPI_PROTOCOL_TENCENT }, + { 0x2B900000 /* 43.144.0.0/15 */, 15, NDPI_PROTOCOL_TENCENT }, + { 0x2B984000 /* 43.152.64.0/19 */, 19, NDPI_PROTOCOL_TENCENT }, + { 0x2B986000 /* 43.152.96.0/20 */, 20, NDPI_PROTOCOL_TENCENT }, + { 0x2B987000 /* 43.152.112.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x2B98C000 /* 43.152.192.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, + { 0x2B990000 /* 43.153.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x2B9A0000 /* 43.154.0.0/15 */, 15, NDPI_PROTOCOL_TENCENT }, + { 0x2B9C0000 /* 43.156.0.0/15 */, 15, NDPI_PROTOCOL_TENCENT }, + { 0x2B9E0000 /* 43.158.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x2B9F0000 /* 43.159.0.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, + { 0x2B9F8000 /* 43.159.128.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, + { 0x2BA00000 /* 43.160.0.0/15 */, 15, NDPI_PROTOCOL_TENCENT }, + { 0x2BA20000 /* 43.162.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x2BA3C000 /* 43.163.192.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, + { 0x2BAC0F00 /* 43.172.15.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF1000 /* 43.175.16.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x2BF2FC00 /* 43.242.252.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x2BF7C400 /* 43.247.196.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x2D28C000 /* 45.40.192.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, + { 0x2D714400 /* 45.113.68.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x2D927000 /* 45.146.112.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x31330000 /* 49.51.0.0/19 */, 19, NDPI_PROTOCOL_TENCENT }, + { 0x31332000 /* 49.51.32.0/20 */, 20, NDPI_PROTOCOL_TENCENT }, + { 0x31333000 /* 49.51.48.0/21 */, 21, NDPI_PROTOCOL_TENCENT }, + { 0x31333E00 /* 49.51.62.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x31334000 /* 49.51.64.0/19 */, 19, NDPI_PROTOCOL_TENCENT }, + { 0x31336000 /* 49.51.96.0/21 */, 21, NDPI_PROTOCOL_TENCENT }, + { 0x31336800 /* 49.51.104.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x31336C00 /* 49.51.108.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x31338000 /* 49.51.128.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, + { 0x3133C000 /* 49.51.192.0/19 */, 19, NDPI_PROTOCOL_TENCENT }, + { 0x3133E000 /* 49.51.224.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x3133E400 /* 49.51.228.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x3133E800 /* 49.51.232.0/21 */, 21, NDPI_PROTOCOL_TENCENT }, + { 0x3133F000 /* 49.51.240.0/20 */, 20, NDPI_PROTOCOL_TENCENT }, + { 0x31E80000 /* 49.232.0.0/14 */, 14, NDPI_PROTOCOL_TENCENT }, + { 0x3A574000 /* 58.87.64.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, + { 0x3EEA0000 /* 62.234.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x51440000 /* 81.68.0.0/14 */, 14, NDPI_PROTOCOL_TENCENT }, + { 0x529C0000 /* 82.156.0.0/15 */, 15, NDPI_PROTOCOL_TENCENT }, + { 0x5EBF0000 /* 94.191.0.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, + { 0x65200000 /* 101.32.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x65210000 /* 101.33.0.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x65210400 /* 101.33.4.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x65210A00 /* 101.33.10.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x65210E00 /* 101.33.14.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x65211100 /* 101.33.17.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x65211200 /* 101.33.18.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x65211400 /* 101.33.20.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x65211A00 /* 101.33.26.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x65211E00 /* 101.33.30.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x65212000 /* 101.33.32.0/19 */, 19, NDPI_PROTOCOL_TENCENT }, + { 0x65214000 /* 101.33.64.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, + { 0x65218000 /* 101.33.128.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, + { 0x65220000 /* 101.34.0.0/15 */, 15, NDPI_PROTOCOL_TENCENT }, + { 0x652A0000 /* 101.42.0.0/15 */, 15, NDPI_PROTOCOL_TENCENT }, + { 0x67071C00 /* 103.7.28.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x67267400 /* 103.38.116.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x6734D800 /* 103.52.216.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x67743200 /* 103.116.50.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x67EE1000 /* 103.238.16.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x6A340000 /* 106.52.0.0/14 */, 14, NDPI_PROTOCOL_TENCENT }, + { 0x6DF40000 /* 109.244.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x6E288000 /* 110.40.128.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, + { 0x6E2A8000 /* 110.42.128.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, + { 0x6FE50000 /* 111.229.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x6FE60000 /* 111.230.0.0/15 */, 15, NDPI_PROTOCOL_TENCENT }, + { 0x72750000 /* 114.117.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x72840000 /* 114.132.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x739F0000 /* 115.159.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x76180000 /* 118.24.0.0/15 */, 15, NDPI_PROTOCOL_TENCENT }, + { 0x76590000 /* 118.89.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x767E4000 /* 118.126.64.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, + { 0x76C38000 /* 118.195.128.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, + { 0x771BA000 /* 119.27.160.0/19 */, 19, NDPI_PROTOCOL_TENCENT }, + { 0x771C0000 /* 119.28.0.0/15 */, 15, NDPI_PROTOCOL_TENCENT }, + { 0x772D0000 /* 119.45.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x775B0000 /* 119.91.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x78350000 /* 120.53.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x78583800 /* 120.88.56.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x78E81400 /* 120.232.20.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x78F17F00 /* 120.241.127.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x78F18000 /* 120.241.128.0/21 */, 21, NDPI_PROTOCOL_TENCENT }, + { 0x78F18800 /* 120.241.136.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x79040000 /* 121.4.0.0/15 */, 15, NDPI_PROTOCOL_TENCENT }, + { 0x79330000 /* 121.51.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x7A330000 /* 122.51.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x7A98C000 /* 122.152.192.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, + { 0x7BCE0000 /* 123.206.0.0/15 */, 15, NDPI_PROTOCOL_TENCENT }, + { 0x7C9C0000 /* 124.156.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x7CDC0000 /* 124.220.0.0/14 */, 14, NDPI_PROTOCOL_TENCENT }, + { 0x806C0000 /* 128.108.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x811C0000 /* 129.28.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x81CC0000 /* 129.204.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x81D30000 /* 129.211.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x81E20000 /* 129.226.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x84E80000 /* 132.232.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x86AF0000 /* 134.175.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x8B9B0000 /* 139.155.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x8BBA0000 /* 139.186.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x8BC70000 /* 139.199.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x8C8F0000 /* 140.143.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x9238C000 /* 146.56.192.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, + { 0x94460000 /* 148.70.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x966D0000 /* 150.109.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x969E0000 /* 150.158.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x98880000 /* 152.136.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x9A088000 /* 154.8.128.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, + { 0x9CF05800 /* 156.240.88.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x9E4F0100 /* 158.79.1.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x9F4B0000 /* 159.75.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0xA20E0000 /* 162.14.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0xA23E0000 /* 162.62.0.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, + { 0xA23E8000 /* 162.62.128.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, + { 0xA23EC000 /* 162.62.192.0/19 */, 19, NDPI_PROTOCOL_TENCENT }, + { 0xA23EE000 /* 162.62.224.0/20 */, 20, NDPI_PROTOCOL_TENCENT }, + { 0xAA6A0000 /* 170.106.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0xAC51C000 /* 172.81.192.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, + { 0xAF180000 /* 175.24.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0xAF1B0000 /* 175.27.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0xAFB20000 /* 175.178.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0xB6FE0000 /* 182.254.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0xBC838000 /* 188.131.128.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, + { 0xC0908000 /* 192.144.128.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, + { 0xC1700000 /* 193.112.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0xCBC38000 /* 203.195.128.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, + { 0xCBCD8000 /* 203.205.128.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0xCBCD8600 /* 203.205.134.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0xCBCD8800 /* 203.205.136.0/21 */, 21, NDPI_PROTOCOL_TENCENT }, + { 0xCBCD9000 /* 203.205.144.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0xCBCD9B00 /* 203.205.155.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0xCBCD9C00 /* 203.205.156.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0xCBCDBC00 /* 203.205.188.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0xCBCDBF00 /* 203.205.191.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0xCBCDC100 /* 203.205.193.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0xCBCDC200 /* 203.205.194.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0xCBCDC400 /* 203.205.196.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0xCBCDDA00 /* 203.205.218.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0xCBCDDC00 /* 203.205.220.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0xCBCDE000 /* 203.205.224.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0xCBCDE800 /* 203.205.232.0/21 */, 21, NDPI_PROTOCOL_TENCENT }, + { 0xCBCDF000 /* 203.205.240.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0xCBCDF200 /* 203.205.242.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0xCBCDF800 /* 203.205.248.0/21 */, 21, NDPI_PROTOCOL_TENCENT }, + { 0xD249A000 /* 210.73.160.0/19 */, 19, NDPI_PROTOCOL_TENCENT }, + { 0xD2ABE800 /* 210.171.232.0/21 */, 21, NDPI_PROTOCOL_TENCENT }, + { 0xD2B44A00 /* 210.180.74.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0xD3385C00 /* 211.56.92.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0xD3988000 /* 211.152.128.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0xD3988400 /* 211.152.132.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0xD3988A00 /* 211.152.138.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0xD3989000 /* 211.152.144.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0xD3989400 /* 211.152.148.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0xD3989800 /* 211.152.152.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0xD3989E00 /* 211.152.158.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0xD39F8000 /* 211.159.128.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, + { 0xD4400000 /* 212.64.0.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, + { 0xD4818000 /* 212.129.128.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_threema.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_threema.c new file mode 100644 index 0000000000..69a183cc46 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_threema.c @@ -0,0 +1,36 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_threema_protocol_list[] = { + { 0x0594A000 /* 5.148.160.0/19 */, 19, NDPI_PROTOCOL_THREEMA }, + { 0x2D09A000 /* 45.9.160.0/23 */, 23, NDPI_PROTOCOL_THREEMA }, + { 0x2D09A200 /* 45.9.162.0/24 */, 24, NDPI_PROTOCOL_THREEMA }, + { 0x5C2AB800 /* 92.42.184.0/21 */, 21, NDPI_PROTOCOL_THREEMA }, + { 0x5EE6D000 /* 94.230.208.0/20 */, 20, NDPI_PROTOCOL_THREEMA }, + { 0xB2D12000 /* 178.209.32.0/19 */, 19, NDPI_PROTOCOL_THREEMA }, + { 0xB958EC00 /* 185.88.236.0/22 */, 22, NDPI_PROTOCOL_THREEMA }, + { 0xC1115500 /* 193.17.85.0/24 */, 24, NDPI_PROTOCOL_THREEMA }, + { 0xD996F000 /* 217.150.240.0/20 */, 20, NDPI_PROTOCOL_THREEMA }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_twitch.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_twitch.c new file mode 100644 index 0000000000..e39b28fa82 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_twitch.c @@ -0,0 +1,38 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_twitch_protocol_list[] = { + { 0x17A00000 /* 23.160.0.0/24 */, 24, NDPI_PROTOCOL_TWITCH }, + { 0x2D718000 /* 45.113.128.0/22 */, 22, NDPI_PROTOCOL_TWITCH }, + { 0x34818000 /* 52.129.128.0/19 */, 19, NDPI_PROTOCOL_TWITCH }, + { 0x3481A000 /* 52.129.160.0/20 */, 20, NDPI_PROTOCOL_TWITCH }, + { 0x34DFC000 /* 52.223.192.0/18 */, 18, NDPI_PROTOCOL_TWITCH }, + { 0x63B54000 /* 99.181.64.0/18 */, 18, NDPI_PROTOCOL_TWITCH }, + { 0x67353000 /* 103.53.48.0/22 */, 22, NDPI_PROTOCOL_TWITCH }, + { 0xB92ACC00 /* 185.42.204.0/22 */, 22, NDPI_PROTOCOL_TWITCH }, + { 0xC0104000 /* 192.16.64.0/21 */, 21, NDPI_PROTOCOL_TWITCH }, + { 0xC06CEF00 /* 192.108.239.0/24 */, 24, NDPI_PROTOCOL_TWITCH }, + { 0xC709F800 /* 199.9.248.0/21 */, 21, NDPI_PROTOCOL_TWITCH }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_twitter.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_twitter.c new file mode 100644 index 0000000000..56c7dea539 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_twitter.c @@ -0,0 +1,60 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_twitter_protocol_list[] = { + { 0x0819C200 /* 8.25.194.0/23 */, 23, NDPI_PROTOCOL_TWITTER }, + { 0x0819C400 /* 8.25.196.0/23 */, 23, NDPI_PROTOCOL_TWITTER }, + { 0x403F0000 /* 64.63.0.0/18 */, 18, NDPI_PROTOCOL_TWITTER }, + { 0x450C3800 /* 69.12.56.0/21 */, 21, NDPI_PROTOCOL_TWITTER }, + { 0x45C3A000 /* 69.195.160.0/24 */, 24, NDPI_PROTOCOL_TWITTER }, + { 0x45C3A200 /* 69.195.162.0/23 */, 23, NDPI_PROTOCOL_TWITTER }, + { 0x45C3A400 /* 69.195.164.0/23 */, 23, NDPI_PROTOCOL_TWITTER }, + { 0x45C3A600 /* 69.195.166.0/24 */, 24, NDPI_PROTOCOL_TWITTER }, + { 0x45C3A800 /* 69.195.168.0/23 */, 23, NDPI_PROTOCOL_TWITTER }, + { 0x45C3AB00 /* 69.195.171.0/24 */, 24, NDPI_PROTOCOL_TWITTER }, + { 0x45C3AC00 /* 69.195.172.0/24 */, 24, NDPI_PROTOCOL_TWITTER }, + { 0x45C3AE00 /* 69.195.174.0/23 */, 23, NDPI_PROTOCOL_TWITTER }, + { 0x45C3B000 /* 69.195.176.0/21 */, 21, NDPI_PROTOCOL_TWITTER }, + { 0x45C3B800 /* 69.195.184.0/22 */, 22, NDPI_PROTOCOL_TWITTER }, + { 0x67FC7000 /* 103.252.112.0/22 */, 22, NDPI_PROTOCOL_TWITTER }, + { 0x68F42800 /* 104.244.40.0/23 */, 23, NDPI_PROTOCOL_TWITTER }, + { 0x68F42A00 /* 104.244.42.0/24 */, 24, NDPI_PROTOCOL_TWITTER }, + { 0x68F42C00 /* 104.244.44.0/22 */, 22, NDPI_PROTOCOL_TWITTER }, + { 0xB92D0400 /* 185.45.4.0/22 */, 22, NDPI_PROTOCOL_TWITTER }, + { 0xBC40E000 /* 188.64.224.0/21 */, 21, NDPI_PROTOCOL_TWITTER }, + { 0xC02C4500 /* 192.44.69.0/24 */, 24, NDPI_PROTOCOL_TWITTER }, + { 0xC030EC00 /* 192.48.236.0/23 */, 23, NDPI_PROTOCOL_TWITTER }, + { 0xC0854C00 /* 192.133.76.0/22 */, 22, NDPI_PROTOCOL_TWITTER }, + { 0xC7109C00 /* 199.16.156.0/22 */, 22, NDPI_PROTOCOL_TWITTER }, + { 0xC73B9400 /* 199.59.148.0/22 */, 22, NDPI_PROTOCOL_TWITTER }, + { 0xC7603800 /* 199.96.56.0/21 */, 21, NDPI_PROTOCOL_TWITTER }, + { 0xCAA08000 /* 202.160.128.0/22 */, 22, NDPI_PROTOCOL_TWITTER }, + { 0xD1EDC000 /* 209.237.192.0/21 */, 21, NDPI_PROTOCOL_TWITTER }, + { 0xD1EDC800 /* 209.237.200.0/22 */, 22, NDPI_PROTOCOL_TWITTER }, + { 0xD1EDCC00 /* 209.237.204.0/24 */, 24, NDPI_PROTOCOL_TWITTER }, + { 0xD1EDDB00 /* 209.237.219.0/24 */, 24, NDPI_PROTOCOL_TWITTER }, + { 0xD1EDDC00 /* 209.237.220.0/23 */, 23, NDPI_PROTOCOL_TWITTER }, + { 0xD1EDDE00 /* 209.237.222.0/24 */, 24, NDPI_PROTOCOL_TWITTER }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_ubuntuone.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_ubuntuone.c new file mode 100644 index 0000000000..e6abe7ae0d --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_ubuntuone.c @@ -0,0 +1,34 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_ubuntuone_protocol_list[] = { + { 0x5BBD5800 /* 91.189.88.0/24 */, 24, NDPI_PROTOCOL_UBUNTUONE }, + { 0x5BBD5A00 /* 91.189.90.0/23 */, 23, NDPI_PROTOCOL_UBUNTUONE }, + { 0x5BBD5C00 /* 91.189.92.0/23 */, 23, NDPI_PROTOCOL_UBUNTUONE }, + { 0x5BBD5E00 /* 91.189.94.0/24 */, 24, NDPI_PROTOCOL_UBUNTUONE }, + { 0xA2D52000 /* 162.213.32.0/22 */, 22, NDPI_PROTOCOL_UBUNTUONE }, + { 0xB97DBC00 /* 185.125.188.0/22 */, 22, NDPI_PROTOCOL_UBUNTUONE }, + { 0xC2A9FE00 /* 194.169.254.0/24 */, 24, NDPI_PROTOCOL_UBUNTUONE }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_webex.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_webex.c new file mode 100644 index 0000000000..45628ed7c0 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_asn_webex.c @@ -0,0 +1,54 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_webex_protocol_list[] = { + { 0x0826D800 /* 8.38.216.0/24 */, 24, NDPI_PROTOCOL_WEBEX }, + { 0x17590000 /* 23.89.0.0/17 */, 17, NDPI_PROTOCOL_WEBEX }, + { 0x17598000 /* 23.89.128.0/19 */, 19, NDPI_PROTOCOL_WEBEX }, + { 0x1759A000 /* 23.89.160.0/20 */, 20, NDPI_PROTOCOL_WEBEX }, + { 0x1759B000 /* 23.89.176.0/21 */, 21, NDPI_PROTOCOL_WEBEX }, + { 0x1759C000 /* 23.89.192.0/19 */, 19, NDPI_PROTOCOL_WEBEX }, + { 0x3E6DC000 /* 62.109.192.0/18 */, 18, NDPI_PROTOCOL_WEBEX }, + { 0x40446000 /* 64.68.96.0/19 */, 19, NDPI_PROTOCOL_WEBEX }, + { 0x4272A000 /* 66.114.160.0/20 */, 20, NDPI_PROTOCOL_WEBEX }, + { 0x42A32000 /* 66.163.32.0/19 */, 19, NDPI_PROTOCOL_WEBEX }, + { 0x451AA000 /* 69.26.160.0/19 */, 19, NDPI_PROTOCOL_WEBEX }, + { 0x721DC000 /* 114.29.192.0/19 */, 19, NDPI_PROTOCOL_WEBEX }, + { 0x8BB15800 /* 139.177.88.0/22 */, 22, NDPI_PROTOCOL_WEBEX }, + { 0x8BB15C00 /* 139.177.92.0/23 */, 23, NDPI_PROTOCOL_WEBEX }, + { 0x96FD8000 /* 150.253.128.0/17 */, 17, NDPI_PROTOCOL_WEBEX }, + { 0xAA480000 /* 170.72.0.0/17 */, 17, NDPI_PROTOCOL_WEBEX }, + { 0xAA488000 /* 170.72.128.0/18 */, 18, NDPI_PROTOCOL_WEBEX }, + { 0xAA48C000 /* 170.72.192.0/19 */, 19, NDPI_PROTOCOL_WEBEX }, + { 0xAA858000 /* 170.133.128.0/18 */, 18, NDPI_PROTOCOL_WEBEX }, + { 0xAD27E000 /* 173.39.224.0/19 */, 19, NDPI_PROTOCOL_WEBEX }, + { 0xADF30000 /* 173.243.0.0/20 */, 20, NDPI_PROTOCOL_WEBEX }, + { 0xCFB6A000 /* 207.182.160.0/19 */, 19, NDPI_PROTOCOL_WEBEX }, + { 0xD0FDFE00 /* 208.253.254.0/24 */, 24, NDPI_PROTOCOL_WEBEX }, + { 0xD0FE7200 /* 208.254.114.0/24 */, 24, NDPI_PROTOCOL_WEBEX }, + { 0xD1C5C000 /* 209.197.192.0/19 */, 19, NDPI_PROTOCOL_WEBEX }, + { 0xD204C000 /* 210.4.192.0/20 */, 20, NDPI_PROTOCOL_WEBEX }, + { 0xD8978000 /* 216.151.128.0/19 */, 19, NDPI_PROTOCOL_WEBEX }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_azure_match.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_azure_match.c new file mode 100644 index 0000000000..6477259531 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_azure_match.c @@ -0,0 +1,48005 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { + { 0x04E86A58 /* 4.232.106.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D411913 /* 13.65.25.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D423C77 /* 13.66.60.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428FDC /* 13.66.143.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42CA0E /* 13.66.202.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42F8E1 /* 13.66.248.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42F9D3 /* 13.66.249.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430A7C /* 13.67.10.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456D84 /* 13.69.109.132/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D470135 /* 13.71.1.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47249B /* 13.71.36.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C770 /* 13.71.199.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D491226 /* 13.73.18.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D491880 /* 13.73.24.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4919E5 /* 13.73.25.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D491C7D /* 13.73.28.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D496DC4 /* 13.73.109.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D496E94 /* 13.73.110.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4970BF /* 13.73.112.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4974E0 /* 13.73.116.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D35D8 /* 13.77.53.216/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4DAC66 /* 13.77.172.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4DB7D1 /* 13.77.183.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4DCAA4 /* 13.77.202.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6D9C /* 13.78.109.156/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E8091 /* 13.78.128.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E94B2 /* 13.78.148.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E9699 /* 13.78.150.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E96C9 /* 13.78.150.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E96D0 /* 13.78.150.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EDF74 /* 13.78.223.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5431F7 /* 13.84.49.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5433AC /* 13.84.51.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54343A /* 13.84.52.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DDDC /* 13.86.221.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6A268E /* 13.106.38.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6A2694 /* 13.106.38.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6A3603 /* 13.106.54.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6A3613 /* 13.106.54.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6A39B5 /* 13.106.57.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6A39C4 /* 13.106.57.196/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114258 /* 20.17.66.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152A58 /* 20.21.42.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424498B /* 20.36.73.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142449C1 /* 20.36.73.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14244AD6 /* 20.36.74.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14244AEF /* 20.36.74.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14244B2E /* 20.36.75.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14244B32 /* 20.36.75.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269584 /* 20.38.149.132/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142735AE /* 20.39.53.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4024 /* 20.42.64.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B797C /* 20.43.121.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C11DC /* 20.44.17.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4089 /* 20.45.64.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D408A /* 20.45.64.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D408E /* 20.45.64.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4859 /* 20.45.72.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D486F /* 20.45.72.111/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4BB7 /* 20.45.75.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7BEC /* 20.45.123.236/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143010F7 /* 20.48.16.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14301553 /* 20.48.21.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143015F2 /* 20.48.21.242/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430287A /* 20.48.40.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345FFE /* 20.52.95.254/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353E64 /* 20.53.62.100/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450866 /* 20.69.8.102/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481B98 /* 20.72.27.152/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A2626 /* 20.90.38.38/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C0572 /* 20.92.5.114/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D714 /* 20.105.215.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14742B6C /* 20.116.43.108/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1475C122 /* 20.117.193.34/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14764E24 /* 20.118.78.36/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14771CDC /* 20.119.28.220/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D04A8 /* 20.125.4.168/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14874633 /* 20.135.70.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14874A03 /* 20.135.74.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496ACE4 /* 20.150.172.228/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EE7C /* 20.192.238.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C180F4 /* 20.193.128.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C18106 /* 20.193.129.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1817E /* 20.193.129.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1880C /* 20.193.136.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C18839 /* 20.193.136.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1883B /* 20.193.136.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1889D /* 20.193.136.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C188A0 /* 20.193.136.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C188D6 /* 20.193.136.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C188D8 /* 20.193.136.216/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C188E0 /* 20.193.136.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C188EF /* 20.193.136.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C188F9 /* 20.193.136.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1890D /* 20.193.137.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1890E /* 20.193.137.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C18924 /* 20.193.137.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C18937 /* 20.193.137.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CA04 /* 20.193.202.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35736 /* 20.195.87.54/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7C942 /* 20.199.201.66/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB583E /* 20.203.88.62/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC0D8 /* 20.204.192.216/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D2458C /* 20.210.69.140/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79A58 /* 20.215.154.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93A58 /* 20.217.58.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17618DA0 /* 23.97.141.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761A9D6 /* 23.97.169.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761D143 /* 23.97.209.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761D6D2 /* 23.97.214.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761DABC /* 23.97.218.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17629686 /* 23.98.150.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844C389 /* 40.68.195.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844C93A /* 40.68.201.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844C941 /* 40.68.201.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844C9CE /* 40.68.201.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844C9D3 /* 40.68.201.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844CC12 /* 40.68.204.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456FC4 /* 40.69.111.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6618 /* 40.74.102.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855CD4D /* 40.85.205.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855D633 /* 40.85.214.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855D9F1 /* 40.85.217.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855E449 /* 40.85.228.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855FBE8 /* 40.85.251.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855FE1F /* 40.85.254.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873256A /* 40.115.37.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2879431E /* 40.121.67.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2879DBD7 /* 40.121.219.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2879DD3E /* 40.121.221.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2879DEC9 /* 40.121.222.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2879DFBA /* 40.121.223.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F5973 /* 40.127.89.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F59E9 /* 40.127.89.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F59ED /* 40.127.89.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F5A01 /* 40.127.90.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F5EDD /* 40.127.94.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C65AC /* 51.12.101.172/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCCF4 /* 51.12.204.244/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356A58 /* 51.53.106.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BA58 /* 51.53.186.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680964 /* 51.104.9.100/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374A861 /* 51.116.168.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374A869 /* 51.116.168.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374A86B /* 51.116.168.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374A872 /* 51.116.168.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374ABA7 /* 51.116.171.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374ABAB /* 51.116.171.171/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374ABDB /* 51.116.171.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374EBDD /* 51.116.235.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374EF87 /* 51.116.239.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C3C3C /* 51.140.60.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C3CA0 /* 51.140.60.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C449E /* 51.140.68.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C46DA /* 51.140.70.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4907 /* 51.140.73.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C780F /* 51.140.120.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CF264 /* 51.140.242.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CFA79 /* 51.140.250.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CFEE1 /* 51.140.254.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D0C52 /* 51.141.12.82/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D0C54 /* 51.141.12.84/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D0CEA /* 51.141.12.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D0DAA /* 51.141.13.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x339064C0 /* 51.144.100.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A1FD3 /* 52.138.31.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34959A8E /* 52.149.154.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349A4C5D /* 52.154.76.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349A4DA4 /* 52.154.77.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A06141 /* 52.160.97.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A10DA7 /* 52.161.13.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A10E03 /* 52.161.14.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A1132D /* 52.161.19.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A1137D /* 52.161.19.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A11626 /* 52.161.22.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A118A5 /* 52.161.24.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A11C3E /* 52.161.28.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A11C9F /* 52.161.28.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A11CA7 /* 52.161.28.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A11EBD /* 52.161.30.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A11FDA /* 52.161.31.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A15C93 /* 52.161.92.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A15F59 /* 52.161.95.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A16083 /* 52.161.96.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A160D5 /* 52.161.96.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A16190 /* 52.161.97.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A16272 /* 52.161.98.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A16874 /* 52.161.104.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A16A35 /* 52.161.106.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A16DC4 /* 52.161.109.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC88BC /* 52.172.136.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC906F /* 52.172.144.111/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACA45A /* 52.172.164.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACBB5D /* 52.172.187.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACC6EC /* 52.172.198.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACCAC3 /* 52.172.202.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACD292 /* 52.172.210.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACD3AC /* 52.172.211.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACD54E /* 52.172.213.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACD7B4 /* 52.172.215.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACDA90 /* 52.172.218.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACDD0D /* 52.172.221.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACDD61 /* 52.172.221.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B714F4 /* 52.183.20.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B71F00 /* 52.183.31.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B75E3B /* 52.183.94.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B891A6 /* 52.184.145.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB83EF /* 52.187.131.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB843F /* 52.187.132.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB86E6 /* 52.187.134.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB87F7 /* 52.187.135.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BCC892 /* 52.188.200.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E65193 /* 52.230.81.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F0F48C /* 52.240.244.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F324C8 /* 52.243.36.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F324E1 /* 52.243.36.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F6B40A /* 52.246.180.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F6B7DF /* 52.246.183.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F6B870 /* 52.246.184.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6258 /* 68.221.98.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x462566B3 /* 70.37.102.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E22E5 /* 104.46.34.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E2AB8 /* 104.46.42.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E2DAC /* 104.46.45.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3001B /* 104.211.0.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D30226 /* 104.211.2.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D30322 /* 104.211.3.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D30364 /* 104.211.3.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3716D /* 104.211.113.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D374B7 /* 104.211.116.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3765D /* 104.211.118.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A550 /* 104.214.165.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974810D /* 137.116.129.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974811E /* 137.116.129.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89748437 /* 137.116.132.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89752DE6 /* 137.117.45.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89752E3E /* 137.117.46.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89752EF8 /* 137.117.46.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B01AA /* 138.91.1.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B01AD /* 138.91.1.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B0200 /* 138.91.2.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B042B /* 138.91.4.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170A58 /* 158.23.10.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D2E40 /* 168.61.46.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D2F16 /* 168.61.47.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8E34 /* 168.61.142.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FFC05 /* 168.63.252.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93204 /* 191.233.50.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CF40 /* 191.233.207.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5661E0 /* 13.86.97.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259C40 /* 20.37.156.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C050 /* 20.37.192.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265050 /* 20.38.80.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14286860 /* 20.40.104.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14287CB0 /* 20.40.124.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14288120 /* 20.40.129.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14288160 /* 20.40.129.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A0440 /* 20.42.4.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A2320 /* 20.42.35.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8120 /* 20.42.129.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2850 /* 20.43.40.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4050 /* 20.43.64.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8060 /* 20.43.128.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D05A0 /* 20.45.5.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6A40 /* 20.189.106.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764E010 /* 23.100.224.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1850 /* 40.74.24.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BA80 /* 40.80.186.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B5230 /* 40.91.82.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770860 /* 40.119.8.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681850 /* 51.104.24.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33690980 /* 51.105.9.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A050 /* 51.137.160.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33903860 /* 51.144.56.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BFA60 /* 52.139.250.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348CE8A0 /* 52.140.232.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349E1C40 /* 52.158.28.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E5D830 /* 52.229.216.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE91AB0 /* 191.233.26.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE050 /* 191.235.224.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140E79B0 /* 20.14.121.176/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1415538C /* 20.21.83.140/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1415538E /* 20.21.83.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1418030C /* 20.24.3.12/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1418030E /* 20.24.3.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141A11F8 /* 20.26.17.248/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141A11FA /* 20.26.17.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF215 /* 20.45.242.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF2D4 /* 20.45.242.212/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FEC5A /* 20.47.236.90/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143315FD /* 20.51.21.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143536B2 /* 20.53.54.178/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353798 /* 20.53.55.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353E63 /* 20.53.62.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353E6E /* 20.53.62.110/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B51E2 /* 20.59.81.226/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B51E4 /* 20.59.81.228/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B54E5 /* 20.59.84.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B5760 /* 20.59.87.96/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144505A3 /* 20.69.5.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450800 /* 20.69.8.0/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC554 /* 20.74.197.84/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC556 /* 20.74.197.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144F6C63 /* 20.79.108.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453DE67 /* 20.83.222.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453DE6E /* 20.83.222.110/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145756C1 /* 20.87.86.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145756C2 /* 20.87.86.194/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A2633 /* 20.90.38.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B0CEE /* 20.91.12.238/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B920A /* 20.91.146.10/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C057A /* 20.92.5.122/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146295EF /* 20.98.149.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C3B8 /* 20.98.195.184/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C620 /* 20.98.198.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640721 /* 20.100.7.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640722 /* 20.100.7.34/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D35E /* 20.105.211.94/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D368 /* 20.105.211.104/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D722 /* 20.105.215.34/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D724 /* 20.105.215.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469F390 /* 20.105.243.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469F394 /* 20.105.243.148/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146BEFCC /* 20.107.239.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146BEFD8 /* 20.107.239.216/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F03DD /* 20.111.3.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F03DE /* 20.111.3.222/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14742B76 /* 20.116.43.118/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14764E2C /* 20.118.78.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14764E68 /* 20.118.78.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14768BD6 /* 20.118.139.214/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14768D20 /* 20.118.141.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14768D28 /* 20.118.141.40/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14768D2B /* 20.118.141.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1476C484 /* 20.118.196.132/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14771CFC /* 20.119.28.252/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14779E01 /* 20.119.158.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14779E02 /* 20.119.158.2/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D04AE /* 20.125.4.174/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D04C8 /* 20.125.4.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DA467 /* 20.125.164.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DA628 /* 20.125.166.40/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC67F /* 20.189.198.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09F41 /* 20.192.159.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09F42 /* 20.192.159.66/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7C94A /* 20.199.201.74/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7CB48 /* 20.199.203.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8A0FD /* 20.200.160.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8A0FE /* 20.200.160.254/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C757 /* 20.200.199.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB584E /* 20.203.88.78/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5924 /* 20.203.89.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC282 /* 20.204.194.130/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC284 /* 20.204.194.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD3276 /* 20.205.50.118/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD37D0 /* 20.205.55.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0305 /* 20.206.3.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0520 /* 20.206.5.32/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CEB718 /* 20.206.183.24/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CEB71A /* 20.206.183.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF055E /* 20.207.5.94/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF0560 /* 20.207.5.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CFA98A /* 20.207.169.138/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CFA98C /* 20.207.169.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D09181 /* 20.208.145.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D09404 /* 20.208.148.4/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D247F8 /* 20.210.71.248/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D247FA /* 20.210.71.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D29136 /* 20.210.145.54/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D3E024 /* 20.211.224.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5C4C0 /* 20.213.196.192/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5C4C2 /* 20.213.196.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D68328 /* 20.214.131.40/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DAB8AC /* 20.218.184.172/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DC00F4 /* 20.220.0.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DF4088 /* 20.223.64.136/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DF408C /* 20.223.64.140/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E85810 /* 20.232.88.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E85CCF /* 20.232.92.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E85D6C /* 20.232.93.108/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EC91C2 /* 20.236.145.194/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EC929C /* 20.236.146.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400E38 /* 40.64.14.56/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400E3A /* 40.64.14.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285064C0 /* 40.80.100.192/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285064C2 /* 40.80.100.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C16CD /* 51.12.22.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C4BB3 /* 51.12.75.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744E22 /* 51.116.78.34/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744EF8 /* 51.116.78.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378B288 /* 51.120.178.136/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378B28A /* 51.120.178.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338E8204 /* 51.142.130.4/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928DF0 /* 52.146.141.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928DF4 /* 52.146.141.244/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22EEE /* 52.242.46.238/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22F00 /* 52.242.47.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662557FC /* 102.37.87.252/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662557FE /* 102.37.87.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4097A1 /* 13.64.151.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428D40 /* 13.66.141.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4309E0 /* 13.67.9.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4542A0 /* 13.69.66.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E560 /* 13.69.229.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464920 /* 13.70.73.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47ACA0 /* 13.71.172.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C3E0 /* 13.71.195.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C940 /* 13.71.201.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F020 /* 13.73.240.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6800 /* 13.74.104.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4AF99C /* 13.74.249.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2620 /* 13.75.38.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B69A8 /* 13.75.105.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D34A0 /* 13.77.52.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6CC0 /* 13.78.108.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EACF6 /* 13.78.172.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4F25F7 /* 13.79.37.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DB00 /* 13.86.219.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D571000 /* 13.87.16.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5739A0 /* 13.87.57.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577BA0 /* 13.87.123.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AE00 /* 13.89.174.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14142000 /* 20.20.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246BC0 /* 20.36.107.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247340 /* 20.36.115.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254B60 /* 20.37.75.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E440 /* 20.40.228.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7820 /* 20.43.120.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C03A0 /* 20.44.3.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1020 /* 20.44.16.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0A40 /* 20.46.10.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330950 /* 20.51.9.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330E48 /* 20.51.14.72/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331080 /* 20.51.16.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D62A0 /* 20.61.98.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6380 /* 20.61.99.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E3A50 /* 20.62.58.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8100 /* 20.62.129.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E81F0 /* 20.62.129.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E864A /* 20.62.134.74/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418460 /* 20.65.132.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420220 /* 20.66.2.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420310 /* 20.66.3.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481540 /* 20.72.21.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14584200 /* 20.88.66.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC520 /* 20.187.197.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC5F0 /* 20.187.197.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8000 /* 20.190.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24900 /* 20.194.73.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C33866 /* 20.195.56.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C33976 /* 20.195.57.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C340C0 /* 20.195.64.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C340F0 /* 20.195.64.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E78000 /* 20.231.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17650046 /* 23.101.0.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176506BE /* 23.101.6.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844A08E /* 40.68.160.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456BA0 /* 40.69.107.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470D00 /* 40.71.13.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6540 /* 40.74.101.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A92C0 /* 40.74.146.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC3A0 /* 40.78.195.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECB40 /* 40.78.203.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8380 /* 40.79.131.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB380 /* 40.79.179.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28539038 /* 40.83.144.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0000 /* 40.126.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C94C0 /* 51.140.148.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD000 /* 51.140.208.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD3C0 /* 51.140.211.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A419D /* 52.138.65.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A4429 /* 52.138.68.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928460 /* 52.146.132.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928550 /* 52.146.133.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928942 /* 52.146.137.66/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969D00 /* 52.150.157.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349D1494 /* 52.157.20.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349D14BA /* 52.157.20.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349D14CD /* 52.157.20.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349FAF1F /* 52.159.175.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349FAF75 /* 52.159.175.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349FAF79 /* 52.159.175.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A10D47 /* 52.161.13.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A10D5F /* 52.161.13.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A16EA9 /* 52.161.110.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26E60 /* 52.162.110.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A97D77 /* 52.169.125.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9DA00 /* 52.169.218.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEBD95 /* 52.174.189.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF1286 /* 52.175.18.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B21B70 /* 52.178.27.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B37ADA /* 52.179.122.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B37EDF /* 52.179.126.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B157 /* 52.180.177.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B36C /* 52.180.179.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B53D /* 52.180.181.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B708 /* 52.180.183.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB1301 /* 52.187.19.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB7130 /* 52.187.113.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB7553 /* 52.187.117.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB78ED /* 52.187.120.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B8C6 /* 52.225.184.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1BC59 /* 52.225.188.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E2A928 /* 52.226.169.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E2A92D /* 52.226.169.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E2A935 /* 52.226.169.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71380 /* 52.231.19.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E793C0 /* 52.231.147.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F9CF08 /* 52.249.207.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F9CF17 /* 52.249.207.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F9CF1B /* 52.249.207.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FB60 /* 65.52.251.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68285413 /* 104.40.84.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682857D1 /* 104.40.87.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68289C12 /* 104.40.156.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828A800 /* 104.40.168.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68299FD4 /* 104.41.159.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D8AA1 /* 104.45.138.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB280 /* 104.46.178.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D393A0 /* 104.211.147.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CCA0 /* 191.233.204.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81CA0 /* 4.232.28.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4328B7 /* 13.67.40.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E920 /* 13.69.233.32/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464EAA /* 13.70.78.170/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AF82 /* 13.71.175.130/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C776 /* 13.71.199.118/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F4C2 /* 13.73.244.194/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FEDC /* 13.73.254.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6FC2 /* 13.78.111.194/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D507C84 /* 13.80.124.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D52B4CE /* 13.82.180.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DDDA /* 13.86.221.218/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573A88 /* 13.87.58.136/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577C88 /* 13.87.124.136/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113480 /* 20.17.52.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141524E0 /* 20.21.36.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142475C0 /* 20.36.117.192/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247B54 /* 20.36.123.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142544E0 /* 20.37.68.224/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254CCC /* 20.37.76.204/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C68E /* 20.37.198.142/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E366 /* 20.37.227.102/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E40C /* 20.37.228.12/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142680AA /* 20.38.128.170/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268D06 /* 20.38.141.6/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268E68 /* 20.38.142.104/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270F3A /* 20.39.15.58/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E0E0 /* 20.40.224.224/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E0E4 /* 20.40.224.228/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E680 /* 20.40.230.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294532 /* 20.41.69.50/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429453C /* 20.41.69.60/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE6EA /* 20.42.230.234/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2DF8 /* 20.43.45.248/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B797A /* 20.43.121.122/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C04E8 /* 20.44.4.232/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1304 /* 20.44.19.4/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5A60 /* 20.45.90.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D707A /* 20.45.112.122/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D72CC /* 20.45.114.204/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7530 /* 20.45.117.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC728 /* 20.45.199.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0CD0 /* 20.46.12.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0F00 /* 20.46.15.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C054 /* 20.48.192.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C5A0 /* 20.48.197.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431632E /* 20.49.99.46/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143166E4 /* 20.49.102.228/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143172BC /* 20.49.114.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317FF0 /* 20.49.127.240/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143300D0 /* 20.51.0.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330D50 /* 20.51.13.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143310A8 /* 20.51.16.168/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331550 /* 20.51.21.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143458E0 /* 20.52.88.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14350020 /* 20.53.0.32/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352C50 /* 20.53.44.80/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352FD0 /* 20.53.47.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353170 /* 20.53.49.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353940 /* 20.53.57.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4360 /* 20.58.67.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6242 /* 20.61.98.66/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6244 /* 20.61.98.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D67F0 /* 20.61.103.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E3C70 /* 20.62.60.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8094 /* 20.62.128.148/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E86F0 /* 20.62.134.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418650 /* 20.65.134.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420590 /* 20.66.5.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144501A0 /* 20.69.1.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144815D0 /* 20.72.21.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146309C0 /* 20.99.9.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A59C /* 20.150.165.156/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496E100 /* 20.150.225.0/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F540 /* 20.150.245.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F5A0 /* 20.150.245.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC4C4 /* 20.187.196.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE4E0 /* 20.189.228.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA01A /* 20.191.160.26/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA074 /* 20.191.160.116/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA790 /* 20.191.167.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02D00 /* 20.192.45.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02F40 /* 20.192.47.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03260 /* 20.192.50.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C032F0 /* 20.192.50.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C050C0 /* 20.192.80.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A4BC /* 20.192.164.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0B850 /* 20.192.184.80/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E1C8 /* 20.192.225.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EE7A /* 20.192.238.122/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C280 /* 20.193.194.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C2A0 /* 20.193.194.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CE24 /* 20.193.206.36/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24AA0 /* 20.194.74.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24BC0 /* 20.194.75.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C343D0 /* 20.195.67.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34AE0 /* 20.195.74.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34E60 /* 20.195.78.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C392D0 /* 20.195.146.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5BE0 /* 20.203.91.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D29260 /* 20.210.146.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70480 /* 20.215.4.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92C80 /* 20.217.44.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760CD37 /* 23.96.205.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626C2A /* 23.98.108.42/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626C2E /* 23.98.108.46/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2840874C /* 40.64.135.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2843307A /* 40.67.48.122/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284332F4 /* 40.67.50.244/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284335F0 /* 40.67.53.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433C6E /* 40.67.60.110/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456F20 /* 40.69.111.32/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470FC0 /* 40.71.15.192/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B23DA /* 40.75.35.218/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECC2C /* 40.78.204.44/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEE3A /* 40.78.238.58/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFA6E /* 40.78.250.110/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F742D /* 40.79.116.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503F9E /* 40.80.63.158/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503FF4 /* 40.80.63.244/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850AD80 /* 40.80.173.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B402 /* 40.80.180.2/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852F846 /* 40.82.248.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591728 /* 40.89.23.40/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28714E2D /* 40.113.78.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287852A0 /* 40.120.82.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EEF72 /* 40.126.239.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BC020 /* 51.11.192.32/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1420 /* 51.12.20.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1440 /* 51.12.20.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1C40 /* 51.12.28.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1C60 /* 51.12.28.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2A40 /* 51.12.42.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6468 /* 51.12.100.104/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC11C /* 51.12.193.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCCE0 /* 51.12.204.224/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8838 /* 51.13.136.56/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8A20 /* 51.13.138.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351C80 /* 51.53.28.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335AC80 /* 51.53.172.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680962 /* 51.104.9.98/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681EAA /* 51.104.30.170/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3530 /* 51.107.53.48/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3C5E /* 51.107.60.94/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9412 /* 51.107.148.18/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9C86 /* 51.107.156.134/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF380 /* 51.107.243.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF760 /* 51.107.247.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF948 /* 51.107.249.72/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFB70 /* 51.107.251.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743320 /* 51.116.51.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743780 /* 51.116.55.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743CF0 /* 51.116.60.240/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337492D8 /* 51.116.146.216/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749E3A /* 51.116.158.58/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378287E /* 51.120.40.126/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378645E /* 51.120.100.94/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DC5E /* 51.120.220.94/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E424 /* 51.120.228.36/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E820 /* 51.120.232.32/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378EA90 /* 51.120.234.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378EBC0 /* 51.120.235.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A45E /* 51.137.164.94/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A7A8 /* 51.137.167.168/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AA000 /* 51.138.160.0/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD310 /* 51.138.211.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C2859 /* 51.140.40.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD256 /* 51.140.210.86/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CE06E /* 51.140.224.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD084 /* 51.143.208.132/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD5D0 /* 51.143.213.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488307A /* 52.136.48.122/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883424 /* 52.136.52.36/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488B800 /* 52.136.184.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BA20 /* 52.136.186.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6A48 /* 52.139.106.72/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6C20 /* 52.139.108.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6EA4 /* 52.140.110.164/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928334 /* 52.146.131.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349289B0 /* 52.146.137.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937160 /* 52.147.113.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969C2C /* 52.150.156.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A10D1E /* 52.161.13.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26F82 /* 52.162.111.130/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A7EFC3 /* 52.167.239.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7018 /* 52.172.112.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7490 /* 52.172.116.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B21100 /* 52.178.17.0/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68D0E /* 52.182.141.14/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71708 /* 52.231.23.8/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79256 /* 52.231.146.86/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F7DC63 /* 52.247.220.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FCF8 /* 65.52.252.248/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5520 /* 68.221.85.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254030 /* 102.37.64.48/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255190 /* 102.37.81.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A140 /* 102.37.161.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853ACC /* 102.133.58.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857C0C /* 102.133.124.12/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DCC4 /* 102.133.220.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EA200 /* 104.46.162.0/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB270 /* 104.46.178.112/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB7C0 /* 104.46.183.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D2989D /* 104.210.152.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A10E /* 104.214.161.14/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176520 /* 158.23.101.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90EC0 /* 191.233.14.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE933D4 /* 191.233.51.212/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CF18 /* 191.233.207.24/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8BA0 /* 191.234.139.160/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE19A /* 191.235.225.154/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE48E0 /* 191.238.72.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81818 /* 4.232.24.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113018 /* 20.17.48.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152018 /* 20.21.32.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247870 /* 20.36.120.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254070 /* 20.37.64.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259CC0 /* 20.37.156.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C308 /* 20.37.195.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E070 /* 20.37.224.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265460 /* 20.38.84.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268870 /* 20.38.136.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270B10 /* 20.39.11.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14290460 /* 20.41.4.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294180 /* 20.41.65.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C070 /* 20.41.192.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A04C0 /* 20.42.4.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A81B0 /* 20.42.129.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE070 /* 20.42.224.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2990 /* 20.43.41.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4188 /* 20.43.65.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8258 /* 20.43.130.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7070 /* 20.45.112.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC070 /* 20.45.192.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330E40 /* 20.51.14.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E87E0 /* 20.62.135.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420650 /* 20.66.6.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481018 /* 20.72.16.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452F418 /* 20.82.244.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145658B8 /* 20.86.88.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A070 /* 20.150.160.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6A78 /* 20.189.106.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A018 /* 20.192.160.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E110 /* 20.192.225.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34550 /* 20.195.69.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70018 /* 20.215.0.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92818 /* 20.217.40.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433070 /* 40.67.48.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1E60 /* 40.74.30.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503870 /* 40.80.56.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A870 /* 40.80.168.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BC10 /* 40.80.188.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852FD40 /* 40.82.253.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591070 /* 40.89.16.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287709E0 /* 40.119.9.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2EE8 /* 51.12.46.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC6C0 /* 51.12.198.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351818 /* 51.53.24.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335A818 /* 51.53.168.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681990 /* 51.104.25.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695070 /* 51.105.80.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695870 /* 51.105.88.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3070 /* 51.107.48.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9070 /* 51.107.144.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782870 /* 51.120.40.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E070 /* 51.120.224.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A180 /* 51.137.161.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC070 /* 51.143.192.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD638 /* 51.143.214.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883070 /* 52.136.48.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6870 /* 52.140.104.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968B40 /* 52.150.139.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45180 /* 52.228.81.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5018 /* 68.221.80.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176018 /* 158.23.96.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90818 /* 191.233.8.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE188 /* 191.235.225.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81C00 /* 4.232.28.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D402710 /* 13.64.39.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D406D6F /* 13.64.109.111/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428A5C /* 13.66.138.92/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428CB0 /* 13.66.140.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D43086C /* 13.67.8.108/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4309D0 /* 13.67.9.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45404C /* 13.69.64.76/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454290 /* 13.69.66.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E34C /* 13.69.227.76/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E550 /* 13.69.229.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D46481C /* 13.70.72.28/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4648F0 /* 13.70.72.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D473101 /* 13.71.49.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AA2C /* 13.71.170.44/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AC90 /* 13.71.172.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C274 /* 13.71.194.116/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C420 /* 13.71.196.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2294 /* 13.75.34.148/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2610 /* 13.75.38.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B438F /* 13.75.67.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4BD9B8 /* 13.75.217.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4BDD4E /* 13.75.221.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3244 /* 13.77.50.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D34E0 /* 13.77.52.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6A5C /* 13.78.106.92/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6CB0 /* 13.78.108.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D524798 /* 13.82.71.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54BD11 /* 13.84.189.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D55163F /* 13.85.22.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D566642 /* 13.86.102.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573854 /* 13.87.56.84/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573990 /* 13.87.57.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577A54 /* 13.87.122.84/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577B90 /* 13.87.123.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5921B9 /* 13.89.33.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AACC /* 13.89.170.204/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AE40 /* 13.89.174.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141133E0 /* 20.17.51.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152460 /* 20.21.36.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246A44 /* 20.36.106.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246BB0 /* 20.36.107.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247214 /* 20.36.114.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247380 /* 20.36.115.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14253443 /* 20.37.52.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254AE0 /* 20.37.74.224/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254C20 /* 20.37.76.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14255129 /* 20.37.81.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14275002 /* 20.39.80.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14276351 /* 20.39.99.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14287D9B /* 20.40.125.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A06B /* 20.40.160.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E73E /* 20.40.231.62/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0204 /* 20.44.2.4/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C03E0 /* 20.44.3.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C21F6 /* 20.44.33.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C4803 /* 20.44.72.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0DE0 /* 20.46.13.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E9055 /* 20.46.144.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FE8B8 /* 20.47.232.184/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C94C /* 20.48.201.76/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143306E0 /* 20.51.6.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345E70 /* 20.52.94.112/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B5110 /* 20.59.81.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E3FFE /* 20.62.63.254/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DCB6 /* 20.70.220.182/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481A10 /* 20.72.26.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453DD14 /* 20.83.221.20/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453DD40 /* 20.83.221.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453DD56 /* 20.83.221.86/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14565CFE /* 20.86.92.254/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589A14 /* 20.88.154.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8372 /* 20.90.131.114/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C03FA /* 20.92.3.250/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146120BE /* 20.97.32.190/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14630850 /* 20.99.8.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A7A0 /* 20.150.167.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AAE0 /* 20.150.170.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC4D77 /* 20.188.77.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA7F6 /* 20.191.167.246/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02D70 /* 20.192.45.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03240 /* 20.192.50.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EAA0 /* 20.192.234.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C030 /* 20.193.192.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CAA0 /* 20.193.202.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24AF0 /* 20.194.74.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34E40 /* 20.195.78.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5BD0 /* 20.203.91.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D29040 /* 20.210.144.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D4E297 /* 20.212.226.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D703E0 /* 20.215.3.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92BE0 /* 20.217.43.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760E0AF /* 23.96.224.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765438C /* 23.101.67.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765A626 /* 23.101.166.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423C6F /* 40.66.60.111/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433AE0 /* 40.67.58.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456A44 /* 40.69.106.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456BE0 /* 40.69.107.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2845CA50 /* 40.69.202.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2846924C /* 40.70.146.76/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469410 /* 40.70.148.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470ACC /* 40.71.10.204/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470D80 /* 40.71.13.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6434 /* 40.74.100.52/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6530 /* 40.74.101.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9250 /* 40.74.146.80/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9320 /* 40.74.147.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC244 /* 40.78.194.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC3E0 /* 40.78.195.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECA80 /* 40.78.202.128/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECBA0 /* 40.78.203.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F822C /* 40.79.130.44/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F83C0 /* 40.79.131.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB244 /* 40.79.178.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB3C0 /* 40.79.179.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850E8B9 /* 40.80.232.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28512FD8 /* 40.81.47.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28515918 /* 40.81.89.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851B908 /* 40.81.185.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28529DA7 /* 40.82.157.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285AB92E /* 40.90.185.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28705EC4 /* 40.112.94.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F294 /* 40.112.242.148/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F3F0 /* 40.112.243.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287586BD /* 40.117.134.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876A223 /* 40.118.162.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28785730 /* 40.120.87.48/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28790D1A /* 40.121.13.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1100 /* 51.12.17.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1910 /* 51.12.25.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C62E0 /* 51.12.98.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCAE0 /* 51.12.202.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351BE0 /* 51.53.27.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335ABE0 /* 51.53.171.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B005B /* 51.107.0.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3B00 /* 51.107.59.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B6008 /* 51.107.96.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9B00 /* 51.107.155.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF6B0 /* 51.107.246.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33740000 /* 51.116.0.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743B00 /* 51.116.59.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33746000 /* 51.116.96.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749B40 /* 51.116.155.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337802B9 /* 51.120.2.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337862B0 /* 51.120.98.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33788286 /* 51.120.130.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DAE0 /* 51.120.218.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378EAF0 /* 51.120.234.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33898800 /* 51.137.136.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD77C /* 51.138.215.124/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C923C /* 51.140.146.60/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9500 /* 51.140.149.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD254 /* 51.140.210.84/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD3B0 /* 51.140.211.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F7FCB /* 51.143.127.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3391387D /* 51.145.56.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3391B34E /* 51.145.179.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B1422 /* 52.139.20.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B5075 /* 52.139.80.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B981B /* 52.139.152.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348CEEB3 /* 52.140.238.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E5F23 /* 52.142.95.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928BC2 /* 52.146.139.194/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26A94 /* 52.162.106.148/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26E50 /* 52.162.110.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B773F4 /* 52.183.115.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0BA63 /* 52.224.186.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7122C /* 52.231.18.44/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E713C0 /* 52.231.19.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79254 /* 52.231.146.84/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E793B0 /* 52.231.147.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22F50 /* 52.242.47.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD873A /* 52.253.135.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD9FA0 /* 52.253.159.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDE5FD /* 52.253.229.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134733A /* 65.52.115.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134A45B /* 65.52.164.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134ADF7 /* 65.52.173.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FA04 /* 65.52.250.4/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FC20 /* 65.52.252.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5480 /* 68.221.84.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A6DC /* 102.37.166.220/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685004F /* 102.133.0.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851A04 /* 102.133.26.4/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851C00 /* 102.133.28.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668582C5 /* 102.133.130.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859A04 /* 102.133.154.4/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859C00 /* 102.133.156.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829D9F3 /* 104.41.217.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829DAA0 /* 104.41.218.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3511C /* 104.211.81.28/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D351F0 /* 104.211.81.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39244 /* 104.211.146.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39390 /* 104.211.147.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D612AC /* 104.214.18.172/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D613E0 /* 104.214.19.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8975A038 /* 137.117.160.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176480 /* 158.23.100.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE812B5 /* 191.232.18.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE918B3 /* 191.233.24.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE932C0 /* 191.233.50.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CB1C /* 191.233.203.28/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CBF0 /* 191.233.203.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE490E /* 191.238.73.14/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEEF161 /* 191.238.241.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86200 /* 4.232.98.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86C00 /* 4.232.108.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87B80 /* 4.232.123.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C380 /* 4.232.195.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428E48 /* 13.66.142.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428FC0 /* 13.66.143.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428FD0 /* 13.66.143.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430A70 /* 13.67.10.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430DC0 /* 13.67.13.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430DD0 /* 13.67.13.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454370 /* 13.69.67.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4543F0 /* 13.69.67.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454780 /* 13.69.71.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456B48 /* 13.69.107.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D457090 /* 13.69.112.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4570A0 /* 13.69.112.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E608 /* 13.69.230.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E628 /* 13.69.230.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E790 /* 13.69.231.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464A80 /* 13.70.74.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464E90 /* 13.70.78.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464EA0 /* 13.70.78.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AF40 /* 13.71.175.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AF60 /* 13.71.175.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C4B0 /* 13.71.196.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C750 /* 13.71.199.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F238 /* 13.73.242.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F460 /* 13.73.244.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F470 /* 13.73.244.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FF80 /* 13.73.255.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6CA0 /* 13.74.108.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6CF0 /* 13.74.108.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3558 /* 13.77.53.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D35C0 /* 13.77.53.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D35D0 /* 13.77.53.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6D90 /* 13.78.109.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6DD0 /* 13.78.109.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6F80 /* 13.78.111.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DBC0 /* 13.86.219.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DDC0 /* 13.86.221.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DDD0 /* 13.86.221.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573A40 /* 13.87.58.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573A50 /* 13.87.58.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573A80 /* 13.87.58.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577C40 /* 13.87.124.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577C50 /* 13.87.124.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577C80 /* 13.87.124.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AFD0 /* 13.89.175.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59B210 /* 13.89.178.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59B220 /* 13.89.178.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113AC0 /* 20.17.58.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114440 /* 20.17.68.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B380 /* 20.18.179.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152780 /* 20.21.39.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152C40 /* 20.21.44.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154380 /* 20.21.67.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154B80 /* 20.21.75.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14155300 /* 20.21.83.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246C78 /* 20.36.108.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246C88 /* 20.36.108.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246C90 /* 20.36.108.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142473F8 /* 20.36.115.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247528 /* 20.36.117.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247530 /* 20.36.117.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247B10 /* 20.36.123.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247C40 /* 20.36.124.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254360 /* 20.37.67.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254540 /* 20.37.69.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254C70 /* 20.37.76.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254C90 /* 20.37.76.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254CC0 /* 20.37.76.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C690 /* 20.37.198.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E320 /* 20.37.227.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E480 /* 20.37.228.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268060 /* 20.38.128.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268070 /* 20.38.128.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142680A0 /* 20.38.128.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268B60 /* 20.38.139.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268D40 /* 20.38.141.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142693B0 /* 20.38.147.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142693F0 /* 20.38.147.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269BC0 /* 20.38.155.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270E10 /* 20.39.14.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428CE90 /* 20.40.206.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428CEA0 /* 20.40.206.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E080 /* 20.40.224.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294440 /* 20.41.68.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142945C0 /* 20.41.69.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C530 /* 20.41.197.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4010 /* 20.42.64.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE690 /* 20.42.230.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2C90 /* 20.43.44.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2E80 /* 20.43.46.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4680 /* 20.43.70.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7928 /* 20.43.121.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7960 /* 20.43.121.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7970 /* 20.43.121.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0460 /* 20.44.4.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0478 /* 20.44.4.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C04A0 /* 20.44.4.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C08A8 /* 20.44.8.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0A60 /* 20.44.10.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0A70 /* 20.44.10.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1138 /* 20.44.17.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C11C0 /* 20.44.17.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C11D0 /* 20.44.17.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1BE0 /* 20.44.27.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1D20 /* 20.44.29.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7400 /* 20.45.116.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7B78 /* 20.45.123.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7BB0 /* 20.45.123.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7BE0 /* 20.45.123.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7E00 /* 20.45.126.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC600 /* 20.45.198.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC740 /* 20.45.199.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C0C0 /* 20.48.192.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315360 /* 20.49.83.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315B60 /* 20.49.91.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316350 /* 20.49.99.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316700 /* 20.49.103.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316D60 /* 20.49.109.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317340 /* 20.49.115.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317850 /* 20.49.120.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317F40 /* 20.49.127.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143201F0 /* 20.50.1.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324160 /* 20.50.65.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330800 /* 20.51.8.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331000 /* 20.51.16.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143529C0 /* 20.53.41.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6200 /* 20.61.98.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8040 /* 20.62.128.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144814C0 /* 20.72.20.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481C80 /* 20.72.28.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DAB80 /* 20.125.171.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCB80 /* 20.125.203.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A5B0 /* 20.150.165.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A700 /* 20.150.167.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AC40 /* 20.150.172.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AD20 /* 20.150.173.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B3C8 /* 20.150.179.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B500 /* 20.150.181.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B510 /* 20.150.181.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B580 /* 20.150.181.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BBC8 /* 20.150.187.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BD00 /* 20.150.189.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BD10 /* 20.150.189.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BE20 /* 20.150.190.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A380 /* 20.168.163.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC2E0 /* 20.187.194.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC480 /* 20.187.196.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE040 /* 20.189.224.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA0C0 /* 20.191.160.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C063C8 /* 20.192.99.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06500 /* 20.192.101.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06510 /* 20.192.101.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A700 /* 20.192.167.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E740 /* 20.192.231.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EBF0 /* 20.192.235.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EE70 /* 20.192.238.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EEC0 /* 20.192.238.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CBE0 /* 20.193.203.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24340 /* 20.194.67.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4B60 /* 20.205.75.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5360 /* 20.205.83.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D01380 /* 20.208.19.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70740 /* 20.215.7.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70F80 /* 20.215.15.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71380 /* 20.215.19.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71B80 /* 20.215.27.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79C40 /* 20.215.156.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92F40 /* 20.217.47.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93C40 /* 20.217.60.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94B80 /* 20.217.75.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95B80 /* 20.217.91.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625348 /* 23.98.83.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625620 /* 23.98.86.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625630 /* 23.98.86.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625660 /* 23.98.86.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176268B0 /* 23.98.104.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626C40 /* 23.98.108.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408490 /* 40.64.132.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433400 /* 40.67.52.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433C48 /* 40.67.60.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433C70 /* 40.67.60.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433CA0 /* 40.67.60.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456C50 /* 40.69.108.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456CB0 /* 40.69.108.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456EA0 /* 40.69.110.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28457580 /* 40.69.117.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469438 /* 40.70.148.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469730 /* 40.70.151.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469740 /* 40.70.151.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470DF8 /* 40.71.13.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470E78 /* 40.71.14.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470F80 /* 40.71.15.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6300 /* 40.74.99.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9528 /* 40.74.149.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9538 /* 40.74.149.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9550 /* 40.74.149.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2348 /* 40.75.35.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B23C0 /* 40.75.35.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B23D0 /* 40.75.35.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC450 /* 40.78.196.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC490 /* 40.78.196.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC4A0 /* 40.78.196.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECC08 /* 40.78.204.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECC90 /* 40.78.204.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECCC0 /* 40.78.204.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE550 /* 40.78.229.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE570 /* 40.78.229.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEC88 /* 40.78.236.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEE20 /* 40.78.238.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEE30 /* 40.78.238.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF3B0 /* 40.78.243.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF580 /* 40.78.245.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFB90 /* 40.78.251.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFBD0 /* 40.78.251.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8458 /* 40.79.132.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8B40 /* 40.79.139.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8B80 /* 40.79.139.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F92D0 /* 40.79.146.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9440 /* 40.79.148.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9640 /* 40.79.150.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9C60 /* 40.79.156.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA340 /* 40.79.163.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA380 /* 40.79.163.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA390 /* 40.79.163.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA560 /* 40.79.165.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAB70 /* 40.79.171.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FABB0 /* 40.79.171.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB430 /* 40.79.180.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB480 /* 40.79.180.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB490 /* 40.79.180.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBBC0 /* 40.79.187.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBD20 /* 40.79.189.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBD30 /* 40.79.189.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBEE0 /* 40.79.190.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC3B0 /* 40.79.195.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC3F0 /* 40.79.195.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503370 /* 40.80.51.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285033B0 /* 40.80.51.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503600 /* 40.80.54.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503E20 /* 40.80.62.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850AC30 /* 40.80.172.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850AD40 /* 40.80.173.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B028 /* 40.80.176.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B038 /* 40.80.176.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B070 /* 40.80.176.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BFF0 /* 40.80.191.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285914A0 /* 40.89.20.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591780 /* 40.89.23.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770BC0 /* 40.119.11.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784B80 /* 40.120.75.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BC000 /* 51.11.192.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BC010 /* 51.11.192.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2B40 /* 51.12.43.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C63D8 /* 51.12.99.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6430 /* 51.12.100.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6460 /* 51.12.100.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6680 /* 51.12.102.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC340 /* 51.12.195.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCC30 /* 51.12.204.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCC60 /* 51.12.204.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCE20 /* 51.12.206.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE3C8 /* 51.12.227.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE500 /* 51.12.229.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE510 /* 51.12.229.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE5C0 /* 51.12.229.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEBC8 /* 51.12.235.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CED00 /* 51.12.237.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CED10 /* 51.12.237.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CED60 /* 51.12.237.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351F40 /* 51.53.31.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356C40 /* 51.53.108.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B240 /* 51.53.178.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BC40 /* 51.53.188.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CB80 /* 51.103.203.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680930 /* 51.104.9.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681DE0 /* 51.104.29.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336943B8 /* 51.105.67.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336943D8 /* 51.105.67.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694540 /* 51.105.69.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694BE0 /* 51.105.75.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694D20 /* 51.105.77.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695340 /* 51.105.83.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695AB0 /* 51.105.90.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695D00 /* 51.105.93.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3330 /* 51.107.51.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3580 /* 51.107.53.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3C38 /* 51.107.60.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3C80 /* 51.107.60.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3C90 /* 51.107.60.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9330 /* 51.107.147.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B94C0 /* 51.107.148.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9C40 /* 51.107.156.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9C88 /* 51.107.156.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9C90 /* 51.107.156.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337431C0 /* 51.116.49.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743340 /* 51.116.51.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743C38 /* 51.116.60.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743C58 /* 51.116.60.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743C80 /* 51.116.60.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337491B0 /* 51.116.145.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749400 /* 51.116.148.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749C38 /* 51.116.156.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749CA8 /* 51.116.156.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749E20 /* 51.116.158.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749E30 /* 51.116.158.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F398 /* 51.116.243.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F3C0 /* 51.116.243.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F3D0 /* 51.116.243.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F580 /* 51.116.245.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FB28 /* 51.116.251.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FBA0 /* 51.116.251.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FBB0 /* 51.116.251.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FD40 /* 51.116.253.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782B60 /* 51.120.43.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782D00 /* 51.120.45.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786438 /* 51.120.100.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786480 /* 51.120.100.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786490 /* 51.120.100.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786BC8 /* 51.120.107.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786D00 /* 51.120.109.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786D10 /* 51.120.109.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786EA0 /* 51.120.110.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D3C8 /* 51.120.211.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D500 /* 51.120.213.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D510 /* 51.120.213.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D660 /* 51.120.214.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DC38 /* 51.120.220.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DC60 /* 51.120.220.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DC70 /* 51.120.220.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E360 /* 51.120.227.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E500 /* 51.120.229.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A480 /* 51.137.164.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A700 /* 51.137.167.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9428 /* 51.140.148.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9510 /* 51.140.149.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD460 /* 51.140.212.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD4C0 /* 51.140.212.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD4D0 /* 51.140.212.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC340 /* 51.143.195.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD040 /* 51.143.208.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883360 /* 52.136.51.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883480 /* 52.136.52.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5C58 /* 52.138.92.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5C90 /* 52.138.92.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5CA0 /* 52.138.92.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE3B0 /* 52.138.227.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE530 /* 52.138.229.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6C70 /* 52.140.108.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6C80 /* 52.140.108.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6F00 /* 52.140.111.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349283C0 /* 52.146.131.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969840 /* 52.150.152.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969C80 /* 52.150.156.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26F20 /* 52.162.111.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26F70 /* 52.162.111.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76B70 /* 52.167.107.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76BF0 /* 52.167.107.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87540 /* 52.168.117.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7040 /* 52.172.112.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68D00 /* 52.182.141.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68D20 /* 52.182.141.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68D30 /* 52.182.141.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E455D0 /* 52.228.85.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71408 /* 52.231.20.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71450 /* 52.231.20.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71700 /* 52.231.23.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79470 /* 52.231.148.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E794B0 /* 52.231.148.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E794C0 /* 52.231.148.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBAF8 /* 52.236.186.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBB60 /* 52.236.187.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBD40 /* 52.236.189.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69BB0 /* 52.246.155.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69BF0 /* 52.246.155.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69D20 /* 52.246.157.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FC70 /* 65.52.252.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FCE0 /* 65.52.252.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FCF0 /* 65.52.252.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5340 /* 68.220.83.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5780 /* 68.221.87.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6400 /* 68.221.100.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD9380 /* 68.221.147.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851C60 /* 102.133.28.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851C98 /* 102.133.28.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851CC0 /* 102.133.28.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853AF0 /* 102.133.58.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853C80 /* 102.133.60.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857C50 /* 102.133.124.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857C70 /* 102.133.124.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857C80 /* 102.133.124.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859C78 /* 102.133.156.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859C98 /* 102.133.156.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859CA0 /* 102.133.156.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DAA0 /* 102.133.218.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DC80 /* 102.133.220.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FB58 /* 102.133.251.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FBC0 /* 102.133.251.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FBD0 /* 102.133.251.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB1C0 /* 104.46.177.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A100 /* 104.214.161.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A110 /* 104.214.161.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A120 /* 104.214.161.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A640 /* 104.214.166.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170C00 /* 158.23.12.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176780 /* 158.23.103.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177B80 /* 158.23.123.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C380 /* 158.23.195.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8E60 /* 168.61.142.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90B90 /* 191.233.11.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90E80 /* 191.233.14.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE933E0 /* 191.233.51.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CD70 /* 191.233.205.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CDB0 /* 191.233.205.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8860 /* 191.234.136.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8B40 /* 191.234.139.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA93C8 /* 191.234.147.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9510 /* 191.234.149.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9580 /* 191.234.149.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA95C0 /* 191.234.149.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9BC8 /* 191.234.155.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9D10 /* 191.234.157.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9D20 /* 191.234.157.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9D60 /* 191.234.157.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86300 /* 4.232.99.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D40496E /* 13.64.73.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D411EF5 /* 13.65.30.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41257A /* 13.65.37.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4127A5 /* 13.65.39.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D412A23 /* 13.65.42.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D412AB7 /* 13.65.42.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D412D1E /* 13.65.45.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D415592 /* 13.65.85.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41595B /* 13.65.89.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D415C48 /* 13.65.92.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D415ECC /* 13.65.94.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D415F6D /* 13.65.95.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4161F3 /* 13.65.97.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41C11D /* 13.65.193.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41D2A6 /* 13.65.210.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41D4FC /* 13.65.212.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41F182 /* 13.65.241.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41F36E /* 13.65.243.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D421065 /* 13.66.16.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D422663 /* 13.66.38.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D422758 /* 13.66.39.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428A60 /* 13.66.138.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42D187 /* 13.66.209.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42D4CD /* 13.66.212.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E250 /* 13.66.226.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E7D9 /* 13.66.231.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42F186 /* 13.66.241.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42F4F9 /* 13.66.244.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430900 /* 13.67.9.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4338E1 /* 13.67.56.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D433F5A /* 13.67.63.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D43811A /* 13.67.129.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D438D62 /* 13.67.141.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D441D88 /* 13.68.29.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D44653E /* 13.68.101.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454400 /* 13.69.68.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45BA98 /* 13.69.186.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E400 /* 13.69.228.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45FD91 /* 13.69.253.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464820 /* 13.70.72.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D467B95 /* 13.70.123.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D46926E /* 13.70.146.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4693CE /* 13.70.147.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D477A23 /* 13.71.122.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D477B8A /* 13.71.123.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D479597 /* 13.71.149.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AA80 /* 13.71.170.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C2C0 /* 13.71.194.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D490186 /* 13.73.1.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D491A49 /* 13.73.26.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49742D /* 13.73.116.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D497668 /* 13.73.118.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A29E9 /* 13.74.41.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A93DA /* 13.74.147.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A9E05 /* 13.74.158.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4AFC2C /* 13.74.252.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B22A0 /* 13.75.34.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2E1A /* 13.75.46.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2F0F /* 13.75.47.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B59E0 /* 13.75.89.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B706C /* 13.75.112.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B7328 /* 13.75.115.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B8AE0 /* 13.75.138.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B938F /* 13.75.147.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B93C9 /* 13.75.147.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4BDA2D /* 13.75.218.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4C2C8B /* 13.76.44.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4CF560 /* 13.76.245.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D07AF /* 13.77.7.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3260 /* 13.77.50.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D528D /* 13.77.82.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D53F6 /* 13.77.83.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D6077 /* 13.77.96.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D9D85 /* 13.77.157.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4DA0ED /* 13.77.160.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4DB60D /* 13.77.182.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E3BED /* 13.78.59.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6A60 /* 13.78.106.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E7556 /* 13.78.117.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E7B57 /* 13.78.123.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E9660 /* 13.78.150.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EB859 /* 13.78.184.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4F0247 /* 13.79.2.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4F26E5 /* 13.79.38.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4FAC28 /* 13.79.172.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D50134A /* 13.80.19.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D510715 /* 13.81.7.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D516C63 /* 13.81.108.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D51D7EB /* 13.81.215.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D525DF5 /* 13.82.93.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5265B3 /* 13.82.101.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D52AF60 /* 13.82.175.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D542402 /* 13.84.36.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5428E3 /* 13.84.40.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D542A23 /* 13.84.42.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D542E1D /* 13.84.46.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D543789 /* 13.84.55.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54923C /* 13.84.146.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54B420 /* 13.84.180.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54B52F /* 13.84.181.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54BCA2 /* 13.84.188.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54BD89 /* 13.84.189.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54E3A4 /* 13.84.227.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D550FC2 /* 13.85.15.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5510E0 /* 13.85.16.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D551490 /* 13.85.20.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5518DC /* 13.85.24.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D551B0E /* 13.85.27.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D551FF3 /* 13.85.31.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D554881 /* 13.85.72.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D554DB3 /* 13.85.77.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D555200 /* 13.85.82.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D593907 /* 13.89.57.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AC00 /* 13.89.172.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59EEEF /* 13.89.238.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5A8F45 /* 13.90.143.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5AD5CC /* 13.90.213.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B28A6 /* 13.91.40.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5BF2A6 /* 13.91.242.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5C8BD6 /* 13.92.139.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5CC16E /* 13.92.193.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5CEDDA /* 13.92.237.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5D8D0A /* 13.93.141.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5D9E10 /* 13.93.158.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DDC6D /* 13.93.220.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DE74B /* 13.93.231.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5E2F57 /* 13.94.47.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5E8F39 /* 13.94.143.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5EC062 /* 13.94.192.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5ED326 /* 13.94.211.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F52B5 /* 13.95.82.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F5D98 /* 13.95.93.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F9680 /* 13.95.150.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5FEEC0 /* 13.95.238.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113E00 /* 20.17.62.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14153400 /* 20.21.52.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14153600 /* 20.21.54.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14153680 /* 20.21.54.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14242BCF /* 20.36.43.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142448E6 /* 20.36.72.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246A60 /* 20.36.106.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247500 /* 20.36.117.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247A00 /* 20.36.122.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254200 /* 20.37.66.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254A60 /* 20.37.74.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C4C0 /* 20.37.196.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E200 /* 20.37.226.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268A00 /* 20.38.138.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142692A0 /* 20.38.146.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270B68 /* 20.39.11.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14281810 /* 20.40.24.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14281815 /* 20.40.24.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14281817 /* 20.40.24.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428181E /* 20.40.24.30/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14281822 /* 20.40.24.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14281825 /* 20.40.24.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14281826 /* 20.40.24.38/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428182E /* 20.40.24.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14281831 /* 20.40.24.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14281832 /* 20.40.24.50/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14281836 /* 20.40.24.54/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428183E /* 20.40.24.62/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14281851 /* 20.40.24.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14281859 /* 20.40.24.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428186C /* 20.40.24.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14281890 /* 20.40.24.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428CA00 /* 20.40.202.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142942E0 /* 20.41.66.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C3C0 /* 20.41.195.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A1AFC /* 20.42.26.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8060 /* 20.42.128.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE4A0 /* 20.42.228.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2B20 /* 20.43.43.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4320 /* 20.43.67.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8480 /* 20.43.132.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0220 /* 20.44.2.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1AA0 /* 20.44.26.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5EC0 /* 20.45.94.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5F00 /* 20.45.95.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7AA0 /* 20.45.122.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC410 /* 20.45.196.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF2B0 /* 20.45.242.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF300 /* 20.45.243.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF400 /* 20.45.244.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FE978 /* 20.47.233.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FEA00 /* 20.47.234.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FEB00 /* 20.47.235.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430CAA0 /* 20.48.202.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430CB00 /* 20.48.203.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430CC00 /* 20.48.204.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315220 /* 20.49.82.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315A20 /* 20.49.90.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316100 /* 20.49.97.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316800 /* 20.49.104.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14320200 /* 20.50.2.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324000 /* 20.50.64.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143534C0 /* 20.53.52.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353500 /* 20.53.53.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353C60 /* 20.53.60.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353D00 /* 20.53.61.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B5800 /* 20.59.88.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B6000 /* 20.59.96.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B6400 /* 20.59.100.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B6600 /* 20.59.102.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B6700 /* 20.59.103.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144505A8 /* 20.69.5.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450600 /* 20.69.6.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450700 /* 20.69.7.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481A20 /* 20.72.26.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC000 /* 20.74.192.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC200 /* 20.74.194.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC300 /* 20.74.195.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144F6800 /* 20.79.104.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144F6A00 /* 20.79.106.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144F6B00 /* 20.79.107.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575040 /* 20.87.80.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575080 /* 20.87.80.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575100 /* 20.87.81.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590CE0 /* 20.89.12.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590D00 /* 20.89.13.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590E00 /* 20.89.14.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A2100 /* 20.90.33.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A2200 /* 20.90.34.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A2400 /* 20.90.36.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A84A0 /* 20.90.132.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8500 /* 20.90.133.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8600 /* 20.90.134.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B0840 /* 20.91.8.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B0880 /* 20.91.8.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C3000 /* 20.92.48.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C3400 /* 20.92.52.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C3600 /* 20.92.54.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C3700 /* 20.92.55.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C3780 /* 20.92.55.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14612310 /* 20.97.35.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14612400 /* 20.97.36.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14612600 /* 20.97.38.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14630E00 /* 20.99.14.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14631880 /* 20.99.24.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640220 /* 20.100.2.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640280 /* 20.100.2.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640300 /* 20.100.3.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D800 /* 20.105.216.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469E000 /* 20.105.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469F300 /* 20.105.243.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146BE000 /* 20.107.224.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146BEF00 /* 20.107.239.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F00F8 /* 20.111.0.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F0100 /* 20.111.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F0200 /* 20.111.2.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1473E800 /* 20.115.232.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1473F700 /* 20.115.247.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14742800 /* 20.116.40.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14742A00 /* 20.116.42.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14762800 /* 20.118.40.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14763000 /* 20.118.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14768800 /* 20.118.136.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14768A00 /* 20.118.138.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14768A80 /* 20.118.138.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14770000 /* 20.119.0.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14771000 /* 20.119.16.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14771B00 /* 20.119.27.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14778000 /* 20.119.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14779000 /* 20.119.144.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14779B00 /* 20.119.155.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14968000 /* 20.150.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14968300 /* 20.150.131.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14968400 /* 20.150.132.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AAC0 /* 20.150.170.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B2A0 /* 20.150.178.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BAA0 /* 20.150.186.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F700 /* 20.150.247.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F807 /* 20.150.248.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F808 /* 20.150.248.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F80C /* 20.150.248.12/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F80F /* 20.150.248.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F810 /* 20.150.248.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F820 /* 20.150.248.32/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F824 /* 20.150.248.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F826 /* 20.150.248.38/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F82B /* 20.150.248.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F82C /* 20.150.248.44/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F830 /* 20.150.248.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F838 /* 20.150.248.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F83B /* 20.150.248.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F83C /* 20.150.248.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F83F /* 20.150.248.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F840 /* 20.150.248.64/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F844 /* 20.150.248.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F847 /* 20.150.248.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F848 /* 20.150.248.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F850 /* 20.150.248.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F852 /* 20.150.248.82/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F856 /* 20.150.248.86/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F859 /* 20.150.248.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F85A /* 20.150.248.90/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F864 /* 20.150.248.100/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F868 /* 20.150.248.104/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F86E /* 20.150.248.110/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F870 /* 20.150.248.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F876 /* 20.150.248.118/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F87A /* 20.150.248.122/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F87C /* 20.150.248.124/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F880 /* 20.150.248.128/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F886 /* 20.150.248.134/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F888 /* 20.150.248.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F890 /* 20.150.248.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F8A0 /* 20.150.248.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F8C0 /* 20.150.248.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F8C8 /* 20.150.248.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F8CA /* 20.150.248.202/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC624A /* 20.188.98.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6860 /* 20.189.104.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6D60 /* 20.189.109.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD7042 /* 20.189.112.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC270 /* 20.189.194.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC300 /* 20.189.195.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC400 /* 20.189.196.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03600 /* 20.192.54.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C054B0 /* 20.192.84.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C05500 /* 20.192.85.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C05600 /* 20.192.86.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C062A0 /* 20.192.98.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09990 /* 20.192.153.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09A00 /* 20.192.154.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09C00 /* 20.192.156.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0AA08 /* 20.192.170.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0AA80 /* 20.192.170.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0AB00 /* 20.192.171.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EA80 /* 20.192.234.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C600 /* 20.193.198.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CA80 /* 20.193.202.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24220 /* 20.194.66.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7C800 /* 20.199.200.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C468 /* 20.200.196.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C480 /* 20.200.196.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C500 /* 20.200.197.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD3000 /* 20.205.48.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4200 /* 20.205.66.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4550 /* 20.205.69.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4600 /* 20.205.70.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE00C8 /* 20.206.0.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0100 /* 20.206.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0200 /* 20.206.2.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CEB000 /* 20.206.176.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF0060 /* 20.207.0.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF0080 /* 20.207.0.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00100 /* 20.208.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00520 /* 20.208.5.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00580 /* 20.208.5.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00600 /* 20.208.6.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D24000 /* 20.210.64.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D24400 /* 20.210.68.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D34000 /* 20.211.64.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D34700 /* 20.211.71.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D34780 /* 20.211.71.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D44000 /* 20.212.64.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D44F00 /* 20.212.79.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70C00 /* 20.215.12.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93400 /* 20.217.52.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17600034 /* 23.96.0.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760016D /* 23.96.1.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17600DF3 /* 23.96.13.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17602080 /* 23.96.32.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760608E /* 23.96.96.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760679F /* 23.96.103.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17607035 /* 23.96.112.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17607180 /* 23.96.113.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17607C19 /* 23.96.124.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760BB05 /* 23.96.187.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760C915 /* 23.96.201.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760CFB1 /* 23.96.207.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760D19B /* 23.96.209.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760DC74 /* 23.96.220.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176138A9 /* 23.97.56.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17614F77 /* 23.97.79.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17616020 /* 23.97.96.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761A038 /* 23.97.160.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761A04A /* 23.97.160.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761A2CA /* 23.97.162.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761C381 /* 23.97.195.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761D012 /* 23.97.208.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761D6B1 /* 23.97.214.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761D82F /* 23.97.216.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761E00B /* 23.97.224.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17624024 /* 23.98.64.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1762409E /* 23.98.64.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763000C /* 23.99.0.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17634141 /* 23.99.65.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17635B37 /* 23.99.91.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17636EC0 /* 23.99.110.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17637446 /* 23.99.116.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17638034 /* 23.99.128.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763B795 /* 23.99.183.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763C084 /* 23.99.192.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763C4B4 /* 23.99.196.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763CE97 /* 23.99.206.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763E038 /* 23.99.224.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764011D /* 23.100.1.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17642EC6 /* 23.100.46.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764306A /* 23.100.48.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17643233 /* 23.100.50.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17643416 /* 23.100.52.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764381B /* 23.100.56.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176448F0 /* 23.100.72.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764520B /* 23.100.82.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764D860 /* 23.100.216.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764D880 /* 23.100.216.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17650A8D /* 23.101.10.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17651BB6 /* 23.101.27.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176536E6 /* 23.101.54.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17653FD6 /* 23.101.63.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176543F5 /* 23.101.67.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17657691 /* 23.101.118.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765772C /* 23.101.119.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176577A3 /* 23.101.119.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176578C3 /* 23.101.120.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17657D41 /* 23.101.125.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17659375 /* 23.101.147.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765A9AF /* 23.101.169.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765AB5E /* 23.101.171.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765ACF4 /* 23.101.172.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765B44B /* 23.101.180.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765CB75 /* 23.101.203.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765CBD6 /* 23.101.203.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765CFFA /* 23.101.207.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765D034 /* 23.101.208.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765E018 /* 23.101.224.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765E6A2 /* 23.101.230.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17660C2B /* 23.102.12.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176615C6 /* 23.102.21.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176615D4 /* 23.102.21.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17661995 /* 23.102.25.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17661CB2 /* 23.102.28.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17669A26 /* 23.102.154.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766A1D9 /* 23.102.161.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766BFAA /* 23.102.191.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284008E0 /* 40.64.8.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400900 /* 40.64.9.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400A00 /* 40.64.10.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400A80 /* 40.64.10.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284080E0 /* 40.64.128.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433AC0 /* 40.67.58.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28442837 /* 40.68.40.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844CDB2 /* 40.68.205.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844D083 /* 40.68.208.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844D268 /* 40.68.210.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844D6B9 /* 40.68.214.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28452BE1 /* 40.69.43.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28455895 /* 40.69.88.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456A60 /* 40.69.106.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2845BE29 /* 40.69.190.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2845C87C /* 40.69.200.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2845D2AC /* 40.69.210.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2845DA96 /* 40.69.218.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28461B23 /* 40.70.27.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469300 /* 40.70.147.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284700B3 /* 40.71.0.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470B80 /* 40.71.11.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847B122 /* 40.71.177.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847C775 /* 40.71.199.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847EAFE /* 40.71.234.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847FABF /* 40.71.250.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6480 /* 40.74.100.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A8514 /* 40.74.133.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284AF5BC /* 40.74.245.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284AFD6C /* 40.74.253.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284AFF70 /* 40.74.255.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C0589 /* 40.76.5.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CC00F /* 40.76.192.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CD236 /* 40.76.210.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CDA21 /* 40.76.218.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CDF65 /* 40.76.223.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D38AE /* 40.77.56.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E12E8 /* 40.78.18.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E199D /* 40.78.25.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E30DB /* 40.78.48.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC260 /* 40.78.194.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECCA0 /* 40.78.204.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F41C8 /* 40.79.65.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8280 /* 40.79.130.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9AC0 /* 40.79.154.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA3A0 /* 40.79.163.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAB40 /* 40.79.171.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB260 /* 40.79.178.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC300 /* 40.79.195.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285032A0 /* 40.80.50.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503AE0 /* 40.80.58.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28509B66 /* 40.80.155.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28509CCD /* 40.80.156.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850AAE0 /* 40.80.170.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BF00 /* 40.80.191.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BF54 /* 40.82.191.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852D95D /* 40.82.217.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852FF80 /* 40.82.255.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285310AC /* 40.83.16.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2853483B /* 40.83.72.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28537C49 /* 40.83.124.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28539132 /* 40.83.145.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285396E9 /* 40.83.150.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2853B6CE /* 40.83.182.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2853B7EC /* 40.83.183.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2853B819 /* 40.83.184.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285436CB /* 40.84.54.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28543BAE /* 40.84.59.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285494F7 /* 40.84.148.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28549F3A /* 40.84.159.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854C26A /* 40.84.194.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854E2B0 /* 40.84.226.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854E3B4 /* 40.84.227.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854E81C /* 40.84.232.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28554AE3 /* 40.85.74.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28555C73 /* 40.85.92.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285560D0 /* 40.85.96.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855BE0A /* 40.85.190.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855D4AD /* 40.85.212.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855E6B6 /* 40.85.230.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28565690 /* 40.86.86.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28565BD4 /* 40.86.91.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285660B1 /* 40.86.96.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285663CA /* 40.86.99.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E159 /* 40.86.225.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E660 /* 40.86.230.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28574183 /* 40.87.65.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857465F /* 40.87.70.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591300 /* 40.89.19.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28598394 /* 40.89.131.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28598D67 /* 40.89.141.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870459C /* 40.112.69.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28705AF4 /* 40.112.90.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28705DC9 /* 40.112.93.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28708E94 /* 40.112.142.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28708F86 /* 40.112.143.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28708F8C /* 40.112.143.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28708FD6 /* 40.112.143.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870A52C /* 40.112.165.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870A6A1 /* 40.112.166.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870BF9F /* 40.112.191.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870C045 /* 40.112.192.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870D8BD /* 40.112.216.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F300 /* 40.112.243.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28710234 /* 40.113.2.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28714109 /* 40.113.65.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28714794 /* 40.113.71.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28715152 /* 40.113.81.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28715ACA /* 40.113.90.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28717EFB /* 40.113.126.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28718325 /* 40.113.131.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287188F0 /* 40.113.136.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28718EDB /* 40.113.142.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871CC58 /* 40.113.204.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871E8F3 /* 40.113.232.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871EC2D /* 40.113.236.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28720D19 /* 40.114.13.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287229F5 /* 40.114.41.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28723344 /* 40.114.51.68/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28724415 /* 40.114.68.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28726A19 /* 40.114.106.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872C2BC /* 40.114.194.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872D24E /* 40.114.210.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872E4A1 /* 40.114.228.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872ED41 /* 40.114.237.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872F346 /* 40.114.243.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287337FB /* 40.115.55.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28736255 /* 40.115.98.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873B379 /* 40.115.179.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873FB94 /* 40.115.251.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28759AF0 /* 40.117.154.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2875BC7E /* 40.117.188.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2875BE48 /* 40.117.190.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28761D48 /* 40.118.29.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287647F0 /* 40.118.71.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287660E7 /* 40.118.96.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876647F /* 40.118.100.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28766543 /* 40.118.101.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876662E /* 40.118.102.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876B9A1 /* 40.118.185.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876EB71 /* 40.118.235.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876F633 /* 40.118.246.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876FF3B /* 40.118.255.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770C00 /* 40.119.12.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784A20 /* 40.120.74.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287908F1 /* 40.121.8.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287910C1 /* 40.121.16.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287920E8 /* 40.121.32.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287923DD /* 40.121.35.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28795BC7 /* 40.121.91.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2879D4A5 /* 40.121.212.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2879DD34 /* 40.121.221.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A2441 /* 40.122.36.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A41A2 /* 40.122.65.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A6E9A /* 40.122.110.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A72E5 /* 40.122.114.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B2D2F /* 40.123.45.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B2F3A /* 40.123.47.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C0C4B /* 40.124.12.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C0D3A /* 40.124.13.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EE39E /* 40.126.227.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EEC16 /* 40.126.236.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EF23B /* 40.126.242.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EF5A9 /* 40.126.245.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F84CC /* 40.127.132.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F8BFC /* 40.127.139.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FC0F4 /* 40.127.192.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FC438 /* 40.127.196.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1700 /* 51.12.23.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1F00 /* 51.12.31.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C49E0 /* 51.12.73.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C4A00 /* 51.12.74.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C62C0 /* 51.12.98.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCAC0 /* 51.12.202.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE2A0 /* 51.12.226.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEAA0 /* 51.12.234.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8E80 /* 51.13.142.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8F40 /* 51.13.143.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8F80 /* 51.13.143.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356400 /* 51.53.100.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B300 /* 51.53.179.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681C40 /* 51.104.28.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336942A0 /* 51.105.66.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694AA0 /* 51.105.74.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695318 /* 51.105.83.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695380 /* 51.105.83.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695400 /* 51.105.84.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695A20 /* 51.105.90.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369AC19 /* 51.105.172.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3200 /* 51.107.50.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3AA0 /* 51.107.58.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9200 /* 51.107.146.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9AA0 /* 51.107.154.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFFC0 /* 51.107.255.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743120 /* 51.116.49.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743AA0 /* 51.116.58.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744B80 /* 51.116.75.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744C00 /* 51.116.76.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744D00 /* 51.116.77.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749120 /* 51.116.145.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749AE0 /* 51.116.154.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F2A0 /* 51.116.242.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FAA0 /* 51.116.250.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782A00 /* 51.120.42.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337862C0 /* 51.120.98.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786AA0 /* 51.120.106.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D2A0 /* 51.120.210.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DAC0 /* 51.120.218.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E200 /* 51.120.226.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33880E1F /* 51.136.14.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33896A0D /* 51.137.106.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A320 /* 51.137.163.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C25F1 /* 51.140.37.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C39B0 /* 51.140.57.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C3BE9 /* 51.140.59.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4B93 /* 51.140.75.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C5491 /* 51.140.84.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C556A /* 51.140.85.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C5727 /* 51.140.87.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C7AE2 /* 51.140.122.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9280 /* 51.140.146.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C989A /* 51.140.152.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9996 /* 51.140.153.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CB44C /* 51.140.180.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CB997 /* 51.140.185.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CBFDF /* 51.140.191.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD260 /* 51.140.210.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CF4A2 /* 51.140.244.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CF559 /* 51.140.245.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D0C70 /* 51.141.12.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D25F5 /* 51.141.37.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D2C8B /* 51.141.44.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D2DCF /* 51.141.45.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D5AFC /* 51.141.90.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F6615 /* 51.143.102.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FBF2C /* 51.143.191.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x339007C0 /* 51.144.7.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33906B35 /* 51.144.107.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3390742B /* 51.144.116.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3390A4D7 /* 51.144.164.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3390B608 /* 51.144.182.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883200 /* 52.136.50.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34888A37 /* 52.136.138.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BE00 /* 52.136.190.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BE80 /* 52.136.190.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AC446 /* 52.138.196.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348ADA79 /* 52.138.218.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6AE0 /* 52.140.106.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F8996 /* 52.143.137.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349375E0 /* 52.147.117.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937680 /* 52.147.118.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937740 /* 52.147.119.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937780 /* 52.147.119.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968CE0 /* 52.150.140.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34973E33 /* 52.151.62.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F4000 /* 52.159.64.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F4400 /* 52.159.68.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F4600 /* 52.159.70.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F4700 /* 52.159.71.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F4780 /* 52.159.71.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A028DA /* 52.160.40.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A160C1 /* 52.161.96.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26B00 /* 52.162.107.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A2D049 /* 52.162.208.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A37AA0 /* 52.163.122.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A4C9BA /* 52.164.201.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A4FA85 /* 52.164.250.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A581CB /* 52.165.129.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A587EA /* 52.165.135.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A59B0C /* 52.165.155.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A59BED /* 52.165.155.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5A3DF /* 52.165.163.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5A828 /* 52.165.168.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5AE7B /* 52.165.174.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5B8AA /* 52.165.184.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5DC21 /* 52.165.220.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5E051 /* 52.165.224.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5ED0F /* 52.165.237.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A64E61 /* 52.166.78.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A671BC /* 52.166.113.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A67763 /* 52.166.119.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A6B2D0 /* 52.166.178.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A6B555 /* 52.166.181.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A6C6A3 /* 52.166.198.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87DBC /* 52.168.125.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A949EC /* 52.169.73.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A94EA3 /* 52.169.78.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9B4DF /* 52.169.180.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9B8A3 /* 52.169.184.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9BCEC /* 52.169.188.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9BF28 /* 52.169.191.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AA0719 /* 52.170.7.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AA2EAE /* 52.170.46.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AB3865 /* 52.171.56.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AB386E /* 52.171.56.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AB88C8 /* 52.171.136.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AB8CED /* 52.171.140.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ABDAEF /* 52.171.218.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ABDDAA /* 52.171.221.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ABDEF7 /* 52.171.222.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC36E1 /* 52.172.54.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACC350 /* 52.172.195.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACCCC4 /* 52.172.204.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACDB79 /* 52.172.219.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD1C5F /* 52.173.28.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD2453 /* 52.173.36.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD4C21 /* 52.173.76.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD4D8C /* 52.173.77.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD5331 /* 52.173.83.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD549D /* 52.173.84.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD5782 /* 52.173.87.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD5EAD /* 52.173.94.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD8673 /* 52.173.134.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD8B63 /* 52.173.139.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD8B7D /* 52.173.139.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD95FE /* 52.173.149.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD97E5 /* 52.173.151.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADB893 /* 52.173.184.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADF5F9 /* 52.173.245.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADF989 /* 52.173.249.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE0350 /* 52.174.3.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE0785 /* 52.174.7.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE2305 /* 52.174.35.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE6A0F /* 52.174.106.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE9619 /* 52.174.150.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEB5B2 /* 52.174.181.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEB812 /* 52.174.184.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEC1D2 /* 52.174.193.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEEB1D /* 52.174.235.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF9EDB /* 52.175.158.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AFCA19 /* 52.175.202.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AFFE0A /* 52.175.254.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B002E5 /* 52.176.2.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B005F1 /* 52.176.5.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B00600 /* 52.176.6.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B00625 /* 52.176.6.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B03D80 /* 52.176.61.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B06878 /* 52.176.104.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B095C5 /* 52.176.149.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B0A545 /* 52.176.165.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B1A996 /* 52.177.169.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B1BD8A /* 52.177.189.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B1CE49 /* 52.177.206.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B21D27 /* 52.178.29.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B225F4 /* 52.178.37.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B22BD1 /* 52.178.43.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B22D8B /* 52.178.45.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B22EB5 /* 52.178.46.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B24BC8 /* 52.178.75.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B24FA3 /* 52.178.79.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B25981 /* 52.178.89.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B25AE6 /* 52.178.90.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B25C60 /* 52.178.92.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B269B3 /* 52.178.105.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B272E2 /* 52.178.114.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B29EAF /* 52.178.158.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2A4EB /* 52.178.164.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2B3A9 /* 52.178.179.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2BEBF /* 52.178.190.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2C993 /* 52.178.201.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2D00C /* 52.178.208.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2D411 /* 52.178.212.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2D659 /* 52.178.214.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3610F /* 52.179.97.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3BCCE /* 52.179.188.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B206 /* 52.180.178.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B742 /* 52.180.183.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B7527D /* 52.183.82.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A287 /* 52.184.162.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8C167 /* 52.184.193.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8C168 /* 52.184.193.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB117E /* 52.187.17.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB2468 /* 52.187.36.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB345E /* 52.187.52.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB874F /* 52.187.135.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BBCEF3 /* 52.187.206.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BBE517 /* 52.187.229.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDD531 /* 52.189.213.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B327 /* 52.225.179.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1BE41 /* 52.225.190.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E28640 /* 52.226.134.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E42A4C /* 52.228.42.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45420 /* 52.228.84.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E4797B /* 52.228.121.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E51ED2 /* 52.229.30.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E57354 /* 52.229.115.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E601BA /* 52.230.1.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71280 /* 52.231.18.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E72078 /* 52.231.32.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7265F /* 52.231.38.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E74D3A /* 52.231.77.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79260 /* 52.231.146.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7C865 /* 52.231.200.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7C8B3 /* 52.231.200.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E813ED /* 52.232.19.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E81AE4 /* 52.232.26.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E821CA /* 52.232.33.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8384F /* 52.232.56.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E87FC4 /* 52.232.127.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E9268F /* 52.233.38.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E9803D /* 52.233.128.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E98512 /* 52.233.133.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E98579 /* 52.233.133.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E99BA8 /* 52.233.155.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E9A4C3 /* 52.233.164.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E9AF3B /* 52.233.175.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E9B8B5 /* 52.233.184.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E9C6CE /* 52.233.198.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EAD15E /* 52.234.209.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED12DC /* 52.237.18.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED168B /* 52.237.22.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED8200 /* 52.237.130.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EDCDA3 /* 52.237.205.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EDD6DD /* 52.237.214.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EDF6A2 /* 52.237.246.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F095F3 /* 52.240.149.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F09B3A /* 52.240.155.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F216D5 /* 52.242.22.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F21BD5 /* 52.242.27.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F228C0 /* 52.242.40.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22900 /* 52.242.41.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22A00 /* 52.242.42.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F32759 /* 52.243.39.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69AA0 /* 52.246.154.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FCA015 /* 52.252.160.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDE0DF /* 52.253.224.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF23F9 /* 52.255.35.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF3686 /* 52.255.54.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41341829 /* 65.52.24.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41348021 /* 65.52.128.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41348201 /* 65.52.130.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134A077 /* 65.52.160.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134A846 /* 65.52.168.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134D549 /* 65.52.213.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134D93B /* 65.52.217.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134DAFD /* 65.52.218.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FA60 /* 65.52.250.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5900 /* 68.221.89.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x5EF56849 /* 94.245.104.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255640 /* 102.37.86.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255680 /* 102.37.86.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851A20 /* 102.133.26.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853980 /* 102.133.57.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857AA0 /* 102.133.122.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859A20 /* 102.133.154.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DA20 /* 102.133.218.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FAA0 /* 102.133.250.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68280335 /* 104.40.3.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68280BC0 /* 104.40.11.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68281C85 /* 104.40.28.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682835DB /* 104.40.53.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68283F62 /* 104.40.63.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68285485 /* 104.40.84.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68285C6B /* 104.40.92.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68288159 /* 104.40.129.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682893B4 /* 104.40.147.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682893D8 /* 104.40.147.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68289E37 /* 104.40.158.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828B3F3 /* 104.40.179.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828B7EC /* 104.40.183.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828B9C0 /* 104.40.185.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828BB1A /* 104.40.187.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828BFAE /* 104.40.191.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828D219 /* 104.40.210.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828D7DB /* 104.40.215.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828DE51 /* 104.40.222.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828FA64 /* 104.40.250.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829098B /* 104.41.9.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68290DB3 /* 104.41.13.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68293F6C /* 104.41.63.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829BA67 /* 104.41.186.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829D889 /* 104.41.216.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829E5C7 /* 104.41.229.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A35F8 /* 104.42.53.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A4E99 /* 104.42.78.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A80AB /* 104.42.128.171/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A9437 /* 104.42.148.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A9840 /* 104.42.152.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A9A69 /* 104.42.154.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682ABC92 /* 104.42.188.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682AE705 /* 104.42.231.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682B8169 /* 104.43.129.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682B8C65 /* 104.43.140.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682B8E21 /* 104.43.142.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BDD1F /* 104.43.221.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BF647 /* 104.43.246.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BFE66 /* 104.43.254.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C800D /* 104.44.128.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C8226 /* 104.44.130.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D0175 /* 104.45.1.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D0EF9 /* 104.45.14.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D514F /* 104.45.81.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D5F3D /* 104.45.95.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D81B2 /* 104.45.129.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D8DF7 /* 104.45.141.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D980D /* 104.45.152.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D983C /* 104.45.152.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D9AC8 /* 104.45.154.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DE262 /* 104.45.226.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DE74F /* 104.45.231.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E26F5 /* 104.46.38.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E2C4E /* 104.46.44.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E3D74 /* 104.46.61.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E653B /* 104.46.101.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682F893E /* 104.47.137.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682F9773 /* 104.47.151.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682FA00E /* 104.47.160.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682FA477 /* 104.47.164.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D0306B /* 104.208.48.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D1B243 /* 104.209.178.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D1C0CE /* 104.209.192.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D1C557 /* 104.209.197.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D22695 /* 104.210.38.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D245F1 /* 104.210.69.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D25C47 /* 104.210.92.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D291B5 /* 104.210.145.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D29339 /* 104.210.147.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D2984C /* 104.210.152.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D2987A /* 104.210.152.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D29974 /* 104.210.153.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D29E14 /* 104.210.158.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D31AD4 /* 104.211.26.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35120 /* 104.211.81.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3618A /* 104.211.97.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39260 /* 104.211.146.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A09F /* 104.211.160.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3B30B /* 104.211.179.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3B8C5 /* 104.211.184.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E0FC /* 104.211.224.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E1A7 /* 104.211.225.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D61400 /* 104.214.20.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D61DCB /* 104.214.29.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D640EE /* 104.214.64.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D64A6E /* 104.214.74.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D64DDD /* 104.214.77.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D66E3C /* 104.214.110.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D66EE2 /* 104.214.110.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D676AE /* 104.214.118.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D67724 /* 104.214.119.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D689EC /* 104.214.137.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6E76E /* 104.214.231.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6EC2F /* 104.214.236.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6ED87 /* 104.214.237.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D70BB0 /* 104.215.11.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D73AE6 /* 104.215.58.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D749EC /* 104.215.73.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D74E0D /* 104.215.78.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D75916 /* 104.215.89.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D7932D /* 104.215.147.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D79B01 /* 104.215.155.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6FDD5F1B /* 111.221.95.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89744EF3 /* 137.116.78.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x897458D5 /* 137.116.88.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x897480BC /* 137.116.128.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x897499EE /* 137.116.153.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x897509D4 /* 137.117.9.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89751146 /* 137.117.17.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89753ACC /* 137.117.58.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x897542A7 /* 137.117.66.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89755436 /* 137.117.84.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89755A3F /* 137.117.90.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89755D57 /* 137.117.93.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8975A623 /* 137.117.166.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8975AF0E /* 137.117.175.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8975CB82 /* 137.117.203.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8975D3F4 /* 137.117.211.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8975DA65 /* 137.117.218.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8975E0DA /* 137.117.224.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8975E157 /* 137.117.225.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89875BB0 /* 137.135.91.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89876BEB /* 137.135.107.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x898781AF /* 137.135.129.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x898785DD /* 137.135.133.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B001E /* 138.91.0.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B1012 /* 138.91.16.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5BE054 /* 138.91.224.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5BE128 /* 138.91.225.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5BF051 /* 138.91.240.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D380D72 /* 157.56.13.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176900 /* 158.23.105.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D981D /* 168.61.152.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D9F72 /* 168.61.159.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83DD9D6 /* 168.61.217.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83DDA7D /* 168.61.218.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E1425 /* 168.62.20.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E30B7 /* 168.62.48.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EB4AD /* 168.62.180.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EE00D /* 168.62.224.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EE117 /* 168.62.225.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F05E7 /* 168.63.5.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F35EF /* 168.63.53.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F6B05 /* 168.63.107.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE81010 /* 191.232.16.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE81034 /* 191.232.16.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8264D /* 191.232.38.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8B010 /* 191.232.176.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93220 /* 191.233.50.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9522C /* 191.233.82.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE955A5 /* 191.233.85.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE957C2 /* 191.233.87.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CB20 /* 191.233.203.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA10BC /* 191.234.16.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA92A0 /* 191.234.146.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9AA0 /* 191.234.154.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB5149 /* 191.235.81.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB5A46 /* 191.235.90.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBA00D /* 191.235.160.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBB00C /* 191.235.176.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBB11E /* 191.235.177.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBD00C /* 191.235.208.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBD7B8 /* 191.235.215.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE420 /* 191.235.228.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC100C /* 191.236.16.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC3B43 /* 191.236.59.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC500C /* 191.236.80.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC6A7B /* 191.236.106.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC9409 /* 191.236.148.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFECC079 /* 191.236.192.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFED1859 /* 191.237.24.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFED1B4A /* 191.237.27.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFED80EE /* 191.237.128.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE081A /* 191.238.8.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE2132 /* 191.238.33.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4E10 /* 191.238.78.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4F00 /* 191.238.79.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEEB08B /* 191.238.176.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEEF00C /* 191.238.240.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEF3AA2 /* 191.239.58.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFBC0B /* 191.239.188.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E9031 /* 207.46.144.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E9394 /* 207.46.147.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86AC0 /* 4.232.106.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87AC0 /* 4.232.122.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C2C0 /* 4.232.194.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428C00 /* 13.66.140.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E1BC /* 13.66.225.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430880 /* 13.67.8.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454080 /* 13.69.64.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D457400 /* 13.69.116.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E380 /* 13.69.227.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464840 /* 13.70.72.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464980 /* 13.70.73.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AA40 /* 13.71.170.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AD00 /* 13.71.173.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AD80 /* 13.71.173.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C280 /* 13.71.194.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F080 /* 13.73.240.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F240 /* 13.73.242.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B22C0 /* 13.75.34.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B7F75 /* 13.75.127.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3280 /* 13.77.50.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6A80 /* 13.78.106.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6D00 /* 13.78.109.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E944B /* 13.78.148.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D567859 /* 13.86.120.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573880 /* 13.87.56.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577A80 /* 13.87.122.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AB00 /* 13.89.171.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5E8D73 /* 13.94.141.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5E8F7E /* 13.94.143.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5E95B3 /* 13.94.149.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141142C0 /* 20.17.66.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B2C0 /* 20.18.178.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152AC0 /* 20.21.42.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141535A0 /* 20.21.53.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141542C0 /* 20.21.66.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154AC0 /* 20.21.74.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14242A0C /* 20.36.42.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14244ED0 /* 20.36.78.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246A80 /* 20.36.106.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247240 /* 20.36.114.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142490C0 /* 20.36.144.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254A80 /* 20.37.74.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269B00 /* 20.38.155.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4480 /* 20.42.68.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4A80 /* 20.42.74.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7880 /* 20.43.120.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C02C0 /* 20.44.2.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0D80 /* 20.44.13.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1B00 /* 20.44.27.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4BAD /* 20.45.75.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5E60 /* 20.45.94.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7D80 /* 20.45.125.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF290 /* 20.45.242.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FD880 /* 20.47.216.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FE980 /* 20.47.233.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430CA30 /* 20.48.202.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315280 /* 20.49.82.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315A80 /* 20.49.90.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143248C0 /* 20.50.72.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14325080 /* 20.50.80.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432C980 /* 20.50.201.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330530 /* 20.51.5.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345F10 /* 20.52.95.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143535D0 /* 20.53.53.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353CD0 /* 20.53.60.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B4FD0 /* 20.59.79.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450580 /* 20.69.5.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DE40 /* 20.70.222.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481AC0 /* 20.72.26.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453C080 /* 20.83.192.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453DDF0 /* 20.83.221.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575020 /* 20.87.80.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589D80 /* 20.88.157.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590C90 /* 20.89.12.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A20A0 /* 20.90.32.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8460 /* 20.90.132.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C04A0 /* 20.92.4.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146122E0 /* 20.97.34.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14629220 /* 20.98.146.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C1E0 /* 20.98.193.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14631810 /* 20.99.24.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640200 /* 20.100.2.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D0D0 /* 20.105.208.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F00D0 /* 20.111.0.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DAAC0 /* 20.125.170.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCAC0 /* 20.125.202.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149682D0 /* 20.150.130.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AB00 /* 20.150.171.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B300 /* 20.150.179.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BB00 /* 20.150.187.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F802 /* 20.150.248.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496FB15 /* 20.150.251.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A2C0 /* 20.168.162.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC240 /* 20.189.194.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C05490 /* 20.192.84.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06300 /* 20.192.99.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09970 /* 20.192.153.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0AA10 /* 20.192.170.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EAC0 /* 20.192.234.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CAC0 /* 20.193.202.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24280 /* 20.194.66.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C28100 /* 20.194.129.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35580 /* 20.195.85.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C440 /* 20.200.196.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4520 /* 20.205.69.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4AC0 /* 20.205.74.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD52C0 /* 20.205.82.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CDC000 /* 20.205.192.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0070 /* 20.206.0.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF0120 /* 20.207.1.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00500 /* 20.208.5.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D012C0 /* 20.208.18.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D712C0 /* 20.215.18.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71AC0 /* 20.215.26.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79AC0 /* 20.215.154.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93AC0 /* 20.217.58.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94AC0 /* 20.217.74.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95AC0 /* 20.217.90.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760C303 /* 23.96.195.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761784F /* 23.97.120.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17627100 /* 23.98.113.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17637305 /* 23.99.115.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763D92A /* 23.99.217.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764D850 /* 23.100.216.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765EA29 /* 23.101.234.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766BC41 /* 23.102.188.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284009A0 /* 40.64.9.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284071C0 /* 40.64.113.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433B00 /* 40.67.59.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456A80 /* 40.69.106.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469280 /* 40.70.146.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470B00 /* 40.71.11.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470D40 /* 40.71.13.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6440 /* 40.74.100.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9780 /* 40.74.151.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC280 /* 40.78.194.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8240 /* 40.79.130.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8E80 /* 40.79.142.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F95C0 /* 40.79.149.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA500 /* 40.79.165.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAF00 /* 40.79.175.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB280 /* 40.79.178.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBF40 /* 40.79.191.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503580 /* 40.80.53.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28537840 /* 40.83.120.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28537938 /* 40.83.121.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28537DA1 /* 40.83.125.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855E665 /* 40.85.230.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E564 /* 40.86.229.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28597A40 /* 40.89.122.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F2C0 /* 40.112.242.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784A80 /* 40.120.74.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287857D0 /* 40.120.87.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BE5F2 /* 40.123.229.242/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F0313 /* 40.127.3.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C14C0 /* 51.12.20.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C16E0 /* 51.12.22.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1D20 /* 51.12.29.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C49C0 /* 51.12.73.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6300 /* 51.12.99.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCB00 /* 51.12.203.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE300 /* 51.12.227.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEB00 /* 51.12.235.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8F10 /* 51.13.143.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356AC0 /* 51.53.106.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BAC0 /* 51.53.186.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CAC0 /* 51.103.202.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680800 /* 51.104.8.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680880 /* 51.104.8.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694740 /* 51.105.71.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3AC0 /* 51.107.58.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B445E /* 51.107.68.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9AC0 /* 51.107.154.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE8D0 /* 51.107.232.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFF90 /* 51.107.255.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743AC0 /* 51.116.58.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744B60 /* 51.116.75.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749B00 /* 51.116.155.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749C40 /* 51.116.156.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374AFCC /* 51.116.175.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D05E /* 51.116.208.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F340 /* 51.116.243.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FBC0 /* 51.116.251.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33784FAA /* 51.120.79.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786300 /* 51.120.99.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786B00 /* 51.120.107.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378A44D /* 51.120.164.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D300 /* 51.120.211.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DB00 /* 51.120.219.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384C100 /* 51.132.193.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9240 /* 51.140.146.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CB94B /* 51.140.185.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD280 /* 51.140.210.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D0822 /* 51.141.8.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34888848 /* 52.136.136.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BF10 /* 52.136.191.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F8840 /* 52.143.136.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928BE0 /* 52.146.139.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937720 /* 52.147.119.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497192D /* 52.151.25.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26AC0 /* 52.162.106.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A598D6 /* 52.165.152.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5997A /* 52.165.153.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A59AC1 /* 52.165.154.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A59E8C /* 52.165.158.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76F40 /* 52.167.111.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE1615 /* 52.174.22.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2B193 /* 52.178.177.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2B895 /* 52.178.184.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2BE41 /* 52.178.190.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2C3C5 /* 52.178.195.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B30E /* 52.180.179.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68F80 /* 52.182.143.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB3832 /* 52.187.56.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB3BFB /* 52.187.59.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB3F13 /* 52.187.63.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB3F25 /* 52.187.63.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E069AC /* 52.224.105.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B10F /* 52.225.177.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B199 /* 52.225.177.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B1EE /* 52.225.177.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71240 /* 52.231.18.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E72075 /* 52.231.32.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79280 /* 52.231.146.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7C8B1 /* 52.231.200.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22870 /* 52.242.40.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69D40 /* 52.246.157.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134ACED /* 65.52.172.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FA80 /* 65.52.250.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC52C0 /* 68.220.82.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD62C0 /* 68.221.98.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD92C0 /* 68.221.146.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4625393A /* 70.37.57.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x462559DE /* 70.37.89.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662555E0 /* 102.37.85.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851AC0 /* 102.133.26.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854029 /* 102.133.64.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857B00 /* 102.133.123.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857B80 /* 102.133.123.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859AC0 /* 102.133.154.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FE40 /* 102.133.254.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68292EB2 /* 104.41.46.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829B974 /* 104.41.185.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BA549 /* 104.43.165.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C818D /* 104.44.129.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C81F3 /* 104.44.129.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C81FF /* 104.44.129.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C86FF /* 104.44.134.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DE325 /* 104.45.227.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E6C87 /* 104.46.108.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D0360B /* 104.208.54.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D25A41 /* 104.210.90.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35140 /* 104.211.81.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D36218 /* 104.211.98.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39280 /* 104.211.146.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A0E5 /* 104.211.160.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E142 /* 104.211.225.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D612C0 /* 104.214.18.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D79E21 /* 104.215.158.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37D0B9 /* 157.55.208.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170AC0 /* 158.23.10.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177AC0 /* 158.23.122.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C2C0 /* 158.23.194.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8F00 /* 168.61.143.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F84F0 /* 168.63.132.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FF1A0 /* 168.63.241.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93280 /* 191.233.50.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE95E2D /* 191.233.94.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CB40 /* 191.233.203.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9300 /* 191.234.147.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9B00 /* 191.234.155.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC3C48 /* 191.236.60.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC9A58 /* 191.236.154.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDDEBF /* 191.237.222.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4DF0 /* 191.238.77.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEF6830 /* 191.239.104.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E82A0C /* 4.232.42.12/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87DB2 /* 4.232.125.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428FDB /* 13.66.143.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D429544 /* 13.66.149.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430F01 /* 13.67.15.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430F7C /* 13.67.15.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45EF54 /* 13.69.239.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45EF58 /* 13.69.239.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464F40 /* 13.70.79.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464FC6 /* 13.70.79.198/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AF81 /* 13.71.175.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47B1E0 /* 13.71.177.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C775 /* 13.71.199.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F4C4 /* 13.73.244.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FD7C /* 13.73.253.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6B5E /* 13.74.107.94/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D35DD /* 13.77.53.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6FC1 /* 13.78.111.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D51F49B /* 13.81.244.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DF50 /* 13.86.223.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59B314 /* 13.89.179.20/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59B318 /* 13.89.179.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5AC2B4 /* 13.90.194.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152E88 /* 20.21.46.136/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141545B0 /* 20.21.69.176/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154DB8 /* 20.21.77.184/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247A34 /* 20.36.122.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254234 /* 20.37.66.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C4F8 /* 20.37.196.248/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E234 /* 20.37.226.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E408 /* 20.37.228.8/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142657BC /* 20.38.87.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268A38 /* 20.38.138.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268D08 /* 20.38.141.8/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269582 /* 20.38.149.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269D84 /* 20.38.157.132/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270CE4 /* 20.39.12.228/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270E54 /* 20.39.14.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428C898 /* 20.40.200.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E034 /* 20.40.224.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294354 /* 20.41.67.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294534 /* 20.41.69.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C3FC /* 20.41.195.252/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429D010 /* 20.41.208.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4156 /* 20.42.65.86/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4AE6 /* 20.42.74.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4AE8 /* 20.42.74.232/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE4D8 /* 20.42.228.216/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2BA0 /* 20.43.43.160/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2DF0 /* 20.43.45.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4358 /* 20.43.67.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B79FC /* 20.43.121.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7BDC /* 20.43.123.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0DF0 /* 20.44.13.240/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1306 /* 20.44.19.6/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1D32 /* 20.44.29.50/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1F24 /* 20.44.31.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7F08 /* 20.45.127.8/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7F0C /* 20.45.127.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC5E0 /* 20.45.197.224/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC720 /* 20.45.199.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DD00C /* 20.45.208.12/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DD028 /* 20.45.208.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C04C /* 20.48.192.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315F3A /* 20.49.95.58/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431630C /* 20.49.99.12/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143166D4 /* 20.49.102.212/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316D20 /* 20.49.109.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431710C /* 20.49.113.12/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317234 /* 20.49.114.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317820 /* 20.49.120.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317DBC /* 20.49.125.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143201C4 /* 20.50.1.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432C9D2 /* 20.50.201.210/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432C9D4 /* 20.50.201.212/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1434483C /* 20.52.72.60/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14350022 /* 20.53.0.34/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14350070 /* 20.53.0.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14350078 /* 20.53.0.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1435292C /* 20.53.41.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D60B8 /* 20.61.96.184/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453C0D0 /* 20.83.192.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453C0D4 /* 20.83.192.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DADA0 /* 20.125.173.160/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCDA0 /* 20.125.205.160/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A58C /* 20.150.165.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BE54 /* 20.150.190.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14972088 /* 20.151.32.136/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC2CC /* 20.187.194.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6FCC /* 20.189.111.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDAB6C /* 20.189.171.108/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDAD30 /* 20.189.173.48/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA01C /* 20.191.160.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02244 /* 20.192.34.68/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0651A /* 20.192.101.26/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A4B0 /* 20.192.164.176/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E4FC /* 20.192.228.252/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C16010 /* 20.193.96.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1A0E6 /* 20.193.160.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24494 /* 20.194.68.148/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C2816A /* 20.194.129.106/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4DC6 /* 20.205.77.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4DD0 /* 20.205.77.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD55C6 /* 20.205.85.198/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE06BC /* 20.206.6.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D015A2 /* 20.208.21.162/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D715B2 /* 20.215.21.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D7AA68 /* 20.215.170.104/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D90A24 /* 20.217.10.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93E88 /* 20.217.62.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1762563A /* 23.98.86.58/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1762680C /* 23.98.104.12/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626C20 /* 23.98.108.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408454 /* 40.64.132.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408748 /* 40.64.135.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28437A6C /* 40.67.122.108/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28437A70 /* 40.67.122.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28437A78 /* 40.67.122.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456F22 /* 40.69.111.34/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456FC0 /* 40.69.111.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28457460 /* 40.69.116.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284697C2 /* 40.70.151.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284697C4 /* 40.70.151.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470FC2 /* 40.71.15.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6610 /* 40.74.102.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9674 /* 40.74.150.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9678 /* 40.74.150.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECC2E /* 40.78.204.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEF60 /* 40.78.239.96/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFD54 /* 40.78.253.84/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8A2E /* 40.79.138.46/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F922E /* 40.79.146.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9670 /* 40.79.150.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA710 /* 40.79.167.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA714 /* 40.79.167.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAD24 /* 40.79.173.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBFD8 /* 40.79.191.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503502 /* 40.80.53.2/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503B18 /* 40.80.59.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850AC0C /* 40.80.172.12/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591480 /* 40.89.20.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591720 /* 40.89.23.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285979BC /* 40.89.121.188/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28739000 /* 40.115.144.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287709E8 /* 40.119.9.232/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287808B8 /* 40.120.8.184/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784B3A /* 40.120.75.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784DB0 /* 40.120.77.176/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C41A0 /* 40.124.65.160/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B6240 /* 51.11.98.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BC022 /* 51.11.192.34/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C16DC /* 51.12.22.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C4BBC /* 51.12.75.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CA848 /* 51.12.168.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE5E8 /* 51.12.229.232/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8050 /* 51.13.128.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335294C /* 51.53.41.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356E8A /* 51.53.110.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B6C8 /* 51.53.182.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BF8A /* 51.53.191.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CDA0 /* 51.103.205.160/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680FFE /* 51.104.15.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681CD8 /* 51.104.28.216/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681FAC /* 51.104.31.172/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694790 /* 51.105.71.144/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694D32 /* 51.105.77.50/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695A94 /* 51.105.90.148/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3238 /* 51.107.50.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3520 /* 51.107.53.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3C98 /* 51.107.60.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8168 /* 51.107.129.104/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9234 /* 51.107.146.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BC104 /* 51.107.193.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743188 /* 51.116.49.136/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749188 /* 51.116.145.136/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337492D4 /* 51.116.146.212/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749E3C /* 51.116.158.60/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F3DA /* 51.116.243.218/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FBBA /* 51.116.251.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FDA4 /* 51.116.253.164/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782A38 /* 51.120.42.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782CC4 /* 51.120.44.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378649C /* 51.120.100.156/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786D1A /* 51.120.109.26/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D51A /* 51.120.213.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D694 /* 51.120.214.148/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E234 /* 51.120.226.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A44C /* 51.137.164.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A628 /* 51.137.166.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AA05C /* 51.138.160.92/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C97A8 /* 51.140.151.168/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD4D8 /* 51.140.212.216/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD7B4 /* 51.140.215.180/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883344 /* 52.136.51.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5A36 /* 52.138.90.54/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE560 /* 52.138.229.96/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6B5C /* 52.140.107.92/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6E6C /* 52.140.110.108/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34924F84 /* 52.146.79.132/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349282B4 /* 52.146.130.180/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349698CC /* 52.150.152.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969C24 /* 52.150.156.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26F84 /* 52.162.111.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76FA8 /* 52.167.111.168/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87682 /* 52.168.118.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B211F0 /* 52.178.17.240/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68D3C /* 52.182.141.60/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45450 /* 52.228.84.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7170A /* 52.231.23.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79750 /* 52.231.151.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBD4A /* 52.236.189.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F0F4E4 /* 52.240.244.228/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69D02 /* 52.246.157.2/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FCFA /* 65.52.252.250/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD2948 /* 68.221.41.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6270 /* 68.221.98.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662540A0 /* 102.37.64.160/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668539BC /* 102.133.57.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857FB0 /* 102.133.127.176/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859A06 /* 102.133.154.6/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DA34 /* 102.133.218.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DBBC /* 102.133.219.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FEC8 /* 102.133.254.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FECC /* 102.133.254.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EA202 /* 104.46.162.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EA21C /* 104.46.162.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EA360 /* 104.46.163.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB200 /* 104.46.178.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D392F8 /* 104.211.146.248/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A430 /* 104.214.164.48/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89876289 /* 137.135.98.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170A70 /* 158.23.10.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176014 /* 158.23.96.20/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CF1A /* 191.233.207.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CF1E /* 191.233.207.30/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA882C /* 191.234.136.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8A90 /* 191.234.138.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA958A /* 191.234.149.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9D2A /* 191.234.157.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9DAC /* 191.234.157.172/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDE0E6 /* 191.237.224.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81C18 /* 4.232.28.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4291E0 /* 13.66.145.224/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456D8C /* 13.69.109.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E980 /* 13.69.233.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464F50 /* 13.70.79.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AFD0 /* 13.71.175.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DFC0 /* 13.86.223.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113324 /* 20.17.51.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1415202C /* 20.21.32.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254728 /* 20.37.71.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E5AC /* 20.37.229.172/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268418 /* 20.38.132.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268F28 /* 20.38.143.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E13C /* 20.40.225.60/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7BC4 /* 20.43.123.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C04F8 /* 20.44.4.248/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0C8C /* 20.44.12.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C13A4 /* 20.44.19.164/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D745C /* 20.45.116.92/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7E74 /* 20.45.126.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0B04 /* 20.46.11.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C1B4 /* 20.48.193.180/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143153F4 /* 20.49.83.244/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431677C /* 20.49.103.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317614 /* 20.49.118.20/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317FF4 /* 20.49.127.244/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143308CC /* 20.51.8.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331450 /* 20.51.20.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1434482C /* 20.52.72.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14350068 /* 20.53.0.104/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352F40 /* 20.53.47.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353804 /* 20.53.56.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6364 /* 20.61.99.100/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8194 /* 20.62.129.148/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1441825C /* 20.65.130.92/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481590 /* 20.72.21.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481EB4 /* 20.72.30.180/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AE84 /* 20.150.174.132/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F420 /* 20.150.244.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC5E4 /* 20.187.197.228/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE154 /* 20.189.225.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA1DC /* 20.191.161.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02B4C /* 20.192.43.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A6BC /* 20.192.166.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0B874 /* 20.192.184.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E7F0 /* 20.192.231.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EEBC /* 20.192.238.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1600C /* 20.193.96.12/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24894 /* 20.194.72.148/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C39240 /* 20.195.146.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D7002C /* 20.215.0.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D9282C /* 20.217.40.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626D34 /* 23.98.109.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433474 /* 40.67.52.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284379C4 /* 40.67.121.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456F74 /* 40.69.111.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470FCC /* 40.71.15.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEF74 /* 40.78.239.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8D84 /* 40.79.141.132/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBD74 /* 40.79.189.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850ADD8 /* 40.80.173.216/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B4C4 /* 40.80.180.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859172C /* 40.89.23.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285979A8 /* 40.89.121.168/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287808B0 /* 40.120.8.176/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784B3C /* 40.120.75.60/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2EE0 /* 51.12.46.224/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC604 /* 51.12.198.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8040 /* 51.13.128.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D88B8 /* 51.13.136.184/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351BF0 /* 51.53.27.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335ABF0 /* 51.53.171.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3534 /* 51.107.53.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8024 /* 51.107.128.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BC098 /* 51.107.192.152/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFA28 /* 51.107.250.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743648 /* 51.116.54.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337495E0 /* 51.116.149.224/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F610 /* 51.116.246.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337864F4 /* 51.120.100.244/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E980 /* 51.120.233.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A7B8 /* 51.137.167.184/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AA04C /* 51.138.160.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD280 /* 51.138.210.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9554 /* 51.140.149.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD7A8 /* 51.140.215.168/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD184 /* 51.143.209.132/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883584 /* 52.136.53.132/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488B8E8 /* 52.136.184.232/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349284F4 /* 52.146.132.244/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969DAC /* 52.150.157.172/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26F8C /* 52.162.111.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7400 /* 52.172.116.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71774 /* 52.231.23.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79744 /* 52.231.151.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5498 /* 68.221.84.152/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254078 /* 102.37.64.120/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255034 /* 102.37.80.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857E84 /* 102.133.126.132/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DDC4 /* 102.133.221.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EA210 /* 104.46.162.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB3F0 /* 104.46.179.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A46C /* 104.214.164.108/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176498 /* 158.23.100.152/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8C6C /* 168.61.140.108/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE933DC /* 191.233.51.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CFD4 /* 191.233.207.212/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4848 /* 191.238.72.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81C20 /* 4.232.28.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86A70 /* 4.232.106.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87A58 /* 4.232.122.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C258 /* 4.232.194.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D411881 /* 13.65.24.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428A5E /* 13.66.138.94/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428DE0 /* 13.66.141.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D429150 /* 13.66.145.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D43086E /* 13.67.8.110/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430A48 /* 13.67.10.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45404E /* 13.69.64.78/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454330 /* 13.69.67.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456B40 /* 13.69.107.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456D80 /* 13.69.109.128/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456DB0 /* 13.69.109.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E34E /* 13.69.227.78/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E5F8 /* 13.69.229.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D46481E /* 13.70.72.30/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464A50 /* 13.70.74.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D467BA6 /* 13.70.123.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AA2E /* 13.71.170.46/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47ADD0 /* 13.71.173.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AF90 /* 13.71.175.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C276 /* 13.71.194.118/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C480 /* 13.71.196.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C7B0 /* 13.71.199.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F228 /* 13.73.242.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F2D2 /* 13.73.242.210/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F4D0 /* 13.73.244.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6B5C /* 13.74.107.92/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6C88 /* 13.74.108.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2296 /* 13.75.34.150/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2768 /* 13.75.39.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D011A /* 13.77.1.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D01D4 /* 13.77.1.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3246 /* 13.77.50.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3538 /* 13.77.53.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D37C0 /* 13.77.55.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E3BB8 /* 13.78.59.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6A5E /* 13.78.106.94/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6D78 /* 13.78.109.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6FD0 /* 13.78.111.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DBC8 /* 13.86.219.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DDD8 /* 13.86.221.216/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DF40 /* 13.86.223.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573856 /* 13.87.56.86/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573A48 /* 13.87.58.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577A56 /* 13.87.122.86/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577C48 /* 13.87.124.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58F04A /* 13.88.240.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58F4C3 /* 13.88.244.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AACE /* 13.89.170.206/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AE88 /* 13.89.174.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59B260 /* 13.89.178.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5EF04B /* 13.94.240.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113440 /* 20.17.52.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114270 /* 20.17.66.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B258 /* 20.18.178.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152A70 /* 20.21.42.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141535B0 /* 20.21.53.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154258 /* 20.21.66.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154A58 /* 20.21.74.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14155008 /* 20.21.80.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14155010 /* 20.21.80.16/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14242796 /* 20.36.39.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246A46 /* 20.36.106.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246C80 /* 20.36.108.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246CF0 /* 20.36.108.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247216 /* 20.36.114.22/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247520 /* 20.36.117.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247590 /* 20.36.117.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254AE2 /* 20.37.74.226/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254C78 /* 20.37.76.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268068 /* 20.38.128.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142680A8 /* 20.38.128.168/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268400 /* 20.38.132.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269398 /* 20.38.147.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269580 /* 20.38.149.128/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269858 /* 20.38.152.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E73C /* 20.40.231.60/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4020 /* 20.42.64.32/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4880 /* 20.42.72.128/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4890 /* 20.42.72.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B78F8 /* 20.43.120.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7978 /* 20.43.121.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7B30 /* 20.43.123.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0206 /* 20.44.2.6/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0468 /* 20.44.4.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C08C8 /* 20.44.8.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0A78 /* 20.44.10.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1108 /* 20.44.17.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C11D8 /* 20.44.17.216/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1310 /* 20.44.19.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1B70 /* 20.44.27.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1D30 /* 20.44.29.48/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1D60 /* 20.44.29.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5A5E /* 20.45.90.94/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5D90 /* 20.45.93.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5E40 /* 20.45.94.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7B58 /* 20.45.123.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7BE8 /* 20.45.123.232/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF1B8 /* 20.45.241.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF200 /* 20.45.242.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF210 /* 20.45.242.16/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FE8A0 /* 20.47.232.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FE8B0 /* 20.47.232.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C94A /* 20.48.201.74/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C950 /* 20.48.201.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430CA00 /* 20.48.202.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315218 /* 20.49.82.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315A18 /* 20.49.90.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330502 /* 20.51.5.2/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330508 /* 20.51.5.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330510 /* 20.51.5.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330E4E /* 20.51.14.78/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143315FA /* 20.51.21.250/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345936 /* 20.52.89.54/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345DD8 /* 20.52.93.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345E60 /* 20.52.94.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143534E0 /* 20.53.52.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143534F0 /* 20.53.52.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143534F8 /* 20.53.52.248/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1435393E /* 20.53.57.62/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353C50 /* 20.53.60.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353CC0 /* 20.53.60.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A443C /* 20.58.68.60/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4748 /* 20.58.71.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A47E0 /* 20.58.71.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B4F40 /* 20.59.79.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E3FFC /* 20.62.63.252/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420658 /* 20.66.6.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1445020E /* 20.69.2.14/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144504C8 /* 20.69.4.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144504D0 /* 20.69.4.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DCB4 /* 20.70.220.180/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DD10 /* 20.70.221.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DDC0 /* 20.70.221.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481BB0 /* 20.72.27.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452F698 /* 20.82.246.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453DD70 /* 20.83.221.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453DDC0 /* 20.83.221.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14565CFC /* 20.86.92.252/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589A12 /* 20.88.154.18/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589CA8 /* 20.88.156.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589CB0 /* 20.88.156.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590B76 /* 20.89.11.118/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590B78 /* 20.89.11.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590BE0 /* 20.89.11.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8148 /* 20.90.129.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8360 /* 20.90.131.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8370 /* 20.90.131.112/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C03E0 /* 20.92.3.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C03F0 /* 20.92.3.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C03F8 /* 20.92.3.248/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146120BC /* 20.97.32.188/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14612178 /* 20.97.33.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146121E0 /* 20.97.33.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14629148 /* 20.98.145.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14629160 /* 20.98.145.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C0E0 /* 20.98.192.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C0F0 /* 20.98.192.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640180 /* 20.100.1.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640190 /* 20.100.1.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640198 /* 20.100.1.152/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D068 /* 20.105.208.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D070 /* 20.105.208.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F0020 /* 20.111.0.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F0030 /* 20.111.0.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DAA58 /* 20.125.170.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCA58 /* 20.125.202.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149681FA /* 20.150.129.250/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14968220 /* 20.150.130.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14968230 /* 20.150.130.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496ABD8 /* 20.150.171.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496ACE0 /* 20.150.172.224/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B3C0 /* 20.150.179.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B518 /* 20.150.181.24/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B5B0 /* 20.150.181.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BBC0 /* 20.150.187.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BD18 /* 20.150.189.24/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A258 /* 20.168.162.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC110 /* 20.189.193.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC1A0 /* 20.189.193.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE4DC /* 20.189.228.220/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C032E6 /* 20.192.50.230/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C063C0 /* 20.192.99.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06518 /* 20.192.101.24/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09894 /* 20.192.152.148/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09898 /* 20.192.152.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09940 /* 20.192.153.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A894 /* 20.192.168.148/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A898 /* 20.192.168.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A960 /* 20.192.169.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0B840 /* 20.192.184.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EAB0 /* 20.192.234.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EB08 /* 20.192.235.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EE78 /* 20.192.238.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CAB0 /* 20.193.202.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CBC0 /* 20.193.203.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24218 /* 20.194.66.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C3533A /* 20.195.83.58/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C354B0 /* 20.195.84.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35500 /* 20.195.85.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C392CE /* 20.195.146.206/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C2EC /* 20.200.194.236/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C2F0 /* 20.200.194.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C3A0 /* 20.200.195.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4370 /* 20.205.67.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4460 /* 20.205.68.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4468 /* 20.205.68.104/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4A58 /* 20.205.74.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5258 /* 20.205.82.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0048 /* 20.206.0.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0050 /* 20.206.0.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF0058 /* 20.207.0.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF0100 /* 20.207.1.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00460 /* 20.208.4.96/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D01258 /* 20.208.18.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D29240 /* 20.210.146.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70440 /* 20.215.4.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71258 /* 20.215.18.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71A58 /* 20.215.26.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79A70 /* 20.215.154.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92C40 /* 20.217.44.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93A70 /* 20.217.58.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94A58 /* 20.217.74.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95A58 /* 20.217.90.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760E16B /* 23.96.225.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760E1B6 /* 23.96.225.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625340 /* 23.98.83.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625638 /* 23.98.86.56/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284008B2 /* 40.64.8.178/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284008B8 /* 40.64.8.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400980 /* 40.64.9.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433C60 /* 40.67.60.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433C6C /* 40.67.60.108/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456A46 /* 40.69.106.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456C58 /* 40.69.108.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456EF0 /* 40.69.110.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2846924E /* 40.70.146.78/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469430 /* 40.70.148.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470ACE /* 40.71.10.206/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470DF0 /* 40.71.13.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28471EFC /* 40.71.30.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9252 /* 40.74.146.82/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9520 /* 40.74.149.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9610 /* 40.74.150.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2380 /* 40.75.35.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B23D8 /* 40.75.35.216/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC246 /* 40.78.194.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC458 /* 40.78.196.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECA82 /* 40.78.202.130/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECBF8 /* 40.78.203.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE528 /* 40.78.229.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEC80 /* 40.78.236.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEE38 /* 40.78.238.56/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEF20 /* 40.78.239.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF2AC /* 40.78.242.172/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF318 /* 40.78.243.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFA6C /* 40.78.250.108/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFAD8 /* 40.78.250.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F822E /* 40.79.130.46/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8428 /* 40.79.132.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8A2C /* 40.79.138.44/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8A98 /* 40.79.138.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8BD0 /* 40.79.139.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F922C /* 40.79.146.44/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9298 /* 40.79.146.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9C28 /* 40.79.156.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA308 /* 40.79.163.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA398 /* 40.79.163.152/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAAF8 /* 40.79.170.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FABE0 /* 40.79.171.224/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAD10 /* 40.79.173.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB246 /* 40.79.178.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB438 /* 40.79.180.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB4D0 /* 40.79.180.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBBA0 /* 40.79.187.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBD38 /* 40.79.189.56/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC278 /* 40.79.194.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC520 /* 40.79.197.32/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503358 /* 40.80.51.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503500 /* 40.80.53.0/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B030 /* 40.80.176.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B400 /* 40.80.180.0/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B460 /* 40.80.180.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855A8C9 /* 40.85.168.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28598197 /* 40.89.129.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859843E /* 40.89.132.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28598910 /* 40.89.137.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28599D07 /* 40.89.157.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28724D59 /* 40.114.77.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28725504 /* 40.114.85.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287667BF /* 40.118.103.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28780820 /* 40.120.8.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784030 /* 40.120.64.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784B30 /* 40.120.75.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28785692 /* 40.120.86.146/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28785698 /* 40.120.86.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28785720 /* 40.120.87.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B6100 /* 51.11.97.0/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B6140 /* 51.11.97.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C16AC /* 51.12.22.172/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C16B0 /* 51.12.22.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C16C0 /* 51.12.22.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C48DC /* 51.12.72.220/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C4940 /* 51.12.73.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C4950 /* 51.12.73.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C63D0 /* 51.12.99.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCB48 /* 51.12.203.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE3C0 /* 51.12.227.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEBC0 /* 51.12.235.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8DE0 /* 51.13.141.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8DF0 /* 51.13.141.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351C40 /* 51.53.28.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335AC40 /* 51.53.172.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BA70 /* 51.53.186.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CA58 /* 51.103.202.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336808F0 /* 51.104.8.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680960 /* 51.104.9.96/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336943A8 /* 51.105.67.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694550 /* 51.105.69.80/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694B98 /* 51.105.75.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694D30 /* 51.105.77.48/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694D50 /* 51.105.77.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3C50 /* 51.107.60.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3C5C /* 51.107.60.92/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3CD0 /* 51.107.60.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9C48 /* 51.107.156.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9C84 /* 51.107.156.132/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9CD0 /* 51.107.156.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF7C8 /* 51.107.247.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF7D0 /* 51.107.247.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFBBC /* 51.107.251.188/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFEE0 /* 51.107.254.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFEF0 /* 51.107.254.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337437AE /* 51.116.55.174/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743C50 /* 51.116.60.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743CE0 /* 51.116.60.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744A18 /* 51.116.74.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744A50 /* 51.116.74.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749CA0 /* 51.116.156.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749E38 /* 51.116.158.56/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749E50 /* 51.116.158.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F390 /* 51.116.243.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F3D8 /* 51.116.243.216/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FB20 /* 51.116.251.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FBB8 /* 51.116.251.184/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786450 /* 51.120.100.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378645C /* 51.120.100.92/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786BC0 /* 51.120.107.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786D18 /* 51.120.109.24/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786D30 /* 51.120.109.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D3C0 /* 51.120.211.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D518 /* 51.120.213.24/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DC50 /* 51.120.220.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DC5C /* 51.120.220.92/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DCB0 /* 51.120.220.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E426 /* 51.120.228.38/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD77A /* 51.138.215.122/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C060F /* 51.140.6.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C33AE /* 51.140.51.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD468 /* 51.140.212.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BA76 /* 52.136.186.118/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BD58 /* 52.136.189.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BEA0 /* 52.136.190.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5A34 /* 52.138.90.52/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5C50 /* 52.138.92.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE388 /* 52.138.227.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE540 /* 52.138.229.64/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE550 /* 52.138.229.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928A50 /* 52.146.138.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928BC0 /* 52.146.139.192/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34936100 /* 52.147.97.0/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349371B6 /* 52.147.113.182/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937568 /* 52.147.117.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937570 /* 52.147.117.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34973E63 /* 52.151.62.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A10EC0 /* 52.161.14.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A11C6C /* 52.161.28.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26EF0 /* 52.162.110.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26F80 /* 52.162.111.128/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A3E417 /* 52.163.228.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76B48 /* 52.167.107.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76D40 /* 52.167.109.64/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A96952 /* 52.169.105.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC99D8 /* 52.172.153.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC9B8E /* 52.172.155.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2DF3E /* 52.178.223.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4A6EE /* 52.180.166.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B319 /* 52.180.179.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68B38 /* 52.182.139.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68D0C /* 52.182.141.12/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68D90 /* 52.182.141.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B705C3 /* 52.183.5.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7122E /* 52.231.18.46/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71400 /* 52.231.20.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E74012 /* 52.231.64.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E74564 /* 52.231.69.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79478 /* 52.231.148.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E794D0 /* 52.231.148.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBAF0 /* 52.236.186.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBD48 /* 52.236.189.72/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F0F140 /* 52.240.241.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22840 /* 52.242.40.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22850 /* 52.242.40.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22858 /* 52.242.40.88/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69B98 /* 52.246.155.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69D00 /* 52.246.157.0/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FAE422 /* 52.250.228.34/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FA06 /* 65.52.250.6/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FC78 /* 65.52.252.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD54A0 /* 68.221.84.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254020 /* 102.37.64.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625550A /* 102.37.85.10/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255510 /* 102.37.85.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662555C0 /* 102.37.85.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A6DA /* 102.37.166.218/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A760 /* 102.37.167.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A770 /* 102.37.167.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851A06 /* 102.133.26.6/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851C90 /* 102.133.28.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857C10 /* 102.133.124.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859C70 /* 102.133.156.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FBB0 /* 102.133.251.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FD20 /* 102.133.253.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829096A /* 104.41.9.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829B2B6 /* 104.41.178.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D0A3DA /* 104.208.163.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D18959 /* 104.209.137.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D250D0 /* 104.210.80.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D29E47 /* 104.210.158.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A420 /* 104.214.164.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E1764A0 /* 158.23.100.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8C30 /* 168.61.140.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8AAFB /* 191.232.170.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93390 /* 191.233.51.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CB1E /* 191.233.203.30/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CD40 /* 191.233.205.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA93C0 /* 191.234.147.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9530 /* 191.234.149.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9588 /* 191.234.149.136/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9BC0 /* 191.234.155.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9D28 /* 191.234.157.40/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE490C /* 191.238.73.12/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4D20 /* 191.238.77.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4D30 /* 191.238.77.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81C40 /* 4.232.28.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86B00 /* 4.232.107.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87B00 /* 4.232.123.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87DC0 /* 4.232.125.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C300 /* 4.232.195.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428CC0 /* 13.66.140.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428D00 /* 13.66.141.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430C00 /* 13.67.12.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430D00 /* 13.67.13.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454120 /* 13.69.65.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454180 /* 13.69.65.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456B00 /* 13.69.107.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456B80 /* 13.69.107.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E480 /* 13.69.228.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E500 /* 13.69.229.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4649C0 /* 13.70.73.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464A00 /* 13.70.74.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AC00 /* 13.71.172.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AC40 /* 13.71.172.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C340 /* 13.71.195.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C380 /* 13.71.195.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6BC0 /* 13.74.107.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6C00 /* 13.74.108.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2480 /* 13.75.36.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2500 /* 13.75.37.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3420 /* 13.77.52.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3440 /* 13.77.52.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6C20 /* 13.78.108.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6C40 /* 13.78.108.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DA00 /* 13.86.218.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DA80 /* 13.86.218.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573900 /* 13.87.57.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573940 /* 13.87.57.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577B00 /* 13.87.123.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577B40 /* 13.87.123.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AB80 /* 13.89.171.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59ABC0 /* 13.89.171.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113400 /* 20.17.52.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114340 /* 20.17.67.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B300 /* 20.18.179.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152480 /* 20.21.36.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152B40 /* 20.21.43.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154300 /* 20.21.67.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154B00 /* 20.21.75.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246B20 /* 20.36.107.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246B40 /* 20.36.107.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142472E0 /* 20.36.114.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247300 /* 20.36.115.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254B00 /* 20.37.75.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254B40 /* 20.37.75.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269300 /* 20.38.147.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269340 /* 20.38.147.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269B40 /* 20.38.155.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E580 /* 20.40.229.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0340 /* 20.44.3.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0380 /* 20.44.3.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0820 /* 20.44.8.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0840 /* 20.44.8.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1080 /* 20.44.16.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C10C0 /* 20.44.16.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1B80 /* 20.44.27.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1FC0 /* 20.44.31.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5A00 /* 20.45.90.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7B00 /* 20.45.123.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7B40 /* 20.45.123.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7DC0 /* 20.45.125.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0C00 /* 20.46.12.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C500 /* 20.48.197.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143152C0 /* 20.49.82.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315300 /* 20.49.83.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315AC0 /* 20.49.90.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315B00 /* 20.49.91.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330000 /* 20.51.0.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330C80 /* 20.51.12.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331480 /* 20.51.20.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345800 /* 20.52.88.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352F80 /* 20.53.47.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353100 /* 20.53.49.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143538C0 /* 20.53.56.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4380 /* 20.58.67.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6680 /* 20.61.102.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6700 /* 20.61.103.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E3B80 /* 20.62.59.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8580 /* 20.62.133.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8600 /* 20.62.134.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418580 /* 20.65.133.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420400 /* 20.66.4.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420480 /* 20.66.4.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450100 /* 20.69.1.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481B40 /* 20.72.27.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14630980 /* 20.99.9.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DAB00 /* 20.125.171.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCB00 /* 20.125.203.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AB60 /* 20.150.171.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AB80 /* 20.150.171.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B350 /* 20.150.179.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B380 /* 20.150.179.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B540 /* 20.150.181.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BB50 /* 20.150.187.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BB80 /* 20.150.187.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BE00 /* 20.150.190.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F440 /* 20.150.244.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A300 /* 20.168.163.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE440 /* 20.189.228.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA680 /* 20.191.166.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02C80 /* 20.192.44.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03280 /* 20.192.50.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C05040 /* 20.192.80.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06350 /* 20.192.99.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06380 /* 20.192.99.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EB20 /* 20.192.235.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EB40 /* 20.192.235.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C0C0 /* 20.193.192.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CB00 /* 20.193.203.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CB40 /* 20.193.203.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C242C0 /* 20.194.66.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24300 /* 20.194.67.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24A00 /* 20.194.74.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34200 /* 20.195.66.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34300 /* 20.195.67.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34900 /* 20.195.73.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34A00 /* 20.195.74.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C39280 /* 20.195.146.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4A60 /* 20.205.74.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4B00 /* 20.205.75.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5260 /* 20.205.82.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5300 /* 20.205.83.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D01300 /* 20.208.19.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70400 /* 20.215.4.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71300 /* 20.215.19.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71B00 /* 20.215.27.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79B40 /* 20.215.155.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92C00 /* 20.217.44.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93B40 /* 20.217.59.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94B00 /* 20.217.75.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95B00 /* 20.217.91.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625300 /* 23.98.83.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625380 /* 23.98.83.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625400 /* 23.98.84.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433B60 /* 40.67.59.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433B80 /* 40.67.59.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456B20 /* 40.69.107.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456B40 /* 40.69.107.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469380 /* 40.70.147.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284693C0 /* 40.70.147.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470C00 /* 40.71.12.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470C80 /* 40.71.12.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6240 /* 40.74.98.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6280 /* 40.74.98.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9260 /* 40.74.146.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9280 /* 40.74.146.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2260 /* 40.75.34.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B22C0 /* 40.75.34.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC320 /* 40.78.195.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC340 /* 40.78.195.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECAA0 /* 40.78.202.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECAC0 /* 40.78.202.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE340 /* 40.78.227.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE380 /* 40.78.227.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEAC0 /* 40.78.234.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEB00 /* 40.78.235.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEC00 /* 40.78.236.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF320 /* 40.78.243.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF340 /* 40.78.243.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFAE0 /* 40.78.250.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFB00 /* 40.78.251.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8300 /* 40.79.131.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8340 /* 40.79.131.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8EC0 /* 40.79.142.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9600 /* 40.79.150.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9B40 /* 40.79.155.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9B80 /* 40.79.155.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA280 /* 40.79.162.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA2C0 /* 40.79.162.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAA40 /* 40.79.170.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAA80 /* 40.79.170.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAB20 /* 40.79.171.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB320 /* 40.79.179.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB340 /* 40.79.179.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBB20 /* 40.79.187.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBB40 /* 40.79.187.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC320 /* 40.79.195.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC340 /* 40.79.195.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503300 /* 40.80.51.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285035C0 /* 40.80.53.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784AC0 /* 40.120.74.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784B00 /* 40.120.75.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28785200 /* 40.120.82.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1140 /* 51.12.17.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1980 /* 51.12.25.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6360 /* 51.12.99.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6380 /* 51.12.99.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCB60 /* 51.12.203.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCB80 /* 51.12.203.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE350 /* 51.12.227.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE380 /* 51.12.227.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEB50 /* 51.12.235.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEB80 /* 51.12.235.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8980 /* 51.13.137.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351C00 /* 51.53.28.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335AC00 /* 51.53.172.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BB40 /* 51.53.187.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CB00 /* 51.103.203.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694320 /* 51.105.67.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694340 /* 51.105.67.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694B00 /* 51.105.75.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694B40 /* 51.105.75.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3B40 /* 51.107.59.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3B80 /* 51.107.59.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9B40 /* 51.107.155.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9B80 /* 51.107.155.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF300 /* 51.107.243.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFB00 /* 51.107.251.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743700 /* 51.116.55.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743B40 /* 51.116.59.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743B80 /* 51.116.59.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749B80 /* 51.116.155.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749BC0 /* 51.116.155.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749C90 /* 51.116.156.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749CC0 /* 51.116.156.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F500 /* 51.116.245.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F540 /* 51.116.245.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FAF0 /* 51.116.250.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FB40 /* 51.116.251.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FD00 /* 51.116.253.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786360 /* 51.120.99.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786380 /* 51.120.99.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786B50 /* 51.120.107.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786B80 /* 51.120.107.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786E80 /* 51.120.110.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D350 /* 51.120.211.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D380 /* 51.120.211.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D640 /* 51.120.214.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DB60 /* 51.120.219.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DB80 /* 51.120.219.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E9C0 /* 51.120.233.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD2C0 /* 51.138.210.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9440 /* 51.140.148.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9480 /* 51.140.148.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD320 /* 51.140.211.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD340 /* 51.140.211.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD4C0 /* 51.143.212.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD500 /* 51.143.213.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488B9C0 /* 52.136.185.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5AA0 /* 52.138.90.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5AC0 /* 52.138.90.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE2C0 /* 52.138.226.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE300 /* 52.138.227.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6B80 /* 52.139.107.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928840 /* 52.146.136.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928880 /* 52.146.136.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937100 /* 52.147.113.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26BC0 /* 52.162.107.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26E00 /* 52.162.110.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76AC0 /* 52.167.106.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76B00 /* 52.167.107.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7440 /* 52.172.116.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68B40 /* 52.182.139.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68B80 /* 52.182.139.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71300 /* 52.231.19.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71340 /* 52.231.19.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79320 /* 52.231.147.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79340 /* 52.231.147.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBB00 /* 52.236.187.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBB80 /* 52.236.187.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69B00 /* 52.246.155.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69B40 /* 52.246.155.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FB00 /* 65.52.251.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FB40 /* 65.52.251.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD54C0 /* 68.221.84.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255100 /* 102.37.81.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A0C0 /* 102.37.160.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851B40 /* 102.133.27.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851B80 /* 102.133.27.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857B60 /* 102.133.123.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859B40 /* 102.133.155.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859B80 /* 102.133.155.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FB00 /* 102.133.251.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FE80 /* 102.133.254.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB740 /* 104.46.183.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35200 /* 104.211.82.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35240 /* 104.211.82.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39300 /* 104.211.147.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39340 /* 104.211.147.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D61360 /* 104.214.19.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D61380 /* 104.214.19.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A560 /* 104.214.165.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A5C0 /* 104.214.165.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E1764C0 /* 158.23.100.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE932E0 /* 191.233.50.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93340 /* 191.233.51.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CC00 /* 191.233.204.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CC40 /* 191.233.204.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9350 /* 191.234.147.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9380 /* 191.234.147.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA95A0 /* 191.234.149.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9B50 /* 191.234.155.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9B80 /* 191.234.155.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9D40 /* 191.234.157.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4800 /* 191.238.72.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81810 /* 4.232.24.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428E40 /* 13.66.142.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430A58 /* 13.67.10.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454338 /* 13.69.67.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E3FC /* 13.69.227.252/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464A70 /* 13.70.74.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47ADF0 /* 13.71.173.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C4A0 /* 13.71.196.160/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F800 /* 13.73.248.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2748 /* 13.75.39.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3550 /* 13.77.53.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6CAC /* 13.78.108.172/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DBA8 /* 13.86.219.168/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573A28 /* 13.87.58.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577C28 /* 13.87.124.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AB74 /* 13.89.171.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113010 /* 20.17.48.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152010 /* 20.21.32.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246C70 /* 20.36.108.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142473F0 /* 20.36.115.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247840 /* 20.36.120.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254040 /* 20.37.64.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254C68 /* 20.37.76.104/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259840 /* 20.37.152.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C040 /* 20.37.192.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E040 /* 20.37.224.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265040 /* 20.38.80.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268048 /* 20.38.128.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268840 /* 20.38.136.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270840 /* 20.39.8.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14290040 /* 20.41.0.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294040 /* 20.41.64.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C040 /* 20.41.192.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A0040 /* 20.42.0.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8040 /* 20.42.128.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE040 /* 20.42.224.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2840 /* 20.43.40.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4040 /* 20.43.64.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7908 /* 20.43.121.8/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8040 /* 20.43.128.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0448 /* 20.44.4.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1118 /* 20.44.17.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1BD0 /* 20.44.27.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7040 /* 20.45.112.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7B70 /* 20.45.123.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC040 /* 20.45.192.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481010 /* 20.72.16.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A078 /* 20.150.160.120/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6840 /* 20.189.104.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A010 /* 20.192.160.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E040 /* 20.192.224.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70010 /* 20.215.0.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92810 /* 20.217.40.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433040 /* 40.67.48.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433A04 /* 40.67.58.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456C38 /* 40.69.108.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470CF4 /* 40.71.12.244/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1840 /* 40.74.24.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A93A8 /* 40.74.147.168/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC438 /* 40.78.196.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECA84 /* 40.78.202.132/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8438 /* 40.79.132.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB418 /* 40.79.180.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503840 /* 40.80.56.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A840 /* 40.80.168.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B020 /* 40.80.176.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B840 /* 40.80.184.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852F840 /* 40.82.248.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591040 /* 40.89.16.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2840 /* 51.12.40.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC040 /* 51.12.192.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351810 /* 51.53.24.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335A810 /* 51.53.168.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336808F8 /* 51.104.8.248/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681840 /* 51.104.24.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695040 /* 51.105.80.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695840 /* 51.105.88.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3040 /* 51.107.48.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3A04 /* 51.107.58.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9040 /* 51.107.144.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9A04 /* 51.107.154.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743040 /* 51.116.48.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749040 /* 51.116.144.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782840 /* 51.120.40.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378620C /* 51.120.98.12/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DA04 /* 51.120.218.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E040 /* 51.120.224.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A040 /* 51.137.160.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD448 /* 51.140.212.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC040 /* 51.143.192.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883040 /* 52.136.48.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6840 /* 52.140.104.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968840 /* 52.150.136.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26F10 /* 52.162.111.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45040 /* 52.228.80.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79458 /* 52.231.148.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FC68 /* 65.52.252.104/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5010 /* 68.221.80.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851C58 /* 102.133.28.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853840 /* 102.133.56.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857C08 /* 102.133.124.8/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685D840 /* 102.133.216.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176010 /* 158.23.96.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90810 /* 191.233.8.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CD60 /* 191.233.205.96/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE040 /* 191.235.224.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E818C0 /* 4.232.24.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D40208D /* 13.64.32.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D53162D /* 13.83.22.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D53164A /* 13.83.22.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D531677 /* 13.83.22.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D560533 /* 13.86.5.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141130C0 /* 20.17.48.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141520C0 /* 20.21.32.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247880 /* 20.36.120.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254080 /* 20.37.64.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259C80 /* 20.37.156.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C1C0 /* 20.37.193.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E080 /* 20.37.224.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265400 /* 20.38.84.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268880 /* 20.38.136.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142708C0 /* 20.39.8.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14287B24 /* 20.40.123.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14287B27 /* 20.40.123.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14287B2E /* 20.40.123.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14287B48 /* 20.40.123.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14290480 /* 20.41.4.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294140 /* 20.41.65.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C140 /* 20.41.193.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A0480 /* 20.42.4.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A185A /* 20.42.24.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A1DD4 /* 20.42.29.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A1E69 /* 20.42.30.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A22BE /* 20.42.34.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A23CC /* 20.42.35.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A81C0 /* 20.42.129.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE1C0 /* 20.42.225.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2940 /* 20.43.41.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4140 /* 20.43.65.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8280 /* 20.43.130.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C4AB6 /* 20.44.74.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C4C35 /* 20.44.76.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C4C3D /* 20.44.76.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C4C56 /* 20.44.76.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D0031 /* 20.45.0.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D027A /* 20.45.2.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7080 /* 20.45.112.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC080 /* 20.45.192.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481100 /* 20.72.17.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A080 /* 20.150.160.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B96EC7 /* 20.185.110.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6A80 /* 20.189.106.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD815E /* 20.189.129.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A100 /* 20.192.161.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E140 /* 20.192.225.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D700C0 /* 20.215.0.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D928C0 /* 20.217.40.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764EE1B /* 23.100.238.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764EE22 /* 23.100.238.34/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764EE25 /* 23.100.238.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400840 /* 40.64.8.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841AD9D /* 40.65.173.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841AFD4 /* 40.65.175.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841AFE4 /* 40.65.175.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284238E9 /* 40.66.56.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433080 /* 40.67.48.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A129A /* 40.74.18.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1E00 /* 40.74.30.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503940 /* 40.80.57.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A940 /* 40.80.169.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BAC0 /* 40.80.186.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850D8E7 /* 40.80.216.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850D926 /* 40.80.217.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850DB2E /* 40.80.219.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28510964 /* 40.81.9.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28510983 /* 40.81.9.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285109CB /* 40.81.9.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285109D1 /* 40.81.9.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285109D5 /* 40.81.9.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285109DD /* 40.81.9.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28510A24 /* 40.81.10.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28510C85 /* 40.81.12.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28510F08 /* 40.81.15.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28510F27 /* 40.81.15.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28511D98 /* 40.81.29.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851BC82 /* 40.81.188.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851BF3A /* 40.81.191.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851FD9A /* 40.81.253.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28529B41 /* 40.82.155.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852FD00 /* 40.82.253.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591140 /* 40.89.17.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285ABEB4 /* 40.90.190.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285AF011 /* 40.90.240.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B5D54 /* 40.91.93.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B7F74 /* 40.91.127.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B7FF1 /* 40.91.127.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770B00 /* 40.119.11.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2940 /* 51.12.41.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC140 /* 51.12.193.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x333518C0 /* 51.53.24.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335A8C0 /* 51.53.168.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681940 /* 51.104.25.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695080 /* 51.105.80.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695880 /* 51.105.88.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3080 /* 51.107.48.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9080 /* 51.107.144.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743060 /* 51.116.48.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749060 /* 51.116.144.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782880 /* 51.120.40.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E080 /* 51.120.224.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33842B42 /* 51.132.43.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A140 /* 51.137.161.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F6836 /* 51.143.104.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F685A /* 51.143.104.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC080 /* 51.143.192.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33917C9D /* 51.145.124.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33917C9E /* 51.145.124.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3391B0F9 /* 51.145.176.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3391B1D4 /* 51.145.177.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3391B28A /* 51.145.178.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3391B28C /* 51.145.178.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883080 /* 52.136.48.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348918EC /* 52.137.24.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34891A72 /* 52.137.26.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34891A9B /* 52.137.26.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34891AC6 /* 52.137.26.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34891B31 /* 52.137.27.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34893873 /* 52.137.56.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34893CD0 /* 52.137.60.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B002F /* 52.139.0.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B0031 /* 52.139.0.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6940 /* 52.140.105.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348CE969 /* 52.140.233.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968B00 /* 52.150.139.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497EB96 /* 52.151.235.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497EBF2 /* 52.151.235.242/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497EBF4 /* 52.151.235.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BD8F5 /* 52.155.216.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BD954 /* 52.155.217.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BDDF2 /* 52.155.221.242/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BDDFA /* 52.155.221.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BDE23 /* 52.155.222.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BDE38 /* 52.155.222.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349D16E9 /* 52.157.22.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DE740 /* 52.157.231.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349E1CB5 /* 52.158.28.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349E1EF1 /* 52.158.30.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349ED00B /* 52.158.208.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B850DD /* 52.184.80.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B9E00D /* 52.185.224.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B9E026 /* 52.185.224.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BCD9EB /* 52.188.217.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BCDAE4 /* 52.188.218.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BCDAEF /* 52.188.218.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45140 /* 52.228.81.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F2D62D /* 52.242.214.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD854A /* 52.253.133.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDE578 /* 52.253.229.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD50C0 /* 68.221.80.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662554C0 /* 102.37.84.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66858021 /* 102.133.128.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685D980 /* 102.133.217.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D4000 /* 104.45.64.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D4093 /* 104.45.64.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D40E0 /* 104.45.64.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D411E /* 104.45.65.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D4159 /* 104.45.65.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E1760C0 /* 158.23.96.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90900 /* 191.233.9.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE91A9C /* 191.233.26.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE140 /* 191.235.225.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E862C0 /* 4.232.98.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D415639 /* 13.65.86.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4282F3 /* 13.66.130.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428C80 /* 13.66.140.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D429160 /* 13.66.145.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4308F0 /* 13.67.8.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430F20 /* 13.67.15.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4540D0 /* 13.69.64.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4547C0 /* 13.69.71.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45AB00 /* 13.69.171.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E3D0 /* 13.69.227.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E7C0 /* 13.69.231.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4648C0 /* 13.70.72.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464EE0 /* 13.70.78.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4688AE /* 13.70.136.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D471ED3 /* 13.71.30.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D477D16 /* 13.71.125.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D477F1A /* 13.71.127.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D477FA9 /* 13.71.127.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47809F /* 13.71.128.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D479913 /* 13.71.153.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AAD0 /* 13.71.170.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AFA0 /* 13.71.175.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C320 /* 13.71.195.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C7C0 /* 13.71.199.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D48F30A /* 13.72.243.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4915E6 /* 13.73.21.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F4E0 /* 13.73.244.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2440 /* 13.75.36.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B6E83 /* 13.75.110.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B71E0 /* 13.75.113.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B8B00 /* 13.75.139.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D2D22 /* 13.77.45.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D32F0 /* 13.77.50.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D37A0 /* 13.77.55.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6C00 /* 13.78.108.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E8452 /* 13.78.132.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EB2BB /* 13.78.178.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DF20 /* 13.86.223.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5738E0 /* 13.87.56.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577AE0 /* 13.87.122.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AB50 /* 13.89.171.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59B240 /* 13.89.178.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B5D3F /* 13.91.93.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B61C4 /* 13.91.97.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5D943E /* 13.93.148.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14111900 /* 20.17.25.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114300 /* 20.17.67.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152B00 /* 20.21.43.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246B00 /* 20.36.107.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142472B0 /* 20.36.114.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142475A0 /* 20.36.117.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254AC0 /* 20.37.74.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142680E0 /* 20.38.128.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7B00 /* 20.43.123.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0300 /* 20.44.3.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1D40 /* 20.44.29.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4324 /* 20.45.67.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D432D /* 20.45.67.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5AD0 /* 20.45.90.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5AE0 /* 20.45.90.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF070 /* 20.45.240.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF180 /* 20.45.241.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FE850 /* 20.47.232.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FE860 /* 20.47.232.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C8C0 /* 20.48.200.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C8E0 /* 20.48.200.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143304C0 /* 20.51.4.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143304E0 /* 20.51.4.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345D50 /* 20.52.93.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345D60 /* 20.52.93.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14350000 /* 20.53.0.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353440 /* 20.53.52.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353460 /* 20.53.52.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353C10 /* 20.53.60.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353C20 /* 20.53.60.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A46C0 /* 20.58.70.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A46E0 /* 20.58.70.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B4D00 /* 20.59.77.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420670 /* 20.66.6.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450400 /* 20.69.4.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450420 /* 20.69.4.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DCC0 /* 20.70.220.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DCE0 /* 20.70.220.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481B00 /* 20.72.27.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144FE254 /* 20.79.226.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14507B39 /* 20.80.123.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14507B86 /* 20.80.123.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452E03B /* 20.82.224.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452E234 /* 20.82.226.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452F670 /* 20.82.246.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453DCD0 /* 20.83.220.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453DCE0 /* 20.83.220.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145550C5 /* 20.85.80.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14555189 /* 20.85.81.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14565D20 /* 20.86.93.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14565D40 /* 20.86.93.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14584220 /* 20.88.66.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14584240 /* 20.88.66.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145899B0 /* 20.88.153.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145899C0 /* 20.88.153.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590B30 /* 20.89.11.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590B40 /* 20.89.11.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1459A309 /* 20.89.163.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1459A311 /* 20.89.163.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A7C86 /* 20.90.124.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A7DD3 /* 20.90.125.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8100 /* 20.90.129.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8120 /* 20.90.129.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C0340 /* 20.92.3.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C0360 /* 20.92.3.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145EA4C9 /* 20.94.164.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145EA4F4 /* 20.94.164.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14612130 /* 20.97.33.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14612140 /* 20.97.33.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146290E0 /* 20.98.144.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14629100 /* 20.98.145.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C050 /* 20.98.192.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C060 /* 20.98.192.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640060 /* 20.100.0.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640080 /* 20.100.0.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14678301 /* 20.103.131.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1467848B /* 20.103.132.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A46E0 /* 20.106.70.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A4714 /* 20.106.71.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14711159 /* 20.113.17.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1473A822 /* 20.115.168.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1473A914 /* 20.115.169.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147EF1EE /* 20.126.241.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147EF397 /* 20.126.243.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149681B0 /* 20.150.129.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149681C0 /* 20.150.129.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AAF0 /* 20.150.170.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AD40 /* 20.150.173.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC090 /* 20.189.192.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC0A0 /* 20.189.192.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02040 /* 20.192.32.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C05230 /* 20.192.82.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C05240 /* 20.192.82.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09840 /* 20.192.152.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09860 /* 20.192.152.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A840 /* 20.192.168.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A860 /* 20.192.168.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0B820 /* 20.192.184.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CEC0 /* 20.193.206.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C2286A /* 20.194.40.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C352F0 /* 20.195.82.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35300 /* 20.195.83.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C4F991 /* 20.196.249.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C4FA87 /* 20.196.250.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C69448 /* 20.198.148.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C2A0 /* 20.200.194.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C2C0 /* 20.200.194.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C94414 /* 20.201.68.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C9441E /* 20.201.68.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCCBC1 /* 20.204.203.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCCC05 /* 20.204.204.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4330 /* 20.205.67.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4340 /* 20.205.67.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CDF8E0 /* 20.205.248.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0000 /* 20.206.0.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF0000 /* 20.207.0.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D29280 /* 20.210.146.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5CA33 /* 20.213.202.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5CA54 /* 20.213.202.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79B00 /* 20.215.155.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D7A980 /* 20.215.169.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D937C0 /* 20.217.55.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93B00 /* 20.217.59.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761786D /* 23.97.120.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764D000 /* 23.100.208.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400830 /* 40.64.8.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400880 /* 40.64.8.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433AF0 /* 40.67.58.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433CE0 /* 40.67.60.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456AF0 /* 40.69.106.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456F00 /* 40.69.111.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284692D0 /* 40.70.146.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469760 /* 40.70.151.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470B50 /* 40.71.11.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470FA0 /* 40.71.15.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847C1CB /* 40.71.193.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847F98B /* 40.71.249.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847F9CD /* 40.71.249.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A64E0 /* 40.74.100.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9240 /* 40.74.146.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC2F0 /* 40.78.194.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECA60 /* 40.78.202.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F82D0 /* 40.79.130.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9460 /* 40.79.148.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB2F0 /* 40.79.178.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB4E0 /* 40.79.180.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBD40 /* 40.79.189.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B440 /* 40.80.180.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B580 /* 40.80.181.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852B806 /* 40.82.184.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852B82B /* 40.82.184.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855CE5F /* 40.85.206.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28598303 /* 40.89.131.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28598702 /* 40.89.135.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28599B3B /* 40.89.155.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285BD041 /* 40.91.208.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870C357 /* 40.112.195.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F3A0 /* 40.112.243.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871F2F6 /* 40.113.242.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28722884 /* 40.114.40.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877A22C /* 40.119.162.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28780800 /* 40.120.8.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784040 /* 40.120.64.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28785610 /* 40.120.86.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28785620 /* 40.120.86.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BE594 /* 51.11.229.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BE59C /* 51.11.229.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C14E0 /* 51.12.20.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1680 /* 51.12.22.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1D70 /* 51.12.29.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C4880 /* 51.12.72.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C62F0 /* 51.12.98.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6600 /* 51.12.102.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCAF0 /* 51.12.202.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCDC0 /* 51.12.205.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D12D8 /* 51.13.18.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D12E9 /* 51.13.18.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8BA0 /* 51.13.139.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8BC0 /* 51.13.139.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33352840 /* 51.53.40.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356B00 /* 51.53.107.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BB00 /* 51.53.187.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33678E16 /* 51.103.142.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33678FA3 /* 51.103.143.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694D60 /* 51.105.77.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3B10 /* 51.107.59.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3CE0 /* 51.107.60.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B56D9 /* 51.107.86.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9B10 /* 51.107.155.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9CE0 /* 51.107.156.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF670 /* 51.107.246.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF680 /* 51.107.246.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFE20 /* 51.107.254.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFE40 /* 51.107.254.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337437F0 /* 51.116.55.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743B10 /* 51.116.59.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743CC0 /* 51.116.60.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744A20 /* 51.116.74.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749B50 /* 51.116.155.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749E60 /* 51.116.158.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D3D4 /* 51.116.211.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374EC4E /* 51.116.236.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337862E0 /* 51.120.98.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337864C0 /* 51.120.100.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DAF0 /* 51.120.218.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DCC0 /* 51.120.220.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD730 /* 51.138.215.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD740 /* 51.138.215.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C3D7C /* 51.140.61.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4A96 /* 51.140.74.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4DE3 /* 51.140.77.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C5033 /* 51.140.80.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9400 /* 51.140.148.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD300 /* 51.140.211.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD4E0 /* 51.140.212.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CF51D /* 51.140.245.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D2F69 /* 51.141.47.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D34B9 /* 51.141.52.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D7C0D /* 51.141.124.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348885B8 /* 52.136.133.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34888E9A /* 52.136.142.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BD10 /* 52.136.189.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BD20 /* 52.136.189.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5CC0 /* 52.138.92.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6F00 /* 52.139.111.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6F20 /* 52.139.111.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D0168 /* 52.141.1.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D24D6 /* 52.141.36.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928A20 /* 52.146.138.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937520 /* 52.147.117.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937540 /* 52.147.117.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34972AAC /* 52.151.42.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497DD77 /* 52.151.221.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497DDB8 /* 52.151.221.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A165CC /* 52.161.101.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A16616 /* 52.161.102.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26BA0 /* 52.162.107.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26FC0 /* 52.162.111.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A27E04 /* 52.162.126.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A2F2A1 /* 52.162.242.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AB825C /* 52.171.130.92/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC5000 /* 52.172.80.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACD30C /* 52.172.211.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACD481 /* 52.172.212.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADF11B /* 52.173.241.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADF5A4 /* 52.173.245.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE5876 /* 52.174.88.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEB4A0 /* 52.174.180.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF17A9 /* 52.175.23.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B29644 /* 52.178.150.68/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4A4D6 /* 52.180.164.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B74E9D /* 52.183.78.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB4413 /* 52.187.68.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB931B /* 52.187.147.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E18190 /* 52.225.129.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1BCB6 /* 52.225.188.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1BEBE /* 52.225.190.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E712D0 /* 52.231.18.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79300 /* 52.231.147.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E794E0 /* 52.231.148.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7A30A /* 52.231.163.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7C9AD /* 52.231.201.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8BC9A /* 52.232.188.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED187E /* 52.237.24.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED20D4 /* 52.237.32.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EDD648 /* 52.237.214.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F21E70 /* 52.242.30.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22398 /* 52.242.35.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22428 /* 52.242.36.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF30CA /* 52.255.48.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134C540 /* 65.52.197.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FAD0 /* 65.52.250.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5C40 /* 68.221.92.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x5EF55B5D /* 94.245.91.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254000 /* 102.37.64.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255480 /* 102.37.84.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662554A0 /* 102.37.84.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A650 /* 102.37.166.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A660 /* 102.37.166.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851B00 /* 102.133.27.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854855 /* 102.133.72.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859B00 /* 102.133.155.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685A8A7 /* 102.133.168.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685CBFB /* 102.133.203.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685CC41 /* 102.133.204.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FD00 /* 102.133.253.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68293B33 /* 104.41.59.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682984B4 /* 104.41.132.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A7A31 /* 104.42.122.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D1F717 /* 104.209.247.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D20E9C /* 104.210.14.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D351C0 /* 104.211.81.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D392E0 /* 104.211.146.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3BD7C /* 104.211.189.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3BDDA /* 104.211.189.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D61330 /* 104.214.19.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D646BF /* 104.214.70.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D66B94 /* 104.214.107.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A400 /* 104.214.164.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A580 /* 104.214.165.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D71B18 /* 104.215.27.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D71C80 /* 104.215.28.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D73DF8 /* 104.215.61.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8975A1B5 /* 137.117.161.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176C40 /* 158.23.108.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8C00 /* 168.61.140.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8F40 /* 168.61.143.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8BF9D /* 191.232.191.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93300 /* 191.233.51.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CBC0 /* 191.233.203.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CFA0 /* 191.233.207.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEAB470 /* 191.234.180.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4C70 /* 191.238.76.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4C80 /* 191.238.76.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81A80 /* 4.232.26.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86A80 /* 4.232.106.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86C80 /* 4.232.108.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87A80 /* 4.232.122.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87D00 /* 4.232.125.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C280 /* 4.232.194.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C500 /* 4.232.197.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428C48 /* 13.66.140.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D429200 /* 13.66.146.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D429300 /* 13.66.147.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D429400 /* 13.66.148.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430878 /* 13.67.8.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430E00 /* 13.67.14.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454058 /* 13.69.64.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456A50 /* 13.69.106.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456E00 /* 13.69.110.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4570C0 /* 13.69.112.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E358 /* 13.69.227.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45EC00 /* 13.69.236.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45EE00 /* 13.69.238.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464888 /* 13.70.72.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464E00 /* 13.70.78.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4672C0 /* 13.70.114.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AA38 /* 13.71.170.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47B000 /* 13.71.176.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C2E0 /* 13.71.194.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F540 /* 13.73.245.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F580 /* 13.73.245.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FF40 /* 13.73.255.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6B50 /* 13.74.107.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6E00 /* 13.74.110.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2400 /* 13.75.36.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3250 /* 13.77.50.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6AC8 /* 13.78.106.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6F00 /* 13.78.111.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573860 /* 13.87.56.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577A60 /* 13.87.122.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AAD8 /* 13.89.170.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AF00 /* 13.89.175.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59B2C0 /* 13.89.178.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113380 /* 20.17.51.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114280 /* 20.17.66.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114480 /* 20.17.68.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B280 /* 20.18.178.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B500 /* 20.18.181.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152400 /* 20.21.36.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152A80 /* 20.21.42.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152C80 /* 20.21.44.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152EC0 /* 20.21.46.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154280 /* 20.21.66.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154500 /* 20.21.69.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154A80 /* 20.21.74.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154D00 /* 20.21.77.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254500 /* 20.37.69.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254A48 /* 20.37.74.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142684C0 /* 20.38.132.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268CC0 /* 20.38.140.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269290 /* 20.38.146.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269500 /* 20.38.149.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142698C0 /* 20.38.152.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269D00 /* 20.38.157.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270F80 /* 20.39.15.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E040 /* 20.40.224.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294580 /* 20.41.69.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C7C0 /* 20.41.199.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429D040 /* 20.41.208.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4200 /* 20.42.66.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4A40 /* 20.42.74.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2E40 /* 20.43.46.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7980 /* 20.43.121.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7B40 /* 20.43.123.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7F00 /* 20.43.127.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0218 /* 20.44.2.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0B00 /* 20.44.11.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0B80 /* 20.44.11.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0C00 /* 20.44.12.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1340 /* 20.44.19.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1600 /* 20.44.22.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1A90 /* 20.44.26.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1D80 /* 20.44.29.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7A90 /* 20.45.122.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7D00 /* 20.45.125.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC780 /* 20.45.199.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C080 /* 20.48.192.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315210 /* 20.49.82.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315440 /* 20.49.84.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315600 /* 20.49.86.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315A10 /* 20.49.90.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315C00 /* 20.49.92.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315D00 /* 20.49.93.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316680 /* 20.49.102.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317300 /* 20.49.115.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317F00 /* 20.49.127.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324880 /* 20.50.72.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432C800 /* 20.50.200.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344880 /* 20.52.72.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344900 /* 20.52.73.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345840 /* 20.52.88.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143500C0 /* 20.53.0.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14350100 /* 20.53.1.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352980 /* 20.53.41.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6180 /* 20.61.97.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8000 /* 20.62.128.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14410000 /* 20.65.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481280 /* 20.72.18.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481A80 /* 20.72.26.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481E00 /* 20.72.30.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453C040 /* 20.83.192.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145900C0 /* 20.89.0.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146308C0 /* 20.99.8.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DAA80 /* 20.125.170.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DAD00 /* 20.125.173.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCA80 /* 20.125.202.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCD00 /* 20.125.205.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14871A40 /* 20.135.26.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AA18 /* 20.150.170.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AD80 /* 20.150.173.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AE00 /* 20.150.174.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AF80 /* 20.150.175.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B290 /* 20.150.178.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B5C0 /* 20.150.181.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B680 /* 20.150.182.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BA90 /* 20.150.186.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BDC0 /* 20.150.189.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BE80 /* 20.150.190.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496E140 /* 20.150.225.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F100 /* 20.150.241.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A280 /* 20.168.162.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A500 /* 20.168.165.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC440 /* 20.187.196.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDA900 /* 20.189.169.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDAB80 /* 20.189.171.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE000 /* 20.189.224.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA080 /* 20.191.160.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02000 /* 20.192.32.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02100 /* 20.192.33.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02180 /* 20.192.33.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03200 /* 20.192.50.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06290 /* 20.192.98.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06540 /* 20.192.101.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06580 /* 20.192.101.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EA18 /* 20.192.234.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EC00 /* 20.192.236.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C16040 /* 20.193.96.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C16080 /* 20.193.96.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1A040 /* 20.193.160.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C080 /* 20.193.192.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CA10 /* 20.193.202.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CC80 /* 20.193.204.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CD00 /* 20.193.205.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CE40 /* 20.193.206.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24210 /* 20.194.66.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24400 /* 20.194.68.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24600 /* 20.194.70.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C25080 /* 20.194.80.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C25100 /* 20.194.81.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C25180 /* 20.194.81.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C28000 /* 20.194.128.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34080 /* 20.195.64.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C38800 /* 20.195.136.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C38900 /* 20.195.137.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C398C0 /* 20.195.152.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C39980 /* 20.195.153.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4A80 /* 20.205.74.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4D00 /* 20.205.77.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5280 /* 20.205.82.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5500 /* 20.205.85.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D01280 /* 20.208.18.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D01500 /* 20.208.21.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70380 /* 20.215.3.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71280 /* 20.215.18.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71500 /* 20.215.21.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71A80 /* 20.215.26.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71D00 /* 20.215.29.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79A80 /* 20.215.154.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79C80 /* 20.215.156.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92B80 /* 20.217.43.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93A80 /* 20.217.58.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93C80 /* 20.217.60.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94A80 /* 20.217.74.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94D00 /* 20.217.77.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95A80 /* 20.217.90.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95D00 /* 20.217.93.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625270 /* 23.98.82.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625680 /* 23.98.86.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625700 /* 23.98.87.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17627000 /* 23.98.112.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28407000 /* 40.64.112.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28407180 /* 40.64.113.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408780 /* 40.64.135.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433A18 /* 40.67.58.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28437900 /* 40.67.121.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28437A80 /* 40.67.122.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456A50 /* 40.69.106.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456E00 /* 40.69.110.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28457400 /* 40.69.116.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469258 /* 40.70.146.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469600 /* 40.70.150.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470AD8 /* 40.71.10.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A64A0 /* 40.74.100.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9230 /* 40.74.146.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9580 /* 40.74.149.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9740 /* 40.74.151.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2220 /* 40.75.34.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC250 /* 40.78.194.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC4C0 /* 40.78.196.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECA48 /* 40.78.202.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE2D0 /* 40.78.226.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE700 /* 40.78.231.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEA30 /* 40.78.234.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEF80 /* 40.78.239.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF2A0 /* 40.78.242.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF600 /* 40.78.246.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFA60 /* 40.78.250.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8238 /* 40.79.130.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F84C0 /* 40.79.132.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8A20 /* 40.79.138.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8D00 /* 40.79.141.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8F80 /* 40.79.143.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9220 /* 40.79.146.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9480 /* 40.79.148.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9680 /* 40.79.150.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9A68 /* 40.79.154.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA220 /* 40.79.162.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA580 /* 40.79.165.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA600 /* 40.79.166.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAA00 /* 40.79.170.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAD80 /* 40.79.173.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAE00 /* 40.79.174.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB250 /* 40.79.178.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBA08 /* 40.79.186.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBD80 /* 40.79.189.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBE00 /* 40.79.190.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC260 /* 40.79.194.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC580 /* 40.79.197.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503290 /* 40.80.50.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285033C0 /* 40.80.51.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503540 /* 40.80.53.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503680 /* 40.80.54.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B080 /* 40.80.176.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B500 /* 40.80.181.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591740 /* 40.89.23.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28597800 /* 40.89.120.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28597900 /* 40.89.121.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F2A0 /* 40.112.242.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28780840 /* 40.120.8.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28780900 /* 40.120.9.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784200 /* 40.120.66.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784A10 /* 40.120.74.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784D00 /* 40.120.77.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C4000 /* 40.124.64.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B6180 /* 51.11.97.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BC100 /* 51.11.193.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BC180 /* 51.11.193.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1940 /* 51.12.25.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2000 /* 51.12.32.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2080 /* 51.12.32.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6218 /* 51.12.98.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C64C0 /* 51.12.100.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6500 /* 51.12.101.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CA880 /* 51.12.168.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC7C0 /* 51.12.199.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCA18 /* 51.12.202.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCD80 /* 51.12.205.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCE80 /* 51.12.206.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE290 /* 51.12.226.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE580 /* 51.12.229.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE600 /* 51.12.230.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEA90 /* 51.12.234.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CED80 /* 51.12.237.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEE00 /* 51.12.238.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D0000 /* 51.13.0.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D0140 /* 51.13.1.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8080 /* 51.13.128.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8100 /* 51.13.129.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351B40 /* 51.53.27.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356A80 /* 51.53.106.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356C80 /* 51.53.108.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335AB40 /* 51.53.171.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BA80 /* 51.53.186.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BC80 /* 51.53.188.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CA80 /* 51.103.202.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CD00 /* 51.103.205.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680980 /* 51.104.9.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694290 /* 51.105.66.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694580 /* 51.105.69.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694600 /* 51.105.70.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694A90 /* 51.105.74.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694D80 /* 51.105.77.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3540 /* 51.107.53.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B38C0 /* 51.107.56.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3A18 /* 51.107.58.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9480 /* 51.107.148.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B98C0 /* 51.107.152.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9A18 /* 51.107.154.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BC000 /* 51.107.192.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743A18 /* 51.116.58.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749A58 /* 51.116.154.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749E80 /* 51.116.158.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F290 /* 51.116.242.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FA90 /* 51.116.250.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FE40 /* 51.116.254.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FE80 /* 51.116.254.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337862A0 /* 51.120.98.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786A90 /* 51.120.106.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786D80 /* 51.120.109.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786E00 /* 51.120.110.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D290 /* 51.120.210.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D580 /* 51.120.213.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D600 /* 51.120.214.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DA18 /* 51.120.218.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378EA00 /* 51.120.234.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384C000 /* 51.132.192.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A6C0 /* 51.137.166.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AA080 /* 51.138.160.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C92C8 /* 51.140.146.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9740 /* 51.140.151.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD2C0 /* 51.140.210.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD700 /* 51.140.215.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD000 /* 51.143.208.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5A20 /* 52.138.90.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5D00 /* 52.138.93.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE250 /* 52.138.226.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE600 /* 52.138.230.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6EC0 /* 52.140.110.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928380 /* 52.146.131.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34936180 /* 52.147.97.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969C40 /* 52.150.156.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A268C0 /* 52.162.104.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26AA0 /* 52.162.106.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76A50 /* 52.167.106.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76E00 /* 52.167.110.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76F00 /* 52.167.111.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A870C0 /* 52.168.112.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87200 /* 52.168.114.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B21200 /* 52.178.18.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B21400 /* 52.178.20.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68AD0 /* 52.182.138.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68E00 /* 52.182.142.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71238 /* 52.231.18.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71480 /* 52.231.20.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E792C0 /* 52.231.146.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79780 /* 52.231.151.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBA50 /* 52.236.186.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBF00 /* 52.236.191.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F0F180 /* 52.240.241.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F0F400 /* 52.240.244.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69A90 /* 52.246.154.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69D80 /* 52.246.157.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69E00 /* 52.246.158.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134F8C0 /* 65.52.248.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FA10 /* 65.52.250.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5280 /* 68.220.82.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5380 /* 68.220.83.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5400 /* 68.221.84.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6280 /* 68.221.98.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6480 /* 68.221.100.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD9280 /* 68.221.146.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD9500 /* 68.221.149.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254140 /* 102.37.65.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662541C0 /* 102.37.65.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254880 /* 102.37.72.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851A18 /* 102.133.26.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857A90 /* 102.133.122.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857CC0 /* 102.133.124.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857E00 /* 102.133.126.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859A18 /* 102.133.154.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859CC0 /* 102.133.156.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DC40 /* 102.133.220.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FA90 /* 102.133.250.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FD40 /* 102.133.253.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FD80 /* 102.133.253.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EA180 /* 104.46.161.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EA280 /* 104.46.162.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB180 /* 104.46.177.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D01050 /* 104.208.16.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D09050 /* 104.208.144.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35188 /* 104.211.81.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39250 /* 104.211.146.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D612B8 /* 104.214.18.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A180 /* 104.214.161.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A500 /* 104.214.165.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170A80 /* 158.23.10.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170C80 /* 158.23.12.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176400 /* 158.23.100.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177A80 /* 158.23.122.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177D00 /* 158.23.125.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C280 /* 158.23.194.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C500 /* 158.23.197.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8C80 /* 168.61.140.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8D00 /* 168.61.141.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8EC0 /* 168.61.142.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93210 /* 191.233.50.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93640 /* 191.233.54.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93680 /* 191.233.54.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CB88 /* 191.233.203.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CDC0 /* 191.233.205.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8B00 /* 191.234.139.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9290 /* 191.234.146.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9540 /* 191.234.149.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9600 /* 191.234.150.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9700 /* 191.234.151.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9A90 /* 191.234.154.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9DC0 /* 191.234.157.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04957200 /* 4.149.114.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04957280 /* 4.149.114.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04AB1880 /* 4.171.24.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04AB1900 /* 4.171.25.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04BE8340 /* 4.190.131.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04BE8380 /* 4.190.131.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04C2E100 /* 4.194.225.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04C2E180 /* 4.194.225.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81A40 /* 4.232.26.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E82A40 /* 4.232.42.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D404597 /* 13.64.69.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D407144 /* 13.64.113.68/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D407230 /* 13.64.114.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D40C28C /* 13.64.194.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41915C /* 13.65.145.92/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D421A6B /* 13.66.26.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428A00 /* 13.66.138.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430800 /* 13.67.8.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D441C87 /* 13.68.28.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454200 /* 13.69.66.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454280 /* 13.69.66.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D457000 /* 13.69.112.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E200 /* 13.69.226.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464A88 /* 13.70.74.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47737D /* 13.71.115.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D477C51 /* 13.71.124.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AA00 /* 13.71.170.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C200 /* 13.71.194.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D48FF96 /* 13.72.255.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4964B7 /* 13.73.100.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FEE0 /* 13.73.254.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6A00 /* 13.74.106.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2200 /* 13.75.34.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B8654 /* 13.75.134.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4CA182 /* 13.76.161.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3200 /* 13.77.50.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E3323 /* 13.78.51.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6A00 /* 13.78.106.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EBC19 /* 13.78.188.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4F22EC /* 13.79.34.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D513363 /* 13.81.51.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5235BF /* 13.82.53.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5496B2 /* 13.84.150.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D549D46 /* 13.84.157.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5510BC /* 13.85.16.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573800 /* 13.87.56.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577A00 /* 13.87.122.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D581E27 /* 13.88.30.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58FDB4 /* 13.88.253.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5929F5 /* 13.89.41.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D598EAD /* 13.89.142.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AA00 /* 13.89.170.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59BEBA /* 13.89.190.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59E0E5 /* 13.89.224.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5AC79B /* 13.90.199.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5BF634 /* 13.91.246.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5D9950 /* 13.93.153.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5D9C7D /* 13.93.156.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DCF42 /* 13.93.207.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5EC905 /* 13.94.201.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5FEA44 /* 13.95.234.68/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140689C0 /* 20.6.137.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14068C00 /* 20.6.140.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14068C80 /* 20.6.140.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14099C80 /* 20.9.156.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140E7AC0 /* 20.14.122.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140E7E80 /* 20.14.126.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140E7F00 /* 20.14.127.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140F0940 /* 20.15.9.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140F0D80 /* 20.15.13.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140F0E00 /* 20.15.14.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140F84C0 /* 20.15.132.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140F8500 /* 20.15.133.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14111840 /* 20.17.24.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113300 /* 20.17.51.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114200 /* 20.17.66.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14120300 /* 20.18.3.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14120540 /* 20.18.5.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14120580 /* 20.18.5.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B200 /* 20.18.178.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14131C80 /* 20.19.28.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14131E80 /* 20.19.30.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14131F00 /* 20.19.31.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141522A0 /* 20.21.34.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152A00 /* 20.21.42.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154200 /* 20.21.66.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154A00 /* 20.21.74.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141555C0 /* 20.21.85.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14180640 /* 20.24.6.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141A1580 /* 20.26.21.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14241A84 /* 20.36.26.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14242A08 /* 20.36.42.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14244BA3 /* 20.36.75.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246A00 /* 20.36.106.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247200 /* 20.36.114.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247B60 /* 20.36.123.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142544A0 /* 20.37.68.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254B80 /* 20.37.75.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425544D /* 20.37.84.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E420 /* 20.37.228.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268C80 /* 20.38.140.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269200 /* 20.38.146.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269880 /* 20.38.152.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270F40 /* 20.39.15.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427413A /* 20.39.65.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14275099 /* 20.39.80.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142763E6 /* 20.39.99.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428CFA0 /* 20.40.207.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294540 /* 20.41.69.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14299251 /* 20.41.146.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C780 /* 20.41.199.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AA9C0 /* 20.42.169.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AAA80 /* 20.42.170.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2E00 /* 20.43.46.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7E80 /* 20.43.126.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0240 /* 20.44.2.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0A00 /* 20.44.10.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1A00 /* 20.44.26.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D73A0 /* 20.45.115.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7A00 /* 20.45.122.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC660 /* 20.45.198.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F9111 /* 20.47.145.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C020 /* 20.48.192.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315240 /* 20.49.82.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315A40 /* 20.49.90.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316640 /* 20.49.102.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317280 /* 20.49.114.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317EA0 /* 20.49.126.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14325D80 /* 20.50.93.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352900 /* 20.53.41.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353FC0 /* 20.53.63.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14355BD0 /* 20.53.91.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14362623 /* 20.54.38.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6100 /* 20.61.97.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143F816B /* 20.63.129.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14402959 /* 20.64.41.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144752CA /* 20.71.82.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481240 /* 20.72.18.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481A40 /* 20.72.26.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC740 /* 20.74.199.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14572221 /* 20.87.34.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575780 /* 20.87.87.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590080 /* 20.89.0.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B0D80 /* 20.91.13.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B0F80 /* 20.91.15.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B6000 /* 20.91.96.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B93C0 /* 20.91.147.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B9600 /* 20.91.150.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B9680 /* 20.91.150.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14641000 /* 20.100.16.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146413C0 /* 20.100.19.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14641400 /* 20.100.20.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1471F8C0 /* 20.113.248.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1471FA40 /* 20.113.250.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1471FA80 /* 20.113.250.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1476C7C0 /* 20.118.199.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DAA00 /* 20.125.170.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCA00 /* 20.125.202.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A6C0 /* 20.150.166.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AA40 /* 20.150.170.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B200 /* 20.150.178.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BA00 /* 20.150.186.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14975119 /* 20.151.81.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A49900 /* 20.164.153.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A49980 /* 20.164.153.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A62A80 /* 20.166.42.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A62E80 /* 20.166.46.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A62F00 /* 20.166.47.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A78080 /* 20.167.128.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A78180 /* 20.167.129.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A200 /* 20.168.162.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AF0080 /* 20.175.0.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AF0600 /* 20.175.6.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AF0680 /* 20.175.6.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC400 /* 20.187.196.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA020 /* 20.191.160.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06200 /* 20.192.98.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A6C0 /* 20.192.166.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E700 /* 20.192.231.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EA40 /* 20.192.234.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CA40 /* 20.193.202.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1F903 /* 20.193.249.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C20372 /* 20.194.3.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24240 /* 20.194.66.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C25040 /* 20.194.80.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C33A1A /* 20.195.58.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7CC00 /* 20.199.204.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7CCC0 /* 20.199.204.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7CD80 /* 20.199.205.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8A340 /* 20.200.163.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8A4C0 /* 20.200.164.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8A500 /* 20.200.165.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB0556 /* 20.203.5.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5B00 /* 20.203.91.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5C00 /* 20.203.92.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5C80 /* 20.203.92.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC340 /* 20.204.195.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC500 /* 20.204.197.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC580 /* 20.204.197.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4A00 /* 20.205.74.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5200 /* 20.205.82.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0640 /* 20.206.6.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF0600 /* 20.207.6.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF06C0 /* 20.207.6.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF0780 /* 20.207.7.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CFAA40 /* 20.207.170.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CFAD80 /* 20.207.173.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CFAE00 /* 20.207.174.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D01200 /* 20.208.18.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D094C0 /* 20.208.148.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D09700 /* 20.208.151.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D09780 /* 20.208.151.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D295C0 /* 20.210.149.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D3E180 /* 20.211.225.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D3E5C0 /* 20.211.229.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D3E600 /* 20.211.230.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5C5C0 /* 20.213.197.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5C780 /* 20.213.199.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5E080 /* 20.213.224.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5E1C0 /* 20.213.225.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5E200 /* 20.213.226.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D68400 /* 20.214.132.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D68640 /* 20.214.134.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D68680 /* 20.214.134.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70320 /* 20.215.3.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71200 /* 20.215.18.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71A00 /* 20.215.26.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79A00 /* 20.215.154.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D90A40 /* 20.217.10.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92B20 /* 20.217.43.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DAB9C0 /* 20.218.185.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DABCC0 /* 20.218.188.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DABD00 /* 20.218.189.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DC0200 /* 20.220.2.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DC0440 /* 20.220.4.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DC0480 /* 20.220.4.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DD8D00 /* 20.221.141.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E2D000 /* 20.226.208.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E2D200 /* 20.226.210.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E2D280 /* 20.226.210.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E40440 /* 20.228.4.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E40640 /* 20.228.6.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E40680 /* 20.228.6.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E98340 /* 20.233.131.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E98380 /* 20.233.131.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EC9700 /* 20.236.151.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F17200 /* 20.241.114.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F174C0 /* 20.241.116.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F17500 /* 20.241.117.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F4C000 /* 20.244.192.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F4C180 /* 20.244.193.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14FCD040 /* 20.252.208.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14FCD080 /* 20.252.208.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760B4D5 /* 23.96.180.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760DBCF /* 23.96.219.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760F2EA /* 23.96.242.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625200 /* 23.98.82.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626BE0 /* 23.98.107.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765F063 /* 23.101.240.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766BF0D /* 23.102.191.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766EF86 /* 23.102.239.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400F00 /* 40.64.15.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408700 /* 40.64.135.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28416A9A /* 40.65.106.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28417269 /* 40.65.114.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284333A0 /* 40.67.51.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433A40 /* 40.67.58.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28442C55 /* 40.68.44.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456A00 /* 40.69.106.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28457500 /* 40.69.117.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2846008C /* 40.70.0.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2846DCCA /* 40.70.220.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470A00 /* 40.71.10.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28471113 /* 40.71.17.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847CB25 /* 40.71.203.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847CC73 /* 40.71.204.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847D872 /* 40.71.216.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6200 /* 40.74.98.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A8FEB /* 40.74.143.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A93C0 /* 40.74.147.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2020 /* 40.75.32.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2280 /* 40.75.34.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D3FB3 /* 40.77.63.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC200 /* 40.78.194.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECB20 /* 40.78.203.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE200 /* 40.78.226.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EECC0 /* 40.78.236.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF3C0 /* 40.78.243.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFA00 /* 40.78.250.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F27A2 /* 40.79.39.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F3B5C /* 40.79.59.92/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F4388 /* 40.79.67.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8200 /* 40.79.130.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8A30 /* 40.79.138.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8E40 /* 40.79.142.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9230 /* 40.79.146.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9580 /* 40.79.149.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9A80 /* 40.79.154.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA348 /* 40.79.163.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA3C0 /* 40.79.163.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAA30 /* 40.79.170.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAEC0 /* 40.79.174.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB200 /* 40.79.178.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBA10 /* 40.79.186.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBF00 /* 40.79.191.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC280 /* 40.79.194.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503200 /* 40.80.50.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503FA0 /* 40.80.63.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28506580 /* 40.80.101.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28506700 /* 40.80.103.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28506780 /* 40.80.103.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850AD00 /* 40.80.173.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850EC9F /* 40.80.236.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285158E5 /* 40.81.88.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851B718 /* 40.81.183.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285389BF /* 40.83.137.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855B2D3 /* 40.85.178.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E5F5 /* 40.86.229.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285916E0 /* 40.89.22.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285943D0 /* 40.89.67.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285984EE /* 40.89.132.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28708C0C /* 40.112.140.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F100 /* 40.112.241.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F93C /* 40.112.249.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28715A5B /* 40.113.90.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872F0FD /* 40.114.240.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873F125 /* 40.115.241.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28751940 /* 40.117.25.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28751B00 /* 40.117.27.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28751B80 /* 40.117.27.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876F52C /* 40.118.245.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876F5FB /* 40.118.245.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784A40 /* 40.120.74.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A8459 /* 40.122.132.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287AAE8C /* 40.122.174.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EF4D1 /* 40.126.244.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BA968 /* 51.11.169.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BC0C0 /* 51.11.192.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2B00 /* 51.12.43.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6240 /* 51.12.98.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC300 /* 51.12.195.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCA40 /* 51.12.202.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE200 /* 51.12.226.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEA00 /* 51.12.234.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D19B6 /* 51.13.25.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D96AF /* 51.13.150.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351B00 /* 51.53.27.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356740 /* 51.53.103.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335AB00 /* 51.53.171.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BA00 /* 51.53.186.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367061B /* 51.103.6.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CA00 /* 51.103.202.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681F80 /* 51.104.31.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694200 /* 51.105.66.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694A00 /* 51.105.74.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695CC0 /* 51.105.92.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B07BF /* 51.107.7.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B34E0 /* 51.107.52.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3A40 /* 51.107.58.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9420 /* 51.107.148.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9A40 /* 51.107.154.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE355 /* 51.107.227.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337401F7 /* 51.116.1.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337432E0 /* 51.116.50.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743A40 /* 51.116.58.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33747BED /* 51.116.123.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337492E0 /* 51.116.146.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749A80 /* 51.116.154.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F200 /* 51.116.242.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FA00 /* 51.116.250.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782C80 /* 51.120.44.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786240 /* 51.120.98.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786A00 /* 51.120.106.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378B3C0 /* 51.120.179.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378B5C0 /* 51.120.181.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378B600 /* 51.120.182.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D200 /* 51.120.210.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DA40 /* 51.120.218.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E4A0 /* 51.120.228.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33844263 /* 51.132.66.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A680 /* 51.137.166.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C464B /* 51.140.70.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4B92 /* 51.140.75.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C5338 /* 51.140.83.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C63E9 /* 51.140.99.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9200 /* 51.140.146.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD200 /* 51.140.210.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D194D /* 51.141.25.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D354C /* 51.141.53.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D37E5 /* 51.141.55.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338E82C0 /* 51.142.130.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338E8480 /* 51.142.132.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338E8500 /* 51.142.133.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FBD25 /* 51.143.189.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3390B1A6 /* 51.144.177.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3390B6E9 /* 51.144.182.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883440 /* 52.136.52.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348886FA /* 52.136.134.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34888846 /* 52.136.136.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A425A /* 52.138.66.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5C00 /* 52.138.92.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A8D70 /* 52.138.141.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AC521 /* 52.138.197.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AC92F /* 52.138.201.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348ACD61 /* 52.138.205.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348ACE99 /* 52.138.206.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE3C0 /* 52.138.227.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B56D2 /* 52.139.86.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6E40 /* 52.140.110.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F55E7 /* 52.143.85.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F8829 /* 52.143.136.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34924FA0 /* 52.146.79.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928300 /* 52.146.131.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34942900 /* 52.148.41.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34942A80 /* 52.148.42.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34942B00 /* 52.148.43.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34962624 /* 52.150.38.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969AE0 /* 52.150.154.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34971076 /* 52.151.16.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CAA68 /* 52.156.170.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349EEACB /* 52.158.234.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F32B3 /* 52.159.50.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349FC980 /* 52.159.201.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A10D43 /* 52.161.13.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A11683 /* 52.161.22.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A1647E /* 52.161.100.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26A00 /* 52.162.106.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A2FC1A /* 52.162.252.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A33F14 /* 52.163.63.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A3F952 /* 52.163.249.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A4FABC /* 52.164.250.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A52ACC /* 52.165.42.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A52EF9 /* 52.165.46.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A581B8 /* 52.165.129.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5E570 /* 52.165.229.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A75250 /* 52.167.82.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76B80 /* 52.167.107.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A81CDE /* 52.168.28.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A97A25 /* 52.169.122.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9DBB7 /* 52.169.219.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AACC53 /* 52.170.204.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC377F /* 52.172.55.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC5240 /* 52.172.82.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC5440 /* 52.172.84.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC5480 /* 52.172.84.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACCE82 /* 52.172.206.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD94D9 /* 52.173.148.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADC4AA /* 52.173.196.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADF0F4 /* 52.173.240.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEFDEF /* 52.174.253.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF19D3 /* 52.175.25.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF27E8 /* 52.175.39.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B00088 /* 52.176.0.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B00747 /* 52.176.7.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B06531 /* 52.176.101.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B09B7F /* 52.176.155.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B0FB57 /* 52.176.251.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B1AC4A /* 52.177.172.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B1CE99 /* 52.177.206.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B26CDE /* 52.178.108.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B34980 /* 52.179.73.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B38D21 /* 52.179.141.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B38FE9 /* 52.179.143.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3C800 /* 52.179.200.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4A0FB /* 52.180.160.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4A101 /* 52.180.161.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B189 /* 52.180.177.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68A00 /* 52.182.138.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B72AFC /* 52.183.42.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B74224 /* 52.183.66.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B75CDF /* 52.183.92.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B77765 /* 52.183.119.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B898F1 /* 52.184.152.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BA45E0 /* 52.186.69.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB0B08 /* 52.187.11.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB0C5D /* 52.187.12.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BF2840 /* 52.191.40.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BF2980 /* 52.191.41.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFC5DC /* 52.191.197.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E2128C /* 52.226.18.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E215B2 /* 52.226.21.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E60F3F /* 52.230.15.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E617AA /* 52.230.23.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E6465E /* 52.230.70.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E65715 /* 52.230.87.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71200 /* 52.231.18.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7197B /* 52.231.25.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7278F /* 52.231.39.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E73800 /* 52.231.56.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79200 /* 52.231.146.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7CEEA /* 52.231.206.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7CF1F /* 52.231.207.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E83BDC /* 52.232.59.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E98056 /* 52.233.128.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EB28F7 /* 52.235.40.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EB2E1C /* 52.235.46.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBD00 /* 52.236.189.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED14FC /* 52.237.20.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69A00 /* 52.246.154.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF3413 /* 52.255.52.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF3ADD /* 52.255.58.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134D209 /* 65.52.210.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FB80 /* 65.52.251.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DA7800 /* 68.218.120.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC2240 /* 68.220.34.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC2300 /* 68.220.35.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5200 /* 68.220.82.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD2A00 /* 68.221.42.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5240 /* 68.221.82.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851A40 /* 102.133.26.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853C40 /* 102.133.60.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857A00 /* 102.133.122.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859A40 /* 102.133.154.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DC00 /* 102.133.220.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FA00 /* 102.133.250.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68280858 /* 104.40.8.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829343D /* 104.41.52.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68293645 /* 104.41.54.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829B15D /* 104.41.177.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D10B7 /* 104.45.16.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D83C1 /* 104.45.131.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D9049 /* 104.45.144.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB140 /* 104.46.177.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D0E700 /* 104.208.231.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D25963 /* 104.210.89.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D2D9FB /* 104.210.217.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35400 /* 104.211.84.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D36632 /* 104.211.102.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39200 /* 104.211.146.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A25E /* 104.211.162.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3B875 /* 104.211.184.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3BCAE /* 104.211.188.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E354 /* 104.211.227.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D61200 /* 104.214.18.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D617C0 /* 104.214.23.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D61AB1 /* 104.214.26.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D70135 /* 104.215.1.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D71527 /* 104.215.21.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D737E3 /* 104.215.55.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6C8C0000 /* 108.140.0.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6C8C0080 /* 108.140.0.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974A5CC /* 137.116.165.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8975099D /* 137.117.9.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37AA85 /* 157.55.170.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E1771C0 /* 158.23.113.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8E80 /* 168.61.142.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACA7E800 /* 172.167.232.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACA7E880 /* 172.167.232.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE833AF /* 191.232.51.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE835CB /* 191.232.53.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90BC0 /* 191.233.11.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93240 /* 191.233.50.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE97B40 /* 191.233.123.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE97B80 /* 191.233.123.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CC80 /* 191.233.204.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8AA0 /* 191.234.138.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9200 /* 191.234.146.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9A00 /* 191.234.154.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEAB39D /* 191.234.179.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEACE51 /* 191.234.206.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFB37C /* 191.239.179.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E96FC /* 207.46.150.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81EA0 /* 4.232.30.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4026E1 /* 13.64.38.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428DA0 /* 13.66.141.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456AF0 /* 13.69.106.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E5B0 /* 13.69.229.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464970 /* 13.70.73.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AD40 /* 13.71.173.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C440 /* 13.71.196.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F060 /* 13.73.240.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2700 /* 13.75.39.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D34F0 /* 13.77.52.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56242A /* 13.86.36.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DB40 /* 13.86.219.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5739E0 /* 13.87.57.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577BE0 /* 13.87.123.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AE50 /* 13.89.174.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113680 /* 20.17.54.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152500 /* 20.21.37.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424F268 /* 20.36.242.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14251801 /* 20.37.24.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14276126 /* 20.39.97.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142763B1 /* 20.39.99.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14287215 /* 20.40.114.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A127 /* 20.40.161.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B595A /* 20.43.89.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7860 /* 20.43.120.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1060 /* 20.44.16.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1B60 /* 20.44.27.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D033C /* 20.45.3.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0DF0 /* 20.46.13.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E9207 /* 20.46.146.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143306F0 /* 20.51.6.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B5180 /* 20.59.81.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481B80 /* 20.72.27.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC310 /* 20.74.195.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146309E0 /* 20.99.9.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496ABC0 /* 20.150.171.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F570 /* 20.150.245.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B9641B /* 20.185.100.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD4A67 /* 20.189.74.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02F60 /* 20.192.47.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EB80 /* 20.192.235.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CB60 /* 20.193.203.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24BE0 /* 20.194.75.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34E50 /* 20.195.78.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5B70 /* 20.203.91.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF0270 /* 20.207.2.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D29060 /* 20.210.144.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70D30 /* 20.215.13.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93530 /* 20.217.53.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176252F0 /* 23.98.82.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423939 /* 40.66.57.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2842395B /* 40.66.57.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2843BC44 /* 40.67.188.68/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456BF0 /* 40.69.107.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470DB0 /* 40.71.13.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A65D0 /* 40.74.101.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9350 /* 40.74.147.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC3F0 /* 40.78.195.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECBB0 /* 40.78.203.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F83E0 /* 40.79.131.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB3D0 /* 40.79.179.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBB10 /* 40.79.187.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850EA09 /* 40.80.234.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850FAA8 /* 40.80.250.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850FF0C /* 40.80.255.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28511C32 /* 40.81.28.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28512B2F /* 40.81.43.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851387A /* 40.81.56.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851486E /* 40.81.72.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28515870 /* 40.81.88.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285159F2 /* 40.81.89.242/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517A27 /* 40.81.122.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28519AFE /* 40.81.154.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851B856 /* 40.81.184.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851DC26 /* 40.81.220.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851F835 /* 40.81.248.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851F9FB /* 40.81.249.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28529AAE /* 40.82.154.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28529C95 /* 40.82.156.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BCD0 /* 40.82.188.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852D954 /* 40.82.217.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852EC18 /* 40.82.236.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28593845 /* 40.89.56.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285ADB17 /* 40.90.219.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B4A5F /* 40.91.74.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287703C3 /* 40.119.3.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877CBFC /* 40.119.203.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1430 /* 51.12.20.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1C30 /* 51.12.28.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C63C0 /* 51.12.99.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCBC0 /* 51.12.203.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351E80 /* 51.53.30.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335AE80 /* 51.53.174.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680870 /* 51.104.8.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3BA0 /* 51.107.59.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B62C9 /* 51.107.98.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9BA0 /* 51.107.155.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF780 /* 51.107.247.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743BA0 /* 51.116.59.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33746296 /* 51.116.98.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749BE0 /* 51.116.155.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786350 /* 51.120.99.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DBC0 /* 51.120.219.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378EBE0 /* 51.120.235.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD400 /* 51.140.212.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3391B0D7 /* 51.145.176.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E5BDD /* 52.142.91.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F3778 /* 52.159.55.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26EB0 /* 52.162.110.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E09238 /* 52.224.146.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79410 /* 52.231.148.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8E6C9 /* 52.232.230.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22F80 /* 52.242.47.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD9FBA /* 52.253.159.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDE1BA /* 52.253.225.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDE26E /* 52.253.226.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5730 /* 68.221.87.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668500C0 /* 102.133.0.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851C70 /* 102.133.28.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668582CE /* 102.133.130.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859C10 /* 102.133.156.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D393E0 /* 104.211.147.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176730 /* 158.23.103.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE919B7 /* 191.233.25.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE932D0 /* 191.233.50.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CD00 /* 191.233.205.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1477C72D /* 20.119.199.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147A404C /* 20.122.64.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8A85 /* 40.90.138.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8A88 /* 40.90.138.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8D80 /* 40.90.141.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8DA7 /* 40.90.141.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A91C0 /* 40.90.145.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41346C1F /* 65.52.108.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41346C26 /* 65.52.108.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5842 /* 104.44.88.66/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C586A /* 104.44.88.106/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5870 /* 104.44.88.112/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C58B0 /* 104.44.88.176/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C58B8 /* 104.44.88.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5927 /* 104.44.89.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C592A /* 104.44.89.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5A80 /* 104.44.90.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5AC2 /* 104.44.90.194/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5BA0 /* 104.44.91.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81820 /* 4.232.24.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D466932 /* 13.70.105.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D466B8D /* 13.70.107.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47B84A /* 13.71.184.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47BBA6 /* 13.71.187.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4BA4F9 /* 13.75.164.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4BDAAC /* 13.75.218.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E1298 /* 13.78.18.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E13EB /* 13.78.19.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D563AD7 /* 13.86.58.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58F9F4 /* 13.88.249.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113020 /* 20.17.48.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152020 /* 20.21.32.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247844 /* 20.36.120.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259CD0 /* 20.37.156.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C310 /* 20.37.195.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E044 /* 20.37.224.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265450 /* 20.38.84.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268878 /* 20.38.136.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270844 /* 20.39.8.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14290470 /* 20.41.4.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294188 /* 20.41.65.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C044 /* 20.41.192.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A04D0 /* 20.42.4.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A81A0 /* 20.42.129.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE044 /* 20.42.224.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2998 /* 20.43.41.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4190 /* 20.43.65.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8260 /* 20.43.130.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7044 /* 20.45.112.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC044 /* 20.45.192.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0CC8 /* 20.46.12.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E794C /* 20.46.121.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345D28 /* 20.52.93.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481020 /* 20.72.16.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14630840 /* 20.99.8.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A068 /* 20.150.160.104/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A0D0 /* 20.150.160.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BA5338 /* 20.186.83.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6AC0 /* 20.189.106.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A020 /* 20.192.160.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E118 /* 20.192.225.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C20466 /* 20.194.4.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5A88 /* 20.203.90.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D29200 /* 20.210.146.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70020 /* 20.215.0.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92820 /* 20.217.40.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17616A8E /* 23.97.106.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761C929 /* 23.97.201.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17640087 /* 23.100.0.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764E20D /* 23.100.226.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17659393 /* 23.101.147.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765985F /* 23.101.152.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433044 /* 40.67.48.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28463ADD /* 40.70.58.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1E50 /* 40.74.30.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503844 /* 40.80.56.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A844 /* 40.80.168.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BC00 /* 40.80.188.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852F870 /* 40.82.248.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2853B0C7 /* 40.83.176.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2853B2F2 /* 40.83.178.242/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855DF19 /* 40.85.223.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856A76E /* 40.86.167.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591044 /* 40.89.16.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859A8E1 /* 40.89.168.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859AAB8 /* 40.89.170.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859AB65 /* 40.89.171.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876AE0C /* 40.118.174.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287709D0 /* 40.119.9.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BD4FD /* 40.123.212.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BDA3F /* 40.123.218.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BDB7D /* 40.123.219.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BE187 /* 40.123.225.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F0552 /* 40.127.5.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F057C /* 40.127.5.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F93C4 /* 40.127.147.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2910 /* 51.12.41.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2F10 /* 51.12.47.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC110 /* 51.12.193.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC6C8 /* 51.12.198.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351820 /* 51.53.24.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335A820 /* 51.53.168.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367126F /* 51.103.18.111/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681988 /* 51.104.25.136/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695044 /* 51.105.80.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695844 /* 51.105.88.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3078 /* 51.107.48.120/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9044 /* 51.107.144.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BCBC3 /* 51.107.203.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF6A0 /* 51.107.246.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744A10 /* 51.116.74.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782878 /* 51.120.40.120/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E044 /* 51.120.224.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378EAB0 /* 51.120.234.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A078 /* 51.137.160.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338A609E /* 51.138.96.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CC82E /* 51.140.200.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CCB1B /* 51.140.203.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CCC04 /* 51.140.204.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D67C1 /* 51.141.103.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC044 /* 51.143.192.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883044 /* 52.136.48.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6878 /* 52.140.104.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D0647 /* 52.141.6.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D06B5 /* 52.141.6.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D16A4 /* 52.141.22.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34923210 /* 52.146.50.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968844 /* 52.150.136.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC853A /* 52.172.133.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB0055 /* 52.187.0.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB03CB /* 52.187.3.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB916B /* 52.187.145.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45188 /* 52.228.81.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E61BD8 /* 52.230.27.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E813F6 /* 52.232.19.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F6A048 /* 52.246.160.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F700C8 /* 52.247.0.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5020 /* 68.221.80.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66252903 /* 102.37.41.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853844 /* 102.133.56.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685D860 /* 102.133.216.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E018 /* 102.133.224.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68293676 /* 104.41.54.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D07BF /* 104.45.7.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35951 /* 104.211.89.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3650E /* 104.211.101.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D36752 /* 104.211.103.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176020 /* 158.23.96.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE835DF /* 191.232.53.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90820 /* 191.233.8.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEAA052 /* 191.234.160.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE190 /* 191.235.225.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259E00 /* 20.37.158.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C200 /* 20.37.194.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270D00 /* 20.39.13.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14290600 /* 20.41.6.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C200 /* 20.41.194.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A0500 /* 20.42.5.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8600 /* 20.42.134.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE200 /* 20.42.226.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC440 /* 20.45.196.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B9480 /* 20.91.148.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D9B00 /* 20.125.155.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A62900 /* 20.166.41.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6B00 /* 20.189.107.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34400 /* 20.195.68.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC5C0 /* 20.204.197.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E98200 /* 20.233.130.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1C00 /* 40.74.28.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BB00 /* 40.80.187.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852FC00 /* 40.82.252.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770A00 /* 40.119.10.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681A00 /* 51.104.26.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968A00 /* 52.150.138.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45200 /* 52.228.82.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE200 /* 191.235.226.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454790 /* 13.69.71.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464EB0 /* 13.70.78.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AF70 /* 13.71.175.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C760 /* 13.71.199.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F480 /* 13.73.244.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6F80 /* 13.74.111.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6F90 /* 13.78.111.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DDE0 /* 13.86.221.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259D40 /* 20.37.157.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C350 /* 20.37.195.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265580 /* 20.38.85.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270B40 /* 20.39.11.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14290580 /* 20.41.5.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A0620 /* 20.42.6.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A0680 /* 20.42.6.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4040 /* 20.42.64.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A83C0 /* 20.42.131.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE640 /* 20.42.230.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B41D0 /* 20.43.65.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B82F0 /* 20.43.130.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6C20 /* 20.189.108.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456EB0 /* 40.69.110.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469750 /* 40.70.151.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1E90 /* 40.74.30.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B23E0 /* 40.75.35.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEF00 /* 40.78.239.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFBE0 /* 40.78.251.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852FD70 /* 40.82.253.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285911C0 /* 40.89.17.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287709F0 /* 40.119.9.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336819D0 /* 51.104.25.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694D40 /* 51.105.77.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968B90 /* 52.150.139.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68D80 /* 52.182.141.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E451E0 /* 52.228.81.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A130 /* 104.214.161.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81AE0 /* 4.232.26.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141133C0 /* 20.17.51.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152440 /* 20.21.36.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247D78 /* 20.36.125.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247DC0 /* 20.36.125.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254670 /* 20.37.70.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142546C0 /* 20.37.70.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268E70 /* 20.38.142.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268EC0 /* 20.38.142.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270286 /* 20.39.2.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142702D0 /* 20.39.2.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142702ED /* 20.39.2.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427030B /* 20.39.3.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427030E /* 20.39.3.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270311 /* 20.39.3.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270326 /* 20.39.3.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142712A9 /* 20.39.18.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E130 /* 20.40.225.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E180 /* 20.40.225.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2F48 /* 20.43.47.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2F60 /* 20.43.47.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7450 /* 20.45.116.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7460 /* 20.45.116.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0A38 /* 20.46.10.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0A60 /* 20.46.10.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C180 /* 20.48.193.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C1A0 /* 20.48.193.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316770 /* 20.49.103.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143167C0 /* 20.49.103.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317608 /* 20.49.118.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317620 /* 20.49.118.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431F8D1 /* 20.49.248.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431F938 /* 20.49.249.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431F94E /* 20.49.249.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431F965 /* 20.49.249.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431F96A /* 20.49.249.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431F99C /* 20.49.249.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431F9BD /* 20.49.249.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431F9D0 /* 20.49.249.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431F9EC /* 20.49.249.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431FA02 /* 20.49.250.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432D3C0 /* 20.50.211.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432D463 /* 20.50.212.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432D467 /* 20.50.212.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432D48C /* 20.50.212.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432D506 /* 20.50.213.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432D54C /* 20.50.213.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432D558 /* 20.50.213.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432D55D /* 20.50.213.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432D55E /* 20.50.213.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432D578 /* 20.50.213.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330860 /* 20.51.8.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143308C0 /* 20.51.8.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143310B0 /* 20.51.16.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331100 /* 20.51.17.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14334908 /* 20.51.73.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1433490B /* 20.51.73.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14334916 /* 20.51.73.22/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14334919 /* 20.51.73.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1433491A /* 20.51.73.26/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14334924 /* 20.51.73.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14334927 /* 20.51.73.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1433492C /* 20.51.73.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352C58 /* 20.53.44.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352C60 /* 20.53.44.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353000 /* 20.53.48.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353020 /* 20.53.48.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1435721A /* 20.53.114.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14357247 /* 20.53.114.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14357254 /* 20.53.114.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14357276 /* 20.53.114.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4200 /* 20.58.66.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4220 /* 20.58.66.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6290 /* 20.61.98.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6300 /* 20.61.99.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8120 /* 20.62.129.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8180 /* 20.62.129.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418248 /* 20.65.130.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418260 /* 20.65.130.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420210 /* 20.66.2.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420280 /* 20.66.2.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481400 /* 20.72.20.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A6B0 /* 20.150.166.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A780 /* 20.150.167.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B94B06 /* 20.185.75.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B94BD1 /* 20.185.75.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC510 /* 20.187.197.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC580 /* 20.187.197.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE0E0 /* 20.189.224.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE140 /* 20.189.225.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA160 /* 20.191.161.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA1C0 /* 20.191.161.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A6B0 /* 20.192.166.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A780 /* 20.192.167.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E7C0 /* 20.192.231.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E7E0 /* 20.192.231.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C10359 /* 20.193.3.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C103F3 /* 20.193.3.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C10746 /* 20.193.7.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C10784 /* 20.193.7.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C13BAC /* 20.193.59.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C13BFD /* 20.193.59.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24888 /* 20.194.72.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C248A0 /* 20.194.72.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D703C0 /* 20.215.3.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92BC0 /* 20.217.43.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626CB8 /* 23.98.108.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626D00 /* 23.98.109.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433468 /* 40.67.52.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284334C0 /* 40.67.52.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850ADD0 /* 40.80.173.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850ADE0 /* 40.80.173.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877F182 /* 40.119.241.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877F194 /* 40.119.241.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877F19A /* 40.119.241.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877F249 /* 40.119.242.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877F24F /* 40.119.242.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877F2A8 /* 40.119.242.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877F2E8 /* 40.119.242.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877F314 /* 40.119.243.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877F377 /* 40.119.243.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877F3B2 /* 40.119.243.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C61F3 /* 40.124.97.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C620E /* 40.124.98.14/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C6217 /* 40.124.98.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C6222 /* 40.124.98.34/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C6230 /* 40.124.98.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C6234 /* 40.124.98.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C6246 /* 40.124.98.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C6364 /* 40.124.99.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2B90 /* 51.12.43.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2BA0 /* 51.12.43.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC278 /* 51.12.194.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC3C0 /* 51.12.195.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8880 /* 51.13.136.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D88A0 /* 51.13.136.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351BC0 /* 51.53.27.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335ABC0 /* 51.53.171.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33688DE3 /* 51.104.141.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF140 /* 51.107.241.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF160 /* 51.107.241.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF950 /* 51.107.249.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF960 /* 51.107.249.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337433B0 /* 51.116.51.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743600 /* 51.116.54.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749478 /* 51.116.148.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337494C0 /* 51.116.148.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E828 /* 51.120.232.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E880 /* 51.120.232.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD0D0 /* 51.143.208.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD0E0 /* 51.143.208.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348834F8 /* 52.136.52.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883540 /* 52.136.53.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488B850 /* 52.136.184.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488B860 /* 52.136.184.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6A60 /* 52.139.106.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6F70 /* 52.140.111.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6FC0 /* 52.140.111.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E7812 /* 52.142.120.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E7816 /* 52.142.120.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E7839 /* 52.142.120.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E784A /* 52.142.120.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E785A /* 52.142.120.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E7868 /* 52.142.120.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E789C /* 52.142.120.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349284C0 /* 52.146.132.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349284E0 /* 52.146.132.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34941D1B /* 52.148.29.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3495148E /* 52.149.20.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3495EA98 /* 52.149.234.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3495EEBE /* 52.149.238.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3495EF22 /* 52.149.239.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969CF8 /* 52.150.156.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969D20 /* 52.150.157.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34999992 /* 52.153.153.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349999F6 /* 52.153.153.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349999FF /* 52.153.153.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34999A0D /* 52.153.154.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34999A28 /* 52.153.154.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34999A7B /* 52.153.154.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34999A9E /* 52.153.154.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34999AA1 /* 52.153.154.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCF3A /* 52.156.207.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCFC3 /* 52.156.207.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A1B931 /* 52.161.185.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AAA131 /* 52.170.161.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AAA21C /* 52.170.162.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC70A8 /* 52.172.112.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7100 /* 52.172.113.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BA6ADA /* 52.186.106.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BF10BF /* 52.191.16.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BF126A /* 52.191.18.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F74C4A /* 52.247.76.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F74CA7 /* 52.247.76.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F74CBB /* 52.247.76.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F74CC7 /* 52.247.76.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F74CD8 /* 52.247.76.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F74CF6 /* 52.247.76.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F74CFC /* 52.247.76.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F74D07 /* 52.247.77.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F74D16 /* 52.247.77.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F74D1A /* 52.247.77.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA279E /* 52.250.39.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA27EC /* 52.250.39.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA27F6 /* 52.250.39.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA27FA /* 52.250.39.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA4891 /* 52.250.72.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA4924 /* 52.250.73.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA49B2 /* 52.250.73.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA49CC /* 52.250.73.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA4A03 /* 52.250.74.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDE092 /* 52.253.224.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDE09A /* 52.253.224.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5460 /* 68.221.84.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255000 /* 102.37.80.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255020 /* 102.37.80.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DD10 /* 102.133.221.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DD20 /* 102.133.221.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB278 /* 104.46.178.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB2A0 /* 104.46.178.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176460 /* 158.23.100.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90F10 /* 191.233.15.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90F20 /* 191.233.15.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8BA8 /* 191.234.139.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8E00 /* 191.234.142.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81980 /* 4.232.25.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4738F0 /* 13.71.56.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D473900 /* 13.71.57.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F880 /* 13.73.248.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D563820 /* 13.86.56.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5638A0 /* 13.86.56.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D584910 /* 13.88.73.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D584920 /* 13.88.73.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5887D0 /* 13.88.135.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5BC100 /* 13.91.193.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113180 /* 20.17.49.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152180 /* 20.21.33.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247900 /* 20.36.121.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14253720 /* 20.37.55.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254100 /* 20.37.65.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142552E0 /* 20.37.82.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259D80 /* 20.37.157.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C400 /* 20.37.196.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E100 /* 20.37.225.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265700 /* 20.38.87.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268900 /* 20.38.137.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270B80 /* 20.39.11.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14271410 /* 20.39.20.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14275070 /* 20.39.80.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14275080 /* 20.39.80.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14276340 /* 20.39.99.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142763F0 /* 20.39.99.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14289880 /* 20.40.152.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428AF30 /* 20.40.175.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428AF40 /* 20.40.175.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294200 /* 20.41.66.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142988F0 /* 20.41.136.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C300 /* 20.41.195.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A0700 /* 20.42.7.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE400 /* 20.42.228.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2A80 /* 20.43.42.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4280 /* 20.43.66.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8380 /* 20.43.131.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142BA590 /* 20.43.165.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142BAC80 /* 20.43.172.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C27B0 /* 20.44.39.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C27C0 /* 20.44.39.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142CA840 /* 20.44.168.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142CCD70 /* 20.44.205.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7100 /* 20.45.113.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC300 /* 20.45.195.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E9870 /* 20.46.152.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E9880 /* 20.46.152.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316000 /* 20.49.96.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345A80 /* 20.52.90.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481180 /* 20.72.17.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A400 /* 20.150.164.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6C80 /* 20.189.108.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD7350 /* 20.189.115.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD7B50 /* 20.189.123.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD7D20 /* 20.189.125.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BF3B80 /* 20.191.59.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BF3BB0 /* 20.191.59.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A400 /* 20.192.164.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E400 /* 20.192.228.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70180 /* 20.215.1.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92980 /* 20.217.41.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408000 /* 40.64.128.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433100 /* 40.67.49.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1F80 /* 40.74.31.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6A60 /* 40.74.106.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503A00 /* 40.80.58.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850AA00 /* 40.80.170.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BE00 /* 40.80.190.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850ECC0 /* 40.80.236.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28515DF0 /* 40.81.93.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28515F80 /* 40.81.95.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852FE80 /* 40.82.254.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591200 /* 40.89.18.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859F090 /* 40.89.240.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872A0B0 /* 40.114.160.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872A0C0 /* 40.114.160.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872A900 /* 40.114.169.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F9BC0 /* 40.127.155.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FFB90 /* 40.127.251.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2F80 /* 51.12.47.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC700 /* 51.12.199.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351980 /* 51.53.25.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335A980 /* 51.53.169.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681B80 /* 51.104.27.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695100 /* 51.105.81.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695900 /* 51.105.89.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B0480 /* 51.107.4.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3100 /* 51.107.49.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B6320 /* 51.107.99.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9100 /* 51.107.145.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33740320 /* 51.116.3.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744800 /* 51.116.72.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337464D0 /* 51.116.100.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337464E0 /* 51.116.100.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33780400 /* 51.120.4.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782900 /* 51.120.41.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33788340 /* 51.120.131.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E100 /* 51.120.225.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384A1A0 /* 51.132.161.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384AA40 /* 51.132.170.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338910E0 /* 51.137.16.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33898E20 /* 51.137.142.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A200 /* 51.137.162.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC100 /* 51.143.193.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883100 /* 52.136.49.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B0950 /* 52.139.9.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B0B10 /* 52.139.11.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B5510 /* 52.139.85.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B5520 /* 52.139.85.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6A00 /* 52.140.106.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E9890 /* 52.142.152.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349517A0 /* 52.149.23.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34953050 /* 52.149.48.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34953060 /* 52.149.48.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3495F800 /* 52.149.248.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3495F840 /* 52.149.248.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3495F860 /* 52.149.248.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968C00 /* 52.150.140.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349A3930 /* 52.154.57.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349A3950 /* 52.154.57.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349A4410 /* 52.154.68.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349A4420 /* 52.154.68.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349C67C0 /* 52.156.103.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F3190 /* 52.159.49.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F33A0 /* 52.159.51.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F3540 /* 52.159.53.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F3570 /* 52.159.53.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A08810 /* 52.160.136.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A08820 /* 52.160.136.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A1BA80 /* 52.161.186.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A1BAD0 /* 52.161.186.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A715A0 /* 52.167.21.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A715D0 /* 52.167.21.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A715E0 /* 52.167.21.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AAABC0 /* 52.170.171.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AAABF0 /* 52.170.171.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B126A0 /* 52.177.38.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B9B070 /* 52.185.176.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B9D4B0 /* 52.185.212.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B9D4C0 /* 52.185.212.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BA2410 /* 52.186.36.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45300 /* 52.228.83.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E770C0 /* 52.231.112.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E770E0 /* 52.231.112.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA1CB0 /* 52.250.28.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA20A0 /* 52.250.32.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FCD5C0 /* 52.252.213.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF5010 /* 52.255.80.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF52A0 /* 52.255.82.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5180 /* 68.221.81.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A200 /* 102.37.162.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668500F0 /* 102.133.0.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66850100 /* 102.133.1.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853900 /* 102.133.57.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66858710 /* 102.133.135.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66858720 /* 102.133.135.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176180 /* 158.23.97.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90980 /* 191.233.9.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB7E00 /* 191.235.126.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB7E90 /* 191.235.126.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE300 /* 191.235.227.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81D00 /* 4.232.29.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86B40 /* 4.232.107.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87B40 /* 4.232.123.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C340 /* 4.232.195.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D40C375 /* 13.64.195.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41D118 /* 13.65.209.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428A40 /* 13.66.138.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D429180 /* 13.66.145.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D429500 /* 13.66.149.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E4CC /* 13.66.228.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E62A /* 13.66.230.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430840 /* 13.67.8.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D431440 /* 13.67.20.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D441465 /* 13.68.20.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4415A9 /* 13.68.21.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D444DD7 /* 13.68.77.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454000 /* 13.69.64.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456A00 /* 13.69.106.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456F80 /* 13.69.111.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E300 /* 13.69.227.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45EF00 /* 13.69.239.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45FD87 /* 13.69.253.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45FF8C /* 13.69.255.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464800 /* 13.70.72.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464F10 /* 13.70.79.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D467240 /* 13.70.114.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D471ED6 /* 13.71.30.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D477B4E /* 13.71.123.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D479A0B /* 13.71.154.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AA10 /* 13.71.170.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47B180 /* 13.71.177.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C240 /* 13.71.194.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D48FE86 /* 13.72.254.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6B00 /* 13.74.107.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2240 /* 13.75.34.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4CB3DF /* 13.76.179.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4CD8D9 /* 13.76.216.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3220 /* 13.77.50.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6A40 /* 13.78.106.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E95D1 /* 13.78.149.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E96E9 /* 13.78.150.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EBF2C /* 13.78.191.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5491C4 /* 13.84.145.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57228B /* 13.87.34.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5722F3 /* 13.87.34.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573820 /* 13.87.56.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577A20 /* 13.87.122.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D581475 /* 13.88.20.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D581A1C /* 13.88.26.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D593A25 /* 13.89.58.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D593BE7 /* 13.89.59.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AA80 /* 13.89.170.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59B270 /* 13.89.178.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5A5307 /* 13.90.83.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5AD0B8 /* 13.90.208.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B3D0B /* 13.91.61.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5C7C97 /* 13.92.124.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5CB4D0 /* 13.92.180.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5CBEB8 /* 13.92.190.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DE28A /* 13.93.226.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5E2F3D /* 13.94.47.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113500 /* 20.17.53.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114380 /* 20.17.67.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B340 /* 20.18.179.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152600 /* 20.21.38.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152B80 /* 20.21.43.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154340 /* 20.21.67.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154B40 /* 20.21.75.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14242E8E /* 20.36.46.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14244A82 /* 20.36.74.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246AC0 /* 20.36.106.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247220 /* 20.36.114.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14249040 /* 20.36.144.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254A00 /* 20.37.74.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269240 /* 20.38.146.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269B80 /* 20.38.155.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4440 /* 20.42.68.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4A00 /* 20.42.74.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8310 /* 20.42.131.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8340 /* 20.42.131.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7E40 /* 20.43.126.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0280 /* 20.44.2.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0D40 /* 20.44.13.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1A40 /* 20.44.26.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1F80 /* 20.44.31.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5C00 /* 20.45.92.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7580 /* 20.45.117.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7A40 /* 20.45.122.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7EC0 /* 20.45.126.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF080 /* 20.45.240.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF100 /* 20.45.241.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0F40 /* 20.46.15.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FD840 /* 20.47.216.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C880 /* 20.48.200.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143154C0 /* 20.49.84.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315D40 /* 20.49.93.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315D80 /* 20.49.93.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315F80 /* 20.49.95.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324840 /* 20.50.72.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14325040 /* 20.50.80.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432C940 /* 20.50.201.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330300 /* 20.51.3.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330E60 /* 20.51.14.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330E80 /* 20.51.14.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331680 /* 20.51.22.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331700 /* 20.51.23.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331780 /* 20.51.23.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344080 /* 20.52.64.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345C00 /* 20.52.92.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353300 /* 20.53.51.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353B00 /* 20.53.59.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14355552 /* 20.53.85.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4500 /* 20.58.69.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E3E00 /* 20.62.62.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420700 /* 20.66.7.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450300 /* 20.69.3.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DB00 /* 20.70.219.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481BC0 /* 20.72.27.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144CF22D /* 20.76.242.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452F500 /* 20.82.245.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453C000 /* 20.83.192.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14565900 /* 20.86.89.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14584100 /* 20.88.65.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589900 /* 20.88.153.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590040 /* 20.89.0.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590A00 /* 20.89.10.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8080 /* 20.90.128.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C0200 /* 20.92.2.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146120C0 /* 20.97.32.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14629300 /* 20.98.147.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14630F00 /* 20.99.15.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640000 /* 20.100.0.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DAB40 /* 20.125.171.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCB40 /* 20.125.203.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A0E0 /* 20.150.160.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AAA0 /* 20.150.170.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AF40 /* 20.150.175.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B240 /* 20.150.178.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B600 /* 20.150.182.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BA40 /* 20.150.186.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BD80 /* 20.150.189.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F620 /* 20.150.246.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F640 /* 20.150.246.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F680 /* 20.150.246.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14972040 /* 20.151.32.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A340 /* 20.168.163.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE700 /* 20.189.231.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02140 /* 20.192.33.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03360 /* 20.192.51.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03380 /* 20.192.51.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03700 /* 20.192.55.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C05300 /* 20.192.83.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06240 /* 20.192.98.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06600 /* 20.192.102.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A140 /* 20.192.161.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A800 /* 20.192.168.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E1A0 /* 20.192.225.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EA20 /* 20.192.234.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C320 /* 20.193.195.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C340 /* 20.193.195.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C380 /* 20.193.195.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CA20 /* 20.193.202.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CCC0 /* 20.193.204.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C244C0 /* 20.194.68.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C25000 /* 20.194.80.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C280C0 /* 20.194.128.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34D00 /* 20.195.77.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35100 /* 20.195.81.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C36100 /* 20.195.97.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C389C0 /* 20.195.137.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C396A0 /* 20.195.150.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C396C0 /* 20.195.150.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C39700 /* 20.195.151.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C39840 /* 20.195.152.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C100 /* 20.200.193.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4B80 /* 20.205.75.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5380 /* 20.205.83.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D01340 /* 20.208.19.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70500 /* 20.215.5.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71340 /* 20.215.19.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71B40 /* 20.215.27.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79B80 /* 20.215.155.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92D00 /* 20.217.45.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93B80 /* 20.217.59.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94B40 /* 20.217.75.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95B40 /* 20.217.91.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760D6B5 /* 23.96.214.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760FDEC /* 23.96.253.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761435A /* 23.97.67.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17616124 /* 23.97.97.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17616703 /* 23.97.103.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17617833 /* 23.97.120.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761E215 /* 23.97.226.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1762405C /* 23.98.64.92/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17624118 /* 23.98.65.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625240 /* 23.98.82.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176257C0 /* 23.98.87.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176270C0 /* 23.98.112.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17630769 /* 23.99.7.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176336EB /* 23.99.54.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17633CFD /* 23.99.60.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176350BA /* 23.99.80.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17637630 /* 23.99.118.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17638045 /* 23.99.128.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176381AA /* 23.99.129.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763C0FE /* 23.99.192.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763C438 /* 23.99.196.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763E4AE /* 23.99.228.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17640EB9 /* 23.100.14.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17646454 /* 23.100.100.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17650344 /* 23.101.3.68/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176508E5 /* 23.101.8.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176600BA /* 23.102.0.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176600EF /* 23.102.0.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17663571 /* 23.102.53.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766800F /* 23.102.128.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766A027 /* 23.102.160.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766A1E3 /* 23.102.161.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766A304 /* 23.102.163.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766A57F /* 23.102.165.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766A749 /* 23.102.167.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766B41A /* 23.102.180.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766EA31 /* 23.102.234.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28407140 /* 40.64.113.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433A80 /* 40.67.58.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28434840 /* 40.67.72.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28437B00 /* 40.67.123.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284423E6 /* 40.68.35.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844270F /* 40.68.39.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28445D91 /* 40.68.93.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844CD71 /* 40.68.205.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844D9F2 /* 40.68.217.242/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28451DD8 /* 40.69.29.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456A20 /* 40.69.106.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28457540 /* 40.69.117.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2845D9F6 /* 40.69.217.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28464E9A /* 40.70.78.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469200 /* 40.70.146.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470A80 /* 40.71.10.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28476462 /* 40.71.100.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6400 /* 40.74.100.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A8DBB /* 40.74.141.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9210 /* 40.74.146.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9700 /* 40.74.151.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2200 /* 40.75.34.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C1DC5 /* 40.76.29.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C280B /* 40.76.40.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CC277 /* 40.76.194.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E6EC4 /* 40.78.110.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC220 /* 40.78.194.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECA20 /* 40.78.202.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE280 /* 40.78.226.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEA00 /* 40.78.234.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF280 /* 40.78.242.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF700 /* 40.78.247.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFA40 /* 40.78.250.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFD80 /* 40.78.253.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F2C3B /* 40.79.44.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F4A56 /* 40.79.74.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8210 /* 40.79.130.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8A00 /* 40.79.138.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8E00 /* 40.79.142.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9200 /* 40.79.146.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9540 /* 40.79.149.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9B00 /* 40.79.155.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA200 /* 40.79.162.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA6C0 /* 40.79.166.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAA20 /* 40.79.170.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAE80 /* 40.79.174.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB220 /* 40.79.178.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBA20 /* 40.79.186.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBF80 /* 40.79.191.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC2C0 /* 40.79.194.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503240 /* 40.80.50.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B5C0 /* 40.80.181.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2853BFCA /* 40.83.191.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2853DE64 /* 40.83.222.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285496F1 /* 40.84.150.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854B943 /* 40.84.185.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855E23E /* 40.85.226.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855E520 /* 40.85.229.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28564D0C /* 40.86.77.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28566664 /* 40.86.102.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856B017 /* 40.86.176.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E18E /* 40.86.225.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E677 /* 40.86.230.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28597A00 /* 40.89.122.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870B973 /* 40.112.185.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870D50B /* 40.112.213.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F200 /* 40.112.242.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28734F02 /* 40.115.79.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28755842 /* 40.117.88.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784B40 /* 40.120.75.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784E00 /* 40.120.78.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28785400 /* 40.120.84.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28795432 /* 40.121.84.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28798DE8 /* 40.121.141.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287994C1 /* 40.121.148.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287AAD6C /* 40.122.173.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287AD59B /* 40.122.213.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C4140 /* 40.124.65.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287D67FB /* 40.125.103.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F537B /* 40.127.83.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F84FE /* 40.127.132.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BC080 /* 51.11.192.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1500 /* 51.12.21.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1E00 /* 51.12.30.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C62A0 /* 51.12.98.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6640 /* 51.12.102.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCAA0 /* 51.12.202.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCE40 /* 51.12.206.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE240 /* 51.12.226.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEA40 /* 51.12.234.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D00C0 /* 51.13.0.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8C00 /* 51.13.140.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351D00 /* 51.53.29.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356B80 /* 51.53.107.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335AD00 /* 51.53.173.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BB80 /* 51.53.187.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CB40 /* 51.103.203.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368A5A2 /* 51.104.165.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694240 /* 51.105.66.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694700 /* 51.105.71.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694A40 /* 51.105.74.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3A80 /* 51.107.58.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8100 /* 51.107.129.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9A80 /* 51.107.154.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF500 /* 51.107.245.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFD00 /* 51.107.253.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743A80 /* 51.116.58.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744900 /* 51.116.73.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749AC0 /* 51.116.154.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F240 /* 51.116.242.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F5C0 /* 51.116.245.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F6C0 /* 51.116.246.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FA40 /* 51.116.250.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FE00 /* 51.116.254.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786280 /* 51.120.98.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786A40 /* 51.120.106.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D240 /* 51.120.210.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DAA0 /* 51.120.218.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384C0C0 /* 51.132.192.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD600 /* 51.138.214.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C5063 /* 51.140.80.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C575D /* 51.140.87.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C7D08 /* 51.140.125.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9220 /* 51.140.146.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C95C0 /* 51.140.149.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CBD34 /* 51.140.189.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CBD6C /* 51.140.189.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD220 /* 51.140.210.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D0E71 /* 51.141.14.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D0EA8 /* 51.141.14.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D32B3 /* 51.141.50.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3390EE17 /* 51.144.238.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488883E /* 52.136.136.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BC00 /* 52.136.188.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5A00 /* 52.138.90.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A9394 /* 52.138.147.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE200 /* 52.138.226.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B0476 /* 52.139.4.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6D00 /* 52.139.109.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F8837 /* 52.143.136.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937300 /* 52.147.115.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34973A79 /* 52.151.58.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A113A0 /* 52.161.19.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A11840 /* 52.161.24.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26A40 /* 52.162.106.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A52290 /* 52.165.34.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5B36D /* 52.165.179.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5EB77 /* 52.165.235.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5ED08 /* 52.165.237.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76A00 /* 52.167.106.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76DC0 /* 52.167.109.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A79100 /* 52.167.145.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A80E90 /* 52.168.14.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A842B4 /* 52.168.66.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87500 /* 52.168.117.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A89245 /* 52.168.146.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A8930B /* 52.168.147.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A91208 /* 52.169.18.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7700 /* 52.172.119.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACDDF5 /* 52.172.221.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACDFD3 /* 52.172.223.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADC76A /* 52.173.199.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEF339 /* 52.174.243.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF23EB /* 52.175.35.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B02FC6 /* 52.176.47.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B21180 /* 52.178.17.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B24E3D /* 52.178.78.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2D3E3 /* 52.178.211.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B306F0 /* 52.179.6.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B30823 /* 52.179.8.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B39D3B /* 52.179.157.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B4E4 /* 52.180.180.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B64B /* 52.180.182.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68A80 /* 52.182.138.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68F40 /* 52.182.143.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B72E49 /* 52.183.46.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B75666 /* 52.183.86.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB02E2 /* 52.187.2.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB3BBC /* 52.187.59.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB3D52 /* 52.187.61.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BBB99F /* 52.187.185.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFD5BC /* 52.191.213.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFE4F5 /* 52.191.228.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B8E0 /* 52.225.184.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1BA82 /* 52.225.186.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E224EB /* 52.226.36.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71210 /* 52.231.18.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71D69 /* 52.231.29.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E72055 /* 52.231.32.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7205E /* 52.231.32.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79220 /* 52.231.146.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7C890 /* 52.231.200.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7C899 /* 52.231.200.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7CF9B /* 52.231.207.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E81BBD /* 52.232.27.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E91E29 /* 52.233.30.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E9BE23 /* 52.233.190.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E9C0F7 /* 52.233.192.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBA00 /* 52.236.186.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED2124 /* 52.237.33.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED2168 /* 52.237.33.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED8FB0 /* 52.237.143.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F214CC /* 52.242.20.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F324A1 /* 52.243.36.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69A40 /* 52.246.154.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69F00 /* 52.246.159.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41348110 /* 65.52.129.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FA20 /* 65.52.250.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5300 /* 68.220.83.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5600 /* 68.221.86.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6340 /* 68.221.99.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD9340 /* 68.221.147.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254100 /* 102.37.65.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254840 /* 102.37.72.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255300 /* 102.37.83.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A500 /* 102.37.165.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851A80 /* 102.133.26.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857A40 /* 102.133.122.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857F00 /* 102.133.127.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859A80 /* 102.133.154.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FA40 /* 102.133.250.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FE00 /* 102.133.254.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68281AC7 /* 104.40.26.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68281D71 /* 104.40.29.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682844FA /* 104.40.68.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68284540 /* 104.40.69.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828968B /* 104.40.150.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828B3B9 /* 104.40.179.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828D8AE /* 104.40.216.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68293FD5 /* 104.41.63.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829C90A /* 104.41.201.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A615F /* 104.42.97.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682B12DB /* 104.43.18.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BA8C8 /* 104.43.168.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BC02B /* 104.43.192.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BC0DE /* 104.43.192.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C810E /* 104.44.129.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C813B /* 104.44.129.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D8722 /* 104.45.135.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D9318 /* 104.45.147.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E2038 /* 104.46.32.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E203A /* 104.46.32.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E6209 /* 104.46.98.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E6249 /* 104.46.98.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E63B0 /* 104.46.99.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D01000 /* 104.208.16.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D09000 /* 104.208.144.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D0ED93 /* 104.208.237.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D1BA46 /* 104.209.186.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D20E31 /* 104.210.14.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D26A1F /* 104.210.106.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D292FA /* 104.210.146.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35100 /* 104.211.81.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D362B9 /* 104.211.98.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3663A /* 104.211.102.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39220 /* 104.211.146.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A079 /* 104.211.160.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A090 /* 104.211.160.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E0BE /* 104.211.224.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E0EE /* 104.211.224.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D61280 /* 104.214.18.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D646E5 /* 104.214.70.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974302E /* 137.116.48.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89744D9D /* 137.116.77.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89745BB2 /* 137.116.91.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89749D1A /* 137.116.157.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89749E1E /* 137.116.158.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x897555EC /* 137.117.85.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x897559FD /* 137.117.89.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89755B98 /* 137.117.91.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x898766E2 /* 137.135.102.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B0169 /* 138.91.1.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B1126 /* 138.91.17.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B1155 /* 138.91.17.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5BC1B8 /* 138.91.193.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170B40 /* 158.23.11.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176600 /* 158.23.102.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177B40 /* 158.23.123.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C340 /* 158.23.195.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D5CC5 /* 168.61.92.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8F80 /* 168.61.143.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D94CD /* 168.61.148.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E34EB /* 168.62.52.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EEAFA /* 168.62.234.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EED03 /* 168.62.237.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EF9E2 /* 168.62.249.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8D1B /* 168.63.141.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90940 /* 191.233.9.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE949E4 /* 191.233.73.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CB00 /* 191.233.203.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9240 /* 191.234.146.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA96C0 /* 191.234.150.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9A40 /* 191.234.154.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC2049 /* 191.236.32.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC20BF /* 191.236.32.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC23E1 /* 191.236.35.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC80FD /* 191.236.128.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC816B /* 191.236.129.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFED2F5D /* 191.237.47.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFED819E /* 191.237.129.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDE000 /* 191.237.224.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4B00 /* 191.238.75.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE6383 /* 191.238.99.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEEA0DD /* 191.238.160.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEF408E /* 191.239.64.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEF4090 /* 191.239.64.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFA02D /* 191.239.160.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFA0B2 /* 191.239.160.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E997F /* 207.46.153.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E9A10 /* 207.46.154.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2EE30E /* 207.46.227.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D429939 /* 13.66.153.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42F5DC /* 13.66.245.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42FBAB /* 13.66.251.171/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4372DD /* 13.67.114.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D44B398 /* 13.68.179.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4C8B08 /* 13.76.139.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4CF477 /* 13.76.244.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4DA628 /* 13.77.166.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4DCB2F /* 13.77.203.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E8243 /* 13.78.130.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E82B9 /* 13.78.130.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EB2BF /* 13.78.178.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4FBDEF /* 13.79.189.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4FBDF1 /* 13.79.189.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D52C6E7 /* 13.82.198.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D535B90 /* 13.83.91.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5C3A7B /* 13.92.58.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5C3D5D /* 13.92.61.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5D4885 /* 13.93.72.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5D4BD6 /* 13.93.75.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5E62B8 /* 13.94.98.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5E74E2 /* 13.94.116.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1433073A /* 20.51.7.58/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B510E /* 20.59.81.14/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B51C8 /* 20.59.81.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462948A /* 20.98.148.138/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462948C /* 20.98.148.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C37A /* 20.98.195.122/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C37C /* 20.98.195.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D716 /* 20.105.215.22/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D718 /* 20.105.215.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14771CF0 /* 20.119.28.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14771CF8 /* 20.119.28.248/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DA28C /* 20.125.162.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35758 /* 20.195.87.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C3575C /* 20.195.87.92/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD3166 /* 20.205.49.102/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD3174 /* 20.205.49.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DF4034 /* 20.223.64.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176146CE /* 23.97.70.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17636AB8 /* 23.99.106.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763729C /* 23.99.114.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763FB6B /* 23.99.251.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17657022 /* 23.101.112.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176593E3 /* 23.101.147.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765A3A9 /* 23.101.163.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2845BF41 /* 40.69.191.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284610C4 /* 40.70.16.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C5E31 /* 40.76.94.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2853B12F /* 40.83.177.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2853DFD6 /* 40.83.223.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285702A6 /* 40.87.2.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285743D5 /* 40.87.67.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28575E5B /* 40.87.94.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28720248 /* 40.114.2.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2875B409 /* 40.117.180.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287930CF /* 40.121.48.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28793199 /* 40.121.49.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28795A52 /* 40.121.90.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FA066 /* 40.127.160.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FAFAD /* 40.127.175.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3388120C /* 51.136.18.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338DB823 /* 51.141.184.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F202F /* 51.143.32.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F5887 /* 51.143.88.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3390A75A /* 51.144.167.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33919261 /* 51.145.146.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928DFE /* 52.146.141.254/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A22112 /* 52.162.33.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A22592 /* 52.162.37.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A258C8 /* 52.162.88.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A25F84 /* 52.162.95.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A2D030 /* 52.162.208.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A33D33 /* 52.163.61.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A35515 /* 52.163.85.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A35581 /* 52.163.85.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A3575C /* 52.163.87.92/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A3599B /* 52.163.89.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A359A0 /* 52.163.89.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5BD8B /* 52.165.189.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A70176 /* 52.167.1.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A7E1F7 /* 52.167.225.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A7E202 /* 52.167.226.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A7E368 /* 52.167.227.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A7E39A /* 52.167.227.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD156F /* 52.173.21.111/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD5936 /* 52.173.89.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD5942 /* 52.173.89.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD5D89 /* 52.173.93.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B02CB2 /* 52.176.44.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B291BA /* 52.178.145.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B29360 /* 52.178.147.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B38881 /* 52.179.136.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B822E9 /* 52.184.34.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B82331 /* 52.184.35.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E86E72 /* 52.232.110.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E871A0 /* 52.232.113.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E87661 /* 52.232.118.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E87751 /* 52.232.119.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED8D53 /* 52.237.141.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED8DE5 /* 52.237.141.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA387D /* 52.250.56.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41342455 /* 65.52.36.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134376C /* 65.52.55.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134B0FA /* 65.52.176.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134B1C0 /* 65.52.177.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134B82C /* 65.52.184.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134B8DA /* 65.52.184.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134EC7B /* 65.52.236.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4625A383 /* 70.37.163.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x5EF558A0 /* 94.245.88.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68281087 /* 104.40.16.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68281E1D /* 104.40.30.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68298F91 /* 104.41.143.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89745B7B /* 137.116.91.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89752F4B /* 137.117.47.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B79F8 /* 138.91.121.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B7AB2 /* 138.91.122.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37B1F8 /* 157.55.177.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37B9CD /* 157.55.185.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D38085D /* 157.56.8.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D380887 /* 157.56.8.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D38097F /* 157.56.9.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D2ED4 /* 168.61.46.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E05A7 /* 168.62.5.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E088B /* 168.62.8.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E19AD /* 168.62.25.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E19B3 /* 168.62.25.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E3094 /* 168.62.48.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E3112 /* 168.62.49.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E34F4 /* 168.62.52.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E3549 /* 168.62.53.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E3584 /* 168.62.53.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E364B /* 168.62.54.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E36D3 /* 168.62.54.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E36D4 /* 168.62.54.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86C20 /* 4.232.108.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87BA0 /* 4.232.123.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C3A0 /* 4.232.195.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428E60 /* 13.66.142.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430AE0 /* 13.67.10.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D43EA16 /* 13.67.234.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454700 /* 13.69.71.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456D00 /* 13.69.109.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45C02B /* 13.69.192.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E640 /* 13.69.230.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464AC0 /* 13.70.74.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D46B6CC /* 13.70.182.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D46B6D2 /* 13.70.182.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D475422 /* 13.71.84.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47717F /* 13.71.113.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D479613 /* 13.71.150.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AF20 /* 13.71.175.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C4E0 /* 13.71.196.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D497333 /* 13.73.115.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F400 /* 13.73.244.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FC80 /* 13.73.252.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6CC0 /* 13.74.108.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B27A0 /* 13.75.39.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4C539B /* 13.76.83.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4CD92E /* 13.76.217.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3580 /* 13.77.53.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6DA0 /* 13.78.109.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E819A /* 13.78.129.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E8245 /* 13.78.130.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4FAC2B /* 13.79.172.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D525D8A /* 13.82.93.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54BD06 /* 13.84.189.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D554471 /* 13.85.68.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DD00 /* 13.86.221.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573A60 /* 13.87.58.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577C60 /* 13.87.124.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AEA0 /* 13.89.174.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59E795 /* 13.89.231.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5E2848 /* 13.94.40.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F0FFB /* 13.95.15.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114460 /* 20.17.68.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B3A0 /* 20.18.179.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14150C2B /* 20.21.12.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14150E48 /* 20.21.14.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152C60 /* 20.21.44.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141543A0 /* 20.21.67.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154BA0 /* 20.21.75.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14155240 /* 20.21.82.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14155280 /* 20.21.82.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246CA0 /* 20.36.108.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247540 /* 20.36.117.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247B20 /* 20.36.123.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247B80 /* 20.36.123.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254380 /* 20.37.67.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254400 /* 20.37.68.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254CA0 /* 20.37.76.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C6A0 /* 20.37.198.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C700 /* 20.37.199.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E340 /* 20.37.227.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E380 /* 20.37.227.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268080 /* 20.38.128.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268B80 /* 20.38.139.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268C00 /* 20.38.140.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142693C0 /* 20.38.147.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269BE0 /* 20.38.155.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270E20 /* 20.39.14.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270E80 /* 20.39.14.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428CEC0 /* 20.40.206.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428CF00 /* 20.40.207.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294460 /* 20.41.68.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294480 /* 20.41.68.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C540 /* 20.41.197.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C580 /* 20.41.197.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE6A0 /* 20.42.230.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE700 /* 20.42.231.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2CA0 /* 20.43.44.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2D00 /* 20.43.45.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B46A0 /* 20.43.70.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4700 /* 20.43.71.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7940 /* 20.43.121.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0480 /* 20.44.4.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C08E0 /* 20.44.8.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1160 /* 20.44.17.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1D00 /* 20.44.29.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D72E0 /* 20.45.114.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7300 /* 20.45.115.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7B80 /* 20.45.123.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC620 /* 20.45.198.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC680 /* 20.45.198.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315380 /* 20.49.83.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315B80 /* 20.49.91.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316360 /* 20.49.99.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316380 /* 20.49.99.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316D80 /* 20.49.109.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316E00 /* 20.49.110.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316E80 /* 20.49.110.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317120 /* 20.49.113.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317180 /* 20.49.113.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317860 /* 20.49.120.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317880 /* 20.49.120.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317900 /* 20.49.121.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324180 /* 20.50.65.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324400 /* 20.50.68.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481CA0 /* 20.72.28.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DABA0 /* 20.125.171.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCBA0 /* 20.125.203.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A5C0 /* 20.150.165.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A600 /* 20.150.166.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496ACC0 /* 20.150.172.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B3E0 /* 20.150.179.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BBE0 /* 20.150.187.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A3A0 /* 20.168.163.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC300 /* 20.187.195.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC0033 /* 20.188.0.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC0391 /* 20.188.3.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC277E /* 20.188.39.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6DC0 /* 20.189.109.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C063E0 /* 20.192.99.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A5E0 /* 20.192.165.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A600 /* 20.192.166.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E620 /* 20.192.230.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E680 /* 20.192.230.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EE00 /* 20.192.238.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CE00 /* 20.193.206.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24360 /* 20.194.67.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4BC0 /* 20.205.75.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD53C0 /* 20.205.83.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D013A0 /* 20.208.19.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D713A0 /* 20.215.19.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71BA0 /* 20.215.27.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79C60 /* 20.215.156.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93C60 /* 20.217.60.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94BA0 /* 20.217.75.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95BA0 /* 20.217.91.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760DE2D /* 23.96.222.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760DF59 /* 23.96.223.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625600 /* 23.98.86.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176268C0 /* 23.98.104.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626A00 /* 23.98.106.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17636D51 /* 23.99.109.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176404FD /* 23.100.4.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17640882 /* 23.100.8.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176469C0 /* 23.100.105.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17651DE4 /* 23.101.29.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766EB1F /* 23.102.235.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284084A0 /* 40.64.132.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408600 /* 40.64.134.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433300 /* 40.67.51.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433380 /* 40.67.51.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433C80 /* 40.67.60.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456C80 /* 40.69.108.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469480 /* 40.70.148.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470E80 /* 40.71.14.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A428B /* 40.74.66.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A7D2C /* 40.74.125.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9500 /* 40.74.149.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2360 /* 40.75.35.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C47B9 /* 40.76.71.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D176B /* 40.77.23.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E1611 /* 40.78.22.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC460 /* 40.78.196.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECC40 /* 40.78.204.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE580 /* 40.78.229.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEE00 /* 40.78.238.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF520 /* 40.78.245.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFBA0 /* 40.78.251.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F7290 /* 40.79.114.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8480 /* 40.79.132.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8B20 /* 40.79.139.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9400 /* 40.79.148.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9C80 /* 40.79.156.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA320 /* 40.79.163.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAB80 /* 40.79.171.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB460 /* 40.79.180.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBBE0 /* 40.79.187.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC3C0 /* 40.79.195.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503380 /* 40.80.51.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503E40 /* 40.80.62.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503E80 /* 40.80.62.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850AC40 /* 40.80.172.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850AC80 /* 40.80.172.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B040 /* 40.80.176.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2853B12A /* 40.83.177.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854359D /* 40.84.53.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28578AAC /* 40.87.138.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28578F61 /* 40.87.143.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285914C0 /* 40.89.20.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591500 /* 40.89.21.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870DDBC /* 40.112.221.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870DFEB /* 40.112.223.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28719932 /* 40.113.153.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871B0A0 /* 40.113.176.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871B0C0 /* 40.113.176.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871B100 /* 40.113.177.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28723592 /* 40.114.53.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28761BC0 /* 40.118.27.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770BE0 /* 40.119.11.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784BA0 /* 40.120.75.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F8411 /* 40.127.132.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2A20 /* 51.12.42.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2A80 /* 51.12.42.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6440 /* 51.12.100.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC220 /* 51.12.194.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC280 /* 51.12.194.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCC40 /* 51.12.204.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE3E0 /* 51.12.227.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEBE0 /* 51.12.235.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356C60 /* 51.53.108.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BC60 /* 51.53.188.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CBA0 /* 51.103.203.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681E00 /* 51.104.30.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681E80 /* 51.104.30.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694500 /* 51.105.69.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694BC0 /* 51.105.75.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695B80 /* 51.105.91.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695C00 /* 51.105.92.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3340 /* 51.107.51.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3380 /* 51.107.51.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3C60 /* 51.107.60.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9340 /* 51.107.147.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9380 /* 51.107.147.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9C60 /* 51.107.156.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337431E0 /* 51.116.49.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743200 /* 51.116.50.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743C60 /* 51.116.60.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337491C0 /* 51.116.145.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749200 /* 51.116.146.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749E00 /* 51.116.158.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F3A0 /* 51.116.243.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FB80 /* 51.116.251.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782B80 /* 51.120.43.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782C00 /* 51.120.44.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786460 /* 51.120.100.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786BE0 /* 51.120.107.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D3E0 /* 51.120.211.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E380 /* 51.120.227.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E400 /* 51.120.228.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A4A0 /* 51.137.164.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A500 /* 51.137.165.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C54FB /* 51.140.84.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C7E0A /* 51.140.126.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9520 /* 51.140.149.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD4A0 /* 51.140.212.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CE2CF /* 51.140.226.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CF0EA /* 51.140.240.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D31FD /* 51.141.49.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3390761F /* 51.144.118.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883380 /* 52.136.51.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883400 /* 52.136.52.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348884EC /* 52.136.132.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5C60 /* 52.138.92.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE500 /* 52.138.229.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6CA0 /* 52.140.108.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6D00 /* 52.140.109.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34930A8D /* 52.147.10.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34930A95 /* 52.147.10.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969860 /* 52.150.152.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969980 /* 52.150.153.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497064D /* 52.151.6.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34974E33 /* 52.151.78.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349EECFC /* 52.158.236.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A10FF7 /* 52.161.15.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26F40 /* 52.162.111.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A3D427 /* 52.163.212.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A3D77A /* 52.163.215.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76BC0 /* 52.167.107.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A79B59 /* 52.167.155.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A8B45F /* 52.168.180.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A98ADE /* 52.169.138.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACCB90 /* 52.172.203.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AFDD6A /* 52.175.221.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B00404 /* 52.176.4.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B05C1B /* 52.176.92.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B1C432 /* 52.177.196.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B29390 /* 52.178.147.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B39FE7 /* 52.179.159.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4A558 /* 52.180.165.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4A5F8 /* 52.180.165.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B17D /* 52.180.177.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68BE0 /* 52.182.139.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B0A7 /* 52.225.176.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B119 /* 52.225.177.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B3DC /* 52.225.179.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B41A /* 52.225.180.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B4D9 /* 52.225.180.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1BB95 /* 52.225.187.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E455E0 /* 52.228.85.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45600 /* 52.228.86.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71420 /* 52.231.20.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E720EC /* 52.231.32.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79480 /* 52.231.148.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7CD0F /* 52.231.205.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBD80 /* 52.236.189.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED1B7B /* 52.237.27.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F21F4D /* 52.242.31.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69BC0 /* 52.246.155.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FAE120 /* 52.250.225.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FCA0 /* 65.52.252.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5360 /* 68.220.83.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6420 /* 68.221.100.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD93A0 /* 68.221.147.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851CA0 /* 102.133.28.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853B00 /* 102.133.59.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853B80 /* 102.133.59.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857C20 /* 102.133.124.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859C40 /* 102.133.156.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DAC0 /* 102.133.218.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DB00 /* 102.133.219.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FB80 /* 102.133.251.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828312C /* 104.40.49.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682922B4 /* 104.41.34.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BFC62 /* 104.43.252.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E73ED /* 104.46.115.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D26907 /* 104.210.105.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D31299 /* 104.211.18.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3D2C3 /* 104.211.210.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6227B /* 104.214.34.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89755326 /* 137.117.83.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37FD2B /* 157.55.253.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170C20 /* 158.23.12.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177BA0 /* 158.23.123.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C3A0 /* 158.23.195.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D36FF /* 168.61.54.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83DD0DA /* 168.61.208.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90BA0 /* 191.233.11.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90E00 /* 191.233.14.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93600 /* 191.233.54.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CD80 /* 191.233.205.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8880 /* 191.234.136.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8900 /* 191.234.137.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA93E0 /* 191.234.147.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9BE0 /* 191.234.155.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E8A66 /* 207.46.138.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81ED8 /* 4.232.30.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86A7C /* 4.232.106.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87A4C /* 4.232.122.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C24C /* 4.232.194.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428A58 /* 13.66.138.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E2F9 /* 13.66.226.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E6F1 /* 13.66.230.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430868 /* 13.67.8.104/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4418D8 /* 13.68.24.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D441DCB /* 13.68.29.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4468F0 /* 13.68.104.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454048 /* 13.69.64.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456FC0 /* 13.69.111.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E348 /* 13.69.227.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464818 /* 13.70.72.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D468A81 /* 13.70.138.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AA28 /* 13.71.170.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C270 /* 13.71.194.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D48FAEF /* 13.72.250.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A0A27 /* 13.74.10.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A0A71 /* 13.74.10.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6F94 /* 13.74.111.148/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2290 /* 13.75.34.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3240 /* 13.77.50.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6A58 /* 13.78.106.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D50F713 /* 13.80.247.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D50F72A /* 13.80.247.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54AE8F /* 13.84.174.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D572233 /* 13.87.34.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D572700 /* 13.87.39.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573850 /* 13.87.56.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577A50 /* 13.87.122.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D593DF8 /* 13.89.61.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AAC8 /* 13.89.170.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113A30 /* 20.17.58.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1411427C /* 20.17.66.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B24C /* 20.18.178.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152570 /* 20.21.37.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152BF4 /* 20.21.43.244/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1415424C /* 20.21.66.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154A4C /* 20.21.74.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14155000 /* 20.21.80.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14242827 /* 20.36.40.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424282A /* 20.36.40.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14244822 /* 20.36.72.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14244826 /* 20.36.72.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246A40 /* 20.36.106.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247210 /* 20.36.114.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254AE4 /* 20.37.74.228/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142695C4 /* 20.38.149.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269D80 /* 20.38.157.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E620 /* 20.40.230.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E630 /* 20.40.230.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A402C /* 20.42.64.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4908 /* 20.42.73.8/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B3826 /* 20.43.56.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B3842 /* 20.43.56.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0200 /* 20.44.2.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0DE0 /* 20.44.13.224/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C13AC /* 20.44.19.172/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1D70 /* 20.44.29.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5A48 /* 20.45.90.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5A50 /* 20.45.90.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7520 /* 20.45.117.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7528 /* 20.45.117.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7BF0 /* 20.45.123.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7BFC /* 20.45.123.252/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DD008 /* 20.45.208.8/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF1B0 /* 20.45.241.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0BF8 /* 20.46.11.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0CC0 /* 20.46.12.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C568 /* 20.48.197.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C570 /* 20.48.197.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315200 /* 20.49.82.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315A00 /* 20.49.90.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315BE8 /* 20.49.91.232/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143177E8 /* 20.49.119.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143177F0 /* 20.49.119.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143250C0 /* 20.50.80.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330CF8 /* 20.51.12.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330D40 /* 20.51.13.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331454 /* 20.51.20.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331540 /* 20.51.21.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345890 /* 20.52.88.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345898 /* 20.52.88.152/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352F44 /* 20.53.47.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352FC8 /* 20.53.47.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353028 /* 20.53.48.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353160 /* 20.53.49.96/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353928 /* 20.53.57.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353930 /* 20.53.57.48/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4330 /* 20.58.67.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4338 /* 20.58.67.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D67E0 /* 20.61.103.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D67E8 /* 20.61.103.232/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E3C80 /* 20.62.60.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E864C /* 20.62.134.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E86E0 /* 20.62.134.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418630 /* 20.65.134.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418640 /* 20.65.134.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1442021C /* 20.66.2.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420580 /* 20.66.5.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450168 /* 20.69.1.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450170 /* 20.69.1.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481594 /* 20.72.21.148/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144815C0 /* 20.72.21.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481A00 /* 20.72.26.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453DD60 /* 20.83.221.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589CA0 /* 20.88.156.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14629150 /* 20.98.145.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C0B0 /* 20.98.192.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DAA4C /* 20.125.170.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCA4C /* 20.125.202.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AA00 /* 20.150.170.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B51C /* 20.150.181.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B5A4 /* 20.150.181.164/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BD20 /* 20.150.189.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F424 /* 20.150.244.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F538 /* 20.150.245.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A24C /* 20.168.162.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B9D9FB /* 20.185.217.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B9DA01 /* 20.185.218.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BA2953 /* 20.186.41.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BA2FB6 /* 20.186.47.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC0294 /* 20.188.2.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC029C /* 20.188.2.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC282C /* 20.188.40.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC282E /* 20.188.40.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE488 /* 20.189.228.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE4D0 /* 20.189.228.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA678 /* 20.191.166.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA780 /* 20.191.167.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02C70 /* 20.192.44.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02C78 /* 20.192.44.120/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C032D8 /* 20.192.50.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C032E0 /* 20.192.50.224/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C05030 /* 20.192.80.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C05038 /* 20.192.80.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06640 /* 20.192.102.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EA00 /* 20.192.234.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C22C /* 20.193.194.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C250 /* 20.193.194.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CA00 /* 20.193.202.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24200 /* 20.194.66.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24A50 /* 20.194.74.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24A58 /* 20.194.74.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C343C0 /* 20.195.67.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C343C8 /* 20.195.67.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34AA8 /* 20.195.74.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34AB0 /* 20.195.74.176/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C3533C /* 20.195.83.60/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C354A8 /* 20.195.84.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C39244 /* 20.195.146.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C392C0 /* 20.195.146.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4A4C /* 20.205.74.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD524C /* 20.205.82.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CDC040 /* 20.205.192.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D0124C /* 20.208.18.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70720 /* 20.215.7.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70D80 /* 20.215.13.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D7124C /* 20.215.18.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71A4C /* 20.215.26.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79BF0 /* 20.215.155.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92F20 /* 20.217.47.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93BF0 /* 20.217.59.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94A4C /* 20.217.74.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95A4C /* 20.217.90.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760D2CF /* 23.96.210.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760FA30 /* 23.96.250.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761322B /* 23.97.50.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17617819 /* 23.97.120.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761781D /* 23.97.120.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17617827 /* 23.97.120.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17617839 /* 23.97.120.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761B200 /* 23.97.178.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176384CF /* 23.99.132.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17643918 /* 23.100.57.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17643A95 /* 23.100.58.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17651567 /* 23.101.21.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176515C1 /* 23.101.21.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176517BE /* 23.101.23.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176517C0 /* 23.101.23.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17659F6B /* 23.101.159.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17664872 /* 23.102.72.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17664B12 /* 23.102.75.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841BCF4 /* 40.65.188.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841BDDB /* 40.65.189.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284335B8 /* 40.67.53.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284335E0 /* 40.67.53.224/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433A00 /* 40.67.58.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456A40 /* 40.69.106.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469248 /* 40.70.146.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2846BA5B /* 40.70.186.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2846CC06 /* 40.70.204.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2846CC20 /* 40.70.204.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470AC8 /* 40.71.10.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6430 /* 40.74.100.48/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9644 /* 40.74.150.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CC44B /* 40.76.196.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CD425 /* 40.76.212.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC240 /* 40.78.194.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEF7C /* 40.78.239.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF5C8 /* 40.78.245.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFD44 /* 40.78.253.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F7601 /* 40.79.118.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F7605 /* 40.79.118.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8228 /* 40.79.130.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8D88 /* 40.79.141.136/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9454 /* 40.79.148.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA39C /* 40.79.163.156/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAD04 /* 40.79.173.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB240 /* 40.79.178.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBFC0 /* 40.79.191.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC570 /* 40.79.197.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503508 /* 40.80.53.8/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28542F18 /* 40.84.47.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855B9D0 /* 40.85.185.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855E509 /* 40.85.229.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855E7E7 /* 40.85.231.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E05E /* 40.86.224.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E7B4 /* 40.86.231.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285745B8 /* 40.87.69.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285979AC /* 40.89.121.172/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28599159 /* 40.89.145.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859915D /* 40.89.145.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859B40A /* 40.89.180.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859B419 /* 40.89.180.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285BC14E /* 40.91.193.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285BC7D5 /* 40.91.199.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F290 /* 40.112.242.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28759D7A /* 40.117.157.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784A00 /* 40.120.74.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28785268 /* 40.120.82.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28785270 /* 40.120.82.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C4080 /* 40.124.64.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C11E8 /* 51.12.17.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C11F0 /* 51.12.17.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C19CC /* 51.12.25.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1C20 /* 51.12.28.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6200 /* 51.12.98.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCA00 /* 51.12.202.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE518 /* 51.12.229.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CED18 /* 51.12.237.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D88BC /* 51.13.136.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D89D8 /* 51.13.137.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351F80 /* 51.53.31.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356580 /* 51.53.101.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356A7C /* 51.53.106.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B210 /* 51.53.178.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B2CC /* 51.53.178.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BA7C /* 51.53.186.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CA4C /* 51.103.202.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368C081 /* 51.104.192.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368C08A /* 51.104.192.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33690443 /* 51.105.4.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369044B /* 51.105.4.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336947A0 /* 51.105.71.160/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694D38 /* 51.105.77.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3A00 /* 51.107.58.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9A00 /* 51.107.154.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF174 /* 51.107.241.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF2F8 /* 51.107.242.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFA2C /* 51.107.250.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFB68 /* 51.107.251.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374364C /* 51.116.54.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743758 /* 51.116.55.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743A00 /* 51.116.58.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749A40 /* 51.116.154.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F3DC /* 51.116.243.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FBBC /* 51.116.251.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786208 /* 51.120.98.8/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786EC0 /* 51.120.110.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D680 /* 51.120.214.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DA00 /* 51.120.218.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E984 /* 51.120.233.132/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378EA80 /* 51.120.234.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD284 /* 51.138.210.132/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD308 /* 51.138.211.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9238 /* 51.140.146.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9D3C /* 51.140.157.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CB826 /* 51.140.184.38/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD250 /* 51.140.210.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D082A /* 51.141.8.42/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F0615 /* 51.143.6.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD4B8 /* 51.143.212.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD5C0 /* 51.143.213.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488880F /* 52.136.136.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34888810 /* 52.136.136.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488B8EC /* 52.136.184.236/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488B9B0 /* 52.136.185.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A4905 /* 52.138.73.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A4933 /* 52.138.73.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5CBC /* 52.138.92.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AA067 /* 52.138.160.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AA069 /* 52.138.160.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6BD0 /* 52.139.107.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6BD8 /* 52.139.107.216/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928944 /* 52.146.137.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349289A8 /* 52.146.137.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937148 /* 52.147.113.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937150 /* 52.147.113.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3494548E /* 52.148.84.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34945491 /* 52.148.84.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497295C /* 52.151.41.92/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34972F04 /* 52.151.47.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34974B56 /* 52.151.75.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349AB02F /* 52.154.176.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349AB1B3 /* 52.154.177.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DA289 /* 52.157.162.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DA293 /* 52.157.162.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349EECFD /* 52.158.236.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349EEF23 /* 52.158.239.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A1192A /* 52.161.25.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A11F88 /* 52.161.31.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A11F8B /* 52.161.31.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26A90 /* 52.162.106.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A2FFC2 /* 52.162.255.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5159F /* 52.165.21.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5D02F /* 52.165.208.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76FA0 /* 52.167.111.160/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A78FB3 /* 52.167.143.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A7E436 /* 52.167.228.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A86D65 /* 52.168.109.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9E893 /* 52.169.232.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7404 /* 52.172.116.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7488 /* 52.172.116.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD5AFA /* 52.173.90.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADC79A /* 52.173.199.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADD837 /* 52.173.216.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AFEC56 /* 52.175.236.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B0303A /* 52.176.48.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B0FEA5 /* 52.176.254.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B14733 /* 52.177.71.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B079 /* 52.180.176.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B07A /* 52.180.176.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68FC0 /* 52.182.143.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B71816 /* 52.183.24.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B75085 /* 52.183.80.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B75D5C /* 52.183.93.92/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B75EA6 /* 52.183.94.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B89BB5 /* 52.184.155.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B89E25 /* 52.184.158.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A40C /* 52.184.164.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BBA10D /* 52.187.161.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BBA38B /* 52.187.163.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B382 /* 52.225.179.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B6E1 /* 52.225.182.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1BCE1 /* 52.225.188.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1BF24 /* 52.225.191.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1DADA /* 52.225.218.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71228 /* 52.231.18.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E72041 /* 52.231.32.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E72042 /* 52.231.32.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79250 /* 52.231.146.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7C86B /* 52.231.200.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7C86C /* 52.231.200.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBD50 /* 52.236.189.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EDFDC2 /* 52.237.253.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69D04 /* 52.246.157.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F7C145 /* 52.247.193.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF3F6B /* 52.255.63.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF98FC /* 52.255.152.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF98FF /* 52.255.152.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FA00 /* 65.52.250.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC524C /* 68.220.82.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5770 /* 68.221.87.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD627C /* 68.221.98.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD924C /* 68.221.146.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255158 /* 102.37.81.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255180 /* 102.37.81.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A0B0 /* 102.37.160.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A0B8 /* 102.37.160.184/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851A00 /* 102.133.26.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857C8C /* 102.133.124.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859A00 /* 102.133.154.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FBDC /* 102.133.251.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829008D /* 104.41.0.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682901EF /* 104.41.1.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829A2DB /* 104.41.162.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829A2E4 /* 104.41.162.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A065B /* 104.42.6.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A88B4 /* 104.42.136.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BA122 /* 104.43.161.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BC01A /* 104.43.192.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C882A /* 104.44.136.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E281F /* 104.46.40.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB3F4 /* 104.46.179.244/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB798 /* 104.46.183.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EDB97 /* 104.46.219.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EDBB8 /* 104.46.219.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D01A2F /* 104.208.26.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D2C33D /* 104.210.195.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35118 /* 104.211.81.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3620B /* 104.211.98.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D363AE /* 104.211.99.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39240 /* 104.211.146.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A652 /* 104.211.166.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A739 /* 104.211.167.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E0BA /* 104.211.224.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E186 /* 104.211.225.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D612A8 /* 104.214.18.168/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D71243 /* 104.215.18.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D71F43 /* 104.215.31.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D75E4C /* 104.215.94.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D76375 /* 104.215.99.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D78BA6 /* 104.215.139.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D78C84 /* 104.215.140.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89742C94 /* 137.116.44.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x897478F4 /* 137.116.120.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974E9BF /* 137.116.233.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170A7C /* 158.23.10.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176770 /* 158.23.103.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177A4C /* 158.23.122.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C24C /* 158.23.194.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E6C1B /* 168.62.108.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EED1D /* 168.62.237.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FA71B /* 168.63.167.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FDBC8 /* 168.63.219.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FDBCD /* 168.63.219.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93200 /* 191.233.50.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CB18 /* 191.233.203.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA958C /* 191.234.149.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9D2C /* 191.234.157.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE484C /* 191.238.72.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4898 /* 191.238.72.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140E7A40 /* 20.14.122.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14180188 /* 20.24.1.136/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141A1070 /* 20.26.16.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432589A /* 20.50.88.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DF0C /* 20.70.223.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453DECC /* 20.83.222.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589F8A /* 20.88.159.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B9340 /* 20.91.147.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C243 /* 20.98.194.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C778 /* 20.98.199.120/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146BEFDA /* 20.107.239.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1475C0C8 /* 20.117.192.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D0714 /* 20.125.7.20/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C355BE /* 20.195.85.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD37D1 /* 20.205.55.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5C350 /* 20.213.195.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DF419C /* 20.223.65.156/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E85B1C /* 20.232.91.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EC91C4 /* 20.236.145.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81900 /* 4.232.25.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D425787 /* 13.66.87.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428C50 /* 13.66.140.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4308E0 /* 13.67.8.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4540C0 /* 13.69.64.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456AC0 /* 13.69.106.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E3C0 /* 13.69.227.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464890 /* 13.70.72.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AAC0 /* 13.71.170.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AD50 /* 13.71.173.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C2F0 /* 13.71.194.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F010 /* 13.73.240.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F070 /* 13.73.240.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F0F0 /* 13.73.240.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F860 /* 13.73.248.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6BA0 /* 13.74.107.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2410 /* 13.75.36.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D32E0 /* 13.77.50.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6AD0 /* 13.78.106.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56C323 /* 13.86.195.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573870 /* 13.87.56.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577A70 /* 13.87.122.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A081 /* 13.87.160.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AB40 /* 13.89.171.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113100 /* 20.17.49.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152100 /* 20.21.33.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14155340 /* 20.21.83.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246A50 /* 20.36.106.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142472A0 /* 20.36.114.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254350 /* 20.37.67.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254AD0 /* 20.37.74.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142598F0 /* 20.37.152.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C060 /* 20.37.192.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265060 /* 20.38.80.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268030 /* 20.38.128.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269380 /* 20.38.147.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142701CD /* 20.39.1.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270B50 /* 20.39.11.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14288DAB /* 20.40.141.171/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E720 /* 20.40.231.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142900F0 /* 20.41.0.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294050 /* 20.41.64.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C500 /* 20.41.197.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A00F0 /* 20.42.0.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8110 /* 20.42.129.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE330 /* 20.42.227.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2860 /* 20.43.40.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4060 /* 20.43.64.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7870 /* 20.43.120.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8070 /* 20.43.128.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0320 /* 20.44.3.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1AE0 /* 20.44.26.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C84A6 /* 20.44.132.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF040 /* 20.45.240.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0DC0 /* 20.46.13.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C5F0 /* 20.48.197.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330130 /* 20.51.1.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330E30 /* 20.51.14.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143315E0 /* 20.51.21.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E3D80 /* 20.62.61.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E87D0 /* 20.62.135.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418700 /* 20.65.135.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420630 /* 20.66.6.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144501F0 /* 20.69.1.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446D860 /* 20.70.216.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481030 /* 20.72.16.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC320 /* 20.74.195.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452F400 /* 20.82.244.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145658A0 /* 20.86.88.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590900 /* 20.89.9.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C340 /* 20.98.195.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14630860 /* 20.99.8.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A180 /* 20.150.161.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AB50 /* 20.150.171.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B340 /* 20.150.179.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BB40 /* 20.150.187.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F610 /* 20.150.246.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BCDB9D /* 20.188.219.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BCDD0F /* 20.188.221.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6A50 /* 20.189.106.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE5B0 /* 20.189.229.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02F70 /* 20.192.47.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06340 /* 20.192.99.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A030 /* 20.192.160.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E190 /* 20.192.225.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EB10 /* 20.192.235.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C2B0 /* 20.193.194.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34540 /* 20.195.69.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34B30 /* 20.195.75.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34B60 /* 20.195.75.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C010 /* 20.200.192.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D29220 /* 20.210.146.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70100 /* 20.215.1.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92900 /* 20.217.41.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176252C0 /* 23.98.82.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764E8D8 /* 23.100.232.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423D92 /* 40.66.61.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433B50 /* 40.67.59.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456AE0 /* 40.69.106.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284692C0 /* 40.70.146.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469AA1 /* 40.70.154.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470B40 /* 40.71.11.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1860 /* 40.74.24.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A64B0 /* 40.74.100.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9330 /* 40.74.147.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2330 /* 40.75.35.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC2E0 /* 40.78.194.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECA50 /* 40.78.202.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE320 /* 40.78.227.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEA80 /* 40.78.234.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF2B0 /* 40.78.242.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFA70 /* 40.78.250.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F82C0 /* 40.79.130.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8A80 /* 40.79.138.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9280 /* 40.79.146.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9A40 /* 40.79.154.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA230 /* 40.79.162.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAAE0 /* 40.79.170.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB2E0 /* 40.79.178.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBAA0 /* 40.79.186.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC240 /* 40.79.194.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503340 /* 40.80.51.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285039B0 /* 40.80.57.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A9A0 /* 40.80.169.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B850 /* 40.80.184.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BC60 /* 40.80.188.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28511BE4 /* 40.81.27.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BBE6 /* 40.82.187.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852F850 /* 40.82.248.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285911D0 /* 40.89.17.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285AB8F9 /* 40.90.184.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B4D4C /* 40.91.77.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F2B0 /* 40.112.242.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770850 /* 40.119.8.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B1831 /* 51.11.24.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1D00 /* 51.12.29.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1D40 /* 51.12.29.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2F20 /* 51.12.47.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6350 /* 51.12.99.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC6E0 /* 51.12.198.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCB50 /* 51.12.203.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE340 /* 51.12.227.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEB40 /* 51.12.235.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351900 /* 51.53.25.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335A900 /* 51.53.169.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680840 /* 51.104.8.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681860 /* 51.104.24.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694310 /* 51.105.67.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694B80 /* 51.105.75.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336958E0 /* 51.105.88.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33698187 /* 51.105.129.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3B30 /* 51.107.59.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9320 /* 51.107.147.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9B30 /* 51.107.155.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF740 /* 51.107.247.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337431B0 /* 51.116.49.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743B30 /* 51.116.59.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749B70 /* 51.116.155.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749C80 /* 51.116.156.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FAE0 /* 51.116.250.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786340 /* 51.120.99.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786B40 /* 51.120.107.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D340 /* 51.120.211.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DB50 /* 51.120.219.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E350 /* 51.120.227.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378EAE0 /* 51.120.234.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A1E0 /* 51.137.161.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD510 /* 51.138.213.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C92D0 /* 51.140.146.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD2D0 /* 51.140.210.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD620 /* 51.143.214.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3390B82F /* 51.144.184.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5A90 /* 52.138.90.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE2A0 /* 52.138.226.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B0321 /* 52.139.3.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6B60 /* 52.140.107.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D193A /* 52.141.25.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D1A61 /* 52.141.26.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3494A32B /* 52.148.163.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968850 /* 52.150.136.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34976FF9 /* 52.151.111.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B5AFE /* 52.155.90.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B7307 /* 52.155.115.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CC132 /* 52.156.193.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26AB0 /* 52.162.106.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76AA0 /* 52.167.106.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B1A4DB /* 52.177.164.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68B20 /* 52.182.139.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8574C /* 52.184.87.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B94638 /* 52.185.70.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45050 /* 52.228.80.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E63888 /* 52.230.56.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E712C0 /* 52.231.18.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E792D0 /* 52.231.146.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBAC0 /* 52.236.186.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F2E0D7 /* 52.242.224.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69B80 /* 52.246.155.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F93B5B /* 52.249.59.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FCA01A /* 52.252.160.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD834F /* 52.253.131.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD83C6 /* 52.253.131.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDE3D0 /* 52.253.227.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FFD66D /* 52.255.214.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FFD97F /* 52.255.217.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FAC0 /* 65.52.250.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5100 /* 68.221.81.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A320 /* 102.37.163.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851B20 /* 102.133.27.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853AE0 /* 102.133.58.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857AE0 /* 102.133.122.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859B20 /* 102.133.155.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FB40 /* 102.133.251.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D010A0 /* 104.208.16.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D090A0 /* 104.208.144.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35190 /* 104.211.81.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D61320 /* 104.214.19.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176100 /* 158.23.97.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90830 /* 191.233.8.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CB90 /* 191.233.203.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9F0A5 /* 191.233.240.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9F2A7 /* 191.233.242.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9340 /* 191.234.147.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9B40 /* 191.234.155.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE060 /* 191.235.224.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4950 /* 191.238.73.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8626E /* 4.232.98.110/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E862A4 /* 4.232.98.164/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86540 /* 4.232.101.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86560 /* 4.232.101.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86580 /* 4.232.101.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86F40 /* 4.232.111.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86F50 /* 4.232.111.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87BC8 /* 4.232.123.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87DA0 /* 4.232.125.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C3C8 /* 4.232.195.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C5A0 /* 4.232.197.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4160AF /* 13.65.96.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41CE43 /* 13.65.206.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41D37D /* 13.65.211.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D422490 /* 13.66.36.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4225AC /* 13.66.37.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D423BE2 /* 13.66.59.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D423C97 /* 13.66.60.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428CA8 /* 13.66.140.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428D98 /* 13.66.141.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428FDA /* 13.66.143.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4291E8 /* 13.66.145.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D429390 /* 13.66.147.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42A07C /* 13.66.160.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42DCBB /* 13.66.220.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E71B /* 13.66.231.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4309C0 /* 13.67.9.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430A40 /* 13.67.10.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430A5C /* 13.67.10.92/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430F00 /* 13.67.15.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430F70 /* 13.67.15.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D434DE9 /* 13.67.77.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4359BF /* 13.67.89.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D441FED /* 13.68.31.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4465D3 /* 13.68.101.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D446A4D /* 13.68.106.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D446DD4 /* 13.68.109.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D446FF7 /* 13.68.111.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4533AF /* 13.69.51.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4533DA /* 13.69.51.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454110 /* 13.69.65.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454288 /* 13.69.66.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45433C /* 13.69.67.60/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45437E /* 13.69.67.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456A58 /* 13.69.106.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456AD0 /* 13.69.106.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456DE0 /* 13.69.109.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456FC8 /* 13.69.111.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E540 /* 13.69.229.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E5F0 /* 13.69.229.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E900 /* 13.69.233.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E960 /* 13.69.233.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45EF60 /* 13.69.239.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4648E8 /* 13.70.72.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464968 /* 13.70.73.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464F58 /* 13.70.79.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464F60 /* 13.70.79.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D467C1B /* 13.70.124.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D467F3D /* 13.70.127.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AC80 /* 13.71.172.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47ACF8 /* 13.71.172.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AF80 /* 13.71.175.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AFD8 /* 13.71.175.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47B120 /* 13.71.177.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47BB5B /* 13.71.187.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47BF2F /* 13.71.191.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C3C0 /* 13.71.195.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C438 /* 13.71.196.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C774 /* 13.71.199.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D491AD5 /* 13.73.26.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F000 /* 13.73.240.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F220 /* 13.73.242.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F4C0 /* 13.73.244.192/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F806 /* 13.73.248.6/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FD68 /* 13.73.253.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FD70 /* 13.73.253.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FD78 /* 13.73.253.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6B58 /* 13.74.107.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6C80 /* 13.74.108.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6F98 /* 13.74.111.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4AC958 /* 13.74.201.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2600 /* 13.75.38.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2678 /* 13.75.38.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B274C /* 13.75.39.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B75DD /* 13.75.117.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B77A9 /* 13.75.119.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4BC30F /* 13.75.195.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4C55F3 /* 13.76.85.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4C5756 /* 13.76.87.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3410 /* 13.77.52.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3530 /* 13.77.53.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D35DC /* 13.77.53.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D96A6 /* 13.77.150.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D9B27 /* 13.77.155.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4DAEB1 /* 13.77.174.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E0A3A /* 13.78.10.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E0DBD /* 13.78.13.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6CA0 /* 13.78.108.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6CA8 /* 13.78.108.168/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6D70 /* 13.78.109.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6FC0 /* 13.78.111.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E870F /* 13.78.135.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E910B /* 13.78.145.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EAC3A /* 13.78.172.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EBD70 /* 13.78.189.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EEC95 /* 13.78.236.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5086FF /* 13.80.134.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5264B0 /* 13.82.100.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D52B897 /* 13.82.184.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54863B /* 13.84.134.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D549407 /* 13.84.148.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5495BA /* 13.84.149.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54ADB3 /* 13.84.173.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54BD5F /* 13.84.189.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54E10A /* 13.84.225.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D55468E /* 13.85.70.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DAE0 /* 13.86.218.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DAF8 /* 13.86.218.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DF80 /* 13.86.223.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5738F8 /* 13.87.56.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573980 /* 13.87.57.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577AF8 /* 13.87.122.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577B80 /* 13.87.123.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58B11C /* 13.88.177.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58E62B /* 13.88.230.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58F7D0 /* 13.88.247.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58FF73 /* 13.88.255.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D592A7F /* 13.89.42.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AB70 /* 13.89.171.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AE80 /* 13.89.174.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59B300 /* 13.89.179.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5A5DCE /* 13.90.93.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5AF88D /* 13.90.248.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5AF9E5 /* 13.90.249.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5AFB7B /* 13.90.251.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B2A1B /* 13.91.42.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B661B /* 13.91.102.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5C28C6 /* 13.92.40.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5C28DF /* 13.92.40.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5C8A10 /* 13.92.138.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5CB334 /* 13.92.179.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5CD3F9 /* 13.92.211.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5CE892 /* 13.92.232.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5CFEDA /* 13.92.254.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5CFF92 /* 13.92.255.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DD750 /* 13.93.215.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DE931 /* 13.93.233.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DEC49 /* 13.93.236.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5E270D /* 13.94.39.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14099B90 /* 20.9.155.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140E79C0 /* 20.14.121.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140E79F0 /* 20.14.121.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140F0880 /* 20.15.8.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141119C0 /* 20.17.25.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113B24 /* 20.17.59.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113B28 /* 20.17.59.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113B30 /* 20.17.59.48/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113B40 /* 20.17.59.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114780 /* 20.17.71.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14120240 /* 20.18.2.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B3C8 /* 20.18.179.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B5A0 /* 20.18.181.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14131B80 /* 20.19.27.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152574 /* 20.21.37.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152578 /* 20.21.37.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141527E0 /* 20.21.39.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152E80 /* 20.21.46.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152E90 /* 20.21.46.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14153500 /* 20.21.53.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141536A4 /* 20.21.54.164/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141543C8 /* 20.21.67.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141545A0 /* 20.21.69.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154BC8 /* 20.21.75.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154DA0 /* 20.21.77.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141553A0 /* 20.21.83.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14155480 /* 20.21.84.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14180480 /* 20.24.4.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141A1440 /* 20.26.20.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246B18 /* 20.36.107.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246BA0 /* 20.36.107.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142472C8 /* 20.36.114.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142472D0 /* 20.36.114.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247DE0 /* 20.36.125.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142490A6 /* 20.36.144.166/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254700 /* 20.37.71.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254AE8 /* 20.37.74.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254AF0 /* 20.37.74.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259844 /* 20.37.152.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C044 /* 20.37.192.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C31A /* 20.37.195.26/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C670 /* 20.37.198.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C68C /* 20.37.198.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C6E8 /* 20.37.198.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C6F0 /* 20.37.198.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E310 /* 20.37.227.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E364 /* 20.37.227.100/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E368 /* 20.37.227.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E370 /* 20.37.227.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265044 /* 20.38.80.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268040 /* 20.38.128.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268440 /* 20.38.132.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268F00 /* 20.38.143.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268F2C /* 20.38.143.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269298 /* 20.38.146.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269390 /* 20.38.147.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142695C8 /* 20.38.149.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269820 /* 20.38.152.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269D88 /* 20.38.157.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270E00 /* 20.39.14.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270F10 /* 20.39.15.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270F20 /* 20.39.15.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14287C00 /* 20.40.124.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428895B /* 20.40.137.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14288CD4 /* 20.40.140.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A078 /* 20.40.160.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428C8AC /* 20.40.200.172/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428C8AE /* 20.40.200.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428CE80 /* 20.40.206.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428CEE8 /* 20.40.206.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428CF80 /* 20.40.207.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E400 /* 20.40.228.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142931D0 /* 20.41.49.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294044 /* 20.41.64.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294370 /* 20.41.67.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294504 /* 20.41.69.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294510 /* 20.41.69.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294530 /* 20.41.69.48/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429453E /* 20.41.69.62/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429D020 /* 20.41.208.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A0044 /* 20.42.0.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4148 /* 20.42.65.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4180 /* 20.42.65.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4910 /* 20.42.73.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4980 /* 20.42.73.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8044 /* 20.42.128.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE670 /* 20.42.230.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE6D0 /* 20.42.230.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE6E0 /* 20.42.230.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE6E8 /* 20.42.230.232/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2844 /* 20.43.40.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B29B2 /* 20.43.41.178/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2C80 /* 20.43.44.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2CD8 /* 20.43.44.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2CE0 /* 20.43.44.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4044 /* 20.43.64.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B419A /* 20.43.65.154/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4660 /* 20.43.70.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B46C0 /* 20.43.70.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B46C8 /* 20.43.70.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B46CC /* 20.43.70.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B46E0 /* 20.43.70.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B62EA /* 20.43.98.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B639E /* 20.43.99.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7800 /* 20.43.120.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B78F0 /* 20.43.120.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7BC8 /* 20.43.123.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8044 /* 20.43.128.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B982D /* 20.43.152.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0330 /* 20.44.3.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0800 /* 20.44.8.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0BC0 /* 20.44.11.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0CC0 /* 20.44.12.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0DE8 /* 20.44.13.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1000 /* 20.44.16.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1100 /* 20.44.17.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1A98 /* 20.44.26.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1AF8 /* 20.44.26.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1D78 /* 20.44.29.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C49C4 /* 20.44.73.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142CC0D9 /* 20.44.192.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5F44 /* 20.45.95.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7A98 /* 20.45.122.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7B50 /* 20.45.123.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7B74 /* 20.45.123.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7DE0 /* 20.45.125.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7F40 /* 20.45.127.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DD020 /* 20.45.208.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0AE0 /* 20.46.10.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0CC4 /* 20.46.12.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0DD8 /* 20.46.13.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0F30 /* 20.46.15.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FD8C8 /* 20.47.216.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FD900 /* 20.47.217.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C1E0 /* 20.48.193.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315320 /* 20.49.83.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315420 /* 20.49.84.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315B20 /* 20.49.91.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315DC0 /* 20.49.93.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315F30 /* 20.49.95.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431632C /* 20.49.99.44/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316340 /* 20.49.99.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316618 /* 20.49.102.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316620 /* 20.49.102.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316D2E /* 20.49.109.46/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316D50 /* 20.49.109.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316F10 /* 20.49.111.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316F20 /* 20.49.111.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317214 /* 20.49.114.20/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317220 /* 20.49.114.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317230 /* 20.49.114.48/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317840 /* 20.49.120.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324150 /* 20.50.65.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324470 /* 20.50.68.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324478 /* 20.50.68.120/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432447C /* 20.50.68.124/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324480 /* 20.50.68.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324910 /* 20.50.73.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143250C8 /* 20.50.80.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143258E0 /* 20.50.88.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1433052C /* 20.51.5.44/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330700 /* 20.51.7.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330900 /* 20.51.9.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331140 /* 20.51.17.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344018 /* 20.52.64.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344020 /* 20.52.64.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344840 /* 20.52.72.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344860 /* 20.52.72.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345F32 /* 20.52.95.50/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345FDC /* 20.52.95.220/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14350080 /* 20.53.0.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352E40 /* 20.53.46.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353040 /* 20.53.48.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143537A0 /* 20.53.55.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353CE0 /* 20.53.60.224/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353F60 /* 20.53.63.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4260 /* 20.58.66.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B510C /* 20.59.81.12/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6340 /* 20.61.99.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8400 /* 20.62.132.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14410140 /* 20.65.1.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418400 /* 20.65.132.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144202C0 /* 20.66.2.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450D70 /* 20.69.13.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481430 /* 20.72.20.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481500 /* 20.72.21.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481520 /* 20.72.21.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481CC0 /* 20.72.28.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC340 /* 20.74.195.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC348 /* 20.74.195.72/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC560 /* 20.74.197.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC6A0 /* 20.74.198.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453C0C0 /* 20.83.192.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145756D0 /* 20.87.86.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590120 /* 20.89.1.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B0CF0 /* 20.91.12.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B0D00 /* 20.91.13.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B9240 /* 20.91.146.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B9270 /* 20.91.146.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C000 /* 20.98.192.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14630B30 /* 20.99.11.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14630B60 /* 20.99.11.96/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640700 /* 20.100.7.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640730 /* 20.100.7.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F02C0 /* 20.111.2.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1476C620 /* 20.118.198.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DABC8 /* 20.125.171.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCBC8 /* 20.125.203.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149682F0 /* 20.150.130.240/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A7B8 /* 20.150.167.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496ABD0 /* 20.150.171.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AD00 /* 20.150.173.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B298 /* 20.150.178.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B560 /* 20.150.181.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B5A8 /* 20.150.181.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B620 /* 20.150.182.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BA98 /* 20.150.186.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BD28 /* 20.150.189.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BE5C /* 20.150.190.92/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496E108 /* 20.150.225.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F140 /* 20.150.241.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F148 /* 20.150.241.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F160 /* 20.150.241.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A62840 /* 20.166.40.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A3C8 /* 20.168.163.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AF02FE /* 20.175.2.254/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AF0580 /* 20.175.5.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AF0588 /* 20.175.5.136/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC5C0 /* 20.187.197.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC241C /* 20.188.36.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD510B /* 20.189.81.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD510E /* 20.189.81.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD5118 /* 20.189.81.24/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD511A /* 20.189.81.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD511C /* 20.189.81.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD511F /* 20.189.81.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD5120 /* 20.189.81.32/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD5122 /* 20.189.81.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6D90 /* 20.189.109.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6F00 /* 20.189.111.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6F10 /* 20.189.111.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6F18 /* 20.189.111.24/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDAC00 /* 20.189.172.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC266 /* 20.189.194.102/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE180 /* 20.189.225.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE3C26 /* 20.190.60.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA540 /* 20.191.165.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C020C0 /* 20.192.32.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02250 /* 20.192.34.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02B60 /* 20.192.43.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02D64 /* 20.192.45.100/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03000 /* 20.192.48.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C032C0 /* 20.192.50.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C054A4 /* 20.192.84.164/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06298 /* 20.192.98.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06520 /* 20.192.101.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06648 /* 20.192.102.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0996A /* 20.192.153.106/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09F50 /* 20.192.159.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A7A0 /* 20.192.167.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E7F4 /* 20.192.231.244/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EB90 /* 20.192.235.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C16020 /* 20.193.96.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1A028 /* 20.193.160.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1A030 /* 20.193.160.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C218 /* 20.193.194.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C220 /* 20.193.194.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C228 /* 20.193.194.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CB70 /* 20.193.203.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CC40 /* 20.193.204.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24320 /* 20.194.67.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C243D8 /* 20.194.67.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C243E0 /* 20.194.67.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C248E0 /* 20.194.72.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34ABC /* 20.195.74.188/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C352A0 /* 20.195.82.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7CB50 /* 20.199.203.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8A2A8 /* 20.200.162.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5928 /* 20.203.89.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5B98 /* 20.203.91.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5EC0 /* 20.203.94.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5ED0 /* 20.203.94.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC290 /* 20.204.194.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD37E0 /* 20.205.55.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4DB8 /* 20.205.77.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4EA0 /* 20.205.78.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD53E8 /* 20.205.83.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5600 /* 20.205.86.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CDC048 /* 20.205.192.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE00C4 /* 20.206.0.196/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0528 /* 20.206.5.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CEB740 /* 20.206.183.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF0568 /* 20.207.5.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D013C8 /* 20.208.19.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D015E0 /* 20.208.21.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D09410 /* 20.208.148.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D29072 /* 20.210.144.114/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D29074 /* 20.210.144.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D29078 /* 20.210.144.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D29160 /* 20.210.145.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D292C0 /* 20.210.146.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D3E038 /* 20.211.224.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5C4D0 /* 20.213.196.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D68330 /* 20.214.131.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70028 /* 20.215.0.40/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D704FA /* 20.215.4.250/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70730 /* 20.215.7.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70738 /* 20.215.7.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D707C0 /* 20.215.7.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D713C8 /* 20.215.19.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D715A0 /* 20.215.21.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71BC8 /* 20.215.27.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71DA0 /* 20.215.29.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79E80 /* 20.215.158.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79E90 /* 20.215.158.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D7A8E0 /* 20.215.168.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D90900 /* 20.217.9.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92828 /* 20.217.40.40/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92CFA /* 20.217.44.250/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92F30 /* 20.217.47.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92F38 /* 20.217.47.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92FC0 /* 20.217.47.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93E80 /* 20.217.62.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93E90 /* 20.217.62.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94BC8 /* 20.217.75.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94DA0 /* 20.217.77.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95BC8 /* 20.217.91.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95DA0 /* 20.217.93.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DAB8C0 /* 20.218.184.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DAB910 /* 20.218.185.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DC0140 /* 20.220.1.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DD8C10 /* 20.221.140.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EC9600 /* 20.236.150.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F170E0 /* 20.241.112.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17601C26 /* 23.96.28.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760FCA1 /* 23.96.252.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760FCD8 /* 23.96.252.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17614167 /* 23.97.65.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625278 /* 23.98.82.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176252D0 /* 23.98.82.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176268A0 /* 23.98.104.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626A88 /* 23.98.106.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626A90 /* 23.98.106.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626A94 /* 23.98.106.148/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626A96 /* 23.98.106.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626A98 /* 23.98.106.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17627160 /* 23.98.113.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17627170 /* 23.98.113.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176382AC /* 23.99.130.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17645A07 /* 23.100.90.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17645EDD /* 23.100.94.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17647A71 /* 23.100.122.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764E420 /* 23.100.228.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765008E /* 23.101.0.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17650904 /* 23.101.9.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17650D41 /* 23.101.13.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176545DF /* 23.101.69.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765E19B /* 23.101.225.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765E878 /* 23.101.232.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765EFEE /* 23.101.239.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17662CD3 /* 23.102.44.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17662DD8 /* 23.102.45.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17664284 /* 23.102.66.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17664D30 /* 23.102.77.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766B5C5 /* 23.102.181.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284008B4 /* 40.64.8.180/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400E40 /* 40.64.14.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400E60 /* 40.64.14.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408480 /* 40.64.132.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284084F0 /* 40.64.132.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408680 /* 40.64.134.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408688 /* 40.64.134.136/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2840868A /* 40.64.134.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284334E0 /* 40.67.52.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433BC0 /* 40.67.59.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28437A00 /* 40.67.122.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28437A60 /* 40.67.122.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28443DE5 /* 40.68.61.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28449A27 /* 40.68.154.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2845519F /* 40.69.81.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456B10 /* 40.69.107.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456C30 /* 40.69.108.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456F80 /* 40.69.111.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28457470 /* 40.69.116.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2845C29E /* 40.69.194.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284617CD /* 40.70.23.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469400 /* 40.70.148.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469408 /* 40.70.148.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284697D0 /* 40.70.151.208/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470CE0 /* 40.71.12.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470CF0 /* 40.71.12.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470CF8 /* 40.71.12.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470DA8 /* 40.71.13.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470E70 /* 40.71.14.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847B7E1 /* 40.71.183.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1844 /* 40.74.24.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A24D0 /* 40.74.36.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A3B28 /* 40.74.59.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6340 /* 40.74.99.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6520 /* 40.74.101.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A65C8 /* 40.74.101.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9254 /* 40.74.146.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A93A0 /* 40.74.147.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9620 /* 40.74.150.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9648 /* 40.74.150.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284AF962 /* 40.74.249.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2228 /* 40.75.34.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2340 /* 40.75.35.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C1D37 /* 40.76.29.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C35E1 /* 40.76.53.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D11B7 /* 40.77.17.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D16EA /* 40.77.22.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D181B /* 40.77.24.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D655F /* 40.77.101.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D6D86 /* 40.77.109.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E1756 /* 40.78.23.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E393D /* 40.78.57.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E6BB1 /* 40.78.107.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC310 /* 40.78.195.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC430 /* 40.78.196.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECA90 /* 40.78.202.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECBF0 /* 40.78.203.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE2D8 /* 40.78.226.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE520 /* 40.78.229.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEA38 /* 40.78.234.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEA90 /* 40.78.234.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF2A8 /* 40.78.242.168/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF310 /* 40.78.243.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF740 /* 40.78.247.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF7A0 /* 40.78.247.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFA68 /* 40.78.250.104/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFAD0 /* 40.78.250.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFD48 /* 40.78.253.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFDC0 /* 40.78.253.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F82F0 /* 40.79.130.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8420 /* 40.79.132.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8A28 /* 40.79.138.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8A90 /* 40.79.138.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8D90 /* 40.79.141.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8F10 /* 40.79.143.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9228 /* 40.79.146.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9290 /* 40.79.146.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9660 /* 40.79.150.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9702 /* 40.79.151.2/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9A50 /* 40.79.154.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9C20 /* 40.79.156.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA228 /* 40.79.162.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA300 /* 40.79.163.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA540 /* 40.79.165.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA558 /* 40.79.165.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAA18 /* 40.79.170.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAAF0 /* 40.79.170.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAD08 /* 40.79.173.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB308 /* 40.79.179.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB310 /* 40.79.179.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBB08 /* 40.79.187.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBEA0 /* 40.79.190.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBFC8 /* 40.79.191.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBFDA /* 40.79.191.218/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC268 /* 40.79.194.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC270 /* 40.79.194.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC578 /* 40.79.197.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503298 /* 40.80.50.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503350 /* 40.80.51.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503620 /* 40.80.54.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285064C8 /* 40.80.100.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B4A0 /* 40.80.180.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BFE0 /* 40.80.191.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513AE1 /* 40.81.58.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28548505 /* 40.84.133.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854962F /* 40.84.150.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854BD6B /* 40.84.189.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854C074 /* 40.84.192.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855B45A /* 40.85.180.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855C9A8 /* 40.85.201.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855DAAF /* 40.85.218.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855F82B /* 40.85.248.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285659A5 /* 40.86.89.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856C980 /* 40.86.201.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28574376 /* 40.87.67.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28578ADC /* 40.87.138.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28578CD7 /* 40.87.140.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285979B0 /* 40.89.121.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285999AB /* 40.89.153.171/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859BD3D /* 40.89.189.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28703165 /* 40.112.49.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28704AF1 /* 40.112.74.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871B080 /* 40.113.176.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871B210 /* 40.113.178.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871B220 /* 40.113.178.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871B230 /* 40.113.178.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872F18D /* 40.114.241.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28733678 /* 40.115.54.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287367A8 /* 40.115.103.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873681F /* 40.115.104.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28751880 /* 40.117.24.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287550CF /* 40.117.80.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28755FA2 /* 40.117.95.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2875934A /* 40.117.147.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2875BEEF /* 40.117.190.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2875C5E0 /* 40.117.197.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876813A /* 40.118.129.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770480 /* 40.119.4.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770848 /* 40.119.8.72/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770BA0 /* 40.119.11.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770BB4 /* 40.119.11.180/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287808C0 /* 40.120.8.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28780958 /* 40.120.9.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287840C8 /* 40.120.64.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784100 /* 40.120.65.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784B20 /* 40.120.75.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784DA0 /* 40.120.77.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784E40 /* 40.120.78.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287857CC /* 40.120.87.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28793902 /* 40.121.57.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28793DD0 /* 40.121.61.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28798783 /* 40.121.135.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2879A3E4 /* 40.121.163.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2879A596 /* 40.121.165.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2879D2A3 /* 40.121.210.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C4090 /* 40.124.64.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C40C0 /* 40.124.64.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EF6B7 /* 40.126.246.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F4B7D /* 40.127.75.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F54C5 /* 40.127.84.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F908D /* 40.127.144.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B6160 /* 51.11.97.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BC028 /* 51.11.192.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1114 /* 51.12.17.20/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1138 /* 51.12.17.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1180 /* 51.12.17.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C16CE /* 51.12.22.206/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1938 /* 51.12.25.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C19C0 /* 51.12.25.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C19C8 /* 51.12.25.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2E00 /* 51.12.46.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C495E /* 51.12.73.94/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6348 /* 51.12.99.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C66C0 /* 51.12.102.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C66E0 /* 51.12.102.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C66F0 /* 51.12.102.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CA840 /* 51.12.168.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CA850 /* 51.12.168.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC3E0 /* 51.12.195.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCBD0 /* 51.12.203.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCD60 /* 51.12.205.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE298 /* 51.12.226.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE5E0 /* 51.12.229.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEA98 /* 51.12.234.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CED20 /* 51.12.237.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEDC0 /* 51.12.237.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D0108 /* 51.13.1.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8020 /* 51.13.128.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8060 /* 51.13.128.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D88C0 /* 51.13.136.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8F30 /* 51.13.143.48/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351CD6 /* 51.53.28.214/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351E9C /* 51.53.30.156/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351F90 /* 51.53.31.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351F98 /* 51.53.31.152/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351FE0 /* 51.53.31.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33352A00 /* 51.53.42.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356E80 /* 51.53.110.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356E90 /* 51.53.110.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335ACD6 /* 51.53.172.214/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335ACDC /* 51.53.172.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B2C0 /* 51.53.178.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B2C8 /* 51.53.178.200/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B2E0 /* 51.53.178.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BF80 /* 51.53.191.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CBC8 /* 51.103.203.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680868 /* 51.104.8.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680FFF /* 51.104.15.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681844 /* 51.104.24.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368198E /* 51.104.25.142/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681DC0 /* 51.104.29.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681EA0 /* 51.104.30.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681EA8 /* 51.104.30.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681EB0 /* 51.104.30.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368FC0D /* 51.104.252.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368FFF9 /* 51.104.255.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694298 /* 51.105.66.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336943A0 /* 51.105.67.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694680 /* 51.105.70.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336947A8 /* 51.105.71.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694A98 /* 51.105.74.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694B90 /* 51.105.75.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369F817 /* 51.105.248.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3044 /* 51.107.48.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B307E /* 51.107.48.126/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3310 /* 51.107.51.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3378 /* 51.107.51.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B34C0 /* 51.107.52.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B34C8 /* 51.107.52.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3BB0 /* 51.107.59.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B4B90 /* 51.107.75.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B4BCF /* 51.107.75.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8038 /* 51.107.128.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8060 /* 51.107.128.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8170 /* 51.107.129.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8180 /* 51.107.129.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9310 /* 51.107.147.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9374 /* 51.107.147.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9400 /* 51.107.148.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9410 /* 51.107.148.16/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9BB0 /* 51.107.155.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9C30 /* 51.107.156.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BC0A0 /* 51.107.192.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF200 /* 51.107.242.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF3AC /* 51.107.243.172/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFA00 /* 51.107.250.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743620 /* 51.116.54.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743BB0 /* 51.116.59.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744B5C /* 51.116.75.92/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744DFE /* 51.116.77.254/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749500 /* 51.116.149.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749BF0 /* 51.116.155.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F298 /* 51.116.242.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F560 /* 51.116.245.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F660 /* 51.116.246.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FA98 /* 51.116.250.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FD20 /* 51.116.253.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FD88 /* 51.116.253.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782844 /* 51.120.40.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786200 /* 51.120.98.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337862F8 /* 51.120.98.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786A98 /* 51.120.106.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786EC8 /* 51.120.110.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378B290 /* 51.120.178.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D298 /* 51.120.210.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D540 /* 51.120.213.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D688 /* 51.120.214.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DBD0 /* 51.120.219.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E822 /* 51.120.232.34/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E8A0 /* 51.120.232.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378EA8C /* 51.120.234.140/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378EBF0 /* 51.120.235.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384C160 /* 51.132.193.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A45C /* 51.137.164.92/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A470 /* 51.137.164.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A4C8 /* 51.137.164.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A4D0 /* 51.137.164.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AA050 /* 51.138.160.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C0617 /* 51.140.6.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C36D0 /* 51.140.54.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C3CEB /* 51.140.60.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4590 /* 51.140.69.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9430 /* 51.140.148.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C97A0 /* 51.140.151.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C983D /* 51.140.152.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C98BA /* 51.140.152.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CA3CF /* 51.140.163.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CB434 /* 51.140.180.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CB528 /* 51.140.181.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD3A0 /* 51.140.211.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD440 /* 51.140.212.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D7180 /* 51.141.113.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338E8208 /* 51.142.130.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F58B7 /* 51.143.88.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FA516 /* 51.143.165.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD160 /* 51.143.209.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33902926 /* 51.144.41.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x339051FC /* 51.144.81.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33912CF2 /* 51.145.44.242/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883560 /* 52.136.53.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BF0C /* 52.136.191.12/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A1F70 /* 52.138.31.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A1F7F /* 52.138.31.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5A30 /* 52.138.90.48/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5A38 /* 52.138.90.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348ADE6E /* 52.138.222.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE258 /* 52.138.226.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE380 /* 52.138.227.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B0820 /* 52.139.8.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6AA0 /* 52.139.106.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6844 /* 52.140.104.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6C60 /* 52.140.108.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6CD8 /* 52.140.108.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6CE0 /* 52.140.108.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6CF0 /* 52.140.108.240/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D1695 /* 52.141.22.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D16EF /* 52.141.22.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928520 /* 52.146.133.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34936140 /* 52.147.97.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937060 /* 52.147.112.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937760 /* 52.147.119.96/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349624BB /* 52.150.36.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969830 /* 52.150.152.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3496985A /* 52.150.152.90/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969A18 /* 52.150.154.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969A20 /* 52.150.154.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34970BB0 /* 52.151.11.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B7661 /* 52.155.118.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BA2EE /* 52.155.162.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349C288E /* 52.156.40.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CA852 /* 52.156.168.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349FC840 /* 52.159.200.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A1084C /* 52.161.8.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A10B47 /* 52.161.11.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A25732 /* 52.162.87.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26E40 /* 52.162.110.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26EA8 /* 52.162.110.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A2D64B /* 52.162.214.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A35E83 /* 52.163.94.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A37A14 /* 52.163.122.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A478B7 /* 52.164.120.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A47D16 /* 52.164.125.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A4E105 /* 52.164.225.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A51BBB /* 52.165.27.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A52275 /* 52.165.34.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A52614 /* 52.165.38.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A596F2 /* 52.165.150.242/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76A58 /* 52.167.106.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76B40 /* 52.167.107.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76D48 /* 52.167.109.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A791A0 /* 52.167.145.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A791B0 /* 52.167.145.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A7DDB8 /* 52.167.221.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87040 /* 52.168.112.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87448 /* 52.168.116.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A888B1 /* 52.168.136.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A904EC /* 52.169.4.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A90FFE /* 52.169.15.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A91E6E /* 52.169.30.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A940F4 /* 52.169.64.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AB38B2 /* 52.171.56.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AB8AA7 /* 52.171.138.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7140 /* 52.172.113.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACD17D /* 52.172.209.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD1919 /* 52.173.25.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD21FE /* 52.173.33.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD5AC7 /* 52.173.90.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADB918 /* 52.173.185.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADC4D1 /* 52.173.196.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADC4E6 /* 52.173.196.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADF98A /* 52.173.249.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AFC64A /* 52.175.198.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AFE769 /* 52.175.231.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AFEB94 /* 52.175.235.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B02ACE /* 52.176.42.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B02E1E /* 52.176.46.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B031CE /* 52.176.49.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B03787 /* 52.176.55.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B05CC4 /* 52.176.92.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B1DF3C /* 52.177.223.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B211E0 /* 52.178.17.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B21A49 /* 52.178.26.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B225D1 /* 52.178.37.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B34920 /* 52.179.73.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3C0B2 /* 52.179.192.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4A084 /* 52.180.160.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4A45B /* 52.180.164.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B2BB /* 52.180.178.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B6D1 /* 52.180.182.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68AD8 /* 52.182.138.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68B30 /* 52.182.139.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68FC8 /* 52.182.143.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B7296D /* 52.183.41.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B74270 /* 52.183.66.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B74970 /* 52.183.73.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B75F56 /* 52.183.95.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B77F9B /* 52.183.127.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B89ECD /* 52.184.158.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B98465 /* 52.185.132.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B984AA /* 52.185.132.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B9D7AB /* 52.185.215.171/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BA7929 /* 52.186.121.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BA7E1F /* 52.186.126.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFAAFD /* 52.191.170.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFC534 /* 52.191.197.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E07DE6 /* 52.224.125.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0A2DC /* 52.224.162.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0EB03 /* 52.224.235.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E297FA /* 52.226.151.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45044 /* 52.228.80.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E451A2 /* 52.228.81.162/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E455C0 /* 52.228.85.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45698 /* 52.228.86.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E456A0 /* 52.228.86.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E456B0 /* 52.228.86.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E51982 /* 52.229.25.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E5254B /* 52.229.37.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E5DADD /* 52.229.218.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E5E106 /* 52.229.225.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E6E0ED /* 52.230.224.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E712F0 /* 52.231.18.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71778 /* 52.231.23.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71CCC /* 52.231.28.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E72110 /* 52.231.33.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E74048 /* 52.231.64.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E743D0 /* 52.231.67.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E74600 /* 52.231.70.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E76C2E /* 52.231.108.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E76F34 /* 52.231.111.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E793A0 /* 52.231.147.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79450 /* 52.231.148.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E82321 /* 52.232.35.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E84185 /* 52.232.65.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E86AF2 /* 52.232.106.242/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBA58 /* 52.236.186.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBAD0 /* 52.236.186.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBD58 /* 52.236.189.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED2229 /* 52.237.34.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED9D46 /* 52.237.157.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F0F490 /* 52.240.244.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F0F4EC /* 52.240.244.236/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F0F540 /* 52.240.245.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F228D0 /* 52.242.40.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22F08 /* 52.242.47.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F2E6D1 /* 52.242.230.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69A98 /* 52.246.154.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69B90 /* 52.246.155.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69D10 /* 52.246.157.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69EA0 /* 52.246.158.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F7CA5A /* 52.247.202.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FAE408 /* 52.250.228.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FAE410 /* 52.250.228.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FAE420 /* 52.250.228.32/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41340291 /* 65.52.2.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134054C /* 65.52.5.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41347AD0 /* 65.52.122.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FAE8 /* 65.52.250.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FAF0 /* 65.52.250.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5540 /* 68.220.85.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5550 /* 68.220.85.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD2810 /* 68.221.40.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD2840 /* 68.221.40.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5C06 /* 68.221.92.6/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5D98 /* 68.221.93.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6740 /* 68.221.103.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6750 /* 68.221.103.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD93C8 /* 68.221.147.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD95A0 /* 68.221.149.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254080 /* 102.37.64.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662548F0 /* 102.37.72.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255040 /* 102.37.80.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662556C4 /* 102.37.86.196/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851B30 /* 102.133.27.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851C40 /* 102.133.28.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857A98 /* 102.133.122.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857BF0 /* 102.133.123.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857E40 /* 102.133.126.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857E98 /* 102.133.126.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859B30 /* 102.133.155.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685A149 /* 102.133.161.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685A2E9 /* 102.133.162.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685D844 /* 102.133.216.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685D86A /* 102.133.216.106/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DA90 /* 102.133.218.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DAF4 /* 102.133.218.244/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DB80 /* 102.133.219.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DDA0 /* 102.133.221.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FA98 /* 102.133.250.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FB50 /* 102.133.251.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FEE0 /* 102.133.254.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828DE24 /* 104.40.222.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68293DA9 /* 104.41.61.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68299865 /* 104.41.152.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68299D3B /* 104.41.157.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829E086 /* 104.41.224.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A281C /* 104.42.40.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C8C54 /* 104.44.140.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D882A /* 104.45.136.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DE645 /* 104.45.230.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DE848 /* 104.45.232.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E7BA4 /* 104.46.123.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EA240 /* 104.46.162.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB380 /* 104.46.179.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D0219B /* 104.208.33.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D02262 /* 104.208.34.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D023A9 /* 104.208.35.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D09058 /* 104.208.144.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D0E780 /* 104.208.231.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D19C6A /* 104.209.156.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D1A1D9 /* 104.209.161.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D2092A /* 104.210.9.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D34F54 /* 104.211.79.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35AEA /* 104.211.90.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35BFE /* 104.211.91.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35C36 /* 104.211.92.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35CDA /* 104.211.92.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35F3B /* 104.211.95.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D360E4 /* 104.211.96.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D36760 /* 104.211.103.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39380 /* 104.211.147.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3D8A1 /* 104.211.216.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D646DB /* 104.214.70.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6686D /* 104.214.104.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A480 /* 104.214.164.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A660 /* 104.214.166.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D7517C /* 104.215.81.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D76069 /* 104.215.96.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D76416 /* 104.215.100.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D7674E /* 104.215.103.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D77376 /* 104.215.115.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6FDD58AD /* 111.221.88.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x897452AF /* 137.116.82.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x897492D7 /* 137.116.146.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974978B /* 137.116.151.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974E251 /* 137.116.226.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89759021 /* 137.117.144.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B0962 /* 138.91.9.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B2062 /* 138.91.32.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B255D /* 138.91.37.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37B106 /* 157.55.177.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170F40 /* 158.23.15.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170F50 /* 158.23.15.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176D82 /* 158.23.109.130/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177020 /* 158.23.112.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177028 /* 158.23.112.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177040 /* 158.23.112.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177BC8 /* 158.23.123.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177DA0 /* 158.23.125.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C3C8 /* 158.23.195.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C5A0 /* 158.23.197.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8E00 /* 168.61.142.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83DB3B2 /* 168.61.179.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EA911 /* 168.62.169.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FAEA9 /* 168.63.174.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FF2DD /* 168.63.242.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE82153 /* 191.232.33.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8A14B /* 191.232.161.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8D5EF /* 191.232.213.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8D606 /* 191.232.214.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8EFB5 /* 191.232.239.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90F80 /* 191.233.15.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93380 /* 191.233.51.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CBE8 /* 191.233.203.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CCF8 /* 191.233.204.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CFD8 /* 191.233.207.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA883C /* 191.234.136.60/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8850 /* 191.234.136.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8928 /* 191.234.137.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8930 /* 191.234.137.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9298 /* 191.234.146.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9528 /* 191.234.149.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9590 /* 191.234.149.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9A98 /* 191.234.154.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9D30 /* 191.234.157.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9DA0 /* 191.234.157.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE044 /* 191.235.224.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDE0B0 /* 191.237.224.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDE0C0 /* 191.237.224.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFFB5A /* 191.239.251.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2EE065 /* 207.46.224.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2EECBF /* 207.46.236.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F820 /* 13.73.248.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142478C0 /* 20.36.120.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142540C0 /* 20.37.64.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259CE0 /* 20.37.156.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C320 /* 20.37.195.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E0C0 /* 20.37.224.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265470 /* 20.38.84.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142688C0 /* 20.38.136.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270B20 /* 20.39.11.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142904C0 /* 20.41.4.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142941A0 /* 20.41.65.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C180 /* 20.41.193.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A04E0 /* 20.42.4.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8300 /* 20.42.131.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE300 /* 20.42.227.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B29A0 /* 20.43.41.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B41A0 /* 20.43.65.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8270 /* 20.43.130.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D70C0 /* 20.45.112.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC0C0 /* 20.45.192.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A0C0 /* 20.150.160.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6AD0 /* 20.189.106.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E180 /* 20.192.225.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284330C0 /* 40.67.48.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1E70 /* 40.74.30.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503980 /* 40.80.57.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A980 /* 40.80.169.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BC20 /* 40.80.188.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852FD50 /* 40.82.253.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591180 /* 40.89.17.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2920 /* 51.12.41.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC120 /* 51.12.193.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336819A0 /* 51.104.25.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336950C0 /* 51.105.80.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336958C0 /* 51.105.88.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B30C0 /* 51.107.48.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B90C0 /* 51.107.144.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743070 /* 51.116.48.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749070 /* 51.116.144.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337828C0 /* 51.120.40.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E0C0 /* 51.120.224.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A190 /* 51.137.161.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC0C0 /* 51.143.192.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348830C0 /* 52.136.48.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6980 /* 52.140.105.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968B50 /* 52.150.139.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45190 /* 52.228.81.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853870 /* 102.133.56.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685D870 /* 102.133.216.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE1A0 /* 191.235.225.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E864E0 /* 4.232.100.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D432323 /* 13.67.35.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D43234D /* 13.67.35.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4482FB /* 13.68.130.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D44EB62 /* 13.68.235.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4570B0 /* 13.69.112.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D457E5C /* 13.69.126.92/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47BEE4 /* 13.71.190.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F920 /* 13.73.249.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F9A0 /* 13.73.249.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FFF8 /* 13.73.255.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D01EC /* 13.77.1.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D37D0 /* 13.77.55.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4DCA02 /* 13.77.202.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E31BB /* 13.78.49.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E849B /* 13.78.132.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EE68E /* 13.78.230.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58DC6D /* 13.88.220.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58DE00 /* 13.88.222.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5A9C47 /* 13.90.156.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5C8A4C /* 13.92.138.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113A80 /* 20.17.58.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152740 /* 20.21.39.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247980 /* 20.36.121.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247A38 /* 20.36.122.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247D68 /* 20.36.125.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254180 /* 20.37.65.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254238 /* 20.37.66.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254660 /* 20.37.70.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C3E0 /* 20.37.195.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C4FC /* 20.37.196.252/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C640 /* 20.37.198.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E180 /* 20.37.225.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E238 /* 20.37.226.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E598 /* 20.37.229.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142655C0 /* 20.38.85.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142657E0 /* 20.38.87.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142689A0 /* 20.38.137.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268A3C /* 20.38.138.60/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268E58 /* 20.38.142.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142695D0 /* 20.38.149.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270C20 /* 20.39.12.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270CE8 /* 20.39.12.232/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428C800 /* 20.40.200.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428C8A0 /* 20.40.200.160/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E0E2 /* 20.40.224.226/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E120 /* 20.40.225.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142905C0 /* 20.41.5.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142941E0 /* 20.41.65.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294358 /* 20.41.67.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C1E0 /* 20.41.193.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C510 /* 20.41.197.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A06C0 /* 20.42.6.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE3C0 /* 20.42.227.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE4DC /* 20.42.228.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE4E0 /* 20.42.228.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE650 /* 20.42.230.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2A40 /* 20.43.42.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2BA4 /* 20.43.43.164/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2EF8 /* 20.43.46.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4240 /* 20.43.66.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B435C /* 20.43.67.92/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4360 /* 20.43.67.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4640 /* 20.43.70.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7BA0 /* 20.43.123.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8420 /* 20.43.132.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1320 /* 20.44.19.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D707C /* 20.45.112.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7180 /* 20.45.113.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7440 /* 20.45.116.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7DF0 /* 20.45.125.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC3A0 /* 20.45.195.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC5C0 /* 20.45.197.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC5E4 /* 20.45.197.228/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0A28 /* 20.46.10.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FE820 /* 20.47.232.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C130 /* 20.48.193.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316310 /* 20.49.99.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316320 /* 20.49.99.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316760 /* 20.49.103.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316D24 /* 20.49.109.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316D2C /* 20.49.109.44/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316D30 /* 20.49.109.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143173B8 /* 20.49.115.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317800 /* 20.49.120.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317824 /* 20.49.120.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317E9C /* 20.49.126.156/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317FE0 /* 20.49.127.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14320120 /* 20.50.1.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143201A0 /* 20.50.1.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143201C8 /* 20.50.1.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143201D0 /* 20.50.1.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324148 /* 20.50.65.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331078 /* 20.51.16.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352C04 /* 20.53.44.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352C40 /* 20.53.44.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6280 /* 20.61.98.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E80F0 /* 20.62.128.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481460 /* 20.72.20.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1476C460 /* 20.118.196.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1476C480 /* 20.118.196.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A1C0 /* 20.150.161.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A590 /* 20.150.165.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A6A0 /* 20.150.166.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC500 /* 20.187.197.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6C60 /* 20.189.108.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6D58 /* 20.189.109.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6DA0 /* 20.189.109.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE0D0 /* 20.189.224.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA150 /* 20.191.161.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A1C0 /* 20.192.161.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A4B4 /* 20.192.164.180/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A6A0 /* 20.192.166.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E480 /* 20.192.228.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E600 /* 20.192.230.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E670 /* 20.192.230.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24838 /* 20.194.72.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70700 /* 20.215.7.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92F00 /* 20.217.47.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626850 /* 23.98.104.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626860 /* 23.98.104.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626880 /* 23.98.104.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626C2C /* 23.98.108.44/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626CA8 /* 23.98.108.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17664186 /* 23.102.65.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408080 /* 40.64.128.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408458 /* 40.64.132.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408460 /* 40.64.132.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408758 /* 40.64.135.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284172EA /* 40.65.114.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2843307C /* 40.67.48.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433180 /* 40.67.49.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284332C0 /* 40.67.50.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433458 /* 40.67.52.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28437980 /* 40.67.121.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470F90 /* 40.71.15.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEF30 /* 40.78.239.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF5D0 /* 40.78.245.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBD60 /* 40.79.189.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503A80 /* 40.80.58.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503B1C /* 40.80.59.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503B20 /* 40.80.59.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A9E0 /* 40.80.169.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850AC10 /* 40.80.172.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850ADC0 /* 40.80.173.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BEA0 /* 40.80.190.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BFC8 /* 40.80.191.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852FDE0 /* 40.82.253.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285484EF /* 40.84.132.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854E4FF /* 40.84.228.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285912A0 /* 40.89.18.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591484 /* 40.89.20.132/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285917E8 /* 40.89.23.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28717539 /* 40.113.117.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28724E84 /* 40.114.78.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872ECFB /* 40.114.236.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287556F3 /* 40.117.86.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2875ED4E /* 40.117.237.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287709EC /* 40.119.9.236/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2914 /* 51.12.41.20/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C29A0 /* 51.12.41.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2B80 /* 51.12.43.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC114 /* 51.12.193.20/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC1A0 /* 51.12.193.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC268 /* 51.12.194.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8808 /* 51.13.136.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351EE0 /* 51.53.30.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B220 /* 51.53.178.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681B60 /* 51.104.27.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681CDC /* 51.104.28.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681CE0 /* 51.104.28.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369507C /* 51.105.80.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695180 /* 51.105.81.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336959A0 /* 51.105.89.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695A98 /* 51.105.90.152/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B31A0 /* 51.107.49.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B323C /* 51.107.50.60/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B35F0 /* 51.107.53.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9180 /* 51.107.145.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9238 /* 51.107.146.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B95F8 /* 51.107.149.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337430C0 /* 51.116.48.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374318C /* 51.116.49.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337433A0 /* 51.116.51.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337490C0 /* 51.116.144.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374918C /* 51.116.145.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749468 /* 51.116.148.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337829A0 /* 51.120.41.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782A3C /* 51.120.42.60/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E180 /* 51.120.225.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E238 /* 51.120.226.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E810 /* 51.120.232.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A2A0 /* 51.137.162.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A450 /* 51.137.164.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A798 /* 51.137.167.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4519 /* 51.140.69.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C8A54 /* 51.140.138.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9540 /* 51.140.149.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC07C /* 51.143.192.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC180 /* 51.143.193.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD0C0 /* 51.143.208.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3391031B /* 51.145.3.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x339115C3 /* 51.145.21.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348831A0 /* 52.136.49.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883348 /* 52.136.51.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348834E8 /* 52.136.52.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488B840 /* 52.136.184.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C69E0 /* 52.140.105.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6B70 /* 52.140.107.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6C40 /* 52.140.108.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6F60 /* 52.140.111.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928450 /* 52.146.132.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968BE0 /* 52.150.139.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968CD8 /* 52.150.140.216/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969810 /* 52.150.152.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349698E0 /* 52.150.152.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969CE8 /* 52.150.156.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A16556 /* 52.161.101.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A3CF50 /* 52.163.207.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7098 /* 52.172.112.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACB5E3 /* 52.172.181.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACBE47 /* 52.172.190.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACBF04 /* 52.172.191.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACD757 /* 52.172.215.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E4189F /* 52.228.24.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E453A0 /* 52.228.83.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45454 /* 52.228.84.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45460 /* 52.228.84.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E9422E /* 52.233.66.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F34CF6 /* 52.243.76.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD2820 /* 68.221.40.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5D8C /* 68.221.93.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668538A0 /* 102.133.56.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853AC0 /* 102.133.58.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853DB0 /* 102.133.61.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685D9C0 /* 102.133.217.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DA38 /* 102.133.218.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DD00 /* 102.133.221.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829D8E4 /* 104.41.216.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682AC35C /* 104.42.195.92/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB260 /* 104.46.178.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D359D5 /* 104.211.89.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D36574 /* 104.211.101.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6759B /* 104.214.117.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D778A0 /* 104.215.120.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D79280 /* 104.215.146.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974F7B3 /* 137.116.247.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177000 /* 158.23.112.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90A60 /* 191.233.10.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90F00 /* 191.233.15.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8800 /* 191.234.136.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8830 /* 191.234.136.48/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8B90 /* 191.234.139.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE3A0 /* 191.235.227.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xD5C780E2 /* 213.199.128.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86000 /* 4.232.96.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86BC0 /* 4.232.107.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428DB0 /* 13.66.141.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D431200 /* 13.67.18.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454320 /* 13.69.67.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D457200 /* 13.69.114.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E5E0 /* 13.69.229.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45EA00 /* 13.69.234.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464A40 /* 13.70.74.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464C00 /* 13.70.76.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47ADC0 /* 13.71.173.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C450 /* 13.71.196.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C600 /* 13.71.198.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F0E0 /* 13.73.240.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F600 /* 13.73.246.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2710 /* 13.75.39.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3520 /* 13.77.53.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3700 /* 13.77.55.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6D60 /* 13.78.109.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DB50 /* 13.86.219.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DE00 /* 13.86.222.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5739F0 /* 13.87.57.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573C00 /* 13.87.60.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577BF0 /* 13.87.123.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577E00 /* 13.87.126.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59B400 /* 13.89.180.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113C00 /* 20.17.60.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114400 /* 20.17.68.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152C00 /* 20.21.44.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14153200 /* 20.21.50.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246C30 /* 20.36.108.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246E00 /* 20.36.110.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247390 /* 20.36.115.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247600 /* 20.36.118.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247E00 /* 20.36.126.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254C30 /* 20.37.76.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254E00 /* 20.37.78.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E600 /* 20.37.230.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268020 /* 20.38.128.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268200 /* 20.38.130.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269600 /* 20.38.150.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428CEF0 /* 20.40.206.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E200 /* 20.40.226.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294600 /* 20.41.70.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B78E0 /* 20.43.120.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7C00 /* 20.43.124.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C03F0 /* 20.44.3.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0600 /* 20.44.6.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0810 /* 20.44.8.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1070 /* 20.44.16.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1400 /* 20.44.20.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1E00 /* 20.44.30.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5800 /* 20.45.88.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7600 /* 20.45.118.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0800 /* 20.46.8.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C200 /* 20.48.194.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317400 /* 20.49.116.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324460 /* 20.50.68.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330A00 /* 20.51.10.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331200 /* 20.51.18.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352A00 /* 20.53.42.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4000 /* 20.58.64.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6400 /* 20.61.100.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E3800 /* 20.62.56.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8200 /* 20.62.130.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418000 /* 20.65.128.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420000 /* 20.66.0.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481C40 /* 20.72.28.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14584040 /* 20.88.64.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496E180 /* 20.150.225.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F200 /* 20.150.242.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC600 /* 20.187.198.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDA800 /* 20.189.168.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE200 /* 20.189.226.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA200 /* 20.191.162.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02080 /* 20.192.32.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02800 /* 20.192.40.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03400 /* 20.192.52.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C400 /* 20.193.196.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CC00 /* 20.193.204.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C39000 /* 20.195.144.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70A00 /* 20.215.10.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79C00 /* 20.215.156.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93200 /* 20.217.50.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93C00 /* 20.217.60.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626E00 /* 23.98.110.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433600 /* 40.67.54.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433BD0 /* 40.67.59.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433E00 /* 40.67.62.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28437800 /* 40.67.120.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456C20 /* 40.69.108.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28457000 /* 40.69.112.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470DE0 /* 40.71.13.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6600 /* 40.74.102.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2320 /* 40.75.35.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2600 /* 40.75.38.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC420 /* 40.78.196.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC600 /* 40.78.198.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECBE0 /* 40.78.203.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECE00 /* 40.78.206.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEAB0 /* 40.78.234.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFE00 /* 40.78.254.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F83F0 /* 40.79.131.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8600 /* 40.79.134.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9E00 /* 40.79.158.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB400 /* 40.79.180.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB600 /* 40.79.182.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC600 /* 40.79.198.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850AE00 /* 40.80.174.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B200 /* 40.80.178.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871B200 /* 40.113.178.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28785000 /* 40.120.80.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B4000 /* 51.11.64.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B6000 /* 51.11.96.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2C00 /* 51.12.44.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6540 /* 51.12.101.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC400 /* 51.12.196.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCD00 /* 51.12.205.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356200 /* 51.53.98.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B400 /* 51.53.180.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BC00 /* 51.53.188.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336808E0 /* 51.104.8.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694E00 /* 51.105.78.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695E00 /* 51.105.94.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3600 /* 51.107.54.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3C20 /* 51.107.60.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3E00 /* 51.107.62.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9600 /* 51.107.150.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9C20 /* 51.107.156.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9E00 /* 51.107.158.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743400 /* 51.116.52.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743C20 /* 51.116.60.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743E00 /* 51.116.62.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749600 /* 51.116.150.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749C20 /* 51.116.156.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749F00 /* 51.116.159.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782E00 /* 51.120.46.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786420 /* 51.120.100.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786600 /* 51.120.102.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DC20 /* 51.120.220.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DE00 /* 51.120.222.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E600 /* 51.120.230.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD000 /* 51.138.208.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD410 /* 51.140.212.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD600 /* 51.140.214.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD200 /* 51.143.210.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883600 /* 52.136.54.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5E00 /* 52.138.94.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6800 /* 52.139.104.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928600 /* 52.146.134.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34936000 /* 52.147.96.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969E00 /* 52.150.158.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26EE0 /* 52.162.110.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7200 /* 52.172.114.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E713D0 /* 52.231.19.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71600 /* 52.231.22.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79440 /* 52.231.148.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79600 /* 52.231.150.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F0F200 /* 52.240.242.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FC30 /* 65.52.252.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FE00 /* 65.52.254.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5A00 /* 68.221.90.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851C10 /* 102.133.28.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851E00 /* 102.133.30.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853E00 /* 102.133.62.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857BE0 /* 102.133.123.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859E00 /* 102.133.158.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DE00 /* 102.133.222.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EA000 /* 104.46.160.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EA100 /* 104.46.161.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB400 /* 104.46.180.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A200 /* 104.214.162.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A600 /* 104.214.166.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176A00 /* 158.23.106.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8A00 /* 168.61.138.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8FC0 /* 168.61.143.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93400 /* 191.233.52.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CD10 /* 191.233.205.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8C00 /* 191.234.140.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9E00 /* 191.234.158.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04957080 /* 4.149.112.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04957100 /* 4.149.113.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04AB1800 /* 4.171.24.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04BE8280 /* 4.190.130.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04C2E080 /* 4.194.224.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E865A0 /* 4.232.101.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E865C0 /* 4.232.101.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86840 /* 4.232.104.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86940 /* 4.232.105.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86BB8 /* 4.232.107.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87840 /* 4.232.120.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87940 /* 4.232.121.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87BC0 /* 4.232.123.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C040 /* 4.232.192.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C140 /* 4.232.193.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C3C0 /* 4.232.195.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41D1F3 /* 13.65.209.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D423C48 /* 13.66.60.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D423E7C /* 13.66.62.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428800 /* 13.66.136.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4288C0 /* 13.66.136.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428900 /* 13.66.137.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D429580 /* 13.66.149.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E2CA /* 13.66.226.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D431000 /* 13.67.16.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4310C0 /* 13.67.16.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D431100 /* 13.67.17.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D431480 /* 13.67.20.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D43D73E /* 13.67.215.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456800 /* 13.69.104.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4568C0 /* 13.69.104.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456900 /* 13.69.105.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4569C0 /* 13.69.105.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456F20 /* 13.69.111.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4570A8 /* 13.69.112.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D457440 /* 13.69.116.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D457460 /* 13.69.116.96/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D457480 /* 13.69.116.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D457500 /* 13.69.117.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E000 /* 13.69.224.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E0C0 /* 13.69.224.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E100 /* 13.69.225.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E1C0 /* 13.69.225.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E988 /* 13.69.233.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45EF80 /* 13.69.239.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D467000 /* 13.70.112.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D467020 /* 13.70.112.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D467100 /* 13.70.113.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D467280 /* 13.70.114.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4694FB /* 13.70.148.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47A800 /* 13.71.168.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47A820 /* 13.71.168.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47A900 /* 13.71.169.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47B1C0 /* 13.71.177.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47B200 /* 13.71.178.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C000 /* 13.71.192.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C100 /* 13.71.193.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C120 /* 13.71.193.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D496DFB /* 13.73.109.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6840 /* 13.74.104.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6880 /* 13.74.104.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6900 /* 13.74.105.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6980 /* 13.74.105.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A69C0 /* 13.74.105.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2000 /* 13.75.32.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B20C0 /* 13.75.32.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2100 /* 13.75.33.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B21C0 /* 13.75.33.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B9557 /* 13.75.149.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3000 /* 13.77.48.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3100 /* 13.77.49.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3120 /* 13.77.49.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E3DC4 /* 13.78.61.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6800 /* 13.78.104.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6820 /* 13.78.104.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6900 /* 13.78.105.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E9119 /* 13.78.145.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EF820 /* 13.78.248.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D554130 /* 13.85.65.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56D800 /* 13.86.216.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56D880 /* 13.86.216.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56D8C0 /* 13.86.216.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56D900 /* 13.86.217.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56D980 /* 13.86.217.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56D9C0 /* 13.86.217.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56D9E0 /* 13.86.217.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D571040 /* 13.87.16.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D571100 /* 13.87.17.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5721EA /* 13.87.33.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D572207 /* 13.87.34.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D572213 /* 13.87.34.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57268A /* 13.87.38.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577800 /* 13.87.120.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577900 /* 13.87.121.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D581D46 /* 13.88.29.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59246E /* 13.89.36.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59253D /* 13.89.37.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D593932 /* 13.89.57.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D593973 /* 13.89.57.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59A800 /* 13.89.168.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59A8C0 /* 13.89.168.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59A900 /* 13.89.169.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59B340 /* 13.89.179.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B04DB /* 13.91.4.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DA5FB /* 13.93.165.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DED9E /* 13.93.237.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14068B00 /* 20.6.139.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140E7D80 /* 20.14.125.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140F0A00 /* 20.15.10.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140F0C00 /* 20.15.12.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140F8180 /* 20.15.129.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140F8200 /* 20.15.130.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140F8380 /* 20.15.131.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113B80 /* 20.17.59.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113BC0 /* 20.17.59.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114040 /* 20.17.64.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114140 /* 20.17.65.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141143F8 /* 20.17.67.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14120400 /* 20.18.4.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B040 /* 20.18.176.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B140 /* 20.18.177.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B3C0 /* 20.18.179.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14131E00 /* 20.19.30.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152840 /* 20.21.40.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152940 /* 20.21.41.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152BF8 /* 20.21.43.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14153520 /* 20.21.53.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14153540 /* 20.21.53.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154040 /* 20.21.64.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154140 /* 20.21.65.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141543C0 /* 20.21.67.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154840 /* 20.21.72.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154940 /* 20.21.73.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154BC0 /* 20.21.75.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14155780 /* 20.21.87.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141A1700 /* 20.26.23.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246800 /* 20.36.104.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246900 /* 20.36.105.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246920 /* 20.36.105.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247000 /* 20.36.112.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247100 /* 20.36.113.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247120 /* 20.36.113.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14249080 /* 20.36.144.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14249100 /* 20.36.145.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254740 /* 20.37.71.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254780 /* 20.37.71.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254840 /* 20.37.72.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254860 /* 20.37.72.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254940 /* 20.37.73.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254960 /* 20.37.73.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268F40 /* 20.38.143.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268F80 /* 20.38.143.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269000 /* 20.38.144.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269020 /* 20.38.144.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269100 /* 20.38.145.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269818 /* 20.38.152.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269940 /* 20.38.153.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269A40 /* 20.38.154.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E480 /* 20.40.228.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4140 /* 20.42.65.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4160 /* 20.42.65.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A44C0 /* 20.42.68.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4500 /* 20.42.69.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4580 /* 20.42.69.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4900 /* 20.42.73.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4920 /* 20.42.73.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4AC0 /* 20.42.74.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4B00 /* 20.42.75.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4B80 /* 20.42.75.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AA880 /* 20.42.168.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2FC0 /* 20.43.47.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0000 /* 20.44.0.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0100 /* 20.44.1.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0E00 /* 20.44.14.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1800 /* 20.44.24.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1820 /* 20.44.24.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1900 /* 20.44.25.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7800 /* 20.45.120.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7900 /* 20.45.121.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7920 /* 20.45.121.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7F80 /* 20.45.127.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0B20 /* 20.46.11.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0B40 /* 20.46.11.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0B80 /* 20.46.11.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C420 /* 20.48.196.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C440 /* 20.48.196.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C480 /* 20.48.196.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315000 /* 20.49.80.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315020 /* 20.49.80.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315100 /* 20.49.81.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315800 /* 20.49.88.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315820 /* 20.49.88.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315900 /* 20.49.89.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315920 /* 20.49.89.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315FC0 /* 20.49.95.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317720 /* 20.49.119.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317740 /* 20.49.119.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317780 /* 20.49.119.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324920 /* 20.50.73.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324940 /* 20.50.73.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14325100 /* 20.50.81.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14325E00 /* 20.50.94.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432C9E0 /* 20.50.201.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432CA00 /* 20.50.202.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432CA80 /* 20.50.202.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330980 /* 20.51.9.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143311A0 /* 20.51.17.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143311C0 /* 20.51.17.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331400 /* 20.51.20.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344100 /* 20.52.65.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352E80 /* 20.53.46.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353060 /* 20.53.48.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353080 /* 20.53.48.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143530C0 /* 20.53.48.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353820 /* 20.53.56.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353840 /* 20.53.56.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353880 /* 20.53.56.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4280 /* 20.58.66.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4438 /* 20.58.68.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D63C0 /* 20.61.99.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6600 /* 20.61.102.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E3A80 /* 20.62.58.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E84A0 /* 20.62.132.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E84C0 /* 20.62.132.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8500 /* 20.62.133.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14410100 /* 20.65.1.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144184A0 /* 20.65.132.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144184C0 /* 20.65.132.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418500 /* 20.65.133.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420340 /* 20.66.3.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420380 /* 20.66.3.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450020 /* 20.69.0.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450040 /* 20.69.0.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450080 /* 20.69.0.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144815E0 /* 20.72.21.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481840 /* 20.72.24.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481880 /* 20.72.24.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481980 /* 20.72.25.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453C100 /* 20.83.193.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14584000 /* 20.88.64.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590140 /* 20.89.1.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590180 /* 20.89.1.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B0F00 /* 20.91.15.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B9580 /* 20.91.149.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14631B80 /* 20.99.27.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14641300 /* 20.100.19.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1471F980 /* 20.113.249.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DA840 /* 20.125.168.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DA940 /* 20.125.169.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DABC0 /* 20.125.171.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DC840 /* 20.125.200.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DC940 /* 20.125.201.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCBC0 /* 20.125.203.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A800 /* 20.150.168.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A820 /* 20.150.168.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A900 /* 20.150.169.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B000 /* 20.150.176.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B020 /* 20.150.176.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B100 /* 20.150.177.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B800 /* 20.150.184.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B820 /* 20.150.184.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B900 /* 20.150.185.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F180 /* 20.150.241.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A49880 /* 20.164.152.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A62B00 /* 20.166.43.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A62D00 /* 20.166.45.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A78100 /* 20.167.129.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A040 /* 20.168.160.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A140 /* 20.168.161.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A3C0 /* 20.168.163.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AF0480 /* 20.175.4.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDACE0 /* 20.189.172.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDAD40 /* 20.189.173.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE1A0 /* 20.189.225.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE1C0 /* 20.189.225.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE400 /* 20.189.228.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA5A0 /* 20.191.165.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA5C0 /* 20.191.165.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA600 /* 20.191.166.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02BA0 /* 20.192.43.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02BC0 /* 20.192.43.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02C00 /* 20.192.44.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03020 /* 20.192.48.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03040 /* 20.192.48.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03080 /* 20.192.48.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06000 /* 20.192.96.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06020 /* 20.192.96.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06100 /* 20.192.97.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A7E0 /* 20.192.167.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E800 /* 20.192.232.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E900 /* 20.192.233.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E920 /* 20.192.233.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C000 /* 20.193.192.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C040 /* 20.193.192.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C800 /* 20.193.200.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C820 /* 20.193.200.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C900 /* 20.193.201.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24000 /* 20.194.64.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24020 /* 20.194.64.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24100 /* 20.194.65.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24940 /* 20.194.73.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24980 /* 20.194.73.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C250C0 /* 20.194.80.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C28140 /* 20.194.129.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34120 /* 20.195.65.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34140 /* 20.195.65.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34180 /* 20.195.65.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34820 /* 20.195.72.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34840 /* 20.195.72.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34880 /* 20.195.72.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C39200 /* 20.195.146.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7CD00 /* 20.199.205.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5F80 /* 20.203.95.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC480 /* 20.204.196.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4840 /* 20.205.72.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4940 /* 20.205.73.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4DB0 /* 20.205.77.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4DC8 /* 20.205.77.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5040 /* 20.205.80.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5140 /* 20.205.81.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD53E0 /* 20.205.83.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CDC080 /* 20.205.192.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0780 /* 20.206.7.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF0700 /* 20.207.7.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CFAAC0 /* 20.207.170.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CFAD00 /* 20.207.173.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D01040 /* 20.208.16.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D01140 /* 20.208.17.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D013C0 /* 20.208.19.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D09680 /* 20.208.150.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D3E500 /* 20.211.229.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5C700 /* 20.213.199.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5E100 /* 20.213.225.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D68580 /* 20.214.133.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70D00 /* 20.215.13.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70D40 /* 20.215.13.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71040 /* 20.215.16.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71140 /* 20.215.17.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D713C0 /* 20.215.19.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71840 /* 20.215.24.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71940 /* 20.215.25.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71BC0 /* 20.215.27.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79840 /* 20.215.152.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79940 /* 20.215.153.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79BF8 /* 20.215.155.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D7AB80 /* 20.215.171.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93500 /* 20.217.53.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93540 /* 20.217.53.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93840 /* 20.217.56.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93940 /* 20.217.57.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93BF8 /* 20.217.59.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94840 /* 20.217.72.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94940 /* 20.217.73.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94BC0 /* 20.217.75.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95840 /* 20.217.88.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95940 /* 20.217.89.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95BC0 /* 20.217.91.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DABC00 /* 20.218.188.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DC0300 /* 20.220.3.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DD8C80 /* 20.221.140.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DD8F00 /* 20.221.143.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DE8000 /* 20.222.128.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E2D080 /* 20.226.208.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E2D180 /* 20.226.209.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E40580 /* 20.228.5.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E98280 /* 20.233.130.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F17300 /* 20.241.115.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F4C100 /* 20.244.193.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760596D /* 23.96.89.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17606ABF /* 23.96.106.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760B2C7 /* 23.96.178.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760CAE5 /* 23.96.202.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760CCF9 /* 23.96.204.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760CDD7 /* 23.96.205.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760F925 /* 23.96.249.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760FAB2 /* 23.96.250.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761A72E /* 23.97.167.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761A913 /* 23.97.169.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761DDB0 /* 23.97.221.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1762374B /* 23.98.55.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625000 /* 23.98.80.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176250C0 /* 23.98.80.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625100 /* 23.98.81.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17627180 /* 23.98.113.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1762A24B /* 23.98.162.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1762A24C /* 23.98.162.76/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1762AA4B /* 23.98.170.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1762AA4C /* 23.98.170.76/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176304F8 /* 23.99.4.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763224B /* 23.99.34.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176325EB /* 23.99.37.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176325EC /* 23.99.37.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763A08B /* 23.99.160.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763A08C /* 23.99.160.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763CDB7 /* 23.99.205.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764755F /* 23.100.117.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17661082 /* 23.102.16.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766349B /* 23.102.52.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766B3BB /* 23.102.179.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28407200 /* 40.64.114.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433500 /* 40.67.53.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433800 /* 40.67.56.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433820 /* 40.67.56.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433900 /* 40.67.57.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844259E /* 40.68.37.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456800 /* 40.69.104.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456900 /* 40.69.105.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456920 /* 40.69.105.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28457480 /* 40.69.116.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2845BD30 /* 40.69.189.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469000 /* 40.70.144.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284690C0 /* 40.70.144.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469100 /* 40.70.145.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470800 /* 40.71.8.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284708C0 /* 40.71.8.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470900 /* 40.71.9.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284709C0 /* 40.71.9.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28475371 /* 40.71.83.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A3C5B /* 40.74.60.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6000 /* 40.74.96.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6020 /* 40.74.96.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6100 /* 40.74.97.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9000 /* 40.74.144.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9020 /* 40.74.144.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9100 /* 40.74.145.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9120 /* 40.74.145.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2000 /* 40.75.32.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2028 /* 40.75.32.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2100 /* 40.75.33.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2120 /* 40.75.33.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C02AC /* 40.76.2.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C1A5A /* 40.76.26.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C2A2C /* 40.76.42.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C41DE /* 40.76.65.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C4209 /* 40.76.66.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CC1DD /* 40.76.193.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D1EC9 /* 40.77.30.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E107A /* 40.78.16.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E17FC /* 40.78.23.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E396D /* 40.78.57.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC000 /* 40.78.192.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC020 /* 40.78.192.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC100 /* 40.78.193.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC120 /* 40.78.193.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC880 /* 40.78.200.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC980 /* 40.78.201.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE000 /* 40.78.224.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE080 /* 40.78.224.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE100 /* 40.78.225.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE180 /* 40.78.225.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE800 /* 40.78.232.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE8C0 /* 40.78.232.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE900 /* 40.78.233.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF000 /* 40.78.240.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF0C0 /* 40.78.240.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF100 /* 40.78.241.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF800 /* 40.78.248.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF8C0 /* 40.78.248.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF900 /* 40.78.249.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F54B4 /* 40.79.84.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8000 /* 40.79.128.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8020 /* 40.79.128.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8100 /* 40.79.129.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8800 /* 40.79.136.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8820 /* 40.79.136.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8900 /* 40.79.137.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9000 /* 40.79.144.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9020 /* 40.79.144.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9100 /* 40.79.145.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9800 /* 40.79.152.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F98C0 /* 40.79.152.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9900 /* 40.79.153.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F99C0 /* 40.79.153.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA000 /* 40.79.160.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA020 /* 40.79.160.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA100 /* 40.79.161.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA780 /* 40.79.167.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA800 /* 40.79.168.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA820 /* 40.79.168.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA900 /* 40.79.169.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAF40 /* 40.79.175.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB000 /* 40.79.176.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB028 /* 40.79.176.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB100 /* 40.79.177.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB120 /* 40.79.177.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB800 /* 40.79.184.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB820 /* 40.79.184.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB900 /* 40.79.185.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBFE0 /* 40.79.191.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC000 /* 40.79.192.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC020 /* 40.79.192.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC100 /* 40.79.193.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503000 /* 40.80.48.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503020 /* 40.80.48.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503100 /* 40.80.49.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28506680 /* 40.80.102.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B540 /* 40.80.181.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854995F /* 40.84.153.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28549BD2 /* 40.84.155.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854BF01 /* 40.84.191.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854C110 /* 40.84.193.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854C3BD /* 40.84.195.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854E7CB /* 40.84.231.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28556632 /* 40.85.102.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855E0F9 /* 40.85.224.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E2A6 /* 40.86.226.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28708BFA /* 40.112.139.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F000 /* 40.112.240.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F600 /* 40.112.246.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28710E35 /* 40.113.14.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287110BE /* 40.113.16.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28715D5B /* 40.113.93.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871C877 /* 40.113.200.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28722DC3 /* 40.114.45.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872518E /* 40.114.81.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872F07D /* 40.114.240.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873253D /* 40.115.37.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873348D /* 40.115.52.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287335FF /* 40.115.53.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28751A80 /* 40.117.26.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28752A49 /* 40.117.42.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28752C47 /* 40.117.44.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28760CD0 /* 40.118.12.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287681A7 /* 40.118.129.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876D1CE /* 40.118.209.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876F4E3 /* 40.118.244.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876F97B /* 40.118.249.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876FA13 /* 40.118.250.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784800 /* 40.120.72.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784820 /* 40.120.72.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784900 /* 40.120.73.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28798FCC /* 40.121.143.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28799531 /* 40.121.149.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28799E1E /* 40.121.158.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C084C /* 40.124.8.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C4088 /* 40.124.64.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C40A0 /* 40.124.64.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C4180 /* 40.124.65.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C41C0 /* 40.124.65.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F5245 /* 40.127.82.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F53A4 /* 40.127.83.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F800A /* 40.127.128.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F89D1 /* 40.127.137.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F8DC2 /* 40.127.141.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FB18B /* 40.127.177.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B61C0 /* 51.11.97.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2E20 /* 51.12.46.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2E40 /* 51.12.46.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2E80 /* 51.12.46.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6000 /* 51.12.96.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6020 /* 51.12.96.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6100 /* 51.12.97.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC620 /* 51.12.198.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC640 /* 51.12.198.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC680 /* 51.12.198.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC800 /* 51.12.200.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC820 /* 51.12.200.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC900 /* 51.12.201.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC920 /* 51.12.201.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE000 /* 51.12.224.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE020 /* 51.12.224.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE100 /* 51.12.225.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE800 /* 51.12.232.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE820 /* 51.12.232.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE900 /* 51.12.233.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D88E0 /* 51.13.136.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8900 /* 51.13.137.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8940 /* 51.13.137.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356520 /* 51.53.101.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356540 /* 51.53.101.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356840 /* 51.53.104.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356940 /* 51.53.105.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356BF8 /* 51.53.107.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B620 /* 51.53.182.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B640 /* 51.53.182.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B840 /* 51.53.184.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B940 /* 51.53.185.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BBF8 /* 51.53.187.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367C840 /* 51.103.200.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367C940 /* 51.103.201.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CBC0 /* 51.103.203.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680A00 /* 51.104.10.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694000 /* 51.105.64.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694020 /* 51.105.64.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694100 /* 51.105.65.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336947C0 /* 51.105.71.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694800 /* 51.105.72.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694820 /* 51.105.72.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694900 /* 51.105.73.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3800 /* 51.107.56.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3820 /* 51.107.56.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3900 /* 51.107.57.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9800 /* 51.107.152.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9900 /* 51.107.153.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9920 /* 51.107.153.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF220 /* 51.107.242.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF240 /* 51.107.242.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF280 /* 51.107.242.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFA40 /* 51.107.250.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFA80 /* 51.107.250.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743660 /* 51.116.54.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743680 /* 51.116.54.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337436C0 /* 51.116.54.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743800 /* 51.116.56.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743900 /* 51.116.57.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743920 /* 51.116.57.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749520 /* 51.116.149.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749540 /* 51.116.149.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749580 /* 51.116.149.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749800 /* 51.116.152.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749820 /* 51.116.152.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749900 /* 51.116.153.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F000 /* 51.116.240.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F020 /* 51.116.240.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F100 /* 51.116.241.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F700 /* 51.116.247.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F800 /* 51.116.248.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F820 /* 51.116.248.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F900 /* 51.116.249.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FF00 /* 51.116.255.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786000 /* 51.120.96.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786020 /* 51.120.96.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786100 /* 51.120.97.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786800 /* 51.120.104.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786820 /* 51.120.104.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786900 /* 51.120.105.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378B500 /* 51.120.181.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D000 /* 51.120.208.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D020 /* 51.120.208.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D100 /* 51.120.209.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D800 /* 51.120.216.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D900 /* 51.120.217.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D920 /* 51.120.217.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E8C0 /* 51.120.232.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E900 /* 51.120.233.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384C140 /* 51.132.193.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384C180 /* 51.132.193.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD200 /* 51.138.210.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4D09 /* 51.140.77.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C7396 /* 51.140.115.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9000 /* 51.140.144.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9020 /* 51.140.144.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9100 /* 51.140.145.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9780 /* 51.140.151.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CB80B /* 51.140.184.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD040 /* 51.140.208.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD060 /* 51.140.208.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD100 /* 51.140.209.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD120 /* 51.140.209.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D080B /* 51.141.8.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD1E0 /* 51.143.209.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD400 /* 51.143.212.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD440 /* 51.143.212.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348835A0 /* 52.136.53.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348835C0 /* 52.136.53.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488B900 /* 52.136.185.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5800 /* 52.138.88.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5820 /* 52.138.88.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5900 /* 52.138.89.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5920 /* 52.138.89.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE000 /* 52.138.224.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE080 /* 52.138.224.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE100 /* 52.138.225.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE180 /* 52.138.225.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE548 /* 52.138.229.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6AC0 /* 52.139.106.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6B00 /* 52.139.107.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928580 /* 52.146.133.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349370A0 /* 52.147.112.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34942A00 /* 52.148.42.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349FCB00 /* 52.159.203.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A1649E /* 52.161.100.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A18020 /* 52.161.128.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26800 /* 52.162.104.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26900 /* 52.162.105.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A269C0 /* 52.162.105.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A64C00 /* 52.166.76.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76800 /* 52.167.104.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A768C0 /* 52.167.104.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A768E0 /* 52.167.104.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76900 /* 52.167.105.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76F90 /* 52.167.111.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76FC0 /* 52.167.111.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A775E2 /* 52.167.117.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A79140 /* 52.167.145.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A79180 /* 52.167.145.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A791C0 /* 52.167.145.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87440 /* 52.168.116.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87560 /* 52.168.117.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87580 /* 52.168.117.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A875A0 /* 52.168.117.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A875C0 /* 52.168.117.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87600 /* 52.168.118.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A8A699 /* 52.168.166.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AA621D /* 52.170.98.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC182F /* 52.172.24.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC5380 /* 52.172.83.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7160 /* 52.172.113.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7180 /* 52.172.113.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC71C0 /* 52.172.113.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACD9E9 /* 52.172.217.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADCD3B /* 52.173.205.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF2196 /* 52.175.33.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B03B0C /* 52.176.59.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B06462 /* 52.176.100.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B1B9B5 /* 52.177.185.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B211C0 /* 52.178.17.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B21500 /* 52.178.21.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B21540 /* 52.178.21.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B21580 /* 52.178.21.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B21600 /* 52.178.22.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B34B00 /* 52.179.75.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B34E00 /* 52.179.78.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3B2B8 /* 52.179.178.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B09A /* 52.180.176.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B7E2 /* 52.180.183.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68800 /* 52.182.136.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B688C0 /* 52.182.136.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68900 /* 52.182.137.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B69000 /* 52.182.144.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B7FA3E /* 52.183.250.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BA4F31 /* 52.186.79.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BF9040 /* 52.191.144.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BF9840 /* 52.191.152.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1BC2E /* 52.225.188.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1BC71 /* 52.225.188.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E423DD /* 52.228.35.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E5115D /* 52.229.17.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71000 /* 52.231.16.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71020 /* 52.231.16.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71100 /* 52.231.17.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7202A /* 52.231.32.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79000 /* 52.231.144.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79100 /* 52.231.145.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79760 /* 52.231.151.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7C856 /* 52.231.200.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECB800 /* 52.236.184.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECB820 /* 52.236.184.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECB880 /* 52.236.184.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECB900 /* 52.236.185.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECB980 /* 52.236.185.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F0F500 /* 52.240.245.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F21E9A /* 52.242.30.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69800 /* 52.246.152.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69820 /* 52.246.152.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69900 /* 52.246.153.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F6FBF8 /* 52.246.251.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134D56C /* 65.52.213.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134DA52 /* 65.52.218.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134E1F5 /* 65.52.225.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134E2D1 /* 65.52.226.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134F800 /* 65.52.248.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134F820 /* 65.52.248.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134F900 /* 65.52.249.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5040 /* 68.220.80.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5140 /* 68.220.81.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5258 /* 68.220.82.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD28A0 /* 68.221.40.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD28C0 /* 68.221.40.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6040 /* 68.221.96.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6140 /* 68.221.97.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD63B8 /* 68.221.99.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD9040 /* 68.221.144.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD9140 /* 68.221.145.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD93C0 /* 68.221.147.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255060 /* 102.37.80.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255080 /* 102.37.80.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662550C0 /* 102.37.80.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A000 /* 102.37.160.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A040 /* 102.37.160.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851800 /* 102.133.24.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851900 /* 102.133.25.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851920 /* 102.133.25.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857800 /* 102.133.120.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857820 /* 102.133.120.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857900 /* 102.133.121.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859800 /* 102.133.152.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859820 /* 102.133.152.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859900 /* 102.133.153.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DDE0 /* 102.133.221.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685F800 /* 102.133.248.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685F820 /* 102.133.248.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685F900 /* 102.133.249.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68283167 /* 104.40.49.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68289BF7 /* 104.40.155.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828A840 /* 104.40.168.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828A8C0 /* 104.40.168.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828A900 /* 104.40.169.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828A920 /* 104.40.169.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828A980 /* 104.40.169.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68290B05 /* 104.41.11.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682938DA /* 104.41.56.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829984A /* 104.41.152.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829CA1E /* 104.41.202.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682ABC82 /* 104.42.188.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682AC0BE /* 104.42.192.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682AEDC6 /* 104.42.237.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682AEECD /* 104.42.238.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682B0F00 /* 104.43.15.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BCB48 /* 104.43.203.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D9E1E /* 104.45.158.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EA2C0 /* 104.46.162.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EA300 /* 104.46.163.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB3A0 /* 104.46.179.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB3C0 /* 104.46.179.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB700 /* 104.46.183.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D01500 /* 104.208.21.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D015C0 /* 104.208.21.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D01600 /* 104.208.22.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D01C10 /* 104.208.28.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D01C35 /* 104.208.28.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D09500 /* 104.208.149.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D09600 /* 104.208.150.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D096C0 /* 104.208.150.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D09740 /* 104.208.151.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35500 /* 104.211.85.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35600 /* 104.211.86.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35620 /* 104.211.86.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3609F /* 104.211.96.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39000 /* 104.211.144.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39020 /* 104.211.144.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39100 /* 104.211.145.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39120 /* 104.211.145.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A050 /* 104.211.160.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E092 /* 104.211.224.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D61000 /* 104.214.16.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D610C0 /* 104.214.16.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D61100 /* 104.214.17.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D611C0 /* 104.214.17.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D64989 /* 104.214.73.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6949C /* 104.214.148.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89741FE0 /* 137.116.31.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170840 /* 158.23.8.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170940 /* 158.23.9.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170BB8 /* 158.23.11.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E1770A0 /* 158.23.112.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E1770C0 /* 158.23.112.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177840 /* 158.23.120.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177940 /* 158.23.121.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177BC0 /* 158.23.123.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C040 /* 158.23.192.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C140 /* 158.23.193.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C3C0 /* 158.23.195.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8800 /* 168.61.136.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8900 /* 168.61.137.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E7370 /* 168.62.115.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EE8BC /* 168.62.232.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EEB31 /* 168.62.235.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EEBF1 /* 168.62.235.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EEF1D /* 168.62.239.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F0DD6 /* 168.63.13.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90FA0 /* 191.233.15.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90FC0 /* 191.233.15.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93000 /* 191.233.48.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93020 /* 191.233.48.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93100 /* 191.233.49.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE97800 /* 191.233.120.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9C800 /* 191.233.200.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9C820 /* 191.233.200.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9C900 /* 191.233.201.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA028B /* 191.234.2.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8EA0 /* 191.234.142.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8EC0 /* 191.234.142.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9000 /* 191.234.144.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9020 /* 191.234.144.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9100 /* 191.234.145.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9800 /* 191.234.152.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9900 /* 191.234.153.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9D88 /* 191.234.157.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBC14B /* 191.235.193.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBC18B /* 191.235.193.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBC18C /* 191.235.193.140/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC771F /* 191.236.119.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDE84B /* 191.237.232.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDE8EB /* 191.237.232.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDE8EC /* 191.237.232.236/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDF02B /* 191.237.240.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE062B /* 191.238.6.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE062C /* 191.238.6.44/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE062E /* 191.238.6.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE440B /* 191.238.68.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFC06D /* 191.239.192.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFE06B /* 191.239.224.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFE06C /* 191.239.224.108/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFE06E /* 191.239.224.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4291C0 /* 13.66.145.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E940 /* 13.69.233.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464F20 /* 13.70.79.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47B100 /* 13.71.177.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573AC0 /* 13.87.58.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577CC0 /* 13.87.124.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142475E0 /* 20.36.117.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268420 /* 20.38.132.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7B80 /* 20.43.123.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0AE0 /* 20.44.10.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1380 /* 20.44.19.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7E40 /* 20.45.126.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315400 /* 20.49.84.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344800 /* 20.52.72.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14350040 /* 20.53.0.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496ADE0 /* 20.150.173.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDAB40 /* 20.189.171.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0B880 /* 20.192.184.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EEE0 /* 20.192.238.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CEA0 /* 20.193.206.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764D020 /* 23.100.208.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284379A0 /* 40.67.121.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456F40 /* 40.69.111.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEF40 /* 40.78.239.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8BE0 /* 40.79.139.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBE80 /* 40.79.190.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B480 /* 40.80.180.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28597980 /* 40.89.121.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28780880 /* 40.120.8.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784080 /* 40.120.64.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6580 /* 51.12.101.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCD40 /* 51.12.205.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8040 /* 51.107.128.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BC060 /* 51.107.192.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F5E0 /* 51.116.245.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786D40 /* 51.120.109.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DCE0 /* 51.120.220.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AA020 /* 51.138.160.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9560 /* 51.140.149.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD780 /* 51.140.215.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87060 /* 52.168.112.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B21120 /* 52.178.17.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71740 /* 52.231.23.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79700 /* 52.231.151.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F0F160 /* 52.240.241.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254040 /* 102.37.64.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857CA0 /* 102.133.124.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EA220 /* 104.46.162.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A440 /* 104.214.164.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8C40 /* 168.61.140.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA95E0 /* 191.234.149.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDE080 /* 191.237.224.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E828B0 /* 4.232.40.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14099C00 /* 20.9.156.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113F50 /* 20.17.63.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14155490 /* 20.21.84.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14271BE8 /* 20.39.27.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F895E /* 20.47.137.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F9495 /* 20.47.148.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143258C4 /* 20.50.88.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436C388 /* 20.54.195.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1455C202 /* 20.85.194.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469F43E /* 20.105.244.62/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469F550 /* 20.105.245.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D0712 /* 20.125.7.18/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D0718 /* 20.125.7.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE0154 /* 20.190.1.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5B88 /* 20.203.91.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D29218 /* 20.210.146.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D7A8A8 /* 20.215.168.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93798 /* 20.217.55.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E85C80 /* 20.232.92.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E85C84 /* 20.232.92.132/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E85C86 /* 20.232.92.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E85DC0 /* 20.232.93.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14ED52C9 /* 20.237.82.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B77BA /* 40.91.119.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28779BB8 /* 40.119.155.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33352818 /* 51.53.40.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F1C57 /* 52.143.28.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F49D5 /* 52.143.73.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34938771 /* 52.147.135.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3493879D /* 52.147.135.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BCDA35 /* 52.188.218.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BF6434 /* 52.191.100.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E08546 /* 52.224.133.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E085FD /* 52.224.133.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0BCA9 /* 52.224.188.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22F98 /* 52.242.47.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5C08 /* 68.221.92.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176C20 /* 158.23.108.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81E00 /* 4.232.30.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86A50 /* 4.232.106.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86A60 /* 4.232.106.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87A50 /* 4.232.122.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87A60 /* 4.232.122.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C250 /* 4.232.194.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C260 /* 4.232.194.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428A50 /* 13.66.138.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4293C0 /* 13.66.147.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430860 /* 13.67.8.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D431400 /* 13.67.20.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D446E24 /* 13.68.110.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454040 /* 13.69.64.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456A40 /* 13.69.106.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456F40 /* 13.69.111.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E340 /* 13.69.227.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E9C0 /* 13.69.233.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464810 /* 13.70.72.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D467200 /* 13.70.114.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D46BA21 /* 13.70.186.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47729D /* 13.71.114.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AA20 /* 13.71.170.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47B140 /* 13.71.177.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C260 /* 13.71.194.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6B40 /* 13.74.107.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A8E58 /* 13.74.142.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2280 /* 13.75.34.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4C8D24 /* 13.76.141.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3210 /* 13.77.50.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E5EBB /* 13.78.94.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6A50 /* 13.78.106.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5551DA /* 13.85.81.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D572308 /* 13.87.35.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573840 /* 13.87.56.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577A40 /* 13.87.122.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D580A5D /* 13.88.10.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AAC0 /* 13.89.170.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59B280 /* 13.89.178.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113600 /* 20.17.54.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114250 /* 20.17.66.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114260 /* 20.17.66.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B250 /* 20.18.178.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B260 /* 20.18.178.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14150803 /* 20.21.8.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152580 /* 20.21.37.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152A50 /* 20.21.42.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152A60 /* 20.21.42.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154250 /* 20.21.66.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154260 /* 20.21.66.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154A50 /* 20.21.74.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154A60 /* 20.21.74.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14242EBB /* 20.36.46.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14244941 /* 20.36.73.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246AE0 /* 20.36.106.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247280 /* 20.36.114.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14249000 /* 20.36.144.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254A20 /* 20.37.74.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14260025 /* 20.38.0.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269280 /* 20.38.146.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269850 /* 20.38.152.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269860 /* 20.38.152.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E780 /* 20.40.231.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4100 /* 20.42.65.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4400 /* 20.42.68.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A48C0 /* 20.42.72.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4940 /* 20.42.73.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7E00 /* 20.43.126.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0208 /* 20.44.2.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0D00 /* 20.44.13.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1A80 /* 20.44.26.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1F40 /* 20.44.31.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D47EA /* 20.45.71.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5D00 /* 20.45.93.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D75C0 /* 20.45.117.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7A80 /* 20.45.122.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7E80 /* 20.45.126.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF000 /* 20.45.240.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF140 /* 20.45.241.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FD800 /* 20.47.216.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C780 /* 20.48.199.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143153F8 /* 20.49.83.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315480 /* 20.49.84.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315BE0 /* 20.49.91.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315BF0 /* 20.49.91.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315F40 /* 20.49.95.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324800 /* 20.50.72.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14325000 /* 20.50.80.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432C900 /* 20.50.201.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330180 /* 20.51.1.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330F00 /* 20.51.15.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143316C0 /* 20.51.22.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143317C0 /* 20.51.23.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344040 /* 20.52.64.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345B80 /* 20.52.91.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353280 /* 20.53.50.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353A80 /* 20.53.58.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4600 /* 20.58.70.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E3F00 /* 20.62.63.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418780 /* 20.65.135.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420680 /* 20.66.6.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450280 /* 20.69.2.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446D880 /* 20.70.216.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481B90 /* 20.72.27.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481BA0 /* 20.72.27.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452F480 /* 20.82.244.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14565C00 /* 20.86.92.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14584080 /* 20.88.64.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589940 /* 20.88.153.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590000 /* 20.89.0.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590980 /* 20.89.9.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A80C0 /* 20.90.128.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C0080 /* 20.92.0.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14630B80 /* 20.99.11.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DAA50 /* 20.125.170.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DAA60 /* 20.125.170.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCA50 /* 20.125.202.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCA60 /* 20.125.202.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14968100 /* 20.150.129.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A0D8 /* 20.150.160.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AA08 /* 20.150.170.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AF00 /* 20.150.175.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B280 /* 20.150.178.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B640 /* 20.150.182.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BA80 /* 20.150.186.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BD30 /* 20.150.189.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BD40 /* 20.150.189.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14972000 /* 20.151.32.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A250 /* 20.168.162.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A260 /* 20.168.162.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE680 /* 20.189.230.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C020F0 /* 20.192.32.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02FC0 /* 20.192.47.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03740 /* 20.192.55.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03780 /* 20.192.55.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C05280 /* 20.192.82.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06280 /* 20.192.98.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C065C0 /* 20.192.101.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A028 /* 20.192.160.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E138 /* 20.192.225.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EA08 /* 20.192.234.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C700 /* 20.193.199.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CC68 /* 20.193.204.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CC70 /* 20.193.204.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1D00E /* 20.193.208.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C243D0 /* 20.194.67.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24480 /* 20.194.68.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C28080 /* 20.194.128.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34B80 /* 20.195.75.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35200 /* 20.195.82.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C38980 /* 20.195.137.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C39780 /* 20.195.151.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C39800 /* 20.195.152.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C080 /* 20.200.192.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4A50 /* 20.205.74.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4B40 /* 20.205.75.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5250 /* 20.205.82.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5340 /* 20.205.83.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D01250 /* 20.208.18.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D01260 /* 20.208.18.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70600 /* 20.215.6.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71250 /* 20.215.18.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71260 /* 20.215.18.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71A50 /* 20.215.26.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71A60 /* 20.215.26.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79A50 /* 20.215.154.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79A60 /* 20.215.154.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92E00 /* 20.217.46.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93A50 /* 20.217.58.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93A60 /* 20.217.58.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94A50 /* 20.217.74.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94A60 /* 20.217.74.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95A50 /* 20.217.90.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95A60 /* 20.217.90.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17617822 /* 23.97.120.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17617825 /* 23.97.120.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17617899 /* 23.97.120.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17624ACD /* 23.98.74.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625260 /* 23.98.82.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625780 /* 23.98.87.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17627080 /* 23.98.112.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763815D /* 23.99.129.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17640F57 /* 23.100.15.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17644358 /* 23.100.67.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176641E9 /* 23.102.65.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2840103C /* 40.64.16.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28407100 /* 40.64.113.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28416C92 /* 40.65.108.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433A08 /* 40.67.58.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28434800 /* 40.67.72.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28447F44 /* 40.68.127.68/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456A10 /* 40.69.106.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469240 /* 40.70.146.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469780 /* 40.70.151.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470AC0 /* 40.71.10.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6420 /* 40.74.100.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A7A4E /* 40.74.122.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9220 /* 40.74.146.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A96C0 /* 40.74.150.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2210 /* 40.75.34.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E1BDA /* 40.78.27.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC210 /* 40.78.194.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECA10 /* 40.78.202.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE2C0 /* 40.78.226.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEA20 /* 40.78.234.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF290 /* 40.78.242.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF7C0 /* 40.78.247.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFA50 /* 40.78.250.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8220 /* 40.79.130.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8A10 /* 40.79.138.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8DC0 /* 40.79.141.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9210 /* 40.79.146.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9500 /* 40.79.149.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9A58 /* 40.79.154.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA210 /* 40.79.162.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA680 /* 40.79.166.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAA10 /* 40.79.170.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAD40 /* 40.79.173.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB210 /* 40.79.178.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBA40 /* 40.79.186.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC250 /* 40.79.194.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503280 /* 40.80.50.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503510 /* 40.80.53.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854985B /* 40.84.152.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855E1D8 /* 40.85.225.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28565B82 /* 40.86.91.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285979C0 /* 40.89.121.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F280 /* 40.112.242.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28725621 /* 40.114.86.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28726F16 /* 40.114.111.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784A18 /* 40.120.74.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784DC0 /* 40.120.77.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28785500 /* 40.120.85.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287958E7 /* 40.121.88.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BCFD2 /* 40.123.207.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BDBE4 /* 40.123.219.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C4100 /* 40.124.65.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F01C1 /* 40.127.1.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F07F3 /* 40.127.7.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BC040 /* 51.11.192.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C005A /* 51.12.0.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1600 /* 51.12.22.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1D80 /* 51.12.29.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6208 /* 51.12.98.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C65E0 /* 51.12.101.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCA08 /* 51.12.202.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCE00 /* 51.12.206.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE280 /* 51.12.226.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE550 /* 51.12.229.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEA80 /* 51.12.234.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CED50 /* 51.12.237.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D0080 /* 51.13.0.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8D00 /* 51.13.141.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351E00 /* 51.53.30.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356A50 /* 51.53.106.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356A60 /* 51.53.106.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335AE00 /* 51.53.174.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BA50 /* 51.53.186.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BA60 /* 51.53.186.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CA50 /* 51.103.202.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CA60 /* 51.103.202.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694280 /* 51.105.66.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336946C0 /* 51.105.70.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694A80 /* 51.105.74.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3A08 /* 51.107.58.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B47CD /* 51.107.71.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B47EC /* 51.107.71.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B80C0 /* 51.107.128.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9A08 /* 51.107.154.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BB08A /* 51.107.176.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BB0C1 /* 51.107.176.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE3E7 /* 51.107.227.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF480 /* 51.107.244.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFC80 /* 51.107.252.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743A08 /* 51.116.58.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744880 /* 51.116.72.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749A48 /* 51.116.154.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D03E /* 51.116.208.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374E826 /* 51.116.232.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374E887 /* 51.116.232.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F280 /* 51.116.242.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F680 /* 51.116.246.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FA80 /* 51.116.250.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FDC0 /* 51.116.253.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33784C22 /* 51.120.76.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337853C8 /* 51.120.83.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786210 /* 51.120.98.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786A80 /* 51.120.106.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786DD0 /* 51.120.109.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378A41F /* 51.120.164.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D280 /* 51.120.210.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D530 /* 51.120.213.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DA08 /* 51.120.218.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378ED40 /* 51.120.237.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384C080 /* 51.132.192.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD580 /* 51.138.213.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C03EF /* 51.140.3.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C2B0C /* 51.140.43.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9230 /* 51.140.146.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9580 /* 51.140.149.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD240 /* 51.140.210.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D0181 /* 51.141.1.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33907CFF /* 51.144.124.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34888835 /* 52.136.136.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BB80 /* 52.136.187.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A475F /* 52.138.71.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5A10 /* 52.138.90.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE240 /* 52.138.226.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6E00 /* 52.139.110.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F882E /* 52.143.136.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F8E32 /* 52.143.142.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937400 /* 52.147.116.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3493A34F /* 52.147.163.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A111C6 /* 52.161.17.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26A80 /* 52.162.106.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A67F25 /* 52.166.127.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76A40 /* 52.167.106.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76D80 /* 52.167.109.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A81D56 /* 52.168.29.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87080 /* 52.168.112.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A874C0 /* 52.168.116.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A885E3 /* 52.168.133.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A90AEB /* 52.169.10.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7680 /* 52.172.118.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACDCBC /* 52.172.220.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B21140 /* 52.178.17.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B2CC /* 52.180.178.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68AC0 /* 52.182.138.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68F00 /* 52.182.143.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BBC0F3 /* 52.187.192.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71220 /* 52.231.18.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71780 /* 52.231.23.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E72061 /* 52.231.32.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79240 /* 52.231.146.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E877BF /* 52.232.119.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E921E2 /* 52.233.33.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBA40 /* 52.236.186.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22400 /* 52.242.36.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69A80 /* 52.246.154.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69EC0 /* 52.246.158.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41340033 /* 65.52.0.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41340062 /* 65.52.0.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41340134 /* 65.52.1.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x413480F6 /* 65.52.128.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134891D /* 65.52.137.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134A07F /* 65.52.160.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134DBBA /* 65.52.219.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FA40 /* 65.52.250.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5250 /* 68.220.82.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5260 /* 68.220.82.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5580 /* 68.221.85.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6250 /* 68.221.98.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6260 /* 68.221.98.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD9250 /* 68.221.146.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD9260 /* 68.221.146.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x462568F0 /* 70.37.104.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x462568F2 /* 70.37.104.242/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x5EF558C0 /* 94.245.88.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662540C0 /* 102.37.64.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254800 /* 102.37.72.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255400 /* 102.37.84.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A380 /* 102.37.163.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851A08 /* 102.133.26.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668547F6 /* 102.133.71.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857A80 /* 102.133.122.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857EC0 /* 102.133.126.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859A08 /* 102.133.154.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FA80 /* 102.133.250.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FDC0 /* 102.133.253.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68280F80 /* 104.40.15.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DEF73 /* 104.45.239.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D01040 /* 104.208.16.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D09040 /* 104.208.144.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35110 /* 104.211.81.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D36139 /* 104.211.97.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39210 /* 104.211.146.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3BE58 /* 104.211.190.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D612A0 /* 104.214.18.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A548 /* 104.214.165.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6FDD50F4 /* 111.221.80.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6FDD59DE /* 111.221.89.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5BF262 /* 138.91.242.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37AA71 /* 157.55.170.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170A50 /* 158.23.10.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170A60 /* 158.23.10.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176580 /* 158.23.101.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177A50 /* 158.23.122.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177A60 /* 158.23.122.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C250 /* 158.23.194.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C260 /* 158.23.194.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8E38 /* 168.61.142.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E10B4 /* 168.62.16.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E30EE /* 168.62.48.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E3634 /* 168.62.54.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EF96F /* 168.62.249.111/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8B8FD /* 191.232.184.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90828 /* 191.233.8.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CB10 /* 191.233.203.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9280 /* 191.234.146.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9680 /* 191.234.150.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9A80 /* 191.234.154.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9D90 /* 191.234.157.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBAAB6 /* 191.235.170.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDE040 /* 191.237.224.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4980 /* 191.238.73.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFB64B /* 191.239.182.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E8A0F /* 207.46.138.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D429100 /* 13.66.145.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430F40 /* 13.67.15.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464AE0 /* 13.70.74.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F440 /* 13.73.244.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6DE0 /* 13.78.109.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AF80 /* 13.89.175.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14153700 /* 20.21.55.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268460 /* 20.38.132.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268FC0 /* 20.38.143.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E500 /* 20.40.229.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0A80 /* 20.44.10.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0B60 /* 20.46.11.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C4C0 /* 20.48.196.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317760 /* 20.49.119.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330C20 /* 20.51.12.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143311E0 /* 20.51.17.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352F20 /* 20.53.47.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6640 /* 20.61.102.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E3B20 /* 20.62.59.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8540 /* 20.62.133.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144184E0 /* 20.65.132.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144203E0 /* 20.66.3.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144500C0 /* 20.69.0.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452F780 /* 20.82.247.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14565E80 /* 20.86.94.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589B00 /* 20.88.155.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A2500 /* 20.90.37.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AEA0 /* 20.150.174.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F4A0 /* 20.150.244.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDAA00 /* 20.189.170.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE5E0 /* 20.189.229.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA640 /* 20.191.166.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02200 /* 20.192.34.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02C40 /* 20.192.44.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C037C0 /* 20.192.55.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09D00 /* 20.192.157.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C7A0 /* 20.193.199.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CDE0 /* 20.193.205.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C249C0 /* 20.194.73.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C341C0 /* 20.195.65.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C348C0 /* 20.195.72.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35400 /* 20.195.84.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE05C0 /* 20.206.5.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D3E100 /* 20.211.225.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625640 /* 23.98.86.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456E80 /* 40.69.110.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECC60 /* 40.78.204.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEE80 /* 40.78.238.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF540 /* 40.78.245.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFD00 /* 40.78.253.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F84A0 /* 40.79.132.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8B60 /* 40.79.139.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9420 /* 40.79.148.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503520 /* 40.80.53.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287840A0 /* 40.120.64.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C11A0 /* 51.12.17.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2EC0 /* 51.12.46.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C65C0 /* 51.12.101.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CA800 /* 51.12.168.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680940 /* 51.104.9.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8080 /* 51.107.128.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BC0C0 /* 51.107.192.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF2C0 /* 51.107.242.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFAC0 /* 51.107.250.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749560 /* 51.116.149.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F620 /* 51.116.246.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378B340 /* 51.120.179.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D560 /* 51.120.213.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E960 /* 51.120.233.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD260 /* 51.138.210.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD480 /* 51.143.212.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348835E0 /* 52.136.53.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5CE0 /* 52.138.92.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6B60 /* 52.139.107.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928820 /* 52.146.136.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68D40 /* 52.182.141.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71460 /* 52.231.20.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E714C0 /* 52.231.20.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A020 /* 102.37.160.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857E60 /* 102.133.126.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4860 /* 191.238.72.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81800 /* 4.232.24.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86BA0 /* 4.232.107.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87A70 /* 4.232.122.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C270 /* 4.232.194.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428DF0 /* 13.66.141.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430A60 /* 13.67.10.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454350 /* 13.69.67.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456B50 /* 13.69.107.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E610 /* 13.69.230.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464A60 /* 13.70.74.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D469F9E /* 13.70.159.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47ADE0 /* 13.71.173.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C490 /* 13.71.196.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F2C0 /* 13.73.242.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6C90 /* 13.74.108.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2750 /* 13.75.39.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3540 /* 13.77.53.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6D80 /* 13.78.109.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5258E2 /* 13.82.88.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54940E /* 13.84.148.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DBB0 /* 13.86.219.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D572504 /* 13.87.37.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573A30 /* 13.87.58.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577C30 /* 13.87.124.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AE90 /* 13.89.174.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113000 /* 20.17.48.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141143E0 /* 20.17.67.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B270 /* 20.18.178.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152000 /* 20.21.32.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152BE0 /* 20.21.43.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154270 /* 20.21.66.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154A70 /* 20.21.74.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14242246 /* 20.36.34.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424453E /* 20.36.69.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246C60 /* 20.36.108.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142473E0 /* 20.36.115.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247850 /* 20.36.120.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254050 /* 20.37.64.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254C80 /* 20.37.76.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259C60 /* 20.37.156.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C070 /* 20.37.192.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E050 /* 20.37.224.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265070 /* 20.38.80.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268050 /* 20.38.128.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268850 /* 20.38.136.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142693A0 /* 20.38.147.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269870 /* 20.38.152.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270850 /* 20.39.8.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14290440 /* 20.41.4.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294060 /* 20.41.64.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C050 /* 20.41.192.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A0460 /* 20.42.4.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8180 /* 20.42.129.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE050 /* 20.42.224.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2870 /* 20.43.40.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4070 /* 20.43.64.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7910 /* 20.43.121.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8240 /* 20.43.130.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0450 /* 20.44.4.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C08B0 /* 20.44.8.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1120 /* 20.44.17.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1BC0 /* 20.44.27.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4BE8 /* 20.45.75.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7050 /* 20.45.112.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7B60 /* 20.45.123.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC050 /* 20.45.192.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315330 /* 20.49.83.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315B30 /* 20.49.91.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481000 /* 20.72.16.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481C20 /* 20.72.28.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DAA70 /* 20.125.170.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCA70 /* 20.125.202.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A050 /* 20.150.160.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AC30 /* 20.150.172.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B3D0 /* 20.150.179.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BBD0 /* 20.150.187.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A270 /* 20.168.162.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6A60 /* 20.189.106.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C063D0 /* 20.192.99.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A000 /* 20.192.160.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E100 /* 20.192.225.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EBE0 /* 20.192.235.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CBD0 /* 20.193.203.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24330 /* 20.194.67.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4B50 /* 20.205.75.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5350 /* 20.205.83.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D01270 /* 20.208.18.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70000 /* 20.215.0.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71270 /* 20.215.18.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71A70 /* 20.215.26.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79BE0 /* 20.215.155.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92800 /* 20.217.40.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93BE0 /* 20.217.59.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94A70 /* 20.217.74.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95A70 /* 20.217.90.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760C3F7 /* 23.96.195.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625350 /* 23.98.83.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433050 /* 40.67.48.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433C50 /* 40.67.60.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456C40 /* 40.69.108.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284590E7 /* 40.69.144.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2845D4EE /* 40.69.212.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469460 /* 40.70.148.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470E00 /* 40.71.14.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1870 /* 40.74.24.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A93B0 /* 40.74.147.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2350 /* 40.75.35.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC440 /* 40.78.196.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECC10 /* 40.78.204.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE530 /* 40.78.229.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEC90 /* 40.78.236.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF3A0 /* 40.78.243.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFB60 /* 40.78.251.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8440 /* 40.79.132.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8B00 /* 40.79.139.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F92C0 /* 40.79.146.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9C30 /* 40.79.156.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA310 /* 40.79.163.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAB60 /* 40.79.171.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB420 /* 40.79.180.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBBB0 /* 40.79.187.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC3A0 /* 40.79.195.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503360 /* 40.80.51.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503850 /* 40.80.56.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A850 /* 40.80.168.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B010 /* 40.80.176.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B860 /* 40.80.184.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852F860 /* 40.82.248.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2853B330 /* 40.83.179.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591050 /* 40.89.16.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287709C0 /* 40.119.9.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784B60 /* 40.120.75.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BDBEE /* 40.123.219.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2F00 /* 51.12.47.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6420 /* 51.12.100.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC670 /* 51.12.198.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCC20 /* 51.12.204.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE3D0 /* 51.12.227.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEBD0 /* 51.12.235.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351800 /* 51.53.24.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335A800 /* 51.53.168.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BBE0 /* 51.53.187.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CA70 /* 51.103.202.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680900 /* 51.104.9.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681870 /* 51.104.24.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336943C0 /* 51.105.67.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694BA0 /* 51.105.75.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695050 /* 51.105.80.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695850 /* 51.105.88.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3050 /* 51.107.48.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3C40 /* 51.107.60.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B441F /* 51.107.68.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9050 /* 51.107.144.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9C50 /* 51.107.156.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE7DF /* 51.107.231.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743050 /* 51.116.48.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743C40 /* 51.116.60.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749050 /* 51.116.144.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749CB0 /* 51.116.156.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D03A /* 51.116.208.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F380 /* 51.116.243.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FB30 /* 51.116.251.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782850 /* 51.120.40.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786440 /* 51.120.100.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786BD0 /* 51.120.107.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D3D0 /* 51.120.211.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DC40 /* 51.120.220.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E050 /* 51.120.224.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A060 /* 51.137.160.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C2B9E /* 51.140.43.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD450 /* 51.140.212.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D03CB /* 51.141.3.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC050 /* 51.143.192.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883050 /* 52.136.48.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34888BE3 /* 52.136.139.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5C40 /* 52.138.92.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE390 /* 52.138.227.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6850 /* 52.140.104.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F8A6A /* 52.143.138.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968860 /* 52.150.136.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A114A8 /* 52.161.20.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26F00 /* 52.162.111.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A60D40 /* 52.166.13.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76B50 /* 52.167.107.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC2EDC /* 52.172.46.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACBB25 /* 52.172.187.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF1184 /* 52.175.17.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF9245 /* 52.175.146.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B240 /* 52.180.178.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68BC0 /* 52.182.139.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B72DA6 /* 52.183.45.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B89EA3 /* 52.184.158.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B9968C /* 52.185.150.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB3AC1 /* 52.187.58.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BBBFCE /* 52.187.191.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1BCAA /* 52.225.188.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E424C0 /* 52.228.36.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45060 /* 52.228.80.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E57D62 /* 52.229.125.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71410 /* 52.231.20.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71CFD /* 52.231.28.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79460 /* 52.231.148.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7C6B9 /* 52.231.198.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBB40 /* 52.236.187.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69BA0 /* 52.246.155.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FCC0 /* 65.52.252.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5000 /* 68.221.80.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851C80 /* 102.133.28.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853BA0 /* 102.133.59.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854833 /* 102.133.72.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857C40 /* 102.133.124.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859C60 /* 102.133.156.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685A02C /* 102.133.160.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DAB0 /* 102.133.218.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FBA0 /* 102.133.251.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D27172 /* 104.210.113.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3B106 /* 104.211.177.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176000 /* 158.23.96.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90800 /* 191.233.8.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE933C0 /* 191.233.51.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CD50 /* 191.233.205.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA93D0 /* 191.234.147.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9BD0 /* 191.234.155.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEAB9AC /* 191.234.185.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE070 /* 191.235.224.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E1A8 /* 20.40.225.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C4E0 /* 20.48.196.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317668 /* 20.49.118.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14325E80 /* 20.50.94.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352F48 /* 20.53.47.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4310 /* 20.58.67.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6670 /* 20.61.102.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E3B40 /* 20.62.59.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8198 /* 20.62.129.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8560 /* 20.62.133.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418448 /* 20.65.132.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144204C0 /* 20.66.4.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144204D0 /* 20.66.4.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A62AE0 /* 20.166.42.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE480 /* 20.189.228.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA568 /* 20.191.165.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C05010 /* 20.192.80.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C249F0 /* 20.194.73.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C341E0 /* 20.195.65.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C348E0 /* 20.195.72.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285917F8 /* 40.89.23.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD288 /* 51.138.210.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD188 /* 51.143.209.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488B990 /* 52.136.185.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6F78 /* 52.140.111.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928900 /* 52.146.137.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937088 /* 52.147.112.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969DB8 /* 52.150.157.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7408 /* 52.172.116.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB3F8 /* 104.46.179.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4840 /* 191.238.72.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330C10 /* 20.51.12.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6740 /* 20.61.103.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144500E0 /* 20.69.0.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D416B20 /* 13.65.107.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41A010 /* 13.65.160.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41A030 /* 13.65.160.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41A040 /* 13.65.160.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42B010 /* 13.66.176.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42B030 /* 13.66.176.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E840 /* 13.66.232.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E8D0 /* 13.66.232.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E8E0 /* 13.66.232.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42EA00 /* 13.66.234.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D439B10 /* 13.67.155.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D447840 /* 13.68.120.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D44A320 /* 13.68.163.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D44A540 /* 13.68.165.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D44A7F0 /* 13.68.167.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D452810 /* 13.69.40.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D466310 /* 13.70.99.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D466330 /* 13.70.99.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D466340 /* 13.70.99.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D46D010 /* 13.70.208.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C840 /* 13.71.200.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C860 /* 13.71.200.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C8F0 /* 13.71.200.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47CA10 /* 13.71.202.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47CA20 /* 13.71.202.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47CA40 /* 13.71.202.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D48EB40 /* 13.72.235.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D48EB60 /* 13.72.235.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D48EB90 /* 13.72.235.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D48ED30 /* 13.72.237.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D48ED40 /* 13.72.237.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D490810 /* 13.73.8.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D490820 /* 13.73.8.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4AD040 /* 13.74.208.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4AD070 /* 13.74.208.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4AD090 /* 13.74.208.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4BF010 /* 13.75.240.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4BF020 /* 13.75.240.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4BF040 /* 13.75.240.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4C6810 /* 13.76.104.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D0810 /* 13.77.8.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D0820 /* 13.77.8.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D0840 /* 13.77.8.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D0860 /* 13.77.8.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D0880 /* 13.77.8.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D08A0 /* 13.77.8.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D08C0 /* 13.77.8.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D7010 /* 13.77.112.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D7020 /* 13.77.112.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D7070 /* 13.77.112.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D7080 /* 13.77.112.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D7310 /* 13.77.115.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D7320 /* 13.77.115.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4DB840 /* 13.77.184.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E9840 /* 13.78.152.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EF010 /* 13.78.240.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4FB010 /* 13.79.176.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4FB030 /* 13.79.176.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4FB050 /* 13.79.176.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D522120 /* 13.82.33.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D529810 /* 13.82.152.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D529830 /* 13.82.152.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D529850 /* 13.82.152.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D534810 /* 13.83.72.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D543810 /* 13.84.56.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D555810 /* 13.85.88.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D55C880 /* 13.85.200.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D572840 /* 13.87.40.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D572860 /* 13.87.40.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D589070 /* 13.88.144.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5890F0 /* 13.88.144.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D589140 /* 13.88.145.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D589160 /* 13.88.145.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D589180 /* 13.88.145.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DA850 /* 13.93.168.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DA870 /* 13.93.168.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DA890 /* 13.93.168.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F60B0 /* 13.95.96.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5FF010 /* 13.95.240.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5FF020 /* 13.95.240.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5FF040 /* 13.95.240.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14218000 /* 20.33.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14266000 /* 20.38.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0000 /* 20.47.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0000 /* 20.60.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14960000 /* 20.150.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2000 /* 20.157.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8000 /* 20.157.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DE000 /* 20.157.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D10000 /* 20.209.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17604040 /* 23.96.64.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17617040 /* 23.97.112.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17623100 /* 23.98.49.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176231C0 /* 23.98.49.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17623700 /* 23.98.55.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17623770 /* 23.98.55.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17623790 /* 23.98.55.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17623800 /* 23.98.56.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17623940 /* 23.98.57.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1762A040 /* 23.98.160.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1762A2C0 /* 23.98.162.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1762A800 /* 23.98.168.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1762C040 /* 23.98.192.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1762FF40 /* 23.98.255.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17632040 /* 23.99.32.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176322E0 /* 23.99.34.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17632560 /* 23.99.37.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17632F20 /* 23.99.47.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763A040 /* 23.99.160.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763A0C0 /* 23.99.160.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766CE00 /* 23.102.206.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766CE80 /* 23.102.206.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766CEC0 /* 23.102.206.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844B010 /* 40.68.176.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844B030 /* 40.68.176.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844E810 /* 40.68.232.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844E830 /* 40.68.232.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2845B010 /* 40.69.176.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28465800 /* 40.70.88.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28476810 /* 40.71.104.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28476820 /* 40.71.104.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847F010 /* 40.71.240.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E4810 /* 40.78.72.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E7040 /* 40.78.112.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F0810 /* 40.79.8.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F3010 /* 40.79.48.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F5810 /* 40.79.88.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28531810 /* 40.83.24.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28531850 /* 40.83.24.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28531860 /* 40.83.24.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285368B0 /* 40.83.104.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285368D0 /* 40.83.104.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2853E120 /* 40.83.225.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2853E310 /* 40.83.227.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28540820 /* 40.84.8.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28540B50 /* 40.84.11.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28556920 /* 40.85.105.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855E840 /* 40.85.232.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855E860 /* 40.85.232.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855E890 /* 40.85.232.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855EB20 /* 40.85.235.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855EB50 /* 40.85.235.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855EB60 /* 40.85.235.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E840 /* 40.86.232.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E860 /* 40.86.232.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E880 /* 40.86.232.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E8B0 /* 40.86.232.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E8C0 /* 40.86.232.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28709810 /* 40.112.152.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870E010 /* 40.112.224.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870E030 /* 40.112.224.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28711BB0 /* 40.113.27.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28729810 /* 40.114.152.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28729830 /* 40.114.152.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873A920 /* 40.115.169.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873AF10 /* 40.115.175.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873AF20 /* 40.115.175.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873E350 /* 40.115.227.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873E510 /* 40.115.229.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873E520 /* 40.115.229.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873E740 /* 40.115.231.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873E770 /* 40.115.231.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873E780 /* 40.115.231.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28747810 /* 40.116.120.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2874E810 /* 40.116.232.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2874E830 /* 40.116.232.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2874E860 /* 40.116.232.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28753050 /* 40.117.48.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28753070 /* 40.117.48.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28756810 /* 40.117.104.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287648B0 /* 40.118.72.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28764930 /* 40.118.73.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287649B0 /* 40.118.73.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287649D0 /* 40.118.73.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A6010 /* 40.122.96.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287AD810 /* 40.122.216.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B1010 /* 40.123.16.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C1010 /* 51.140.16.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C1020 /* 51.140.16.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CA840 /* 51.140.168.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CA870 /* 51.140.168.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CA880 /* 51.140.168.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CE840 /* 51.140.232.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CE870 /* 51.140.232.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CE880 /* 51.140.232.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CE8A0 /* 51.140.232.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D8000 /* 51.141.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D8140 /* 51.141.129.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D8180 /* 51.141.129.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D8200 /* 51.141.130.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A17010 /* 52.161.112.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A17020 /* 52.161.112.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A1A810 /* 52.161.168.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A1A820 /* 52.161.168.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A23810 /* 52.162.56.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A23820 /* 52.162.56.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A23840 /* 52.162.56.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A23870 /* 52.162.56.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A23880 /* 52.162.56.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A3B010 /* 52.163.176.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A3E810 /* 52.163.232.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A47010 /* 52.164.112.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A4E810 /* 52.164.232.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A4E820 /* 52.164.232.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A4E840 /* 52.164.232.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A56810 /* 52.165.104.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A56820 /* 52.165.104.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A56840 /* 52.165.104.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A56870 /* 52.165.104.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A56890 /* 52.165.104.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A568A0 /* 52.165.104.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A58820 /* 52.165.136.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5F040 /* 52.165.240.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A65020 /* 52.166.80.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A65050 /* 52.166.80.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A65060 /* 52.166.80.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A75850 /* 52.167.88.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A75870 /* 52.167.88.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A7F010 /* 52.167.240.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9A820 /* 52.169.168.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9F010 /* 52.169.240.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9F020 /* 52.169.240.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9F040 /* 52.169.240.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AB9020 /* 52.171.144.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AB9050 /* 52.171.144.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AB9060 /* 52.171.144.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AB9080 /* 52.171.144.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC1010 /* 52.172.16.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC1050 /* 52.172.16.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC1060 /* 52.172.16.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC1080 /* 52.172.16.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD9840 /* 52.173.152.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD9860 /* 52.173.152.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE0820 /* 52.174.8.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEE010 /* 52.174.224.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEE020 /* 52.174.224.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEE040 /* 52.174.224.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEE070 /* 52.174.224.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEE080 /* 52.174.224.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF2880 /* 52.175.40.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF7010 /* 52.175.112.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B0E040 /* 52.176.224.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B0E060 /* 52.176.224.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B1D050 /* 52.177.208.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2A820 /* 52.178.168.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2A850 /* 52.178.168.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2A860 /* 52.178.168.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2A880 /* 52.178.168.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B31810 /* 52.179.24.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B39020 /* 52.179.144.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B39040 /* 52.179.144.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3F010 /* 52.179.240.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3F030 /* 52.179.240.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3F040 /* 52.179.240.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3F060 /* 52.179.240.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3F090 /* 52.179.240.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3F0A0 /* 52.179.240.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3F0C0 /* 52.179.240.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3F0F0 /* 52.179.240.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3F100 /* 52.179.241.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3F120 /* 52.179.241.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B42810 /* 52.180.40.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B42820 /* 52.180.40.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B810 /* 52.180.184.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B6B010 /* 52.182.176.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B6B020 /* 52.182.176.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B6B040 /* 52.182.176.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B73010 /* 52.183.48.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B76810 /* 52.183.104.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B76820 /* 52.183.104.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B82810 /* 52.184.40.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B82820 /* 52.184.40.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A820 /* 52.184.168.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A860 /* 52.184.168.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B93850 /* 52.185.56.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B93860 /* 52.185.56.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B93890 /* 52.185.56.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B938A0 /* 52.185.56.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B97010 /* 52.185.112.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B97030 /* 52.185.112.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B97050 /* 52.185.112.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B97070 /* 52.185.112.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B9E900 /* 52.185.233.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BA7020 /* 52.186.112.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB8D20 /* 52.187.141.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDB100 /* 52.189.177.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BEF010 /* 52.190.240.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BEF020 /* 52.190.240.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BEF040 /* 52.190.240.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BEF070 /* 52.190.240.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BEF080 /* 52.190.240.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFB010 /* 52.191.176.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFB020 /* 52.191.176.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E12820 /* 52.225.40.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E18810 /* 52.225.136.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E18820 /* 52.225.136.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1F000 /* 52.225.240.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E20820 /* 52.226.8.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E20850 /* 52.226.8.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E20860 /* 52.226.8.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E20880 /* 52.226.8.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E4E800 /* 52.228.232.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E55040 /* 52.229.80.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E6F010 /* 52.230.240.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E6F020 /* 52.230.240.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E6F040 /* 52.230.240.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E6F070 /* 52.230.240.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E6F080 /* 52.230.240.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E6F0A0 /* 52.230.240.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E75040 /* 52.231.80.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E75070 /* 52.231.80.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E75080 /* 52.231.80.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E750A0 /* 52.231.80.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7A840 /* 52.231.168.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7A870 /* 52.231.168.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7A880 /* 52.231.168.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7D010 /* 52.231.208.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7D020 /* 52.231.208.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8E810 /* 52.232.232.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8E820 /* 52.232.232.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8E850 /* 52.232.232.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8E860 /* 52.232.232.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8E880 /* 52.232.232.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8E8B0 /* 52.232.232.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8E8C0 /* 52.232.232.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EAB030 /* 52.234.176.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EAB040 /* 52.234.176.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EAB060 /* 52.234.176.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EC2810 /* 52.236.40.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EC2820 /* 52.236.40.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECF030 /* 52.236.240.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECF040 /* 52.236.240.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED6810 /* 52.237.104.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED6820 /* 52.237.104.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EE3810 /* 52.238.56.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EE3820 /* 52.238.56.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EE3840 /* 52.238.56.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EE3870 /* 52.238.56.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EE3880 /* 52.238.56.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EE38A0 /* 52.238.56.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EEC820 /* 52.238.200.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF6810 /* 52.239.104.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF6820 /* 52.239.104.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF8000 /* 52.239.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9000 /* 52.239.144.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9400 /* 52.239.148.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9440 /* 52.239.148.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9480 /* 52.239.148.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9500 /* 52.239.149.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9600 /* 52.239.150.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9800 /* 52.239.152.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA000 /* 52.239.160.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA400 /* 52.239.164.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA500 /* 52.239.165.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA5A0 /* 52.239.165.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA5C0 /* 52.239.165.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA700 /* 52.239.167.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA800 /* 52.239.168.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB080 /* 52.239.176.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB100 /* 52.239.177.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB200 /* 52.239.178.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB400 /* 52.239.180.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB800 /* 52.239.184.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFBC00 /* 52.239.188.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFBE00 /* 52.239.190.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFBF00 /* 52.239.191.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC000 /* 52.239.192.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC800 /* 52.239.200.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFCD00 /* 52.239.205.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFCE00 /* 52.239.206.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFD000 /* 52.239.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE000 /* 52.239.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F03010 /* 52.240.48.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F03020 /* 52.240.48.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F03C10 /* 52.240.60.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F03C20 /* 52.240.60.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F03C40 /* 52.240.60.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F15810 /* 52.241.88.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F15820 /* 52.241.88.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F15840 /* 52.241.88.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52800 /* 52.245.40.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829E810 /* 104.41.232.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682AC810 /* 104.42.200.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E1F10 /* 104.46.31.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D00010 /* 104.208.0.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D00030 /* 104.208.0.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D08010 /* 104.208.128.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D0F810 /* 104.208.248.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D36840 /* 104.211.104.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D36860 /* 104.211.104.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D36880 /* 104.211.104.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D36D00 /* 104.211.109.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D36D20 /* 104.211.109.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D36D50 /* 104.211.109.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D36D60 /* 104.211.109.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A810 /* 104.211.168.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E810 /* 104.211.232.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E830 /* 104.211.232.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E850 /* 104.211.232.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E8B0 /* 104.211.232.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D62810 /* 104.214.40.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D65010 /* 104.214.80.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D65030 /* 104.214.80.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D69810 /* 104.214.152.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D698B0 /* 104.214.152.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6F320 /* 104.214.243.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D72010 /* 104.215.32.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D72020 /* 104.215.32.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D72040 /* 104.215.32.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D72320 /* 104.215.35.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D76840 /* 104.215.104.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D7F040 /* 104.215.240.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D7F060 /* 104.215.240.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89740100 /* 137.116.1.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89740200 /* 137.116.2.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89740300 /* 137.116.3.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89740380 /* 137.116.3.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89746000 /* 137.116.96.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89746080 /* 137.116.96.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8987C040 /* 137.135.192.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8987C0C0 /* 137.135.192.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8987C1C0 /* 137.135.193.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8987C200 /* 137.135.194.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8987C2C0 /* 137.135.194.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B6040 /* 138.91.96.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B6080 /* 138.91.96.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B8080 /* 138.91.128.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B8100 /* 138.91.129.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D38D800 /* 157.56.216.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D3940 /* 168.61.57.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D3980 /* 168.61.57.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D3A00 /* 168.61.58.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D3A80 /* 168.61.58.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D3B40 /* 168.61.59.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D3D00 /* 168.61.61.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D3DC0 /* 168.61.61.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D7820 /* 168.61.120.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D7840 /* 168.61.120.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D7900 /* 168.61.121.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D80C0 /* 168.61.128.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8100 /* 168.61.129.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8240 /* 168.61.130.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8280 /* 168.61.130.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8300 /* 168.61.131.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8380 /* 168.61.131.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8400 /* 168.61.132.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E0000 /* 168.62.0.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E0180 /* 168.62.1.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E2000 /* 168.62.32.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E20C0 /* 168.62.32.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E2180 /* 168.62.33.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E6080 /* 168.62.96.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E8080 /* 168.62.128.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F0000 /* 168.63.0.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F0240 /* 168.63.2.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F0320 /* 168.63.3.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F0340 /* 168.63.3.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F2000 /* 168.63.32.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F21C0 /* 168.63.33.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F5940 /* 168.63.89.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F5980 /* 168.63.89.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F7120 /* 168.63.113.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F7140 /* 168.63.113.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8000 /* 168.63.128.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8080 /* 168.63.128.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8180 /* 168.63.129.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8200 /* 168.63.130.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8280 /* 168.63.130.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8300 /* 168.63.131.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F9C40 /* 168.63.156.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F9CC0 /* 168.63.156.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FA000 /* 168.63.160.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FA0C0 /* 168.63.160.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FA140 /* 168.63.161.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FA1A0 /* 168.63.161.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FA1C0 /* 168.63.161.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FA220 /* 168.63.162.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FA240 /* 168.63.162.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FA290 /* 168.63.162.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FA2C0 /* 168.63.162.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FA380 /* 168.63.163.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FB440 /* 168.63.180.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8D820 /* 191.232.216.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8DD10 /* 191.232.221.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8DD20 /* 191.232.221.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE98000 /* 191.233.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBC0C0 /* 191.235.192.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBC120 /* 191.235.193.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBF800 /* 191.235.248.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBFA00 /* 191.235.250.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBFFC0 /* 191.235.255.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFED2080 /* 191.237.32.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFED20D0 /* 191.237.32.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFED20F0 /* 191.237.32.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDA040 /* 191.237.160.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDA0E0 /* 191.237.160.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDE820 /* 191.237.232.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDE880 /* 191.237.232.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDEE20 /* 191.237.238.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE0000 /* 191.238.0.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE00E0 /* 191.238.0.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4040 /* 191.238.64.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE40C0 /* 191.238.64.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4200 /* 191.238.66.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFC000 /* 191.239.192.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFCB00 /* 191.239.203.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFE000 /* 191.239.224.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D415CFC /* 13.65.92.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D415F98 /* 13.65.95.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B7CFE /* 13.75.124.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B7F3F /* 13.75.127.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B98FD /* 13.75.152.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B997C /* 13.75.153.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54DE25 /* 13.84.222.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14180030 /* 20.24.0.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B5400 /* 20.59.84.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146295F0 /* 20.98.149.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D770 /* 20.105.215.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14764FA0 /* 20.118.79.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DA3C0 /* 20.125.163.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD3260 /* 20.205.50.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DF4110 /* 20.223.65.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E858D0 /* 20.232.88.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760B3F3 /* 23.96.179.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760ECFC /* 23.96.236.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765B0C1 /* 23.101.176.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765BFC7 /* 23.101.191.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28441E42 /* 40.68.30.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28441FB2 /* 40.68.31.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E436E /* 40.78.67.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857930A /* 40.87.147.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28579722 /* 40.87.151.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287205C5 /* 40.114.5.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC9BA8 /* 52.172.155.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC9E25 /* 52.172.158.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD5A6B /* 52.173.90.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADFAE8 /* 52.173.250.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F0902D /* 52.240.144.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F0977D /* 52.240.151.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134D913 /* 65.52.217.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829BBD1 /* 104.41.187.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829BECB /* 104.41.190.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682AC0C3 /* 104.42.192.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D956E /* 104.45.149.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D75B54 /* 104.215.91.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89872EA3 /* 137.135.46.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89872FD7 /* 137.135.47.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89875095 /* 137.135.80.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x898752F9 /* 137.135.82.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8D034 /* 191.232.208.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8D63E /* 191.232.214.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D408380 /* 13.64.131.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D43BF8F /* 13.67.191.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D551065 /* 13.85.16.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D551241 /* 13.85.18.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5512C1 /* 13.85.18.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D551615 /* 13.85.22.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D551706 /* 13.85.23.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D551756 /* 13.85.23.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5517CE /* 13.85.23.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B1040 /* 13.91.16.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F1A04 /* 13.95.26.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F1ADE /* 13.95.26.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F1B69 /* 13.95.27.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F1F12 /* 13.95.31.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F1F5F /* 13.95.31.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F1F7F /* 13.95.31.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1403BBC6 /* 20.3.187.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14072F87 /* 20.7.47.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140A9597 /* 20.10.149.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140C15FB /* 20.12.21.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140C1732 /* 20.12.23.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140C242E /* 20.12.36.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140CB2D7 /* 20.12.178.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140CEC96 /* 20.12.236.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140CECE4 /* 20.12.236.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140EC74A /* 20.14.199.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140EC751 /* 20.14.199.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C4F6B /* 20.44.79.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14361845 /* 20.54.24.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436184F /* 20.54.24.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14361894 /* 20.54.24.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143618A9 /* 20.54.24.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143618E7 /* 20.54.24.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143618F6 /* 20.54.24.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14361904 /* 20.54.25.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14361910 /* 20.54.25.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14361922 /* 20.54.25.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14361940 /* 20.54.25.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436194A /* 20.54.25.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14361956 /* 20.54.25.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436195D /* 20.54.25.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436197B /* 20.54.25.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14365898 /* 20.54.88.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143658BD /* 20.54.88.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436590F /* 20.54.89.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14365924 /* 20.54.89.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14365941 /* 20.54.89.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436596A /* 20.54.89.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143669D5 /* 20.54.105.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14366E77 /* 20.54.110.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14367B04 /* 20.54.123.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14367BB0 /* 20.54.123.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143EBEB8 /* 20.62.190.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1448EB52 /* 20.72.235.82/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145351A0 /* 20.83.81.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1454FD98 /* 20.84.253.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146DD16C /* 20.109.209.108/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146EB735 /* 20.110.183.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146EB781 /* 20.110.183.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14723A59 /* 20.114.58.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14723A6E /* 20.114.58.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14723B2E /* 20.114.59.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14723B68 /* 20.114.59.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14723BB7 /* 20.114.59.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14723BEC /* 20.114.59.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14723BEF /* 20.114.59.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147B002A /* 20.123.0.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A602BF /* 20.166.2.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A67E38 /* 20.166.126.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD7B83 /* 20.189.123.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE0956 /* 20.190.9.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BF2E6D /* 20.191.46.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BF2ED3 /* 20.191.46.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DF852A /* 20.223.133.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DFB293 /* 20.223.178.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E1880D /* 20.225.136.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E18862 /* 20.225.136.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E6A932 /* 20.230.169.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E6A960 /* 20.230.169.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F227AB /* 20.242.39.171/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763B690 /* 23.99.182.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763DC7A /* 23.99.220.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766813C /* 23.102.129.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2840414C /* 40.64.65.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28404259 /* 40.64.66.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28404271 /* 40.64.66.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284042E9 /* 40.64.66.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841D133 /* 40.65.209.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28447822 /* 40.68.120.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28447B9D /* 40.68.123.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284485D8 /* 40.68.133.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2846AF31 /* 40.70.175.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2846E596 /* 40.70.229.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D0094 /* 40.77.0.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D02A4 /* 40.77.2.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D0980 /* 40.77.9.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D0E85 /* 40.77.14.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B49A9 /* 40.91.73.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B5059 /* 40.91.80.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28772DF6 /* 40.119.45.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28772E09 /* 40.119.46.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28772E2E /* 40.119.46.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28772E8B /* 40.119.46.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A4ACB /* 40.122.74.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287CA82C /* 40.124.168.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287CA9E1 /* 40.124.169.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287D7835 /* 40.125.120.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287D7A91 /* 40.125.122.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287D7A97 /* 40.125.122.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287D7A9B /* 40.125.122.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287D7AA4 /* 40.125.122.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287D7AB0 /* 40.125.122.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FA69D /* 40.127.166.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FA896 /* 40.127.168.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FA967 /* 40.127.169.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FA97B /* 40.127.169.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FC591 /* 40.127.197.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FCEA4 /* 40.127.206.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368A232 /* 51.104.162.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368A2A8 /* 51.104.162.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368A472 /* 51.104.164.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368A730 /* 51.104.167.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368A7BA /* 51.104.167.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368A7F5 /* 51.104.167.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368A7FF /* 51.104.167.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34896669 /* 52.137.102.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34896760 /* 52.137.103.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34896782 /* 52.137.103.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34896EEB /* 52.137.110.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB114 /* 52.139.177.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB127 /* 52.139.177.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB172 /* 52.139.177.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB186 /* 52.139.177.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB18D /* 52.139.177.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB19B /* 52.139.177.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB1A3 /* 52.139.177.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB1AA /* 52.139.177.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB1B0 /* 52.139.177.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB1B5 /* 52.139.177.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB1BC /* 52.139.177.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB1CE /* 52.139.177.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB1F7 /* 52.139.177.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB220 /* 52.139.178.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB235 /* 52.139.178.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F50D1 /* 52.143.80.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F51DE /* 52.143.81.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F542D /* 52.143.84.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F56D6 /* 52.143.86.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F571C /* 52.143.87.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3493BB69 /* 52.147.187.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34949472 /* 52.148.148.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34949682 /* 52.148.150.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349512BE /* 52.149.18.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349515E8 /* 52.149.21.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349516B7 /* 52.149.22.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34986C60 /* 52.152.108.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34986C79 /* 52.152.108.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34986D19 /* 52.152.109.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34986E0E /* 52.152.110.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349C66ED /* 52.156.102.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349C9053 /* 52.156.144.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5A40F /* 52.165.164.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5A421 /* 52.165.164.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5A51A /* 52.165.165.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5B745 /* 52.165.183.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A71645 /* 52.167.22.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD248A /* 52.173.36.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3D8EB /* 52.179.216.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3DB0E /* 52.179.219.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8D4B5 /* 52.184.212.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8D515 /* 52.184.213.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8D5BB /* 52.184.213.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8D635 /* 52.184.214.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8D67B /* 52.184.214.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8D68B /* 52.184.214.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8D8AE /* 52.184.216.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8D8E2 /* 52.184.216.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8D8F6 /* 52.184.216.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8D914 /* 52.184.217.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8D925 /* 52.184.217.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8D938 /* 52.184.217.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8D94E /* 52.184.217.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8D98A /* 52.184.217.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8DC0B /* 52.184.220.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8DC52 /* 52.184.220.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EEF800 /* 52.238.248.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F26161 /* 52.242.97.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F26304 /* 52.242.99.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F263FE /* 52.242.99.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F264DA /* 52.242.100.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F2658C /* 52.242.101.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F265E0 /* 52.242.101.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F265E2 /* 52.242.101.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F26733 /* 52.242.103.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F26747 /* 52.242.103.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F924C8 /* 52.249.36.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA2308 /* 52.250.35.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA234A /* 52.250.35.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA2389 /* 52.250.35.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA2496 /* 52.250.36.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FE7240 /* 52.254.114.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4293A0 /* 13.66.147.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430FA0 /* 13.67.15.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456F00 /* 13.69.111.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E9A0 /* 13.69.233.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464FA0 /* 13.70.79.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14155080 /* 20.21.80.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268480 /* 20.38.132.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E600 /* 20.40.230.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7BE0 /* 20.43.123.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1F00 /* 20.44.31.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0CA0 /* 20.46.12.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C580 /* 20.48.197.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315F00 /* 20.49.95.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330060 /* 20.51.0.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330D20 /* 20.51.13.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331520 /* 20.51.21.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143458C0 /* 20.52.88.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352FE0 /* 20.53.47.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D67A0 /* 20.61.103.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E3C20 /* 20.62.60.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E86A0 /* 20.62.134.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144185E0 /* 20.65.133.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420540 /* 20.66.5.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450180 /* 20.69.1.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452F700 /* 20.82.247.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14565E00 /* 20.86.94.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589A80 /* 20.88.154.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A2480 /* 20.90.36.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AEC0 /* 20.150.174.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F4E0 /* 20.150.244.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDACC0 /* 20.189.172.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC060 /* 20.189.192.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA6E0 /* 20.191.166.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02220 /* 20.192.34.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02CE0 /* 20.192.44.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C037E0 /* 20.192.55.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C050A0 /* 20.192.80.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1A000 /* 20.193.160.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C7C0 /* 20.193.199.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24A80 /* 20.194.74.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C343A0 /* 20.195.67.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34AC0 /* 20.195.74.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35380 /* 20.195.83.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0580 /* 20.206.5.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D3E0C0 /* 20.211.224.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28437A40 /* 40.67.122.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456FA0 /* 40.69.111.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6620 /* 40.74.102.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9680 /* 40.74.150.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8DA0 /* 40.79.141.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBEC0 /* 40.79.190.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784D80 /* 40.120.77.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28785280 /* 40.120.82.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1400 /* 51.12.20.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1C00 /* 51.12.28.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CA820 /* 51.12.168.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE560 /* 51.12.229.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336946A0 /* 51.105.70.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B80A0 /* 51.107.128.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BC0E0 /* 51.107.192.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF360 /* 51.107.243.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFB80 /* 51.107.251.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F640 /* 51.116.246.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786DE0 /* 51.120.109.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378B300 /* 51.120.179.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378EA60 /* 51.120.234.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD320 /* 51.138.211.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD5A0 /* 51.143.213.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6C00 /* 52.139.108.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928960 /* 52.146.137.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76D60 /* 52.167.109.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A874A0 /* 52.168.116.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC5080 /* 52.172.80.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68DE0 /* 52.182.141.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F0F4C0 /* 52.240.244.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69E80 /* 52.246.158.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A120 /* 102.37.161.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857EA0 /* 102.133.126.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A4E0 /* 104.214.164.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8E40 /* 168.61.142.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9640 /* 191.234.150.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE48C0 /* 191.238.72.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81940 /* 4.232.25.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41C0A1 /* 13.65.192.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41D024 /* 13.65.208.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428D20 /* 13.66.141.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E1F0 /* 13.66.225.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E375 /* 13.66.227.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E3C1 /* 13.66.227.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4309A0 /* 13.67.9.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D433A74 /* 13.67.58.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D43BE03 /* 13.67.190.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D43EDF9 /* 13.67.237.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454140 /* 13.69.65.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456A80 /* 13.69.106.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D457DAD /* 13.69.125.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E520 /* 13.69.229.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464900 /* 13.70.73.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D479087 /* 13.71.144.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AC60 /* 13.71.172.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C3A0 /* 13.71.195.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D497564 /* 13.73.117.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4999E2 /* 13.73.153.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D499D86 /* 13.73.157.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F940 /* 13.73.249.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6B80 /* 13.74.107.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2460 /* 13.75.36.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3480 /* 13.77.52.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D508A /* 13.77.80.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6C80 /* 13.78.108.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E9102 /* 13.78.145.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E9149 /* 13.78.145.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E9686 /* 13.78.150.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EBB12 /* 13.78.187.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4FAC7D /* 13.79.172.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D507558 /* 13.80.117.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D510185 /* 13.81.1.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D513BFE /* 13.81.59.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D513F06 /* 13.81.63.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D516889 /* 13.81.104.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DAC0 /* 13.86.218.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5720B0 /* 13.87.32.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5720DA /* 13.87.32.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D572185 /* 13.87.33.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573960 /* 13.87.57.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577B60 /* 13.87.123.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D593793 /* 13.89.55.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59ABE0 /* 13.89.171.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B37A7 /* 13.91.55.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B585D /* 13.91.88.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B6B9A /* 13.91.107.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5C7267 /* 13.92.114.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DCE90 /* 13.93.206.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5ED652 /* 13.94.214.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F091B /* 13.95.9.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113120 /* 20.17.49.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152120 /* 20.21.33.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14242816 /* 20.36.40.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14242FC5 /* 20.36.47.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246B80 /* 20.36.107.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142479A0 /* 20.36.121.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142541A0 /* 20.37.65.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254BE0 /* 20.37.75.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C480 /* 20.37.196.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E1A0 /* 20.37.225.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142655E0 /* 20.38.85.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142689C0 /* 20.38.137.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142692E0 /* 20.38.146.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427017D /* 20.39.1.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142701EF /* 20.39.1.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427022C /* 20.39.2.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427027A /* 20.39.2.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427039D /* 20.39.3.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142703BA /* 20.39.3.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270C40 /* 20.39.12.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142889BA /* 20.40.137.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142895A5 /* 20.40.149.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428C820 /* 20.40.200.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142905E0 /* 20.41.5.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294280 /* 20.41.66.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C380 /* 20.41.195.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A06E0 /* 20.42.6.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE3E0 /* 20.42.227.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2A60 /* 20.43.42.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4260 /* 20.43.66.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8440 /* 20.43.132.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0470 /* 20.44.4.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1B40 /* 20.44.27.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D71A0 /* 20.45.113.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7AE0 /* 20.45.122.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC3C0 /* 20.45.195.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315340 /* 20.49.83.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315B40 /* 20.49.91.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14320140 /* 20.50.1.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481140 /* 20.72.17.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A1E0 /* 20.150.161.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AC00 /* 20.150.172.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B360 /* 20.150.179.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BB60 /* 20.150.187.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6D00 /* 20.189.109.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06360 /* 20.192.99.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A1E0 /* 20.192.161.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E4A0 /* 20.192.228.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EBC0 /* 20.192.235.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CB80 /* 20.193.203.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70120 /* 20.215.1.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92920 /* 20.217.41.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17600C70 /* 23.96.12.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17606549 /* 23.96.101.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17606D8C /* 23.96.109.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760E843 /* 23.96.232.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176130BA /* 23.97.48.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761330C /* 23.97.51.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761611D /* 23.97.97.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761B44A /* 23.97.180.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176252A0 /* 23.98.82.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763623D /* 23.99.98.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17636BE5 /* 23.99.107.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763C3EC /* 23.99.195.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17646491 /* 23.100.100.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17646770 /* 23.100.103.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765B021 /* 23.101.176.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766B294 /* 23.102.178.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766B940 /* 23.102.185.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284080A0 /* 40.64.128.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284331A0 /* 40.67.49.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433C00 /* 40.67.60.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28446499 /* 40.68.100.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844BF36 /* 40.68.191.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844DA5A /* 40.68.218.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456B80 /* 40.69.107.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284693E0 /* 40.70.147.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470CC0 /* 40.71.12.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6500 /* 40.74.101.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A8C8C /* 40.74.140.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9530 /* 40.74.149.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284AB1B1 /* 40.74.177.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2388 /* 40.75.35.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D1263 /* 40.77.18.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC380 /* 40.78.195.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECB00 /* 40.78.203.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE300 /* 40.78.227.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEA60 /* 40.78.234.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF2E0 /* 40.78.242.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFAA0 /* 40.78.250.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8360 /* 40.79.131.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8A60 /* 40.79.138.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9260 /* 40.79.146.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9A20 /* 40.79.154.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA260 /* 40.79.162.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAAC0 /* 40.79.170.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBA80 /* 40.79.186.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC220 /* 40.79.194.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285032E0 /* 40.80.50.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503AA0 /* 40.80.58.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850AA80 /* 40.80.170.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BEC0 /* 40.80.190.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852FF40 /* 40.82.255.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285431AA /* 40.84.49.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28543E52 /* 40.84.62.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855E2D5 /* 40.85.226.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855E325 /* 40.85.227.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E062 /* 40.86.224.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E068 /* 40.86.224.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28583024 /* 40.88.48.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285912C0 /* 40.89.18.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285941A1 /* 40.89.65.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285942EC /* 40.89.66.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859434D /* 40.89.67.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28594611 /* 40.89.70.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870FEEB /* 40.112.254.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28733209 /* 40.115.50.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876D07F /* 40.118.208.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287AA6EA /* 40.122.166.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C29C0 /* 51.12.41.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6400 /* 51.12.100.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC1C0 /* 51.12.193.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCC00 /* 51.12.204.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE360 /* 51.12.227.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEB60 /* 51.12.235.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351920 /* 51.53.25.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335A920 /* 51.53.169.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681C00 /* 51.104.28.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336942E0 /* 51.105.66.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694AE0 /* 51.105.74.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336951A0 /* 51.105.81.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336959C0 /* 51.105.89.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B31C0 /* 51.107.49.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3BE0 /* 51.107.59.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B91A0 /* 51.107.145.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9BE0 /* 51.107.155.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337430E0 /* 51.116.48.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743BE0 /* 51.116.59.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337490E0 /* 51.116.144.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749A20 /* 51.116.154.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F300 /* 51.116.243.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FB00 /* 51.116.251.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337829C0 /* 51.120.41.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337863E0 /* 51.120.99.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786B60 /* 51.120.107.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D360 /* 51.120.211.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DC00 /* 51.120.220.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E1A0 /* 51.120.225.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A2C0 /* 51.137.162.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C94A0 /* 51.140.148.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CB83B /* 51.140.184.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CB83D /* 51.140.184.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CB83F /* 51.140.184.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD380 /* 51.140.211.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D083D /* 51.141.8.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D083E /* 51.141.8.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D0840 /* 51.141.8.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC1A0 /* 51.143.193.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348831C0 /* 52.136.49.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34888FC0 /* 52.136.143.192/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3489692E /* 52.137.105.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5A40 /* 52.138.90.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE280 /* 52.138.226.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6A80 /* 52.140.106.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F8B79 /* 52.143.139.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F8C0C /* 52.143.140.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3494942E /* 52.148.148.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968C80 /* 52.150.140.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A15F0C /* 52.161.95.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A16B30 /* 52.161.107.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26E20 /* 52.162.110.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A4F4BD /* 52.164.244.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A4F551 /* 52.164.245.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A52CE0 /* 52.165.44.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A6132D /* 52.166.19.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76A80 /* 52.167.106.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A91B4F /* 52.169.27.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A91EAF /* 52.169.30.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9EB5A /* 52.169.235.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE2171 /* 52.174.33.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE2245 /* 52.174.34.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE23DA /* 52.174.35.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE2663 /* 52.174.38.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEB0CB /* 52.174.176.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEB342 /* 52.174.179.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEB4A4 /* 52.174.180.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AFDA96 /* 52.175.218.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B295BC /* 52.178.149.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B03A /* 52.180.176.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B16C /* 52.180.177.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B1CE /* 52.180.177.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B35E /* 52.180.179.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B500 /* 52.180.181.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B5EF /* 52.180.181.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68B00 /* 52.182.139.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BCDE73 /* 52.188.222.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDD9FE /* 52.189.217.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BF8115 /* 52.191.129.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFA639 /* 52.191.166.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B926 /* 52.225.185.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1BF43 /* 52.225.191.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E42CBB /* 52.228.44.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E453C0 /* 52.228.83.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71360 /* 52.231.19.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E72046 /* 52.231.32.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E72052 /* 52.231.32.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79380 /* 52.231.147.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7C870 /* 52.231.200.112/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7C87E /* 52.231.200.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E92822 /* 52.233.40.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E99D09 /* 52.233.157.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E99D4E /* 52.233.157.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E9A1EE /* 52.233.161.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E9AC50 /* 52.233.172.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EB2942 /* 52.235.41.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBA80 /* 52.236.186.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED1EAF /* 52.237.30.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F21681 /* 52.242.22.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22169 /* 52.242.33.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69AE0 /* 52.246.154.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F93C16 /* 52.249.60.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDE3F0 /* 52.253.227.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134C79C /* 65.52.199.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134C7BC /* 65.52.199.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FBE0 /* 65.52.251.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5140 /* 68.221.81.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x462531A3 /* 70.37.49.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851BC0 /* 102.133.27.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668538C0 /* 102.133.56.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857B40 /* 102.133.123.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859BC0 /* 102.133.155.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685D9E0 /* 102.133.217.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FAE0 /* 102.133.250.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828459F /* 104.40.69.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828B719 /* 104.40.183.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682902B6 /* 104.41.2.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68298163 /* 104.41.129.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682B804E /* 104.43.128.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682B839C /* 104.43.131.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682B844B /* 104.43.132.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D0D08 /* 104.45.13.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D52C9 /* 104.45.82.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D58B5 /* 104.45.88.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EE8D0 /* 104.46.232.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EEC1D /* 104.46.236.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682F9560 /* 104.47.149.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D01080 /* 104.208.16.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D09080 /* 104.208.144.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D09C63 /* 104.208.156.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D09D12 /* 104.208.157.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D203FE /* 104.210.3.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D27334 /* 104.210.115.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35260 /* 104.211.82.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3608E /* 104.211.96.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D36090 /* 104.211.96.144/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39360 /* 104.211.147.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A048 /* 104.211.160.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A04A /* 104.211.160.74/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E075 /* 104.211.224.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E077 /* 104.211.224.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E079 /* 104.211.224.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D613C0 /* 104.214.19.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D64199 /* 104.214.65.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6FDD6830 /* 111.221.104.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89742105 /* 137.116.33.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974211D /* 137.116.33.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89742147 /* 137.116.33.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89742592 /* 137.116.37.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89742EB4 /* 137.116.46.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974C1E1 /* 137.116.193.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89752DB0 /* 137.117.45.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89756D8F /* 137.117.109.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B0172 /* 138.91.1.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B1124 /* 138.91.17.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37A747 /* 157.55.167.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37D258 /* 157.55.210.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176140 /* 158.23.97.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83DA19A /* 168.61.161.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83DD1E4 /* 168.61.209.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E0472 /* 168.62.4.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E2480 /* 168.62.36.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EA81B /* 168.62.168.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F0535 /* 168.63.5.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F247E /* 168.63.36.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8517 /* 168.63.133.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FD094 /* 168.63.208.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8253C /* 191.232.37.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90A00 /* 191.233.10.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE94C55 /* 191.233.76.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CC60 /* 191.233.204.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9360 /* 191.234.147.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9B60 /* 191.234.155.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE3C0 /* 191.235.227.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC25EF /* 191.236.37.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC268E /* 191.236.38.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFECA123 /* 191.236.161.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFECA3F5 /* 191.236.163.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFECA42C /* 191.236.164.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEF1203 /* 191.239.18.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEF1549 /* 191.239.21.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEF28D9 /* 191.239.40.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEF408B /* 191.239.64.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEF4098 /* 191.239.64.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFA0A1 /* 191.239.160.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFA0B9 /* 191.239.160.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E954B /* 207.46.149.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2EE148 /* 207.46.225.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14131838 /* 20.19.24.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1418031E /* 20.24.3.30/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF5DC /* 20.45.245.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FECA2 /* 20.47.236.162/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FECA6 /* 20.47.236.166/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1433072E /* 20.51.7.46/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330738 /* 20.51.7.56/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B5102 /* 20.59.81.2/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B5106 /* 20.59.81.6/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450860 /* 20.69.8.96/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450864 /* 20.69.8.100/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B926C /* 20.91.146.108/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14629414 /* 20.98.148.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14629488 /* 20.98.148.136/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C36C /* 20.98.195.108/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C378 /* 20.98.195.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D36E /* 20.105.211.110/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D372 /* 20.105.211.114/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1475C0FE /* 20.117.192.254/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1475C120 /* 20.117.193.32/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14771C3A /* 20.119.28.58/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14771C3E /* 20.119.28.62/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D018C /* 20.125.1.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D0198 /* 20.125.1.152/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D9C0A /* 20.125.156.10/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D9D04 /* 20.125.157.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0AF20 /* 20.192.175.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35732 /* 20.195.87.50/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35734 /* 20.195.87.52/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD37D8 /* 20.205.55.216/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CEB71C /* 20.206.183.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CFA990 /* 20.207.169.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D2456C /* 20.210.69.108/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D3E060 /* 20.211.224.96/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5C4CC /* 20.213.196.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DC00F8 /* 20.220.0.248/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EC9620 /* 20.236.150.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928DF8 /* 52.146.141.248/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928DFC /* 52.146.141.252/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E862B0 /* 4.232.98.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E864C0 /* 4.232.100.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86500 /* 4.232.101.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86548 /* 4.232.101.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D403829 /* 13.64.56.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D412CC8 /* 13.65.44.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428DE8 /* 13.66.141.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428E00 /* 13.66.142.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430A50 /* 13.67.10.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430A80 /* 13.67.10.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D44D3DF /* 13.68.211.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454340 /* 13.69.67.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454380 /* 13.69.67.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E600 /* 13.69.230.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E620 /* 13.69.230.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464A58 /* 13.70.74.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464A78 /* 13.70.74.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D467F32 /* 13.70.127.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D46957D /* 13.70.149.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47ADD8 /* 13.71.173.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47ADF8 /* 13.71.173.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C488 /* 13.71.196.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C4A8 /* 13.71.196.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F230 /* 13.73.242.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F280 /* 13.73.242.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F900 /* 13.73.249.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F960 /* 13.73.249.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F980 /* 13.73.249.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FD7A /* 13.73.253.122/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FEC8 /* 13.73.254.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FED0 /* 13.73.254.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FED8 /* 13.73.254.216/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FF20 /* 13.73.255.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2740 /* 13.75.39.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2760 /* 13.75.39.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B5A53 /* 13.75.90.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B5CDC /* 13.75.92.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B5FE0 /* 13.75.95.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4BA309 /* 13.75.163.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4BA86F /* 13.75.168.111/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3798 /* 13.77.55.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4DAA9B /* 13.77.170.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E4607 /* 13.78.70.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EB92C /* 13.78.185.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EBBA8 /* 13.78.187.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5344B4 /* 13.83.68.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D535EAE /* 13.83.94.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D542ACD /* 13.84.42.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D551986 /* 13.85.25.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56B20A /* 13.86.178.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56B88E /* 13.86.184.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DB80 /* 13.86.219.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DBA0 /* 13.86.219.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57D826 /* 13.87.216.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D580E3F /* 13.88.14.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D581AC8 /* 13.88.26.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B8AE5 /* 13.91.138.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5CB36C /* 13.92.179.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5E1A27 /* 13.94.26.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113A00 /* 20.17.58.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113A20 /* 20.17.58.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113A40 /* 20.17.58.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113B38 /* 20.17.59.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152540 /* 20.21.37.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152560 /* 20.21.37.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152700 /* 20.21.39.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141527E8 /* 20.21.39.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14155600 /* 20.21.86.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1415D032 /* 20.21.208.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141801C0 /* 20.24.1.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14180200 /* 20.24.2.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141A10C0 /* 20.26.16.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141A1100 /* 20.26.17.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142478E0 /* 20.36.120.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142479C0 /* 20.36.121.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142479E0 /* 20.36.121.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247D80 /* 20.36.125.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142540E0 /* 20.37.64.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142541C0 /* 20.37.65.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142541E0 /* 20.37.65.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254424 /* 20.37.68.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254680 /* 20.37.70.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142546E0 /* 20.37.70.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142547D0 /* 20.37.71.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254CC8 /* 20.37.76.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259CCC /* 20.37.156.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259D60 /* 20.37.157.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C370 /* 20.37.195.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C3C0 /* 20.37.195.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C4A0 /* 20.37.196.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E0E0 /* 20.37.224.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E1C0 /* 20.37.225.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E1E0 /* 20.37.225.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E5C0 /* 20.37.229.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1426546C /* 20.38.84.108/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142655A0 /* 20.38.85.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265780 /* 20.38.87.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142657A0 /* 20.38.87.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142688F0 /* 20.38.136.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268980 /* 20.38.137.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142689E0 /* 20.38.137.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268D0C /* 20.38.141.12/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268E80 /* 20.38.142.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268EE0 /* 20.38.142.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268FF0 /* 20.38.143.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270B70 /* 20.39.11.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270C00 /* 20.39.12.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270C60 /* 20.39.12.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270F38 /* 20.39.15.56/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270F3C /* 20.39.15.60/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428182A /* 20.40.24.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A4F5 /* 20.40.164.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428AA49 /* 20.40.170.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428BBD2 /* 20.40.187.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428BC6D /* 20.40.188.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428BE87 /* 20.40.190.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428BEE1 /* 20.40.190.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428C840 /* 20.40.200.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428C860 /* 20.40.200.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428CF98 /* 20.40.207.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E020 /* 20.40.224.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E030 /* 20.40.224.48/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E038 /* 20.40.224.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E140 /* 20.40.225.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E1C0 /* 20.40.225.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E540 /* 20.40.229.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142905A0 /* 20.41.5.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142941C0 /* 20.41.65.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142942A0 /* 20.41.66.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142942C0 /* 20.41.66.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294528 /* 20.41.69.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294538 /* 20.41.69.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C1B0 /* 20.41.193.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C1C0 /* 20.41.193.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C3A0 /* 20.41.195.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429D000 /* 20.41.208.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A04CC /* 20.42.4.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A0690 /* 20.42.6.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A06A0 /* 20.42.6.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A0780 /* 20.42.7.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A83F0 /* 20.42.131.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE390 /* 20.42.227.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE3A0 /* 20.42.227.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE480 /* 20.42.228.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2A10 /* 20.43.42.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2A20 /* 20.43.42.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2B00 /* 20.43.43.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2DE8 /* 20.43.45.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2DF4 /* 20.43.45.244/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2F00 /* 20.43.47.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2F80 /* 20.43.47.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4210 /* 20.43.66.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4220 /* 20.43.66.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4300 /* 20.43.67.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7900 /* 20.43.121.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7920 /* 20.43.121.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8330 /* 20.43.131.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8400 /* 20.43.132.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8460 /* 20.43.132.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C08A0 /* 20.44.8.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C08C0 /* 20.44.8.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1110 /* 20.44.17.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1130 /* 20.44.17.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1B78 /* 20.44.27.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1BD8 /* 20.44.27.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142CFCFE /* 20.44.252.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142CFD57 /* 20.44.253.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5F48 /* 20.45.95.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5F50 /* 20.45.95.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5F60 /* 20.45.95.96/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D70E0 /* 20.45.112.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D71C0 /* 20.45.113.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D71E0 /* 20.45.113.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7480 /* 20.45.116.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D74F0 /* 20.45.116.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC07E /* 20.45.192.126/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC380 /* 20.45.195.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC3E0 /* 20.45.195.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC400 /* 20.45.196.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC658 /* 20.45.198.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC724 /* 20.45.199.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DE815 /* 20.45.232.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF2B8 /* 20.45.242.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF2C0 /* 20.45.242.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF2D0 /* 20.45.242.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0A80 /* 20.46.10.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0AC0 /* 20.46.10.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0BE0 /* 20.46.11.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F9AAA /* 20.47.154.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FE9B0 /* 20.47.233.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FE9C0 /* 20.47.233.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FE9C8 /* 20.47.233.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14308ACF /* 20.48.138.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14308AD8 /* 20.48.138.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C040 /* 20.48.192.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C050 /* 20.48.192.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C140 /* 20.48.193.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C1C0 /* 20.48.193.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C4F0 /* 20.48.196.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430CA2C /* 20.48.202.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430CAC0 /* 20.48.202.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430CAD0 /* 20.48.202.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316080 /* 20.49.96.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143160A0 /* 20.49.96.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316638 /* 20.49.102.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143166C0 /* 20.49.102.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143166D0 /* 20.49.102.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143166D8 /* 20.49.102.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143166E0 /* 20.49.102.224/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316780 /* 20.49.103.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143172A0 /* 20.49.114.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143172B0 /* 20.49.114.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143172B8 /* 20.49.114.184/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143172E0 /* 20.49.114.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143173C0 /* 20.49.115.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317640 /* 20.49.118.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143177D0 /* 20.49.119.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317E88 /* 20.49.126.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317E90 /* 20.49.126.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317E98 /* 20.49.126.152/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317EE0 /* 20.49.126.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431F427 /* 20.49.244.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431F569 /* 20.49.245.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431F59F /* 20.49.245.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14320110 /* 20.50.1.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432447E /* 20.50.68.126/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330624 /* 20.51.6.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330628 /* 20.51.6.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330630 /* 20.51.6.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330880 /* 20.51.8.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143308E0 /* 20.51.8.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330CC0 /* 20.51.12.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330CE0 /* 20.51.12.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143310C0 /* 20.51.16.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331120 /* 20.51.17.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331470 /* 20.51.20.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14335928 /* 20.51.89.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14335930 /* 20.51.89.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344010 /* 20.52.64.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344830 /* 20.52.72.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345880 /* 20.52.88.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1434C949 /* 20.52.201.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352920 /* 20.53.41.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352928 /* 20.53.41.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352930 /* 20.53.41.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352C00 /* 20.53.44.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352C80 /* 20.53.44.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352CC0 /* 20.53.44.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352F50 /* 20.53.47.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143530B0 /* 20.53.48.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353870 /* 20.53.56.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4240 /* 20.58.66.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4320 /* 20.58.67.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B5008 /* 20.59.80.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B5010 /* 20.59.80.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B55C0 /* 20.59.85.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B5600 /* 20.59.86.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B6748 /* 20.59.103.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D60A8 /* 20.61.96.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D60B0 /* 20.61.96.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D60BC /* 20.61.96.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6140 /* 20.61.97.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6240 /* 20.61.98.64/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D62C0 /* 20.61.98.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6320 /* 20.61.99.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6750 /* 20.61.103.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E3A00 /* 20.62.58.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E3B60 /* 20.62.59.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8090 /* 20.62.128.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8140 /* 20.62.129.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E81A0 /* 20.62.129.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8650 /* 20.62.134.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143F80AC /* 20.63.128.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143F80B0 /* 20.63.128.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418200 /* 20.65.130.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418280 /* 20.65.130.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418560 /* 20.65.133.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420240 /* 20.66.2.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144202A0 /* 20.66.2.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144204F0 /* 20.66.4.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144500F0 /* 20.69.0.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144505A4 /* 20.69.5.164/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144505B0 /* 20.69.5.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144505C0 /* 20.69.5.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450C00 /* 20.69.12.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450C80 /* 20.69.12.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DE74 /* 20.70.222.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DE78 /* 20.70.222.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481440 /* 20.72.20.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481480 /* 20.72.20.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481508 /* 20.72.21.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1449CE26 /* 20.73.206.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1449CE2B /* 20.73.206.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144A46B5 /* 20.74.70.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144A46CB /* 20.74.70.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144A4790 /* 20.74.71.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC34C /* 20.74.195.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC350 /* 20.74.195.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC360 /* 20.74.195.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC580 /* 20.74.197.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC600 /* 20.74.198.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144B6F52 /* 20.75.111.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144F504B /* 20.79.80.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144F5050 /* 20.79.80.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144F6B10 /* 20.79.107.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144F6B20 /* 20.79.107.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144F6D00 /* 20.79.109.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144F6D80 /* 20.79.109.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14502CBB /* 20.80.44.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14502F01 /* 20.80.47.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452CE8C /* 20.82.206.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452CE99 /* 20.82.206.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14530A9C /* 20.83.10.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14530AC4 /* 20.83.10.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453409C /* 20.83.64.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453DE70 /* 20.83.222.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453DEC0 /* 20.83.222.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575048 /* 20.87.80.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575050 /* 20.87.80.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145753C0 /* 20.87.83.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575600 /* 20.87.86.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589DBC /* 20.88.157.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590CC4 /* 20.89.12.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590CC8 /* 20.89.12.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590CD0 /* 20.89.12.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A20BC /* 20.90.32.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A2410 /* 20.90.36.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A2420 /* 20.90.36.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A84B0 /* 20.90.132.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A84C0 /* 20.90.132.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A84C8 /* 20.90.132.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B0860 /* 20.91.8.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B0C00 /* 20.91.12.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B0C80 /* 20.91.12.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B9140 /* 20.91.145.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B9180 /* 20.91.145.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C0700 /* 20.92.7.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C0780 /* 20.92.7.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C37A0 /* 20.92.55.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C37B0 /* 20.92.55.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C37B8 /* 20.92.55.184/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145DC427 /* 20.93.196.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146296C0 /* 20.98.150.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14629700 /* 20.98.151.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14630B10 /* 20.99.11.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14630B68 /* 20.99.11.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14631820 /* 20.99.24.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14631900 /* 20.99.25.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14631A40 /* 20.99.26.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14631A80 /* 20.99.26.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640240 /* 20.100.2.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640600 /* 20.100.6.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640680 /* 20.100.6.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D14A /* 20.105.209.74/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D150 /* 20.105.209.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D160 /* 20.105.209.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469F580 /* 20.105.245.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469F600 /* 20.105.246.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146BEF44 /* 20.107.239.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146BEF48 /* 20.107.239.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146BEF50 /* 20.107.239.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F0280 /* 20.111.2.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F0290 /* 20.111.2.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F0298 /* 20.111.2.152/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F0500 /* 20.111.5.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F0580 /* 20.111.5.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14742FC0 /* 20.116.47.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14768AA0 /* 20.118.138.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14771B80 /* 20.119.27.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14771B90 /* 20.119.27.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14779C40 /* 20.119.156.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14779C80 /* 20.119.156.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D0740 /* 20.125.7.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D0780 /* 20.125.7.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D9D40 /* 20.125.157.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D9D80 /* 20.125.157.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DA480 /* 20.125.164.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DA500 /* 20.125.165.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A1A0 /* 20.150.161.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A480 /* 20.150.164.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A4A0 /* 20.150.164.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A740 /* 20.150.167.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AE88 /* 20.150.174.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F150 /* 20.150.241.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F430 /* 20.150.244.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F480 /* 20.150.244.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AF0590 /* 20.175.5.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B8F04E /* 20.184.240.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B8F142 /* 20.184.241.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B8F1EE /* 20.184.241.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B8F271 /* 20.184.242.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B8F273 /* 20.184.242.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B8F2BD /* 20.184.242.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B9691C /* 20.185.105.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC398 /* 20.187.195.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC4C0 /* 20.187.196.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC540 /* 20.187.197.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC5A0 /* 20.187.197.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6C40 /* 20.189.108.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6D20 /* 20.189.109.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6D40 /* 20.189.109.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6FC8 /* 20.189.111.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6FD0 /* 20.189.111.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC268 /* 20.189.194.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC280 /* 20.189.194.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC290 /* 20.189.194.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC780 /* 20.189.199.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE100 /* 20.189.225.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE160 /* 20.189.225.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE490 /* 20.189.228.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BED249 /* 20.190.210.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BED24B /* 20.190.210.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA008 /* 20.191.160.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA014 /* 20.191.160.20/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA060 /* 20.191.160.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA070 /* 20.191.160.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA180 /* 20.191.161.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA1E0 /* 20.191.161.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA660 /* 20.191.166.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFAACD /* 20.191.170.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02C60 /* 20.192.44.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C030C0 /* 20.192.48.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03250 /* 20.192.50.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C032D0 /* 20.192.50.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C05020 /* 20.192.80.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0996C /* 20.192.153.108/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C099A0 /* 20.192.153.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C099B0 /* 20.192.153.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09E40 /* 20.192.158.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09E80 /* 20.192.158.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A190 /* 20.192.161.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A1A0 /* 20.192.161.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A480 /* 20.192.164.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A740 /* 20.192.167.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0AA20 /* 20.192.170.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0AA30 /* 20.192.170.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0AA38 /* 20.192.170.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0AE00 /* 20.192.174.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0AE80 /* 20.192.174.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0B854 /* 20.192.184.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E1D0 /* 20.192.225.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E1E0 /* 20.192.225.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E4C0 /* 20.192.228.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E780 /* 20.192.231.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C12329 /* 20.193.35.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C12670 /* 20.193.38.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C126FF /* 20.193.38.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1894E /* 20.193.137.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C200 /* 20.193.194.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C230 /* 20.193.194.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C240 /* 20.193.194.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1E82D /* 20.193.232.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24840 /* 20.194.72.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C248C0 /* 20.194.72.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24A40 /* 20.194.74.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C341F0 /* 20.195.65.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C348F0 /* 20.195.72.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C355B6 /* 20.195.85.182/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35620 /* 20.195.86.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35640 /* 20.195.86.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C39250 /* 20.195.146.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7C840 /* 20.199.200.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7CA40 /* 20.199.202.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7CA80 /* 20.199.202.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C84BFE /* 20.200.75.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8A1C0 /* 20.200.161.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8A200 /* 20.200.162.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C464 /* 20.200.196.100/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C470 /* 20.200.196.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C600 /* 20.200.198.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C9187F /* 20.201.24.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C929D3 /* 20.201.41.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C92A70 /* 20.201.42.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB124F /* 20.203.18.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB12A4 /* 20.203.18.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5940 /* 20.203.89.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5980 /* 20.203.89.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5EC8 /* 20.203.94.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD3380 /* 20.205.51.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD3600 /* 20.205.54.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4564 /* 20.205.69.100/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4568 /* 20.205.69.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4570 /* 20.205.69.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CEB600 /* 20.206.182.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CEB680 /* 20.206.182.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF0180 /* 20.207.1.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF01A0 /* 20.207.1.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF0480 /* 20.207.4.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF0500 /* 20.207.5.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D0047C /* 20.208.4.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00528 /* 20.208.5.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00530 /* 20.208.5.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D090C0 /* 20.208.144.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D09100 /* 20.208.145.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D24700 /* 20.210.71.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D24780 /* 20.210.71.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D29000 /* 20.210.144.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D29100 /* 20.210.145.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D347A0 /* 20.211.71.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5C380 /* 20.213.195.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5C400 /* 20.213.196.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D68240 /* 20.214.130.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D68280 /* 20.214.130.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70690 /* 20.215.6.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D706A0 /* 20.215.6.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D706C0 /* 20.215.6.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D707E0 /* 20.215.7.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92E90 /* 20.217.46.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92EA0 /* 20.217.46.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92EC0 /* 20.217.46.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92FE0 /* 20.217.47.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DC0000 /* 20.220.0.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DD8900 /* 20.221.137.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DD8980 /* 20.221.137.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DF42C0 /* 20.223.66.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DF4300 /* 20.223.67.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E40240 /* 20.228.2.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E40280 /* 20.228.2.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E85B40 /* 20.232.91.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E85B80 /* 20.232.91.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EC9100 /* 20.236.145.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EC9180 /* 20.236.145.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17600D79 /* 23.96.13.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760E594 /* 23.96.229.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760EB25 /* 23.96.235.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626B1C /* 23.98.107.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626BC8 /* 23.98.107.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626BD0 /* 23.98.107.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626C24 /* 23.98.108.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626C28 /* 23.98.108.40/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626CC0 /* 23.98.108.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626D20 /* 23.98.109.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17640020 /* 23.100.0.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176439AB /* 23.100.57.171/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17643B31 /* 23.100.59.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400AA0 /* 40.64.10.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400AC0 /* 40.64.10.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400D40 /* 40.64.13.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400D80 /* 40.64.13.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284010F3 /* 40.64.16.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28401167 /* 40.64.17.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284016CD /* 40.64.22.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284080C0 /* 40.64.128.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2840868C /* 40.64.134.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284086A8 /* 40.64.134.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284086B0 /* 40.64.134.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408750 /* 40.64.135.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284330E0 /* 40.67.48.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284331C0 /* 40.67.49.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284331E0 /* 40.67.49.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433480 /* 40.67.52.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284335A0 /* 40.67.53.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284549C2 /* 40.69.73.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456820 /* 40.69.104.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456F24 /* 40.69.111.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28462FA5 /* 40.70.47.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2846F1CB /* 40.70.241.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1E6C /* 40.74.30.108/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1F40 /* 40.74.31.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A40CB /* 40.74.64.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A4F8C /* 40.74.79.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A5211 /* 40.74.82.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A7459 /* 40.74.116.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284AFB73 /* 40.74.251.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E14E0 /* 40.78.20.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E344D /* 40.78.52.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECC00 /* 40.78.204.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECC20 /* 40.78.204.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8430 /* 40.79.132.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8450 /* 40.79.132.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9C40 /* 40.79.156.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB020 /* 40.79.176.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBBA8 /* 40.79.187.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBBC8 /* 40.79.187.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285039D0 /* 40.80.57.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285039E0 /* 40.80.57.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503AC0 /* 40.80.58.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503F98 /* 40.80.63.152/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503FE0 /* 40.80.63.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503FF0 /* 40.80.63.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28506100 /* 40.80.97.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28506180 /* 40.80.97.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A9C0 /* 40.80.169.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850AAA0 /* 40.80.170.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850AAC0 /* 40.80.170.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850AC1C /* 40.80.172.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B000 /* 40.80.176.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BC70 /* 40.80.188.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BE80 /* 40.80.190.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BEE0 /* 40.80.190.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852FDC8 /* 40.82.253.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852FDD0 /* 40.82.253.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852FF00 /* 40.82.255.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852FF60 /* 40.82.255.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E3F7 /* 40.86.227.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285730B8 /* 40.87.48.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28581619 /* 40.88.22.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285911F0 /* 40.89.17.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591280 /* 40.89.18.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285912E0 /* 40.89.18.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591724 /* 40.89.23.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285985D1 /* 40.89.133.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870FE47 /* 40.112.254.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28717CD0 /* 40.113.124.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871E2AD /* 40.113.226.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873F867 /* 40.115.248.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28759A2A /* 40.117.154.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2875E85A /* 40.117.232.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770BD8 /* 40.119.11.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877E5A0 /* 40.119.229.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28780830 /* 40.120.8.48/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A2A6F /* 40.122.42.111/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BCD1D /* 40.123.205.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BD2F8 /* 40.123.210.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BD6B6 /* 40.123.214.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BD6FB /* 40.123.214.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BDA31 /* 40.123.218.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F4C04 /* 40.127.76.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F4C0A /* 40.127.76.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FA571 /* 40.127.165.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B6150 /* 51.11.97.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1120 /* 51.12.17.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1188 /* 51.12.17.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1190 /* 51.12.17.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C16F0 /* 51.12.22.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1920 /* 51.12.25.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C19D0 /* 51.12.25.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2930 /* 51.12.41.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2980 /* 51.12.41.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C29E0 /* 51.12.41.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2BC0 /* 51.12.43.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2EF0 /* 51.12.46.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C49D0 /* 51.12.73.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C4A80 /* 51.12.74.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C9EF3 /* 51.12.158.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC130 /* 51.12.193.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC180 /* 51.12.193.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC1E0 /* 51.12.193.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC380 /* 51.12.195.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D0100 /* 51.13.1.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D5411 /* 51.13.84.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D5412 /* 51.13.84.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8048 /* 51.13.128.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8840 /* 51.13.136.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D89C0 /* 51.13.137.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D89E0 /* 51.13.137.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8F60 /* 51.13.143.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351EB0 /* 51.53.30.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351EC0 /* 51.53.30.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351F00 /* 51.53.31.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356500 /* 51.53.101.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335AEA0 /* 51.53.174.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335AEC0 /* 51.53.174.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B200 /* 51.53.178.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B2D0 /* 51.53.178.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367902E /* 51.103.144.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336819F0 /* 51.104.25.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681B40 /* 51.104.27.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681C20 /* 51.104.28.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681FA0 /* 51.104.31.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681FA8 /* 51.104.31.168/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681FB0 /* 51.104.31.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336943B0 /* 51.105.67.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336943D0 /* 51.105.67.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336950E0 /* 51.105.80.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336951C0 /* 51.105.81.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336951E0 /* 51.105.81.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695980 /* 51.105.89.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336959E0 /* 51.105.89.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695A00 /* 51.105.90.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695C34 /* 51.105.92.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B1614 /* 51.107.22.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B16DD /* 51.107.22.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B16F6 /* 51.107.22.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B30F0 /* 51.107.48.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3180 /* 51.107.49.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B31E0 /* 51.107.49.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B34D8 /* 51.107.52.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3524 /* 51.107.53.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3528 /* 51.107.53.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B5468 /* 51.107.84.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B553D /* 51.107.85.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8018 /* 51.107.128.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B90E0 /* 51.107.144.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B91C0 /* 51.107.145.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B91E0 /* 51.107.145.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9414 /* 51.107.148.20/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9440 /* 51.107.148.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BC048 /* 51.107.192.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE082 /* 51.107.224.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE099 /* 51.107.224.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE0BD /* 51.107.224.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE0D1 /* 51.107.224.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BEFA7 /* 51.107.239.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF100 /* 51.107.241.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF180 /* 51.107.241.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF2E0 /* 51.107.242.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF900 /* 51.107.249.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF980 /* 51.107.249.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFAF0 /* 51.107.250.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFFB4 /* 51.107.255.180/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFFB8 /* 51.107.255.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743090 /* 51.116.48.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337430A0 /* 51.116.48.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743100 /* 51.116.49.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337433C0 /* 51.116.51.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337436B0 /* 51.116.54.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743740 /* 51.116.55.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744D10 /* 51.116.77.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744D20 /* 51.116.77.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744F00 /* 51.116.79.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744F80 /* 51.116.79.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749090 /* 51.116.144.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337490A0 /* 51.116.144.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749100 /* 51.116.145.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749480 /* 51.116.148.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337495D0 /* 51.116.149.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D306 /* 51.116.211.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337828F0 /* 51.120.40.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782980 /* 51.120.41.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337829E0 /* 51.120.41.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33784E9A /* 51.120.78.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786DC0 /* 51.120.109.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378B180 /* 51.120.177.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378B200 /* 51.120.178.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E0E0 /* 51.120.224.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E1C0 /* 51.120.225.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E1E0 /* 51.120.225.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E840 /* 51.120.232.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E990 /* 51.120.233.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E9A0 /* 51.120.233.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378ED00 /* 51.120.237.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337C5F2E /* 51.124.95.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337C8C8F /* 51.124.140.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A280 /* 51.137.162.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A2E0 /* 51.137.162.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A300 /* 51.137.163.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A61C /* 51.137.166.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A62C /* 51.137.166.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A630 /* 51.137.166.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A7C0 /* 51.137.167.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338A28C2 /* 51.138.40.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338A294B /* 51.138.41.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AA004 /* 51.138.160.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD290 /* 51.138.210.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C69A5 /* 51.140.105.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CCA00 /* 51.140.202.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338E80C0 /* 51.142.128.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338E8100 /* 51.142.129.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC0E0 /* 51.143.192.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC1C0 /* 51.143.193.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC1E0 /* 51.143.193.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD080 /* 51.143.208.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD100 /* 51.143.209.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD140 /* 51.143.209.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD4A0 /* 51.143.212.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x339053D2 /* 51.144.83.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348830F0 /* 52.136.48.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883180 /* 52.136.49.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348831E0 /* 52.136.49.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883500 /* 52.136.53.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488B880 /* 52.136.184.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488B8C0 /* 52.136.184.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488B9A0 /* 52.136.185.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BF20 /* 52.136.191.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BF30 /* 52.136.191.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BF38 /* 52.136.191.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A29AB /* 52.138.41.171/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5CAC /* 52.138.92.172/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6A00 /* 52.139.106.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6A80 /* 52.139.106.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6BC0 /* 52.139.107.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C69C0 /* 52.140.105.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6AA0 /* 52.140.106.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6AC0 /* 52.140.106.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6E60 /* 52.140.110.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6E68 /* 52.140.110.104/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6E70 /* 52.140.110.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6EA0 /* 52.140.110.160/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6F80 /* 52.140.111.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6FE0 /* 52.140.111.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E51EC /* 52.142.81.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E5357 /* 52.142.83.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E5442 /* 52.142.84.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E5533 /* 52.142.85.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F5BC0 /* 52.143.91.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34924F90 /* 52.146.79.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34924FE0 /* 52.146.79.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928320 /* 52.146.131.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928330 /* 52.146.131.48/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928360 /* 52.146.131.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928480 /* 52.146.132.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928500 /* 52.146.133.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928910 /* 52.146.137.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34932B91 /* 52.147.43.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34932C0C /* 52.147.44.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34936104 /* 52.147.97.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937000 /* 52.147.112.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937040 /* 52.147.112.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349370D0 /* 52.147.112.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937764 /* 52.147.119.100/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937768 /* 52.147.119.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937770 /* 52.147.119.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34951F40 /* 52.149.31.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968BC0 /* 52.150.139.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968CA0 /* 52.150.140.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968CC0 /* 52.150.140.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969AC8 /* 52.150.154.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969AD0 /* 52.150.154.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969C20 /* 52.150.156.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969C28 /* 52.150.156.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969D40 /* 52.150.157.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969D80 /* 52.150.157.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349727B1 /* 52.151.39.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3498CFA0 /* 52.152.207.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3498CFC0 /* 52.152.207.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34999C09 /* 52.153.156.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34999C0F /* 52.153.156.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349C5DF0 /* 52.156.93.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349C6740 /* 52.156.103.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349C6760 /* 52.156.103.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCD65 /* 52.156.205.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A11049 /* 52.161.16.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26EF8 /* 52.162.110.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26F18 /* 52.162.111.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A33892 /* 52.163.56.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87000 /* 52.168.112.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AB868C /* 52.171.134.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7000 /* 52.172.112.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7010 /* 52.172.112.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC70C0 /* 52.172.112.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7120 /* 52.172.113.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7410 /* 52.172.116.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACBB15 /* 52.172.187.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACFDC2 /* 52.172.253.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADF0F2 /* 52.173.240.242/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE92DD /* 52.174.146.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF12BA /* 52.175.18.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF23A6 /* 52.175.35.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B30E6D /* 52.179.14.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B37160 /* 52.179.113.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B37180 /* 52.179.113.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4A2C2 /* 52.180.162.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4A6AC /* 52.180.166.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B292 /* 52.180.178.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B377 /* 52.180.179.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B3A2 /* 52.180.179.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B579 /* 52.180.181.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B721CB /* 52.183.33.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BA2130 /* 52.186.33.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BA5BD8 /* 52.186.91.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB14B5 /* 52.187.20.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB2763 /* 52.187.39.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BE2138 /* 52.190.33.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BE213D /* 52.190.33.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BE219A /* 52.190.33.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BF599E /* 52.191.89.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFAD51 /* 52.191.173.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45380 /* 52.228.83.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E453E0 /* 52.228.83.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45400 /* 52.228.84.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E72084 /* 52.231.32.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E74CCD /* 52.231.76.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E74E65 /* 52.231.78.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E74F8E /* 52.231.79.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E794C8 /* 52.231.148.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79F23 /* 52.231.159.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED8904 /* 52.237.137.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F228D4 /* 52.242.40.212/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F228D8 /* 52.242.40.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F228E0 /* 52.242.40.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22DC0 /* 52.242.45.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22E00 /* 52.242.46.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F9D1FC /* 52.249.209.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDE3F8 /* 52.253.227.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FE4B4C /* 52.254.75.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF53D0 /* 52.255.83.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF54B0 /* 52.255.84.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF54C0 /* 52.255.84.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF7C10 /* 52.255.124.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF7C50 /* 52.255.124.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF7C60 /* 52.255.124.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134CD13 /* 65.52.205.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FCD0 /* 65.52.252.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD2800 /* 68.221.40.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD2818 /* 68.221.40.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5DA0 /* 68.221.93.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5DC0 /* 68.221.93.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255140 /* 102.37.81.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A090 /* 102.37.160.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A778 /* 102.37.167.120/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851C48 /* 102.133.28.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851C68 /* 102.133.28.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853890 /* 102.133.56.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668538E0 /* 102.133.56.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853DC0 /* 102.133.61.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854BAE /* 102.133.75.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857BF8 /* 102.133.123.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857C18 /* 102.133.124.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857C58 /* 102.133.124.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857C60 /* 102.133.124.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685828B /* 102.133.130.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66858F90 /* 102.133.143.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66858FBB /* 102.133.143.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859C80 /* 102.133.156.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685A1F2 /* 102.133.161.242/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685A26D /* 102.133.162.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685A2C4 /* 102.133.162.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685A3B9 /* 102.133.163.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685D950 /* 102.133.217.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685D960 /* 102.133.217.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DA00 /* 102.133.218.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DCC0 /* 102.133.220.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DD40 /* 102.133.221.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DD80 /* 102.133.221.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685ECC6 /* 102.133.236.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A6450 /* 104.42.100.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682AEF5D /* 104.42.239.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB0A4 /* 104.46.176.164/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB0B0 /* 104.46.176.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB204 /* 104.46.178.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB2C0 /* 104.46.178.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB300 /* 104.46.179.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB780 /* 104.46.183.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EEF89 /* 104.46.239.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3DEC1 /* 104.211.222.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D631A2 /* 104.214.49.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6E956 /* 104.214.233.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D709D9 /* 104.215.9.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974AB5B /* 137.116.171.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x897546C3 /* 137.117.70.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89872D20 /* 137.135.45.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8987403B /* 137.135.64.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176D90 /* 158.23.109.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176DA0 /* 158.23.109.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176DC0 /* 158.23.109.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177030 /* 158.23.112.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D9397 /* 168.61.147.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83DA5E5 /* 168.61.165.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F14B1 /* 168.63.20.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8271E /* 191.232.39.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8A2CC /* 191.232.162.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90A30 /* 191.233.10.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90A40 /* 191.233.10.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90A80 /* 191.233.10.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90F40 /* 191.233.15.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CD48 /* 191.233.205.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CD68 /* 191.233.205.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8A88 /* 191.234.138.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8A94 /* 191.234.138.148/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8BC0 /* 191.234.139.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8E20 /* 191.234.142.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE380 /* 191.235.227.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE3E0 /* 191.235.227.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE400 /* 191.235.228.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4850 /* 191.238.72.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4DEC /* 191.238.77.236/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4E20 /* 191.238.78.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4E30 /* 191.238.78.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86600 /* 4.232.102.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86F00 /* 4.232.111.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87BD0 /* 4.232.123.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C3D0 /* 4.232.195.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428F80 /* 13.66.143.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430AD0 /* 13.67.10.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4543C0 /* 13.69.67.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456B70 /* 13.69.107.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D457080 /* 13.69.112.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E660 /* 13.69.230.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464A90 /* 13.70.74.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AF50 /* 13.71.175.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C700 /* 13.71.199.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F420 /* 13.73.244.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FD60 /* 13.73.253.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6CE0 /* 13.74.108.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2770 /* 13.75.39.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D35A0 /* 13.77.53.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6DC0 /* 13.78.109.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DBD0 /* 13.86.219.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AEC0 /* 13.89.174.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68F840 /* 13.104.248.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68FCD0 /* 13.104.252.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68FCE0 /* 13.104.252.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68FD30 /* 13.104.253.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68FE80 /* 13.104.254.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113800 /* 20.17.56.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114740 /* 20.17.71.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B3D0 /* 20.18.179.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152E40 /* 20.21.46.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14153000 /* 20.21.48.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141537D0 /* 20.21.55.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141543D0 /* 20.21.67.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154BD0 /* 20.21.75.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141553C0 /* 20.21.83.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14155400 /* 20.21.84.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141800D8 /* 20.24.0.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142475D0 /* 20.36.117.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247C20 /* 20.36.124.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247C80 /* 20.36.124.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247D00 /* 20.36.125.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254490 /* 20.37.68.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254580 /* 20.37.69.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254600 /* 20.37.70.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259A00 /* 20.37.154.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259C00 /* 20.37.156.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C100 /* 20.37.193.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C180 /* 20.37.193.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C6E0 /* 20.37.198.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E410 /* 20.37.228.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E4C0 /* 20.37.228.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E500 /* 20.37.229.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142650C0 /* 20.38.80.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265200 /* 20.38.82.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268D10 /* 20.38.141.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268D80 /* 20.38.141.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268E00 /* 20.38.142.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142693E0 /* 20.38.147.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269800 /* 20.38.152.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270860 /* 20.39.8.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270880 /* 20.39.8.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270F00 /* 20.39.15.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428CEE0 /* 20.40.206.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14290200 /* 20.41.2.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14290400 /* 20.41.4.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294080 /* 20.41.64.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294100 /* 20.41.65.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294508 /* 20.41.69.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C080 /* 20.41.192.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C100 /* 20.41.193.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C570 /* 20.41.197.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C600 /* 20.41.198.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C680 /* 20.41.198.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A0200 /* 20.42.2.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A0400 /* 20.42.4.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4000 /* 20.42.64.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8140 /* 20.42.129.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8400 /* 20.42.132.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE100 /* 20.42.225.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE180 /* 20.42.225.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE688 /* 20.42.230.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2880 /* 20.43.40.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2900 /* 20.43.41.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2CD0 /* 20.43.44.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4080 /* 20.43.64.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4100 /* 20.43.65.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4678 /* 20.43.70.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7930 /* 20.43.121.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8080 /* 20.43.128.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8200 /* 20.43.130.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0A40 /* 20.44.10.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1150 /* 20.44.17.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1BF0 /* 20.44.27.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7BA0 /* 20.45.123.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DD010 /* 20.45.208.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C900 /* 20.48.201.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143153E0 /* 20.49.83.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315F20 /* 20.49.95.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316610 /* 20.49.102.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316F00 /* 20.49.111.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317218 /* 20.49.114.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317680 /* 20.49.118.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324438 /* 20.50.68.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344000 /* 20.52.64.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345D80 /* 20.52.93.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14350030 /* 20.53.0.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352D00 /* 20.53.45.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352E00 /* 20.53.46.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4700 /* 20.58.71.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B54A8 /* 20.59.84.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144182C0 /* 20.65.130.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418300 /* 20.65.131.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450918 /* 20.69.9.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481600 /* 20.72.22.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481C30 /* 20.72.28.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC510 /* 20.74.197.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144F6C70 /* 20.79.108.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575370 /* 20.87.83.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A26F8 /* 20.90.38.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8180 /* 20.90.129.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8200 /* 20.90.130.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B9280 /* 20.91.146.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B9300 /* 20.91.147.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C06C8 /* 20.92.6.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1461278D /* 20.97.39.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14629600 /* 20.98.150.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C3AC /* 20.98.195.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C6E0 /* 20.98.198.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14630C00 /* 20.99.12.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146400C0 /* 20.100.0.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640518 /* 20.100.5.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D71C /* 20.105.215.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469F430 /* 20.105.244.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F0430 /* 20.111.4.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14742F48 /* 20.116.47.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1475C1B8 /* 20.117.193.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14764FC0 /* 20.118.79.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14768BC8 /* 20.118.139.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14771C39 /* 20.119.28.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D04AA /* 20.125.4.170/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D05F8 /* 20.125.5.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D9C10 /* 20.125.156.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DA3D0 /* 20.125.163.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DABD0 /* 20.125.171.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCBD0 /* 20.125.203.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A200 /* 20.150.162.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AD10 /* 20.150.173.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B570 /* 20.150.181.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BE40 /* 20.150.190.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A3D0 /* 20.168.163.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6880 /* 20.189.104.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6A00 /* 20.189.106.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6DE8 /* 20.189.109.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC0C0 /* 20.189.192.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC728 /* 20.189.199.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA400 /* 20.191.164.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA500 /* 20.191.165.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02A00 /* 20.192.42.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02B00 /* 20.192.43.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06650 /* 20.192.102.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09800 /* 20.192.152.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A200 /* 20.192.162.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0B860 /* 20.192.184.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E200 /* 20.192.226.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EE60 /* 20.192.238.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CD90 /* 20.193.205.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C243C0 /* 20.194.67.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24E00 /* 20.194.78.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34000 /* 20.195.64.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8A130 /* 20.200.161.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C300 /* 20.200.195.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C7C0 /* 20.200.199.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC170 /* 20.204.193.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD3278 /* 20.205.50.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4000 /* 20.205.64.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4380 /* 20.205.67.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4DA0 /* 20.205.77.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4DE0 /* 20.205.77.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD53F0 /* 20.205.83.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CEB390 /* 20.206.179.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00200 /* 20.208.2.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D013D0 /* 20.208.19.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D09010 /* 20.208.144.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D24658 /* 20.210.70.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D29600 /* 20.210.150.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5C290 /* 20.213.194.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70800 /* 20.215.8.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D713D0 /* 20.215.19.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71BD0 /* 20.215.27.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79E40 /* 20.215.158.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93000 /* 20.217.48.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93E40 /* 20.217.62.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94BD0 /* 20.217.75.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95BD0 /* 20.217.91.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DD8848 /* 20.221.136.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DF403C /* 20.223.64.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DF4190 /* 20.223.65.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E85968 /* 20.232.89.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625370 /* 23.98.83.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626A80 /* 23.98.106.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626D40 /* 23.98.109.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626D80 /* 23.98.109.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400BB0 /* 40.64.11.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284084E8 /* 40.64.132.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456CA0 /* 40.69.108.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456F30 /* 40.69.111.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284694A0 /* 40.70.148.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470E20 /* 40.71.14.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A18C0 /* 40.74.24.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1A00 /* 40.74.26.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9540 /* 40.74.149.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2390 /* 40.75.35.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC480 /* 40.78.196.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE560 /* 40.78.229.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EECB0 /* 40.78.236.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF510 /* 40.78.245.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFBC0 /* 40.78.251.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8470 /* 40.79.132.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8B50 /* 40.79.139.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F92F0 /* 40.79.146.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA350 /* 40.79.163.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FABA0 /* 40.79.171.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBBD0 /* 40.79.187.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC3E0 /* 40.79.195.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285033A0 /* 40.80.51.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503880 /* 40.80.56.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503900 /* 40.80.57.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503E18 /* 40.80.62.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285060C8 /* 40.80.96.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A880 /* 40.80.168.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A900 /* 40.80.169.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850AC70 /* 40.80.172.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B060 /* 40.80.176.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B900 /* 40.80.185.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BA00 /* 40.80.186.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852F940 /* 40.82.249.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852FA00 /* 40.82.250.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591080 /* 40.89.16.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591100 /* 40.89.17.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285914E0 /* 40.89.20.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871B0E8 /* 40.113.176.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287518A0 /* 40.117.24.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770900 /* 40.119.9.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770980 /* 40.119.9.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28780838 /* 40.120.8.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287809C0 /* 40.120.9.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784070 /* 40.120.64.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784B70 /* 40.120.75.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28785640 /* 40.120.86.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A0010 /* 40.122.0.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1200 /* 51.12.18.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1A00 /* 51.12.26.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C4BE8 /* 51.12.75.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C65B0 /* 51.12.101.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCE10 /* 51.12.206.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE540 /* 51.12.229.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CED40 /* 51.12.237.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8000 /* 51.13.128.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356000 /* 51.53.96.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356E40 /* 51.53.110.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B000 /* 51.53.176.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BF40 /* 51.53.191.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CBD0 /* 51.103.203.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680920 /* 51.104.9.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681880 /* 51.104.24.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681900 /* 51.104.25.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681DD8 /* 51.104.29.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336943F0 /* 51.105.67.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694BF0 /* 51.105.75.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695CB0 /* 51.105.92.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695D40 /* 51.105.93.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695D80 /* 51.105.93.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3328 /* 51.107.51.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3400 /* 51.107.52.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3480 /* 51.107.52.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8000 /* 51.107.128.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9450 /* 51.107.148.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9500 /* 51.107.149.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9580 /* 51.107.149.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BC050 /* 51.107.192.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF6C0 /* 51.107.246.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749320 /* 51.116.147.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749340 /* 51.116.147.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749380 /* 51.116.147.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F570 /* 51.116.245.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F5B0 /* 51.116.245.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FD30 /* 51.116.253.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FD90 /* 51.116.253.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782CD0 /* 51.120.44.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782D40 /* 51.120.45.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782D80 /* 51.120.45.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337864E0 /* 51.120.100.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786D60 /* 51.120.109.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D520 /* 51.120.213.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E4E0 /* 51.120.228.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E540 /* 51.120.229.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E580 /* 51.120.229.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378EE00 /* 51.120.238.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A080 /* 51.137.160.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A100 /* 51.137.161.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A4C0 /* 51.137.164.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AA010 /* 51.138.160.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD780 /* 51.138.215.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD470 /* 51.140.212.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5C80 /* 52.138.92.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE520 /* 52.138.229.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6F40 /* 52.139.111.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6880 /* 52.140.104.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6900 /* 52.140.105.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6CD0 /* 52.140.108.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349688C0 /* 52.150.136.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968980 /* 52.150.137.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969A10 /* 52.150.154.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969B00 /* 52.150.155.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969DA0 /* 52.150.157.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969DC0 /* 52.150.157.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26F30 /* 52.162.111.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76BE0 /* 52.167.107.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC51F0 /* 52.172.81.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B0E810 /* 52.176.232.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68D10 /* 52.182.141.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45080 /* 52.228.80.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45100 /* 52.228.81.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45690 /* 52.228.86.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71440 /* 52.231.20.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E794A0 /* 52.231.148.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79720 /* 52.231.151.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBB70 /* 52.236.187.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22D38 /* 52.242.45.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69BE0 /* 52.246.155.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FAE400 /* 52.250.228.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5270 /* 68.220.82.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5E00 /* 68.221.94.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6700 /* 68.221.103.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD93D0 /* 68.221.147.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254060 /* 102.37.64.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662548E0 /* 102.37.72.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A680 /* 102.37.166.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853C30 /* 102.133.60.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853CC0 /* 102.133.60.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853D00 /* 102.133.61.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857C68 /* 102.133.124.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857FA0 /* 102.133.127.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859C88 /* 102.133.156.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685D880 /* 102.133.216.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685D900 /* 102.133.217.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DAF8 /* 102.133.218.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FBB8 /* 102.133.251.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FD30 /* 102.133.253.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB340 /* 104.46.179.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB600 /* 104.46.182.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170F00 /* 158.23.15.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176E00 /* 158.23.110.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177BD0 /* 158.23.123.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C3D0 /* 158.23.195.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90C00 /* 191.233.12.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE936E0 /* 191.233.54.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CDA0 /* 191.233.205.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8920 /* 191.234.137.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8E40 /* 191.234.142.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8F00 /* 191.234.143.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9500 /* 191.234.149.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9D00 /* 191.234.157.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE080 /* 191.235.224.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE100 /* 191.235.225.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428A80 /* 13.66.138.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E280 /* 13.69.226.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AB00 /* 13.71.171.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6A80 /* 13.74.106.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2300 /* 13.75.35.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3300 /* 13.77.51.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6B00 /* 13.78.107.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF200 /* 40.78.242.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8AC0 /* 40.79.138.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287840E0 /* 40.120.64.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8140 /* 51.107.129.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9300 /* 51.140.147.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FC80 /* 65.52.252.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FB60 /* 102.133.251.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35000 /* 104.211.80.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CA00 /* 191.233.202.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285C0100 /* 40.92.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285C0600 /* 40.92.6.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0100 /* 40.93.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0200 /* 40.93.2.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0500 /* 40.93.5.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0600 /* 40.93.6.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0800 /* 40.93.8.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D1000 /* 40.93.16.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D4000 /* 40.93.64.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D4400 /* 40.93.68.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D8000 /* 40.93.128.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285DC000 /* 40.93.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285DD000 /* 40.93.208.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285DD400 /* 40.93.212.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285DD600 /* 40.93.214.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285F0100 /* 40.95.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285F0600 /* 40.95.6.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x286B4700 /* 40.107.71.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x286B4E00 /* 40.107.78.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34640000 /* 52.100.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34650000 /* 52.101.0.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34651800 /* 52.101.24.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34652000 /* 52.101.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34654000 /* 52.101.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34656000 /* 52.101.96.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34656400 /* 52.101.100.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34656600 /* 52.101.102.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34658000 /* 52.101.128.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34658800 /* 52.101.136.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668000 /* 52.102.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3466A000 /* 52.102.160.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3466A400 /* 52.102.164.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3466A600 /* 52.102.166.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3466C000 /* 52.102.192.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670200 /* 52.103.2.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670400 /* 52.103.4.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670800 /* 52.103.8.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34671000 /* 52.103.16.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34672000 /* 52.103.32.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34672400 /* 52.103.36.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34672600 /* 52.103.38.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34674000 /* 52.103.64.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678000 /* 52.103.128.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678400 /* 52.103.132.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678600 /* 52.103.134.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678800 /* 52.103.136.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3467A000 /* 52.103.160.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3467A400 /* 52.103.164.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3467A600 /* 52.103.166.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3467C000 /* 52.103.192.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682F0000 /* 104.47.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81840 /* 4.232.24.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428C90 /* 13.66.140.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430980 /* 13.67.9.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4540E0 /* 13.69.64.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E3E0 /* 13.69.227.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4648D0 /* 13.70.72.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AAF0 /* 13.71.170.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C2E8 /* 13.71.194.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2408 /* 13.75.36.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3258 /* 13.77.50.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6C10 /* 13.78.108.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573868 /* 13.87.56.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577A68 /* 13.87.122.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AB60 /* 13.89.171.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113040 /* 20.17.48.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152040 /* 20.21.32.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246A48 /* 20.36.106.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247218 /* 20.36.114.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247848 /* 20.36.120.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14253542 /* 20.37.53.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425354C /* 20.37.53.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254048 /* 20.37.64.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254A58 /* 20.37.74.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259848 /* 20.37.152.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C048 /* 20.37.192.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E048 /* 20.37.224.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265048 /* 20.38.80.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268848 /* 20.38.136.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270138 /* 20.39.1.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427013A /* 20.39.1.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270848 /* 20.39.8.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14271A8C /* 20.39.26.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14271AF6 /* 20.39.26.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428AD93 /* 20.40.173.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14290048 /* 20.41.0.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294048 /* 20.41.64.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C048 /* 20.41.192.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A0048 /* 20.42.0.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8048 /* 20.42.128.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE048 /* 20.42.224.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2848 /* 20.43.40.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4048 /* 20.43.64.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8048 /* 20.43.128.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0310 /* 20.44.3.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5F80 /* 20.45.95.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7048 /* 20.45.112.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC048 /* 20.45.192.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0D80 /* 20.46.13.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FE9E0 /* 20.47.233.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330640 /* 20.51.6.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345F60 /* 20.52.95.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353600 /* 20.53.54.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353DC0 /* 20.53.61.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14366A56 /* 20.54.106.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14367985 /* 20.54.121.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B5020 /* 20.59.80.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144505E0 /* 20.69.5.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DE80 /* 20.70.222.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14474D75 /* 20.71.77.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14474DA0 /* 20.71.77.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481040 /* 20.72.16.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144A0073 /* 20.74.0.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144A007F /* 20.74.0.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC380 /* 20.74.195.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453DEE0 /* 20.83.222.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575200 /* 20.87.82.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589F00 /* 20.88.159.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A2440 /* 20.90.36.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A84E0 /* 20.90.132.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C04E0 /* 20.92.4.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14612380 /* 20.97.35.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C260 /* 20.98.194.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14630800 /* 20.99.8.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D280 /* 20.105.210.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146BEF60 /* 20.107.239.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F02E0 /* 20.111.2.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14742A80 /* 20.116.42.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1476C3A0 /* 20.118.195.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A040 /* 20.150.160.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A100 /* 20.150.161.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AB40 /* 20.150.171.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6848 /* 20.189.104.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDB4E1 /* 20.189.180.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDB508 /* 20.189.181.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC2C0 /* 20.189.194.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02F00 /* 20.192.47.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C054E0 /* 20.192.84.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C099E0 /* 20.192.153.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A040 /* 20.192.160.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E0C0 /* 20.192.224.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C18E8D /* 20.193.142.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C18EB2 /* 20.193.142.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24B80 /* 20.194.75.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C32541 /* 20.195.37.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C32616 /* 20.195.38.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34E00 /* 20.195.78.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35660 /* 20.195.86.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7C880 /* 20.199.200.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8A020 /* 20.200.160.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D244A0 /* 20.210.68.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D291C0 /* 20.210.145.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70040 /* 20.215.0.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92840 /* 20.217.40.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764D920 /* 23.100.217.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764E748 /* 23.100.231.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764E760 /* 23.100.231.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433048 /* 40.67.48.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433B40 /* 40.67.59.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456A58 /* 40.69.106.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284692E0 /* 40.70.146.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470B60 /* 40.71.11.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1848 /* 40.74.24.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A64A8 /* 40.74.100.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC258 /* 40.78.194.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECA70 /* 40.78.202.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F82E0 /* 40.79.130.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB258 /* 40.79.178.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503848 /* 40.80.56.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A848 /* 40.80.168.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B848 /* 40.80.184.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28515EAC /* 40.81.94.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28515EB6 /* 40.81.94.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851B453 /* 40.81.180.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851B652 /* 40.81.182.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851BD18 /* 40.81.189.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851BD2A /* 40.81.189.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852EC02 /* 40.82.236.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852EC0D /* 40.82.236.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852F8F0 /* 40.82.248.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2858DEB3 /* 40.88.222.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2858DF35 /* 40.88.223.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591048 /* 40.89.16.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859D964 /* 40.89.217.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859D96D /* 40.89.217.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285ABA15 /* 40.90.186.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285ABA5B /* 40.90.186.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B5924 /* 40.91.89.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B5B33 /* 40.91.91.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F2A8 /* 40.112.242.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770840 /* 40.119.8.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C8B6B /* 40.124.139.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C8BAE /* 40.124.139.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C28C0 /* 51.12.40.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC0C0 /* 51.12.192.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351840 /* 51.53.24.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335A840 /* 51.53.168.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681848 /* 51.104.24.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695048 /* 51.105.80.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695848 /* 51.105.88.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3048 /* 51.107.48.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3B20 /* 51.107.59.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9048 /* 51.107.144.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9B20 /* 51.107.155.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF700 /* 51.107.247.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743048 /* 51.116.48.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743B20 /* 51.116.59.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744D60 /* 51.116.77.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749048 /* 51.116.144.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749B60 /* 51.116.155.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782848 /* 51.120.40.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337862A8 /* 51.120.98.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378B020 /* 51.120.176.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DB40 /* 51.120.219.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E048 /* 51.120.224.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378EB80 /* 51.120.235.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A048 /* 51.137.160.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9410 /* 51.140.148.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD2C8 /* 51.140.210.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC048 /* 51.143.192.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883048 /* 52.136.48.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BF60 /* 52.136.191.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5A28 /* 52.138.90.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B5781 /* 52.139.87.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B5796 /* 52.139.87.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6848 /* 52.140.104.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E9872 /* 52.142.152.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E9A64 /* 52.142.154.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FFA89 /* 52.143.250.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FFB16 /* 52.143.251.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34932C21 /* 52.147.44.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34941E06 /* 52.148.30.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34951864 /* 52.149.24.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34951A0E /* 52.149.26.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968848 /* 52.150.136.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F1371 /* 52.159.19.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F1443 /* 52.159.20.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F157C /* 52.159.21.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26AA8 /* 52.162.106.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B6D2 /* 52.180.182.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8FF17 /* 52.184.255.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45048 /* 52.228.80.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E712E0 /* 52.231.18.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E792C8 /* 52.231.146.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22C00 /* 52.242.44.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FB0CA1 /* 52.251.12.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD9D02 /* 52.253.157.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD9FD1 /* 52.253.159.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDE8EB /* 52.253.232.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDEFA2 /* 52.253.239.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FA18 /* 65.52.250.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5040 /* 68.221.80.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662556E0 /* 102.37.86.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851B10 /* 102.133.27.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853848 /* 102.133.56.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859B10 /* 102.133.155.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685D848 /* 102.133.216.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D351D0 /* 104.211.81.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39258 /* 104.211.146.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D61340 /* 104.214.19.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176040 /* 158.23.96.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90840 /* 191.233.8.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CBD0 /* 191.233.203.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9F54B /* 191.233.245.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9F576 /* 191.233.245.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE048 /* 191.235.224.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4E60 /* 191.238.78.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E8EA3 /* 13.78.142.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EC11B /* 13.78.193.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DE1BE /* 20.45.225.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DE264 /* 20.45.226.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DE300 /* 20.45.227.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F9328 /* 20.47.147.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F95FA /* 20.47.149.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FD331 /* 20.47.211.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14319F4B /* 20.49.159.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14319F60 /* 20.49.159.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14319F87 /* 20.49.159.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14458390 /* 20.69.131.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144583C2 /* 20.69.131.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1448FB9F /* 20.72.251.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144B3FD3 /* 20.75.63.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144B3FDB /* 20.75.63.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144B3FE0 /* 20.75.63.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1458A7A9 /* 20.88.167.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1458F09B /* 20.88.240.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1458F1D5 /* 20.88.241.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1458F243 /* 20.88.242.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C880B /* 20.92.136.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C8A02 /* 20.92.138.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C8A3C /* 20.92.138.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469700D /* 20.105.112.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14697026 /* 20.105.112.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469703C /* 20.105.112.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A74F1 /* 20.106.116.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A74FA /* 20.106.116.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A7515 /* 20.106.117.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14782B31 /* 20.120.43.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14782B3A /* 20.120.43.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBB824 /* 20.187.184.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBBEF8 /* 20.187.190.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBBF03 /* 20.187.191.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17627918 /* 23.98.121.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841A8C8 /* 40.65.168.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841A907 /* 40.65.169.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872B133 /* 40.114.177.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872B246 /* 40.114.178.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C802C /* 51.12.128.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C814C /* 51.12.129.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C8217 /* 51.12.130.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33890D76 /* 51.137.13.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A1597F /* 52.161.89.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81ED0 /* 4.232.30.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D40FE62 /* 13.64.254.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428D90 /* 13.66.141.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430998 /* 13.67.9.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454108 /* 13.69.65.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E548 /* 13.69.229.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464960 /* 13.70.73.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47ACF0 /* 13.71.172.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C430 /* 13.71.196.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F008 /* 13.73.240.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FEC0 /* 13.73.254.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A9984 /* 13.74.153.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2670 /* 13.75.38.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B98C3 /* 13.75.152.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4C88F9 /* 13.76.136.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4CF5A0 /* 13.76.245.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D0238 /* 13.77.2.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D025E /* 13.77.2.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3408 /* 13.77.52.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E593C /* 13.78.89.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E7D5A /* 13.78.125.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D52E1E9 /* 13.82.225.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DAF0 /* 13.86.218.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573A20 /* 13.87.58.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577C20 /* 13.87.124.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AB78 /* 13.89.171.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141136B8 /* 20.17.54.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152538 /* 20.21.37.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14242421 /* 20.36.36.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142424C4 /* 20.36.36.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247B58 /* 20.36.123.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254428 /* 20.37.68.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254C60 /* 20.37.76.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E400 /* 20.37.228.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268B58 /* 20.38.139.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270F30 /* 20.39.15.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428CF90 /* 20.40.207.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294520 /* 20.41.69.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C578 /* 20.41.197.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2DE0 /* 20.43.45.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7808 /* 20.43.120.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0440 /* 20.44.4.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1008 /* 20.44.16.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1AF0 /* 20.44.26.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7380 /* 20.45.115.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC650 /* 20.45.198.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C018 /* 20.48.192.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316630 /* 20.49.102.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317238 /* 20.49.114.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317E80 /* 20.49.126.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352878 /* 20.53.40.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D60A0 /* 20.61.96.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481428 /* 20.72.20.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A7B0 /* 20.150.167.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496ACE8 /* 20.150.172.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC2740 /* 20.188.39.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6FC0 /* 20.189.111.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA000 /* 20.191.160.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C030D8 /* 20.192.48.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EBF8 /* 20.192.235.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C210 /* 20.193.194.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CBC8 /* 20.193.203.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70688 /* 20.215.6.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92E88 /* 20.217.46.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626BC0 /* 23.98.107.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176305EF /* 23.99.5.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765C413 /* 23.101.196.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766EB7A /* 23.102.235.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284086A0 /* 40.64.134.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284332F8 /* 40.67.50.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433C40 /* 40.67.60.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456B08 /* 40.69.107.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470DA0 /* 40.71.13.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847AF63 /* 40.71.175.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A65C0 /* 40.74.101.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A7D45 /* 40.74.125.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9258 /* 40.74.146.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC308 /* 40.78.195.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECA88 /* 40.78.202.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F82F8 /* 40.79.130.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB410 /* 40.79.180.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBB00 /* 40.79.187.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503F90 /* 40.80.63.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850AC78 /* 40.80.172.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591658 /* 40.89.22.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285941DC /* 40.89.65.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28594486 /* 40.89.68.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28599D87 /* 40.89.157.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1130 /* 51.12.17.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1930 /* 51.12.25.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351EA8 /* 51.53.30.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335AE98 /* 51.53.174.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680860 /* 51.104.8.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681F38 /* 51.104.31.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695C38 /* 51.105.92.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B34D0 /* 51.107.52.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3C30 /* 51.107.60.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9418 /* 51.107.148.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9C38 /* 51.107.156.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337431A8 /* 51.116.49.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743C30 /* 51.116.60.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337491A8 /* 51.116.145.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749C30 /* 51.116.156.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782B58 /* 51.120.43.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786430 /* 51.120.100.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DC30 /* 51.120.220.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E428 /* 51.120.228.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A620 /* 51.137.166.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C2F27 /* 51.140.47.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C3410 /* 51.140.52.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD318 /* 51.140.211.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D0714 /* 51.141.7.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D0D6E /* 51.141.13.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883428 /* 52.136.52.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6CF8 /* 52.140.108.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34924F88 /* 52.146.79.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349282B8 /* 52.146.130.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969AC0 /* 52.150.154.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A10AA7 /* 52.161.10.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A1170F /* 52.161.23.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26EA0 /* 52.162.110.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A4D260 /* 52.164.210.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A6F35A /* 52.166.243.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC9831 /* 52.172.152.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC99D1 /* 52.172.153.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE24F4 /* 52.174.36.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF2686 /* 52.175.38.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AFD3D2 /* 52.175.211.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AFDEDE /* 52.175.222.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B731 /* 52.180.183.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B73A /* 52.180.183.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E42542 /* 52.228.37.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E42DDE /* 52.228.45.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E57BAC /* 52.229.123.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E57F60 /* 52.229.127.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E724D1 /* 52.231.36.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7278E /* 52.231.39.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79318 /* 52.231.147.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7CB10 /* 52.231.203.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7CDD6 /* 52.231.205.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FC60 /* 65.52.252.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5768 /* 68.221.87.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851C50 /* 102.133.28.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853C20 /* 102.133.60.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857C00 /* 102.133.124.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DBB0 /* 102.133.219.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB0A8 /* 104.46.176.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D25473 /* 104.210.84.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3D8D2 /* 104.211.216.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3DF43 /* 104.211.223.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B1D96 /* 138.91.29.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B8DA2 /* 138.91.141.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37D563 /* 157.55.213.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D380826 /* 157.56.8.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176768 /* 158.23.103.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D3083 /* 168.61.48.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D3163 /* 168.61.49.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90AB8 /* 191.233.10.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93398 /* 191.233.51.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CCF0 /* 191.233.204.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8A80 /* 191.234.138.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB5468 /* 191.235.84.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB5771 /* 191.235.87.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86F10 /* 4.232.111.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86F20 /* 4.232.111.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D40E7C4 /* 13.64.231.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4127F7 /* 13.65.39.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D415211 /* 13.65.82.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4152BE /* 13.65.82.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D415638 /* 13.65.86.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D416227 /* 13.65.98.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4234E8 /* 13.66.52.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428044 /* 13.66.128.68/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42C9A9 /* 13.66.201.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42D2A7 /* 13.66.210.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E0A9 /* 13.66.224.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42F6DB /* 13.66.246.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430DE0 /* 13.67.13.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D435B87 /* 13.67.91.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D436B80 /* 13.67.107.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D436E6D /* 13.67.110.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D43EC4C /* 13.67.236.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D43EC7D /* 13.67.236.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4547A0 /* 13.69.71.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456D90 /* 13.69.109.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E7A0 /* 13.69.231.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E910 /* 13.69.233.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464EC0 /* 13.70.78.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D469FCD /* 13.70.159.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47928C /* 13.71.146.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D479E03 /* 13.71.158.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D479E78 /* 13.71.158.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47B896 /* 13.71.184.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47BA01 /* 13.71.186.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C780 /* 13.71.199.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C7A0 /* 13.71.199.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4904CF /* 13.73.4.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4972CF /* 13.73.114.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D497399 /* 13.73.115.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F490 /* 13.73.244.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F4A0 /* 13.73.244.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B599F /* 13.75.89.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B5EAD /* 13.75.94.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B9504 /* 13.75.149.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B9942 /* 13.75.153.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4C04C2 /* 13.76.4.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4C0560 /* 13.76.5.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4C859B /* 13.76.133.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D038B /* 13.77.3.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D35E0 /* 13.77.53.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3780 /* 13.77.55.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D38A7 /* 13.77.56.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3A88 /* 13.77.58.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D959F /* 13.77.149.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D9815 /* 13.77.152.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4DDB80 /* 13.77.219.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4DDC86 /* 13.77.220.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E12A8 /* 13.78.18.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E14E8 /* 13.78.20.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E159B /* 13.78.21.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E23E5 /* 13.78.35.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E2ADF /* 13.78.42.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E2BA4 /* 13.78.43.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E3E82 /* 13.78.62.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E54BB /* 13.78.84.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6FA0 /* 13.78.111.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E8114 /* 13.78.129.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E89B3 /* 13.78.137.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E89F7 /* 13.78.137.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E8D4B /* 13.78.141.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E948C /* 13.78.148.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E97A1 /* 13.78.151.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EC8E9 /* 13.78.200.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4ED4A3 /* 13.78.212.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4FAD31 /* 13.79.173.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54292E /* 13.84.41.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D542B2D /* 13.84.43.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D549FA8 /* 13.84.159.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D554F9B /* 13.85.79.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56627E /* 13.86.98.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DDF0 /* 13.86.221.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DF00 /* 13.86.223.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573A90 /* 13.87.58.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573AA0 /* 13.87.58.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577C90 /* 13.87.124.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577CA0 /* 13.87.124.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57CCB6 /* 13.87.204.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57CCD2 /* 13.87.204.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57CF27 /* 13.87.207.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57CF4F /* 13.87.207.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58A89E /* 13.88.168.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58F9D1 /* 13.88.249.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59B230 /* 13.89.178.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B51DD /* 13.91.81.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5BFCB8 /* 13.91.252.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5C626F /* 13.92.98.111/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F9341 /* 13.95.147.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F9B35 /* 13.95.155.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114750 /* 20.17.71.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114760 /* 20.17.71.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152E50 /* 20.21.46.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152E60 /* 20.21.46.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14155060 /* 20.21.80.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246CC0 /* 20.36.108.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246CE0 /* 20.36.108.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247560 /* 20.36.117.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247580 /* 20.36.117.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254CD0 /* 20.37.76.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254CE0 /* 20.37.76.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142680B0 /* 20.38.128.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142680C0 /* 20.38.128.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269590 /* 20.38.149.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142695A0 /* 20.38.149.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14282013 /* 20.40.32.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14282031 /* 20.40.32.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428203B /* 20.40.32.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428203C /* 20.40.32.60/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14282050 /* 20.40.32.80/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14282055 /* 20.40.32.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14282057 /* 20.40.32.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14282071 /* 20.40.32.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14282074 /* 20.40.32.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142820A2 /* 20.40.32.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14288A70 /* 20.40.138.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14288BD1 /* 20.40.139.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14288C95 /* 20.40.140.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4030 /* 20.42.64.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A48A0 /* 20.42.72.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B79C0 /* 20.43.121.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B79E0 /* 20.43.121.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C04B0 /* 20.44.4.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C04C0 /* 20.44.4.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C11E0 /* 20.44.17.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D401D /* 20.45.64.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4057 /* 20.45.64.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4386 /* 20.45.67.134/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D43AA /* 20.45.67.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D47D5 /* 20.45.71.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4836 /* 20.45.72.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4848 /* 20.45.72.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4BC1 /* 20.45.75.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4BC8 /* 20.45.75.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4BEC /* 20.45.75.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4FEF /* 20.45.79.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF598 /* 20.45.245.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF5A0 /* 20.45.245.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF5B0 /* 20.45.245.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E2ADC /* 20.46.42.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E2EAD /* 20.46.46.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142EBBAE /* 20.46.187.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FEC60 /* 20.47.236.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143084DE /* 20.48.132.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14308585 /* 20.48.133.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143085B6 /* 20.48.133.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143306B0 /* 20.51.6.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143306C0 /* 20.51.6.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345FB8 /* 20.52.95.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345FC0 /* 20.52.95.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345FD0 /* 20.52.95.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143548AA /* 20.53.72.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14355DBC /* 20.53.93.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14355E67 /* 20.53.94.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14356AB6 /* 20.53.106.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14356BD0 /* 20.53.107.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14356BD7 /* 20.53.107.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B50E0 /* 20.59.80.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B6780 /* 20.59.103.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450808 /* 20.69.8.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450810 /* 20.69.8.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450820 /* 20.69.8.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446720A /* 20.70.114.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14467240 /* 20.70.114.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446727D /* 20.70.114.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DF10 /* 20.70.223.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DF20 /* 20.70.223.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481EA0 /* 20.72.30.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481EC0 /* 20.72.30.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1448F3E1 /* 20.72.243.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1448F43A /* 20.72.244.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1448F46C /* 20.72.244.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC410 /* 20.74.196.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC420 /* 20.74.196.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AFAF7 /* 20.74.250.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AFB1E /* 20.74.251.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AFF1C /* 20.74.255.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AFF25 /* 20.74.255.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AFF93 /* 20.74.255.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144CA19C /* 20.76.161.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144CAA91 /* 20.76.170.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144CAB22 /* 20.76.171.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144CAE48 /* 20.76.174.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14525710 /* 20.82.87.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145257C0 /* 20.82.87.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145257E5 /* 20.82.87.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14541D12 /* 20.84.29.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14541D1D /* 20.84.29.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14541D96 /* 20.84.29.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575078 /* 20.87.80.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575280 /* 20.87.82.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575290 /* 20.87.82.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1457582F /* 20.87.88.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575B7A /* 20.87.91.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575BA9 /* 20.87.91.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575BAB /* 20.87.91.171/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575C28 /* 20.87.92.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575C40 /* 20.87.92.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589F90 /* 20.88.159.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589FA0 /* 20.88.159.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1458D158 /* 20.88.209.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1458D161 /* 20.88.209.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1458D171 /* 20.88.209.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A25E0 /* 20.90.37.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145ACCBC /* 20.90.204.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145ACCE4 /* 20.90.204.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145ACCE8 /* 20.90.204.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C0520 /* 20.92.5.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145DEB6B /* 20.93.235.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145DEC1A /* 20.93.236.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145DEC51 /* 20.93.236.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145E95C7 /* 20.94.149.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145E96DC /* 20.94.150.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145E9729 /* 20.94.151.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14603A1C /* 20.96.58.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14603A8B /* 20.96.58.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14603A8C /* 20.96.58.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14605930 /* 20.96.89.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14605936 /* 20.96.89.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14605962 /* 20.96.89.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146059EA /* 20.96.89.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146059FE /* 20.96.89.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14605A1C /* 20.96.90.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14612730 /* 20.97.39.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14612740 /* 20.97.39.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C300 /* 20.98.195.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C320 /* 20.98.195.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1463BD46 /* 20.99.189.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1463BD9E /* 20.99.189.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1463BE13 /* 20.99.190.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640468 /* 20.100.4.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640470 /* 20.100.4.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640480 /* 20.100.4.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14641A34 /* 20.100.26.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14641A94 /* 20.100.26.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14641B11 /* 20.100.27.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1464240A /* 20.100.36.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14642431 /* 20.100.36.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14642466 /* 20.100.36.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1465AE17 /* 20.101.174.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1465AE31 /* 20.101.174.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1465AE34 /* 20.101.174.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1467102F /* 20.103.16.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146711DF /* 20.103.17.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146711F7 /* 20.103.17.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14671254 /* 20.103.18.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14671551 /* 20.103.21.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14671571 /* 20.103.21.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1467391D /* 20.103.57.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146739D2 /* 20.103.57.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14673A74 /* 20.103.58.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14675429 /* 20.103.84.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1467543D /* 20.103.84.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14675B27 /* 20.103.91.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14675EFA /* 20.103.94.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14675EFF /* 20.103.94.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146809DD /* 20.104.9.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14680DF9 /* 20.104.13.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14680E09 /* 20.104.14.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469F398 /* 20.105.243.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469F3A0 /* 20.105.243.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A55E4 /* 20.106.85.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A74AC /* 20.106.116.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A74BA /* 20.106.116.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A74CF /* 20.106.116.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A74E1 /* 20.106.116.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146BEFE0 /* 20.107.239.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146C667B /* 20.108.102.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146C668E /* 20.108.102.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146C66B4 /* 20.108.102.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146DCA1D /* 20.109.202.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146DCA24 /* 20.109.202.36/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F0378 /* 20.111.3.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F0380 /* 20.111.3.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F0390 /* 20.111.3.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14710840 /* 20.113.8.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14710AA8 /* 20.113.10.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14710B08 /* 20.113.11.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14710B55 /* 20.113.11.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14710B88 /* 20.113.11.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14710C45 /* 20.113.12.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14742B18 /* 20.116.43.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14742B20 /* 20.116.43.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14742B30 /* 20.116.43.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1475C0A8 /* 20.117.192.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1475C0B0 /* 20.117.192.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1475C0C0 /* 20.117.192.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14768B88 /* 20.118.139.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14768B90 /* 20.118.139.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14768BA0 /* 20.118.139.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1476C3E0 /* 20.118.195.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D0150 /* 20.125.1.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D0160 /* 20.125.1.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14969FA3 /* 20.150.159.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496ACF0 /* 20.150.172.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496ADC0 /* 20.150.173.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B520 /* 20.150.181.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBBC88 /* 20.187.188.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBBD2F /* 20.187.189.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBBDF6 /* 20.187.189.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBFADD /* 20.187.250.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBFE6E /* 20.187.254.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBFE81 /* 20.187.254.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC21A9 /* 20.188.33.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC2769 /* 20.188.39.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC2B8 /* 20.189.194.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC640 /* 20.189.198.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC650 /* 20.189.198.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFACFF /* 20.191.172.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFAE34 /* 20.191.174.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C054D8 /* 20.192.84.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C099D8 /* 20.192.153.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09DE0 /* 20.192.157.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09DF0 /* 20.192.157.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0B800 /* 20.192.184.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EE80 /* 20.192.238.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EEA0 /* 20.192.238.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CE30 /* 20.193.206.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CE80 /* 20.193.206.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C2CDBD /* 20.194.205.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C2CE62 /* 20.194.206.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C2CF32 /* 20.194.207.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C3311D /* 20.195.49.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C331F0 /* 20.195.49.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C331F6 /* 20.195.49.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C6807C /* 20.198.128.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C68298 /* 20.198.130.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C6829B /* 20.198.130.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7C900 /* 20.199.201.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8A0A0 /* 20.200.160.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C6A8 /* 20.200.198.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C6B0 /* 20.200.198.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C6C0 /* 20.200.198.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8CA4B /* 20.200.202.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8CEAA /* 20.200.206.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8CF1D /* 20.200.207.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8E78B /* 20.200.231.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8E7DE /* 20.200.231.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8E7E5 /* 20.200.231.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C918D4 /* 20.201.24.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C91948 /* 20.201.25.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C94087 /* 20.201.64.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C9422C /* 20.201.66.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C94293 /* 20.201.66.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5800 /* 20.203.88.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CBE025 /* 20.203.224.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CBE1F2 /* 20.203.225.242/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CBE3E2 /* 20.203.227.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CBE57F /* 20.203.229.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CBE63A /* 20.203.230.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CBE6AA /* 20.203.230.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC090 /* 20.204.192.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC0A0 /* 20.204.192.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCCA48 /* 20.204.202.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCCB6E /* 20.204.203.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCCC4A /* 20.204.204.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCD408 /* 20.204.212.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCD43C /* 20.204.212.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCD44D /* 20.204.212.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD3100 /* 20.205.49.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE00D0 /* 20.206.0.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE00E0 /* 20.206.0.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CEB200 /* 20.206.178.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CEB210 /* 20.206.178.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CFA860 /* 20.207.168.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CFA870 /* 20.207.168.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00758 /* 20.208.7.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00760 /* 20.208.7.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00770 /* 20.208.7.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D24520 /* 20.210.69.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D44FE0 /* 20.212.79.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79E50 /* 20.215.158.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79E60 /* 20.215.158.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D8104B /* 20.216.16.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93E50 /* 20.217.62.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93E60 /* 20.217.62.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760C84D /* 23.96.200.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760C8E3 /* 23.96.200.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760CB2E /* 23.96.203.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760D231 /* 23.96.210.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760D41C /* 23.96.212.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760FDDB /* 23.96.253.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176144AC /* 23.97.68.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761D27E /* 23.97.210.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761D3B3 /* 23.97.211.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761DA82 /* 23.97.218.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17637D63 /* 23.99.125.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17641DBE /* 23.100.29.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17645210 /* 23.100.82.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764568B /* 23.100.86.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17645718 /* 23.100.87.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17645738 /* 23.100.87.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17647C54 /* 23.100.124.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17647FAC /* 23.100.127.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176584D0 /* 23.101.132.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176588C9 /* 23.101.136.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17658B99 /* 23.101.139.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765B7E1 /* 23.101.183.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765BF6A /* 23.101.191.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176646AE /* 23.102.70.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400AD0 /* 40.64.10.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400B40 /* 40.64.11.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433CB0 /* 40.67.60.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433CC0 /* 40.67.60.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844D117 /* 40.68.209.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844DE41 /* 40.68.222.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456EC0 /* 40.69.110.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456EE0 /* 40.69.110.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28461A9A /* 40.70.26.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28461BEC /* 40.70.27.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28461BFD /* 40.70.27.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28461DD6 /* 40.70.29.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28468397 /* 40.70.131.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A40CF /* 40.74.64.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A42C8 /* 40.74.66.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A4455 /* 40.74.68.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A4A15 /* 40.74.74.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A4CD5 /* 40.74.76.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A4DCD /* 40.74.77.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A510D /* 40.74.81.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A55D7 /* 40.74.85.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A8397 /* 40.74.131.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A841D /* 40.74.132.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A8817 /* 40.74.136.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A8C04 /* 40.74.140.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A8CA2 /* 40.74.140.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A8CAD /* 40.74.140.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A8E85 /* 40.74.142.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A8FD7 /* 40.74.143.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9560 /* 40.74.149.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B23F0 /* 40.75.35.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C9432 /* 40.76.148.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C9719 /* 40.76.151.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C977C /* 40.76.151.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CAE27 /* 40.76.174.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CAE53 /* 40.76.174.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CAE94 /* 40.76.174.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D1F57 /* 40.77.31.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D6FFE /* 40.77.111.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E4170 /* 40.78.65.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E41C1 /* 40.78.65.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC4B0 /* 40.78.196.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECCD0 /* 40.78.204.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECCE0 /* 40.78.204.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEF10 /* 40.78.239.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF590 /* 40.78.245.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF5A0 /* 40.78.245.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F2C07 /* 40.79.44.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8B90 /* 40.79.139.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8BA0 /* 40.79.139.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FABF0 /* 40.79.171.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB4A0 /* 40.79.180.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB4C0 /* 40.79.180.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC530 /* 40.79.197.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B410 /* 40.80.180.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B420 /* 40.80.180.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28534927 /* 40.83.73.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28534BA5 /* 40.83.75.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28534DD0 /* 40.83.77.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285362C2 /* 40.83.98.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28536445 /* 40.83.100.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28537F13 /* 40.83.127.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28538661 /* 40.83.134.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2853A450 /* 40.83.164.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285419EA /* 40.84.25.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28541E93 /* 40.84.30.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28543B88 /* 40.84.59.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28548A84 /* 40.84.138.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855F169 /* 40.85.241.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855FA87 /* 40.85.250.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855FAD4 /* 40.85.250.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855FC2F /* 40.85.252.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856CA2A /* 40.86.202.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856CBE4 /* 40.86.203.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856D8F1 /* 40.86.216.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856D9F1 /* 40.86.217.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E295 /* 40.86.226.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E45D /* 40.86.228.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859BA1C /* 40.89.186.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859BA1E /* 40.89.186.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859BCA9 /* 40.89.188.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859BE68 /* 40.89.190.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859BFA1 /* 40.89.191.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28705A27 /* 40.112.90.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28705C68 /* 40.112.92.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28705FD8 /* 40.112.95.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287101B5 /* 40.113.1.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287103CA /* 40.113.3.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28710412 /* 40.113.4.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28710A5A /* 40.113.10.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28710B11 /* 40.113.11.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28710C5F /* 40.113.12.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287112D3 /* 40.113.18.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287114CA /* 40.113.20.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871160C /* 40.113.22.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28715E1F /* 40.113.94.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871DAE6 /* 40.113.218.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28720815 /* 40.114.8.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28720C1F /* 40.114.12.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28720DD8 /* 40.114.13.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28720E8F /* 40.114.14.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287228BA /* 40.114.40.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28723305 /* 40.114.51.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287252BF /* 40.114.82.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28734E46 /* 40.115.78.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28734EED /* 40.115.78.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2875634F /* 40.117.99.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287564E4 /* 40.117.100.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876F1F3 /* 40.118.241.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876F4F1 /* 40.118.244.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877A698 /* 40.119.166.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784000 /* 40.120.64.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784020 /* 40.120.64.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28795B29 /* 40.121.91.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A29EC /* 40.122.41.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A2EC5 /* 40.122.46.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287AAAC6 /* 40.122.170.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BD468 /* 40.123.212.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BD849 /* 40.123.216.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BD9A5 /* 40.123.217.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BE08F /* 40.123.224.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BE0E3 /* 40.123.224.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BE4B6 /* 40.123.228.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BE62D /* 40.123.230.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BE7B3 /* 40.123.231.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BE7BA /* 40.123.231.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EE3C7 /* 40.126.227.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EF00E /* 40.126.240.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EF949 /* 40.126.249.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EFC21 /* 40.126.252.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EFC55 /* 40.126.252.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EFC6B /* 40.126.252.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F50E7 /* 40.127.80.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F53AA /* 40.127.83.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F5426 /* 40.127.84.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F560C /* 40.127.86.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F5B12 /* 40.127.91.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F5D5C /* 40.127.93.92/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F9079 /* 40.127.144.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F90FB /* 40.127.144.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F9133 /* 40.127.145.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FF0B7 /* 40.127.240.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FF29F /* 40.127.242.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FF2CB /* 40.127.242.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B6110 /* 51.11.97.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B6120 /* 51.11.97.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BEDD8 /* 51.11.237.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BEDDB /* 51.11.237.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BEDEF /* 51.11.237.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C4B78 /* 51.12.75.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C4B80 /* 51.12.75.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C4B90 /* 51.12.75.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6470 /* 51.12.100.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C66A0 /* 51.12.102.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCC70 /* 51.12.204.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCCC0 /* 51.12.204.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE520 /* 51.12.229.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356E50 /* 51.53.110.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356E60 /* 51.53.110.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BF50 /* 51.53.191.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BF60 /* 51.53.191.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33678034 /* 51.103.128.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336784EC /* 51.103.132.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33678645 /* 51.103.134.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367868A /* 51.103.134.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33678733 /* 51.103.135.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33678825 /* 51.103.136.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336788D1 /* 51.103.136.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336788D2 /* 51.103.136.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367894F /* 51.103.137.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33678A1C /* 51.103.138.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33678A60 /* 51.103.138.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33678B7A /* 51.103.139.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680970 /* 51.104.9.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336839A0 /* 51.104.57.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33683A28 /* 51.104.58.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33683EA6 /* 51.104.62.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694560 /* 51.105.69.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3CA0 /* 51.107.60.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3CC0 /* 51.107.60.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9CA0 /* 51.107.156.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9CC0 /* 51.107.156.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE197 /* 51.107.225.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE1A3 /* 51.107.225.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE1A7 /* 51.107.225.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE1B3 /* 51.107.225.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE1B4 /* 51.107.225.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE1BA /* 51.107.225.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE1BE /* 51.107.225.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE756 /* 51.107.231.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BEF42 /* 51.107.239.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BEF53 /* 51.107.239.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BEF70 /* 51.107.239.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BEF7B /* 51.107.239.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743C90 /* 51.116.60.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743CA0 /* 51.116.60.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744D58 /* 51.116.77.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744DE0 /* 51.116.77.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744DF0 /* 51.116.77.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749E40 /* 51.116.158.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374A868 /* 51.116.168.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374A8DE /* 51.116.168.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374AB31 /* 51.116.171.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374ABD1 /* 51.116.171.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374AF00 /* 51.116.175.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374AF11 /* 51.116.175.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374AF33 /* 51.116.175.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D025 /* 51.116.208.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D033 /* 51.116.208.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D040 /* 51.116.208.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D084 /* 51.116.208.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D0A5 /* 51.116.208.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D0AF /* 51.116.208.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D0C0 /* 51.116.208.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D0C8 /* 51.116.208.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D0D9 /* 51.116.208.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D0DE /* 51.116.208.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D31D /* 51.116.211.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D3A8 /* 51.116.211.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374E916 /* 51.116.233.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374E921 /* 51.116.233.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374E923 /* 51.116.233.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374E928 /* 51.116.233.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374E957 /* 51.116.233.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F3E0 /* 51.116.243.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337864A0 /* 51.120.100.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786D20 /* 51.120.109.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378B010 /* 51.120.176.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378B0A0 /* 51.120.176.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DC80 /* 51.120.220.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DCA0 /* 51.120.220.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AE213 /* 51.138.226.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AE35E /* 51.138.227.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AE3A0 /* 51.138.227.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C1CE1 /* 51.140.28.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4955 /* 51.140.73.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4A0E /* 51.140.74.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4E2C /* 51.140.78.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4E47 /* 51.140.78.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4F6D /* 51.140.79.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C5427 /* 51.140.84.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C89BE /* 51.140.137.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C8E1C /* 51.140.142.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9987 /* 51.140.153.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9B51 /* 51.140.155.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9E18 /* 51.140.158.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D2DEE /* 51.141.45.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D2F88 /* 51.141.47.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D3062 /* 51.141.48.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D3391 /* 51.141.51.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D35A4 /* 51.141.53.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D36B9 /* 51.141.54.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D7070 /* 51.141.112.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D7124 /* 51.141.113.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D724D /* 51.141.114.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D7677 /* 51.141.118.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D773F /* 51.141.119.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D7796 /* 51.141.119.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D7948 /* 51.141.121.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D79DC /* 51.141.121.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D7BA1 /* 51.141.123.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3390B0B9 /* 51.144.176.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3390B6C9 /* 51.144.182.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BF58 /* 52.136.191.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BFE0 /* 52.136.191.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BFF0 /* 52.136.191.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348DDA37 /* 52.141.218.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348DDD06 /* 52.141.221.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F9C37 /* 52.143.156.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F9ECB /* 52.143.158.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FA253 /* 52.143.162.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FA40F /* 52.143.164.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FA450 /* 52.143.164.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928D80 /* 52.146.141.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34936110 /* 52.147.97.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34936120 /* 52.147.97.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349E8539 /* 52.158.133.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A0441B /* 52.160.68.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A04669 /* 52.160.70.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A046DD /* 52.160.70.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A05AED /* 52.160.90.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A05C70 /* 52.160.92.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A10880 /* 52.161.8.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A1096C /* 52.161.9.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A112DA /* 52.161.18.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A11352 /* 52.161.19.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A11AAC /* 52.161.26.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A11BBE /* 52.161.27.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A140D9 /* 52.161.64.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A15BD7 /* 52.161.91.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26F90 /* 52.162.111.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26FA0 /* 52.162.111.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A2D0D8 /* 52.162.208.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A2D5E7 /* 52.162.213.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A35DD6 /* 52.163.93.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A3E45D /* 52.163.228.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A3E6A6 /* 52.163.230.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76D50 /* 52.167.109.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9DAFD /* 52.169.218.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9DCAE /* 52.169.220.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC092F /* 52.172.9.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC312B /* 52.172.49.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC3218 /* 52.172.50.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC338C /* 52.172.51.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC3400 /* 52.172.52.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC37E7 /* 52.172.55.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC9AA8 /* 52.172.154.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC9DC2 /* 52.172.157.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACB8C0 /* 52.172.184.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACB94F /* 52.172.185.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACBA9F /* 52.172.186.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACBFC2 /* 52.172.191.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE3106 /* 52.174.49.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE36DA /* 52.174.54.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF21FE /* 52.175.33.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AFC684 /* 52.175.198.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2A5D7 /* 52.178.165.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2A615 /* 52.178.166.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68DA0 /* 52.182.141.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B71D84 /* 52.183.29.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B71E0A /* 52.183.30.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B71EA9 /* 52.183.30.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B72743 /* 52.183.39.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB4151 /* 52.187.65.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB419B /* 52.187.65.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BBE260 /* 52.187.226.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BBE28B /* 52.187.226.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BBE3F5 /* 52.187.227.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BBE582 /* 52.187.229.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BBE7A1 /* 52.187.231.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BBE7B8 /* 52.187.231.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDD62A /* 52.189.214.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDD81C /* 52.189.216.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDDC4B /* 52.189.220.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDDE4D /* 52.189.222.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E2D8BB /* 52.226.216.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E2D8C5 /* 52.226.216.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E2D8D1 /* 52.226.216.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E427F4 /* 52.228.39.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E5782D /* 52.229.120.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E57D39 /* 52.229.125.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E57E19 /* 52.229.126.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71710 /* 52.231.23.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71720 /* 52.231.23.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8809B /* 52.232.128.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8818F /* 52.232.129.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8856D /* 52.232.133.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E91D4F /* 52.233.29.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E91D5C /* 52.233.29.92/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E91EDA /* 52.233.30.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22C30 /* 52.242.44.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22CA0 /* 52.242.44.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF24B9 /* 52.255.36.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF2A6E /* 52.255.42.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x413408E1 /* 65.52.8.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41340940 /* 65.52.9.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41340960 /* 65.52.9.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41340AB7 /* 65.52.10.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41343C05 /* 65.52.60.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134AF22 /* 65.52.175.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134B960 /* 65.52.185.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134B9DA /* 65.52.185.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134BA99 /* 65.52.186.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134BABE /* 65.52.186.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134BAE1 /* 65.52.186.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134D3A4 /* 65.52.211.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6710 /* 68.221.103.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6720 /* 68.221.103.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x46253206 /* 70.37.50.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4625367A /* 70.37.54.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255768 /* 102.37.87.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255770 /* 102.37.87.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255780 /* 102.37.87.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851CD0 /* 102.133.28.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851CE0 /* 102.133.28.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854825 /* 102.133.72.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854862 /* 102.133.72.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854871 /* 102.133.72.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854884 /* 102.133.72.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854891 /* 102.133.72.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668548AD /* 102.133.72.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668548B3 /* 102.133.72.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668548B7 /* 102.133.72.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668548B8 /* 102.133.72.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668548BE /* 102.133.72.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854BA9 /* 102.133.75.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854BBF /* 102.133.75.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859CB0 /* 102.133.156.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E07D /* 102.133.224.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E2C7 /* 102.133.226.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E367 /* 102.133.227.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E404 /* 102.133.228.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E406 /* 102.133.228.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E409 /* 102.133.228.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E604 /* 102.133.230.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E652 /* 102.133.230.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E709 /* 102.133.231.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E733 /* 102.133.231.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E775 /* 102.133.231.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E7BC /* 102.133.231.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FBE0 /* 102.133.251.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68282094 /* 104.40.32.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68282270 /* 104.40.34.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682822A9 /* 104.40.34.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828318C /* 104.40.49.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828364A /* 104.40.54.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68283BBC /* 104.40.59.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68283D96 /* 104.40.61.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68283EB2 /* 104.40.62.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828DA25 /* 104.40.218.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68290073 /* 104.41.0.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68292167 /* 104.41.33.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829A2F5 /* 104.41.162.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829A366 /* 104.41.163.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829A84C /* 104.41.168.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829AD84 /* 104.41.173.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829B3A5 /* 104.41.179.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829B53B /* 104.41.181.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829B6E8 /* 104.41.182.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A2620 /* 104.42.38.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A28A4 /* 104.42.40.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A2C1C /* 104.42.44.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A3191 /* 104.42.49.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682AE0E3 /* 104.42.224.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682AEC5D /* 104.42.236.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BA687 /* 104.43.166.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BF327 /* 104.43.243.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D0934 /* 104.45.9.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D9951 /* 104.45.153.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E2063 /* 104.46.32.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E225D /* 104.46.34.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E22D0 /* 104.46.34.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E273F /* 104.46.39.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E2AA7 /* 104.46.42.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E62D0 /* 104.46.98.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E6A9E /* 104.46.106.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682F8AD6 /* 104.47.138.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D0191B /* 104.208.25.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D08C28 /* 104.208.140.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D09BC8 /* 104.208.155.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D09EAE /* 104.208.158.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D1834D /* 104.209.131.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D185FE /* 104.209.133.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D18685 /* 104.209.134.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D259DE /* 104.210.89.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D259F4 /* 104.210.89.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D25AF1 /* 104.210.90.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D25B37 /* 104.210.91.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D29030 /* 104.210.144.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D29959 /* 104.210.153.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D349C3 /* 104.211.73.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D34A91 /* 104.211.74.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35AA2 /* 104.211.90.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35AA9 /* 104.211.90.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3656C /* 104.211.101.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3663E /* 104.211.102.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39A07 /* 104.211.154.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39A3B /* 104.211.154.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39C99 /* 104.211.156.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39DED /* 104.211.157.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39E7B /* 104.211.158.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39E7F /* 104.211.158.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A2CD /* 104.211.162.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A419 /* 104.211.164.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A450 /* 104.211.164.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A470 /* 104.211.164.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A488 /* 104.211.164.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A551 /* 104.211.165.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E198 /* 104.211.225.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E3E5 /* 104.211.227.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E573 /* 104.211.229.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E67E /* 104.211.230.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E681 /* 104.211.230.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E727 /* 104.211.231.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D689F3 /* 104.214.137.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A140 /* 104.214.161.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A160 /* 104.214.161.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D7589C /* 104.215.88.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D75990 /* 104.215.89.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D75A56 /* 104.215.90.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D75ABD /* 104.215.90.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D75ACB /* 104.215.90.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D75D7D /* 104.215.93.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D7B01F /* 104.215.176.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D7B051 /* 104.215.176.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D7B105 /* 104.215.177.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D7B2CC /* 104.215.178.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D7B385 /* 104.215.179.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D7B4CB /* 104.215.180.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D7B506 /* 104.215.181.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6FDD5548 /* 111.221.85.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6FDD554A /* 111.221.85.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89742C52 /* 137.116.44.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89745046 /* 137.116.80.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x897455F5 /* 137.116.85.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89747EA5 /* 137.116.126.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89754820 /* 137.117.72.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89876A36 /* 137.135.106.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B112F /* 138.91.17.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B1963 /* 138.91.25.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B1A2D /* 138.91.26.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5BBC89 /* 138.91.188.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37D23D /* 157.55.210.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37D4EE /* 157.55.212.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D380CCA /* 157.56.12.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D38A0D4 /* 157.56.160.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D38A235 /* 157.56.162.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D38A793 /* 157.56.167.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170F10 /* 158.23.15.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170F20 /* 158.23.15.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D5678 /* 168.61.86.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D98C9 /* 168.61.152.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83DAC53 /* 168.61.172.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83DACE1 /* 168.61.172.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83DADAC /* 168.61.173.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83DD9B1 /* 168.61.217.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E094A /* 168.62.9.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E0964 /* 168.62.9.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E1CBF /* 168.62.28.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E6D6E /* 168.62.109.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EDB34 /* 168.62.219.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EDB53 /* 168.62.219.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EF825 /* 168.62.248.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EF951 /* 168.62.249.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8825 /* 168.63.136.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FC8AD /* 168.63.200.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE82013 /* 191.232.32.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE82064 /* 191.232.32.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8224E /* 191.232.34.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE822F9 /* 191.232.34.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE823B1 /* 191.232.35.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE824D5 /* 191.232.36.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE936F0 /* 191.233.54.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE94433 /* 191.233.68.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CF00 /* 191.233.207.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CF20 /* 191.233.207.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEAA11C /* 191.234.161.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEAA1A8 /* 191.234.161.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEAA283 /* 191.234.162.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEAA2B2 /* 191.234.162.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEAA6C6 /* 191.234.166.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEAB61A /* 191.234.182.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB52DD /* 191.235.82.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB56C7 /* 191.235.86.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB5B07 /* 191.235.91.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB5EDC /* 191.235.94.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB5FE5 /* 191.235.95.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBB4BC /* 191.235.180.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDCF15 /* 191.237.207.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDFF74 /* 191.237.255.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE296B /* 191.238.41.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4EF8 /* 191.238.78.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEEA13E /* 191.238.161.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEEA341 /* 191.238.163.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEF4384 /* 191.239.67.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEF523E /* 191.239.82.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFA14A /* 191.239.161.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFB156 /* 191.239.177.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E94B0 /* 207.46.148.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456DC0 /* 13.69.109.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E928 /* 13.69.233.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AF88 /* 13.71.175.136/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6FC4 /* 13.78.111.196/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DF58 /* 13.86.223.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154DBC /* 20.21.77.188/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142475C2 /* 20.36.117.194/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254CCE /* 20.37.76.206/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B79FE /* 20.43.121.254/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0AC4 /* 20.44.10.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1308 /* 20.44.19.8/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7E60 /* 20.45.126.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14350024 /* 20.53.0.36/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B0B9A /* 20.91.11.154/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B0E62 /* 20.91.14.98/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B9208 /* 20.91.146.8/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0B852 /* 20.192.184.82/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456F2C /* 40.69.111.44/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEF64 /* 40.78.239.100/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8BC4 /* 40.79.139.196/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B404 /* 40.80.180.4/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784B38 /* 40.120.75.56/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694552 /* 51.105.69.82/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3C9A /* 51.107.60.154/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BC080 /* 51.107.192.128/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743CF2 /* 51.116.60.242/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749E3E /* 51.116.158.62/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378649E /* 51.120.100.158/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DC78 /* 51.120.220.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AA002 /* 51.138.160.2/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD4DA /* 51.140.212.218/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26F88 /* 52.162.111.136/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87050 /* 52.168.112.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7170C /* 52.231.23.12/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E794CC /* 52.231.148.204/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254032 /* 102.37.64.50/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857C0E /* 102.133.124.14/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A434 /* 104.214.164.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CF1C /* 191.233.207.28/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430F08 /* 13.67.15.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456DC8 /* 13.69.109.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E938 /* 13.69.233.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AFC8 /* 13.71.175.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154DBA /* 20.21.77.186/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269810 /* 20.38.152.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429D008 /* 20.41.208.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4888 /* 20.42.72.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7BB8 /* 20.43.123.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0AC8 /* 20.44.10.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1338 /* 20.44.19.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7E68 /* 20.45.126.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344820 /* 20.52.72.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14350060 /* 20.53.0.96/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B0B98 /* 20.91.11.152/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B0E60 /* 20.91.14.96/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDAB60 /* 20.189.171.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C16000 /* 20.193.96.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28437998 /* 40.67.121.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456F68 /* 40.69.111.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9458 /* 40.79.148.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBD78 /* 40.79.189.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B478 /* 40.80.180.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287808A8 /* 40.120.8.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287840C0 /* 40.120.64.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B6158 /* 51.11.97.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C4BBA /* 51.12.75.186/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8018 /* 51.13.128.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694558 /* 51.105.69.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8030 /* 51.107.128.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BC090 /* 51.107.192.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F608 /* 51.116.246.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337864F8 /* 51.120.100.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786D78 /* 51.120.109.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AA040 /* 51.138.160.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71768 /* 52.231.23.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79738 /* 52.231.151.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F0F498 /* 52.240.244.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254070 /* 102.37.64.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857C98 /* 102.133.124.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A460 /* 104.214.164.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CFC8 /* 191.233.207.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E750 /* 20.40.231.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C708 /* 20.48.199.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330150 /* 20.51.1.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330E50 /* 20.51.14.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345D20 /* 20.52.93.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B4CE0 /* 20.59.76.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E3FE0 /* 20.62.63.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418730 /* 20.65.135.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DC08 /* 20.70.220.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452F438 /* 20.82.244.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452F620 /* 20.82.246.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14565CE0 /* 20.86.92.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145898E0 /* 20.88.152.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145898F0 /* 20.88.152.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590918 /* 20.89.9.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C0030 /* 20.92.0.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14968180 /* 20.150.129.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02F90 /* 20.192.47.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C780 /* 20.193.199.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C345B0 /* 20.195.69.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34EE0 /* 20.195.78.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C39688 /* 20.195.150.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C028 /* 20.200.192.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287855E0 /* 40.120.85.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1D10 /* 51.12.29.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF3E8 /* 51.107.243.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378ED30 /* 51.120.237.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD700 /* 51.138.215.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD668 /* 51.143.214.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662551E8 /* 102.37.81.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A338 /* 102.37.163.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4968 /* 191.238.73.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D401A58 /* 13.64.26.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D401C57 /* 13.64.28.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D401D20 /* 13.64.29.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D401DA1 /* 13.64.29.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D401E4C /* 13.64.30.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D401E75 /* 13.64.30.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D401E76 /* 13.64.30.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D401F74 /* 13.64.31.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D40C41B /* 13.64.196.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D40C613 /* 13.64.198.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D40C661 /* 13.64.198.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D40C729 /* 13.64.199.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D40FC73 /* 13.64.252.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428612 /* 13.66.134.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428E50 /* 13.66.142.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D429E08 /* 13.66.158.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42A8D1 /* 13.66.168.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42ADC0 /* 13.66.173.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42D2CD /* 13.66.210.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430AC0 /* 13.67.10.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4330DD /* 13.67.48.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454360 /* 13.69.67.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456B60 /* 13.69.107.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45BE73 /* 13.69.190.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E630 /* 13.69.230.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464AA0 /* 13.70.74.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AF00 /* 13.71.175.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C4C0 /* 13.71.196.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F2E0 /* 13.73.242.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6CB0 /* 13.74.108.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4AA898 /* 13.74.168.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2780 /* 13.75.39.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4C2B49 /* 13.76.43.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4C81FF /* 13.76.129.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3560 /* 13.77.53.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D501C /* 13.77.80.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D8850 /* 13.77.136.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D94E5 /* 13.77.148.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4DA0A2 /* 13.77.160.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4DA394 /* 13.77.163.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4DA53D /* 13.77.165.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D50075E /* 13.80.7.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D501647 /* 13.80.22.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D507D16 /* 13.80.125.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D517B31 /* 13.81.123.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D51CCBD /* 13.81.204.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D51D447 /* 13.81.212.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56B0BD /* 13.86.176.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56B0D3 /* 13.86.176.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DBE0 /* 13.86.219.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56EBCA /* 13.86.235.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56EFEC /* 13.86.239.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58E026 /* 13.88.224.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58E0D3 /* 13.88.224.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58E0DE /* 13.88.224.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58E24A /* 13.88.226.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58E307 /* 13.88.227.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59B200 /* 13.89.178.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B3DF9 /* 13.91.61.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B5BF3 /* 13.91.91.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B62B9 /* 13.91.98.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5D2072 /* 13.93.32.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5D71C0 /* 13.93.113.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DC434 /* 13.93.196.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DD844 /* 13.93.216.68/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DE92A /* 13.93.233.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F0121 /* 13.95.1.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F1DB1 /* 13.95.29.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F1E2E /* 13.95.30.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424DC5D /* 20.36.220.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424DE3B /* 20.36.222.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424DE3C /* 20.36.222.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424F04C /* 20.36.240.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424F4D0 /* 20.36.244.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424F500 /* 20.36.245.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424F5B6 /* 20.36.245.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424F5EB /* 20.36.245.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424F6BC /* 20.36.246.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424F828 /* 20.36.248.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14286A32 /* 20.40.106.50/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14286B54 /* 20.40.107.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142884C3 /* 20.40.132.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428864F /* 20.40.134.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428865E /* 20.40.134.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A0B8 /* 20.40.160.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A177 /* 20.40.161.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A183 /* 20.40.161.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A184 /* 20.40.161.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A187 /* 20.40.161.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A18C /* 20.40.161.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A1A0 /* 20.40.161.160/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A256 /* 20.40.162.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A2C8 /* 20.40.162.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A358 /* 20.40.163.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A360 /* 20.40.163.96/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A382 /* 20.40.163.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A385 /* 20.40.163.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A3B2 /* 20.40.163.178/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A1DA2 /* 20.42.29.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A1F30 /* 20.42.31.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A1FFB /* 20.42.31.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C08D0 /* 20.44.8.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1140 /* 20.44.17.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C48AD /* 20.44.72.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C48D9 /* 20.44.72.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C49FD /* 20.44.73.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D037F /* 20.45.3.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B83904 /* 20.184.57.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B839DA /* 20.184.57.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B83A2E /* 20.184.58.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B83A6E /* 20.184.58.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B83C4D /* 20.184.60.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B83D43 /* 20.184.61.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B83DFD /* 20.184.61.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B83F9E /* 20.184.63.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B83FD8 /* 20.184.63.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B83FE8 /* 20.184.63.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC48F8 /* 20.188.72.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176136A0 /* 23.97.54.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176137A5 /* 23.97.55.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625360 /* 23.98.83.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17644399 /* 23.100.67.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841A92E /* 40.65.169.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841A961 /* 40.65.169.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841A9C4 /* 40.65.169.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841A9EC /* 40.65.169.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841AA11 /* 40.65.170.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841AA1A /* 40.65.170.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841AA50 /* 40.65.170.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841AA70 /* 40.65.170.112/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841AA7B /* 40.65.170.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841AA7D /* 40.65.170.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841AA80 /* 40.65.170.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841AA85 /* 40.65.170.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841AA89 /* 40.65.170.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841E9FD /* 40.65.233.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841EB36 /* 40.65.235.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2842389E /* 40.66.56.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284239A4 /* 40.66.57.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284239CB /* 40.66.57.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423B29 /* 40.66.59.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423BC1 /* 40.66.59.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423BC3 /* 40.66.59.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423BC4 /* 40.66.59.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423BF6 /* 40.66.59.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423C65 /* 40.66.60.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423C76 /* 40.66.60.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423CB4 /* 40.66.60.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423CB9 /* 40.66.60.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423CC8 /* 40.66.60.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423CCE /* 40.66.60.206/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423CD0 /* 40.66.60.208/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423CD2 /* 40.66.60.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423CD7 /* 40.66.60.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423CD8 /* 40.66.60.216/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423CDB /* 40.66.60.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423CDC /* 40.66.60.220/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423CDE /* 40.66.60.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423CE0 /* 40.66.60.224/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423CE2 /* 40.66.60.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423CE8 /* 40.66.60.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423D3D /* 40.66.61.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423D9E /* 40.66.61.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423DC1 /* 40.66.61.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423DE2 /* 40.66.61.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423E07 /* 40.66.62.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423E09 /* 40.66.62.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423E4E /* 40.66.62.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423E82 /* 40.66.62.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423E9A /* 40.66.62.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423EE1 /* 40.66.62.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423F94 /* 40.66.63.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423FFF /* 40.66.63.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2843985B /* 40.67.152.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284398E3 /* 40.67.152.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28439AA0 /* 40.67.154.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28439B92 /* 40.67.155.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28439F37 /* 40.67.159.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2843D8FD /* 40.67.216.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2843DB85 /* 40.67.219.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2843FB00 /* 40.67.251.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2843FEE9 /* 40.67.254.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844F5B8 /* 40.68.245.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456C60 /* 40.69.108.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284600FF /* 40.70.0.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28461D31 /* 40.70.29.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28461DC8 /* 40.70.29.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469470 /* 40.70.148.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2846B85A /* 40.70.184.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470E10 /* 40.71.14.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A01EB /* 40.74.1.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A06CC /* 40.74.6.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C4ED9 /* 40.76.78.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E17CC /* 40.78.23.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E3881 /* 40.78.56.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE540 /* 40.78.229.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EECA0 /* 40.78.236.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF500 /* 40.78.245.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFB80 /* 40.78.251.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8460 /* 40.79.132.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8B10 /* 40.79.139.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F92E0 /* 40.79.146.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9C70 /* 40.79.156.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB440 /* 40.79.180.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850DB31 /* 40.80.219.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850DCD7 /* 40.80.220.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850DCF6 /* 40.80.220.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850DD4D /* 40.80.221.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850DE5B /* 40.80.222.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850DEC5 /* 40.80.222.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513850 /* 40.81.56.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851398A /* 40.81.57.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851398D /* 40.81.57.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513990 /* 40.81.57.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851399D /* 40.81.57.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285139A4 /* 40.81.57.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285139A9 /* 40.81.57.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513AB4 /* 40.81.58.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513AB8 /* 40.81.58.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513AC1 /* 40.81.58.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513B04 /* 40.81.59.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513B5A /* 40.81.59.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513B5D /* 40.81.59.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513EA2 /* 40.81.62.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513EB3 /* 40.81.62.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513EC1 /* 40.81.62.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513EC7 /* 40.81.62.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513ECE /* 40.81.62.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513ED1 /* 40.81.62.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513ED4 /* 40.81.62.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513EDC /* 40.81.62.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513EE0 /* 40.81.62.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513EFF /* 40.81.62.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513F01 /* 40.81.63.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513F02 /* 40.81.63.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513F04 /* 40.81.63.4/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513F07 /* 40.81.63.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513F08 /* 40.81.63.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513FEB /* 40.81.63.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513FF5 /* 40.81.63.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513FF8 /* 40.81.63.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851780D /* 40.81.120.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517818 /* 40.81.120.24/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517861 /* 40.81.120.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285178BB /* 40.81.120.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285178BF /* 40.81.120.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285178C0 /* 40.81.120.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517942 /* 40.81.121.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851794C /* 40.81.121.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851794E /* 40.81.121.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851796B /* 40.81.121.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851796C /* 40.81.121.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851796F /* 40.81.121.111/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851797F /* 40.81.121.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517987 /* 40.81.121.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851798C /* 40.81.121.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285179AF /* 40.81.121.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517A04 /* 40.81.122.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517A3E /* 40.81.122.62/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517A4C /* 40.81.122.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517ACB /* 40.81.122.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517B7C /* 40.81.123.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517B9D /* 40.81.123.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517CB9 /* 40.81.124.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517CDB /* 40.81.124.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517F19 /* 40.81.127.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517F8B /* 40.81.127.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517F8C /* 40.81.127.140/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517FE5 /* 40.81.127.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517FE6 /* 40.81.127.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517FEF /* 40.81.127.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851987E /* 40.81.152.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285198AB /* 40.81.152.171/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285198AC /* 40.81.152.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28519C99 /* 40.81.156.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28519C9A /* 40.81.156.154/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28519C9C /* 40.81.156.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28519F23 /* 40.81.159.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28519F4D /* 40.81.159.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852B850 /* 40.82.184.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852B924 /* 40.82.185.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852B975 /* 40.82.185.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852B9E5 /* 40.82.185.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BAA6 /* 40.82.186.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BAA8 /* 40.82.186.168/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BAB0 /* 40.82.186.176/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BAB4 /* 40.82.186.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BAB6 /* 40.82.186.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BAB9 /* 40.82.186.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BAD6 /* 40.82.186.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BAE7 /* 40.82.186.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BBA1 /* 40.82.187.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BBA2 /* 40.82.187.162/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BBA4 /* 40.82.187.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BBB1 /* 40.82.187.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BBB2 /* 40.82.187.178/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BBC7 /* 40.82.187.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BBC8 /* 40.82.187.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BBCA /* 40.82.187.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BBCC /* 40.82.187.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BBD0 /* 40.82.187.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BBD4 /* 40.82.187.212/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BBDA /* 40.82.187.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BBDF /* 40.82.187.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BEA3 /* 40.82.190.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BF3A /* 40.82.191.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28540253 /* 40.84.2.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854045D /* 40.84.4.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28540477 /* 40.84.4.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854051C /* 40.84.5.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28543110 /* 40.84.49.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285988E3 /* 40.89.136.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28598965 /* 40.89.137.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28598EB8 /* 40.89.142.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28598F2B /* 40.89.143.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285AB8C5 /* 40.90.184.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285AB940 /* 40.90.185.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285ABF99 /* 40.90.191.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285ADAC4 /* 40.90.218.196/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285ADAC6 /* 40.90.218.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285ADACB /* 40.90.218.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285ADB79 /* 40.90.219.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285ADBB8 /* 40.90.219.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285ADC25 /* 40.90.220.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285ADCBE /* 40.90.220.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285ADCC4 /* 40.90.220.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285ADE40 /* 40.90.222.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B4A25 /* 40.91.74.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B4E69 /* 40.91.78.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B7228 /* 40.91.114.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B7230 /* 40.91.114.48/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B7A19 /* 40.91.122.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B7A26 /* 40.91.122.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B7E9D /* 40.91.126.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B7F2C /* 40.91.127.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285BC613 /* 40.91.198.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287179B0 /* 40.113.121.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28727093 /* 40.114.112.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872D908 /* 40.114.217.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28731841 /* 40.115.24.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28731932 /* 40.115.25.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873476F /* 40.115.71.111/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28763F89 /* 40.118.63.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287661E8 /* 40.118.97.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876D3AC /* 40.118.211.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28779182 /* 40.119.145.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28779366 /* 40.119.147.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28779A48 /* 40.119.154.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877CB62 /* 40.119.203.98/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877CB9E /* 40.119.203.158/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877CBD0 /* 40.119.203.208/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877CF83 /* 40.119.207.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877CF90 /* 40.119.207.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877CFA4 /* 40.119.207.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877CFA6 /* 40.119.207.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877CFAE /* 40.119.207.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877CFB6 /* 40.119.207.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877CFC1 /* 40.119.207.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877CFC8 /* 40.119.207.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877D7A7 /* 40.119.215.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28798601 /* 40.121.134.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C3545 /* 40.124.53.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B1A5C /* 51.11.26.92/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B1A5F /* 51.11.26.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680910 /* 51.104.9.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336925F4 /* 51.105.37.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336943E0 /* 51.105.67.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694BB0 /* 51.105.75.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33697C40 /* 51.105.124.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33697C50 /* 51.105.124.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369A105 /* 51.105.161.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369A308 /* 51.105.163.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369A32B /* 51.105.163.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369A408 /* 51.105.164.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369A4EA /* 51.105.164.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369A4F1 /* 51.105.164.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369A51F /* 51.105.165.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369A525 /* 51.105.165.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369A53F /* 51.105.165.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369A574 /* 51.105.165.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369A666 /* 51.105.166.102/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369A66A /* 51.105.166.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369B39D /* 51.105.179.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389880D /* 51.137.136.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389880E /* 51.137.136.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33898822 /* 51.137.136.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33898945 /* 51.137.137.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33898976 /* 51.137.137.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33898979 /* 51.137.137.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338989C8 /* 51.137.137.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338989ED /* 51.137.137.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C010A /* 51.140.1.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C086C /* 51.140.8.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C08B4 /* 51.140.8.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C235F /* 51.140.35.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C346A /* 51.140.52.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4ED5 /* 51.140.78.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C697C /* 51.140.105.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C7DE3 /* 51.140.125.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CA4B3 /* 51.140.164.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CBF92 /* 51.140.191.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD480 /* 51.140.212.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CE6F6 /* 51.140.230.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CE78A /* 51.140.231.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D02BD /* 51.141.2.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D070B /* 51.141.7.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F3ACF /* 51.143.58.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F6F3A /* 51.143.111.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F78EC /* 51.143.120.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F78F2 /* 51.143.120.242/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F7A3B /* 51.143.122.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F7A3C /* 51.143.122.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3390383C /* 51.144.56.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33916CE3 /* 51.145.108.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33916CFA /* 51.145.108.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3391B5C3 /* 51.145.181.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3391B5D6 /* 51.145.181.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348938C8 /* 52.137.56.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34895993 /* 52.137.89.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE3A0 /* 52.138.227.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B0146 /* 52.139.1.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B019C /* 52.139.1.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B019E /* 52.139.1.158/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B01C8 /* 52.139.1.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B01DA /* 52.139.1.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B0200 /* 52.139.2.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B1069 /* 52.139.16.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B12EA /* 52.139.18.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B12EC /* 52.139.18.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B1347 /* 52.139.19.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B13BB /* 52.139.19.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B13D7 /* 52.139.19.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B13F7 /* 52.139.19.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B141F /* 52.139.20.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B1476 /* 52.139.20.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B1546 /* 52.139.21.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BF501 /* 52.139.245.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BF515 /* 52.139.245.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BF528 /* 52.139.245.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BF530 /* 52.139.245.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BFBDB /* 52.139.251.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BFC69 /* 52.139.252.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E7091 /* 52.142.112.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E7092 /* 52.142.112.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E7487 /* 52.142.116.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E74AE /* 52.142.116.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E74FA /* 52.142.116.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E75B7 /* 52.142.117.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E7682 /* 52.142.118.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E7906 /* 52.142.121.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E794B /* 52.142.121.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E7C17 /* 52.142.124.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E7F7F /* 52.142.127.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348EDCB3 /* 52.142.220.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348EE878 /* 52.142.232.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F4958 /* 52.143.73.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F4A1F /* 52.143.74.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349473BC /* 52.148.115.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349473C2 /* 52.148.115.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349473EE /* 52.148.115.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34947425 /* 52.148.116.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3494A12D /* 52.148.161.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3494A135 /* 52.148.161.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497EDF3 /* 52.151.237.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497EE05 /* 52.151.238.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497F441 /* 52.151.244.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497F71B /* 52.151.247.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3499F06B /* 52.153.240.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BA158 /* 52.155.161.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BA15B /* 52.155.161.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BA483 /* 52.155.164.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BA632 /* 52.155.166.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BA7E7 /* 52.155.167.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BA82D /* 52.155.168.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BB10D /* 52.155.177.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BB2F7 /* 52.155.178.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BB354 /* 52.155.179.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BB4D0 /* 52.155.180.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BB5B4 /* 52.155.181.180/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BB630 /* 52.155.182.48/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BB632 /* 52.155.182.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BB68A /* 52.155.182.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BB68D /* 52.155.182.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CC5D0 /* 52.156.197.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CC5FE /* 52.156.197.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CC6C4 /* 52.156.198.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCA07 /* 52.156.202.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCB16 /* 52.156.203.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCBC6 /* 52.156.203.198/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCC18 /* 52.156.204.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCC33 /* 52.156.204.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCC63 /* 52.156.204.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCC8B /* 52.156.204.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCD89 /* 52.156.205.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCDB6 /* 52.156.205.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCDDE /* 52.156.205.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCDE2 /* 52.156.205.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCE2B /* 52.156.206.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCE2D /* 52.156.206.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCE2E /* 52.156.206.46/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349D13E4 /* 52.157.19.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349D148E /* 52.157.20.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DDADB /* 52.157.218.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DDAE8 /* 52.157.218.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DE86E /* 52.157.232.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DE893 /* 52.157.232.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DE931 /* 52.157.233.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DE95C /* 52.157.233.92/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DE985 /* 52.157.233.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DE9CD /* 52.157.233.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DEAA0 /* 52.157.234.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DEADE /* 52.157.234.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DEB1B /* 52.157.235.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DEB90 /* 52.157.235.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DECC3 /* 52.157.236.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DED6B /* 52.157.237.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DEDD5 /* 52.157.237.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DEDFF /* 52.157.237.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DEE3A /* 52.157.238.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DEF6E /* 52.157.239.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DEF84 /* 52.157.239.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349E1CEB /* 52.158.28.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76B60 /* 52.167.107.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9C0ED /* 52.169.192.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE38B4 /* 52.174.56.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B1552B /* 52.177.85.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B22CF8 /* 52.178.44.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2592C /* 52.178.89.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B39BB1 /* 52.179.155.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3C249 /* 52.179.194.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3C629 /* 52.179.198.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68BD0 /* 52.182.139.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B718FE /* 52.183.24.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B71ECC /* 52.183.30.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B74B3E /* 52.183.75.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A552 /* 52.184.165.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BCD9EC /* 52.188.217.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDD024 /* 52.189.208.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDD524 /* 52.189.213.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDD57C /* 52.189.213.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDDAFD /* 52.189.218.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BE1ADC /* 52.190.26.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BE1F3E /* 52.190.31.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BF8141 /* 52.191.129.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFEDBC /* 52.191.237.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFEE41 /* 52.191.238.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0BC9D /* 52.224.188.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0BCA8 /* 52.224.188.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0BEE1 /* 52.224.190.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0BF3E /* 52.224.191.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0C9D8 /* 52.224.201.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0C9DF /* 52.224.201.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0CA56 /* 52.224.202.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0CA5B /* 52.224.202.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1E1DA /* 52.225.225.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1E7E8 /* 52.225.231.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8E0E3 /* 52.232.224.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8E154 /* 52.232.225.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8E4D9 /* 52.232.228.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8F560 /* 52.232.245.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBB50 /* 52.236.187.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F919A0 /* 52.249.25.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F919A5 /* 52.249.25.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41348A7B /* 65.52.138.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134E5C8 /* 65.52.229.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68281CCA /* 104.40.28.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68288178 /* 104.40.129.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A0F29 /* 104.42.15.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A223A /* 104.42.34.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A26FE /* 104.42.38.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A3618 /* 104.42.54.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A4B78 /* 104.42.75.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682AD3D7 /* 104.42.211.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D075F /* 104.45.7.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D41A9 /* 104.45.65.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DA867 /* 104.45.168.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DA868 /* 104.45.168.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DA86A /* 104.45.168.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DA86C /* 104.45.168.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DA86F /* 104.45.168.111/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DA872 /* 104.45.168.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAA46 /* 104.45.170.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAA7F /* 104.45.170.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAAA1 /* 104.45.170.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAAAD /* 104.45.170.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAAAE /* 104.45.170.174/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAAB0 /* 104.45.170.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAAB2 /* 104.45.170.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAAB4 /* 104.45.170.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAAB6 /* 104.45.170.182/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAAB8 /* 104.45.170.184/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAABA /* 104.45.170.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAABC /* 104.45.170.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAABF /* 104.45.170.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAAC2 /* 104.45.170.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAAC4 /* 104.45.170.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E74D3 /* 104.46.116.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E7948 /* 104.46.121.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E7ABD /* 104.46.122.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D0D8DD /* 104.208.216.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D123B1 /* 104.209.35.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D1A8FB /* 104.209.168.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D20020 /* 104.210.0.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D309E2 /* 104.211.9.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6E121 /* 104.214.225.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974341F /* 137.116.52.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B9347 /* 138.91.147.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F2699 /* 168.63.38.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86A40 /* 4.232.106.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87A40 /* 4.232.122.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C240 /* 4.232.194.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428C40 /* 13.66.140.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430870 /* 13.67.8.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454050 /* 13.69.64.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456A48 /* 13.69.106.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E350 /* 13.69.227.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464880 /* 13.70.72.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AA30 /* 13.71.170.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C278 /* 13.71.194.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6B48 /* 13.74.107.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2298 /* 13.75.34.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3248 /* 13.77.50.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6AC0 /* 13.78.106.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573858 /* 13.87.56.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577A58 /* 13.87.122.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AAD0 /* 13.89.170.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114240 /* 20.17.66.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B240 /* 20.18.178.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152A40 /* 20.21.42.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154240 /* 20.21.66.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154A40 /* 20.21.74.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254A40 /* 20.37.74.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269288 /* 20.38.146.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269848 /* 20.38.152.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0210 /* 20.44.2.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1A88 /* 20.44.26.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7A88 /* 20.45.122.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315208 /* 20.49.82.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315A08 /* 20.49.90.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481A08 /* 20.72.26.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DAA40 /* 20.125.170.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCA40 /* 20.125.202.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AA10 /* 20.150.170.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B288 /* 20.150.178.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BA88 /* 20.150.186.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A240 /* 20.168.162.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06288 /* 20.192.98.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EA10 /* 20.192.234.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CA08 /* 20.193.202.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24208 /* 20.194.66.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4A40 /* 20.205.74.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5240 /* 20.205.82.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D01240 /* 20.208.18.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71240 /* 20.215.18.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71A40 /* 20.215.26.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79A40 /* 20.215.154.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93A40 /* 20.217.58.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94A40 /* 20.217.74.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95A40 /* 20.217.90.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625268 /* 23.98.82.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433A10 /* 40.67.58.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456A48 /* 40.69.106.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469250 /* 40.70.146.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470AD0 /* 40.71.10.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6438 /* 40.74.100.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9228 /* 40.74.146.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2218 /* 40.75.34.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC248 /* 40.78.194.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECA40 /* 40.78.202.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE2C8 /* 40.78.226.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEA28 /* 40.78.234.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF298 /* 40.78.242.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFA58 /* 40.78.250.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8230 /* 40.79.130.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8A18 /* 40.79.138.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9218 /* 40.79.146.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9A60 /* 40.79.154.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA218 /* 40.79.162.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAA08 /* 40.79.170.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB248 /* 40.79.178.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBA00 /* 40.79.186.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC258 /* 40.79.194.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503288 /* 40.80.50.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F298 /* 40.112.242.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784A08 /* 40.120.74.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6210 /* 51.12.98.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCA10 /* 51.12.202.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE288 /* 51.12.226.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEA88 /* 51.12.234.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356A40 /* 51.53.106.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BA40 /* 51.53.186.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CA40 /* 51.103.202.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694288 /* 51.105.66.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694A88 /* 51.105.74.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3A10 /* 51.107.58.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9A10 /* 51.107.154.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743A10 /* 51.116.58.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749A50 /* 51.116.154.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F288 /* 51.116.242.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FA88 /* 51.116.250.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786218 /* 51.120.98.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786A88 /* 51.120.106.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D288 /* 51.120.210.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DA10 /* 51.120.218.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C92C0 /* 51.140.146.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD258 /* 51.140.210.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5A18 /* 52.138.90.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE248 /* 52.138.226.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26A98 /* 52.162.106.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76A48 /* 52.167.106.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68AC8 /* 52.182.138.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71230 /* 52.231.18.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79258 /* 52.231.146.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBA48 /* 52.236.186.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69A88 /* 52.246.154.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FA08 /* 65.52.250.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5240 /* 68.220.82.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6240 /* 68.221.98.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD9240 /* 68.221.146.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851A10 /* 102.133.26.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857A88 /* 102.133.122.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859A10 /* 102.133.154.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FA88 /* 102.133.250.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D01048 /* 104.208.16.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D09048 /* 104.208.144.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35180 /* 104.211.81.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39248 /* 104.211.146.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D612B0 /* 104.214.18.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170A40 /* 158.23.10.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177A40 /* 158.23.122.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C240 /* 158.23.194.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93208 /* 191.233.50.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CB80 /* 191.233.203.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9288 /* 191.234.146.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9A88 /* 191.234.154.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04D00D00 /* 4.208.13.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04EA7370 /* 4.234.115.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A5500 /* 13.74.85.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D537D00 /* 13.83.125.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1408C300 /* 20.8.195.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140A7F00 /* 20.10.127.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140F8D00 /* 20.15.141.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141A3FE0 /* 20.26.63.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A3100 /* 20.42.49.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14394B00 /* 20.57.75.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F2B500 /* 20.242.181.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14FEAD30 /* 20.254.173.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28533200 /* 40.83.50.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33885D00 /* 51.136.93.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430FC8 /* 13.67.15.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456D82 /* 13.69.109.130/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D457468 /* 13.69.116.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45EF44 /* 13.69.239.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45EF48 /* 13.69.239.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464F42 /* 13.70.79.66/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464FC8 /* 13.70.79.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47B1E8 /* 13.71.177.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6FC6 /* 13.78.111.198/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59B21A /* 13.89.178.26/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59B308 /* 13.89.179.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142490A8 /* 20.36.144.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269D90 /* 20.38.157.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4154 /* 20.42.65.84/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4158 /* 20.42.65.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4882 /* 20.42.72.130/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4918 /* 20.42.73.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0A7A /* 20.44.10.122/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1F28 /* 20.44.31.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324904 /* 20.50.73.4/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324908 /* 20.50.73.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143250D0 /* 20.50.80.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432C9C2 /* 20.50.201.194/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432C9C8 /* 20.50.201.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143440C8 /* 20.52.64.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344870 /* 20.52.72.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590108 /* 20.89.1.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14972090 /* 20.151.32.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDAD00 /* 20.189.173.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06660 /* 20.192.102.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0B8C0 /* 20.192.184.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24498 /* 20.194.68.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C28160 /* 20.194.129.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C39884 /* 20.195.152.132/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CDC058 /* 20.205.192.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D015A4 /* 20.208.21.164/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17627150 /* 23.98.113.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456FD0 /* 40.69.111.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469748 /* 40.70.151.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284697C0 /* 40.70.151.192/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A62C0 /* 40.74.98.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8D98 /* 40.79.141.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9678 /* 40.79.150.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA39A /* 40.79.163.154/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA708 /* 40.79.167.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FABE2 /* 40.79.171.226/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAD28 /* 40.79.173.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBD3A /* 40.79.189.58/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBFD0 /* 40.79.191.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC522 /* 40.79.197.34/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503628 /* 40.80.54.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28780940 /* 40.120.9.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287840D0 /* 40.120.64.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784DB4 /* 40.120.77.180/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BC030 /* 51.11.192.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D0114 /* 51.13.1.20/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8058 /* 51.13.128.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CDA4 /* 51.103.205.164/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680FF0 /* 51.104.15.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680FFC /* 51.104.15.252/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694780 /* 51.105.71.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694788 /* 51.105.71.136/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B816C /* 51.107.129.108/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BC108 /* 51.107.193.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F668 /* 51.116.246.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FDA8 /* 51.116.253.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786ED0 /* 51.120.110.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D698 /* 51.120.214.152/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384C168 /* 51.132.193.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384C170 /* 51.132.193.112/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AA0C0 /* 51.138.160.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE542 /* 52.138.229.66/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76D42 /* 52.167.109.66/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76F88 /* 52.167.111.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87042 /* 52.168.112.66/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A875A8 /* 52.168.117.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B21102 /* 52.178.17.2/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B211E8 /* 52.178.17.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68D3E /* 52.182.141.62/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68FD0 /* 52.182.143.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E717C8 /* 52.231.23.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E797C0 /* 52.231.151.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69EA8 /* 52.246.158.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662540A8 /* 102.37.64.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662548C0 /* 102.37.72.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857FB4 /* 102.133.127.180/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FED0 /* 102.133.254.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EA2E0 /* 104.46.162.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D01058 /* 104.208.16.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D09700 /* 104.208.151.0/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D351E8 /* 104.211.81.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9664 /* 191.234.150.100/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9DB0 /* 191.234.157.176/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8626C /* 4.232.98.108/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E862A0 /* 4.232.98.160/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E862A8 /* 4.232.98.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F804 /* 13.73.248.4/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F830 /* 13.73.248.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F840 /* 13.73.248.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140E7808 /* 20.14.120.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140E79A0 /* 20.14.121.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140E79B8 /* 20.14.121.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141136AA /* 20.17.54.170/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141136AC /* 20.17.54.172/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141136B0 /* 20.17.54.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152016 /* 20.21.32.22/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1415247C /* 20.21.36.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152530 /* 20.21.37.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141537D8 /* 20.21.55.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14155016 /* 20.21.80.22/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14155390 /* 20.21.83.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141A1272 /* 20.26.18.114/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141A1278 /* 20.26.18.120/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424787A /* 20.36.120.122/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424787C /* 20.36.120.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142478D0 /* 20.36.120.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425407A /* 20.37.64.122/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425407C /* 20.37.64.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142540D0 /* 20.37.64.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259CC8 /* 20.37.156.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259CF0 /* 20.37.156.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259D00 /* 20.37.157.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259D10 /* 20.37.157.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259D20 /* 20.37.157.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C318 /* 20.37.195.24/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C330 /* 20.37.195.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C340 /* 20.37.195.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C380 /* 20.37.195.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E07A /* 20.37.224.122/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E07C /* 20.37.224.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E0D0 /* 20.37.224.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265468 /* 20.38.84.104/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265480 /* 20.38.84.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265500 /* 20.38.85.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265600 /* 20.38.86.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268846 /* 20.38.136.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142688D0 /* 20.38.136.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142688D8 /* 20.38.136.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270B1A /* 20.39.11.26/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270B1C /* 20.39.11.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270B30 /* 20.39.11.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E63C /* 20.40.230.60/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14290468 /* 20.41.4.104/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429046C /* 20.41.4.108/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142904D0 /* 20.41.4.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142904E0 /* 20.41.4.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14290500 /* 20.41.5.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294192 /* 20.41.65.146/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294194 /* 20.41.65.148/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294198 /* 20.41.65.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C07A /* 20.41.192.122/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C07C /* 20.41.192.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C190 /* 20.41.193.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A0046 /* 20.42.0.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A04F0 /* 20.42.4.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A0600 /* 20.42.6.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A0640 /* 20.42.6.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8320 /* 20.42.131.32/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8328 /* 20.42.131.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8330 /* 20.42.131.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8380 /* 20.42.131.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE07A /* 20.42.224.122/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE310 /* 20.42.227.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE320 /* 20.42.227.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE340 /* 20.42.227.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B29B0 /* 20.43.41.176/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B29B8 /* 20.43.41.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B29C0 /* 20.43.41.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4198 /* 20.43.65.152/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B41B0 /* 20.43.65.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B41C0 /* 20.43.65.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B41E0 /* 20.43.65.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B82C0 /* 20.43.130.192/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B82C4 /* 20.43.130.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B82C8 /* 20.43.130.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B82D0 /* 20.43.130.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B82E0 /* 20.43.130.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8300 /* 20.43.131.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8340 /* 20.43.131.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5A58 /* 20.45.90.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5E50 /* 20.45.94.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC07A /* 20.45.192.122/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC07C /* 20.45.192.124/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC0D0 /* 20.45.192.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC0D8 /* 20.45.192.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC0E0 /* 20.45.192.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF230 /* 20.45.242.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0F38 /* 20.46.15.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FE948 /* 20.47.233.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C4E8 /* 20.48.196.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C57C /* 20.48.197.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430CA10 /* 20.48.202.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430CA18 /* 20.48.202.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14320000 /* 20.50.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143300CC /* 20.51.0.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330120 /* 20.51.1.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330504 /* 20.51.5.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143305C0 /* 20.51.5.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330E4C /* 20.51.14.76/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143315A0 /* 20.51.21.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143315B0 /* 20.51.21.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143315F0 /* 20.51.21.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345930 /* 20.52.89.48/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345F00 /* 20.52.95.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1435316C /* 20.53.49.108/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143535C0 /* 20.53.53.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B4F60 /* 20.59.79.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B4FC0 /* 20.59.79.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418550 /* 20.65.133.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144186C0 /* 20.65.134.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144186E0 /* 20.65.134.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144186F0 /* 20.65.134.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418710 /* 20.65.135.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144504E0 /* 20.69.4.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144504F0 /* 20.69.4.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DD00 /* 20.70.221.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DDE0 /* 20.70.221.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481016 /* 20.72.16.22/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1448102C /* 20.72.16.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481420 /* 20.72.20.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC45E /* 20.74.196.94/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC540 /* 20.74.197.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453DD50 /* 20.83.221.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453DD54 /* 20.83.221.84/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453DDD0 /* 20.83.221.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14565DC0 /* 20.86.93.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14565DD0 /* 20.86.93.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575008 /* 20.87.80.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589A00 /* 20.88.154.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589D48 /* 20.88.157.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589D60 /* 20.88.157.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590B70 /* 20.89.11.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590B74 /* 20.89.11.116/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590BF8 /* 20.89.11.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A2090 /* 20.90.32.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A2428 /* 20.90.36.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A2460 /* 20.90.36.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A2470 /* 20.90.36.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8374 /* 20.90.131.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8440 /* 20.90.132.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C0490 /* 20.92.4.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146121F8 /* 20.97.33.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14612280 /* 20.97.34.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146122C0 /* 20.97.34.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14629130 /* 20.98.145.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14629140 /* 20.98.145.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14629170 /* 20.98.145.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14629200 /* 20.98.146.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C0A8 /* 20.98.192.168/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C0C0 /* 20.98.192.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C180 /* 20.98.193.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C1C0 /* 20.98.193.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C774 /* 20.98.199.116/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14630B04 /* 20.99.11.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14630B08 /* 20.99.11.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146401A8 /* 20.100.1.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640228 /* 20.100.2.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D180 /* 20.105.209.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F00C0 /* 20.111.0.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14779C20 /* 20.119.156.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14779D40 /* 20.119.157.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D9D20 /* 20.125.157.32/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A06E /* 20.150.160.110/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A07C /* 20.150.160.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A190 /* 20.150.161.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6846 /* 20.189.104.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6AE0 /* 20.189.106.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6C00 /* 20.189.108.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC1B0 /* 20.189.193.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA7F4 /* 20.191.167.244/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02F80 /* 20.192.47.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02F84 /* 20.192.47.132/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C05214 /* 20.192.82.20/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C05278 /* 20.192.82.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C05480 /* 20.192.84.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09890 /* 20.192.152.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09958 /* 20.192.153.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09F48 /* 20.192.159.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A016 /* 20.192.160.22/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A170 /* 20.192.161.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A178 /* 20.192.161.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A890 /* 20.192.168.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A978 /* 20.192.169.120/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0AED4 /* 20.192.174.212/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0AEE0 /* 20.192.174.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0AF00 /* 20.192.175.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E122 /* 20.192.225.34/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E124 /* 20.192.225.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E1C0 /* 20.192.225.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35330 /* 20.195.83.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35510 /* 20.195.85.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35520 /* 20.195.85.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C392C8 /* 20.195.146.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7C950 /* 20.199.201.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C008 /* 20.200.192.8/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C00E /* 20.200.192.14/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C2E8 /* 20.200.194.232/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C3B0 /* 20.200.195.176/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C608 /* 20.200.198.8/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD3130 /* 20.205.49.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD3140 /* 20.205.49.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4478 /* 20.205.68.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4500 /* 20.205.69.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0060 /* 20.206.0.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CEB218 /* 20.206.178.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CEB230 /* 20.206.178.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CEB240 /* 20.206.178.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CFA894 /* 20.207.168.148/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CFA8A0 /* 20.207.168.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00790 /* 20.208.7.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D09430 /* 20.208.148.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D09540 /* 20.208.149.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D3E580 /* 20.211.229.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5C600 /* 20.213.198.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D704F8 /* 20.215.4.248/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D704FC /* 20.215.4.252/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70680 /* 20.215.6.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92CF8 /* 20.217.44.248/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92CFC /* 20.217.44.252/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92E80 /* 20.217.46.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284332F6 /* 40.67.50.246/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1846 /* 40.74.24.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1E80 /* 40.74.30.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1EA0 /* 40.74.30.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1EC0 /* 40.74.30.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1F00 /* 40.74.31.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850387A /* 40.80.56.122/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503990 /* 40.80.57.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285039A0 /* 40.80.57.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A87A /* 40.80.168.122/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A87C /* 40.80.168.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A990 /* 40.80.169.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B846 /* 40.80.184.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BC30 /* 40.80.188.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BC40 /* 40.80.188.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BC80 /* 40.80.188.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BD00 /* 40.80.189.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852F844 /* 40.82.248.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852FD60 /* 40.82.253.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852FD80 /* 40.82.253.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852FE00 /* 40.82.254.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859107A /* 40.89.16.122/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591190 /* 40.89.17.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285911A0 /* 40.89.17.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287519E0 /* 40.117.25.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877084C /* 40.119.8.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770B40 /* 40.119.11.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878527C /* 40.120.82.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28785690 /* 40.120.86.144/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28785694 /* 40.120.86.148/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28785734 /* 40.120.87.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1110 /* 51.12.17.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1118 /* 51.12.17.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C11F6 /* 51.12.17.246/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C16A8 /* 51.12.22.168/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C16C8 /* 51.12.22.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1908 /* 51.12.25.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1D1E /* 51.12.29.30/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2EE6 /* 51.12.46.230/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2F1C /* 51.12.47.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C48D8 /* 51.12.72.216/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C4958 /* 51.12.73.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC6D2 /* 51.12.198.210/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8A48 /* 51.13.138.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8F00 /* 51.13.143.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351CD4 /* 51.53.28.212/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351E98 /* 51.53.30.152/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351EA0 /* 51.53.30.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335ACD4 /* 51.53.172.212/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335ACD8 /* 51.53.172.216/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335AE90 /* 51.53.174.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368198C /* 51.104.25.140/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681998 /* 51.104.25.152/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336819B0 /* 51.104.25.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336819C0 /* 51.104.25.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681B00 /* 51.104.27.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369587A /* 51.105.88.122/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369587C /* 51.105.88.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336958D0 /* 51.105.88.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B307C /* 51.107.48.124/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B30D0 /* 51.107.48.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B30D8 /* 51.107.48.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B907A /* 51.107.144.122/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B907C /* 51.107.144.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B90D0 /* 51.107.144.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF3A8 /* 51.107.243.168/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF7E0 /* 51.107.247.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFBB8 /* 51.107.251.184/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFF80 /* 51.107.255.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743044 /* 51.116.48.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743080 /* 51.116.48.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743088 /* 51.116.48.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337437A8 /* 51.116.55.168/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744B48 /* 51.116.75.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749044 /* 51.116.144.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749080 /* 51.116.144.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749088 /* 51.116.144.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337495E8 /* 51.116.149.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378287C /* 51.120.40.124/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337828D0 /* 51.120.40.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337828D8 /* 51.120.40.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E07A /* 51.120.224.122/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E07C /* 51.120.224.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E0D0 /* 51.120.224.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378ED0C /* 51.120.237.12/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A046 /* 51.137.160.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A1A0 /* 51.137.161.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A1C0 /* 51.137.161.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD772 /* 51.138.215.114/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD774 /* 51.138.215.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD778 /* 51.138.215.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883078 /* 52.136.48.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488307C /* 52.136.48.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348830D0 /* 52.136.48.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348830E0 /* 52.136.48.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BA70 /* 52.136.186.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BEB8 /* 52.136.190.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6C74 /* 52.139.108.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6990 /* 52.140.105.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C69A0 /* 52.140.105.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928C80 /* 52.146.140.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349371B0 /* 52.147.113.176/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937708 /* 52.147.119.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968B4C /* 52.150.139.76/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968B60 /* 52.150.139.96/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968B70 /* 52.150.139.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968B80 /* 52.150.139.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968BA0 /* 52.150.139.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349FC900 /* 52.159.201.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC74B8 /* 52.172.116.184/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC74BE /* 52.172.116.190/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E451A0 /* 52.228.81.160/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E451A8 /* 52.228.81.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E451B0 /* 52.228.81.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E451C0 /* 52.228.81.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F2285C /* 52.242.40.92/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22860 /* 52.242.40.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5C04 /* 68.221.92.4/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5D88 /* 68.221.93.136/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5D90 /* 68.221.93.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625518C /* 102.37.81.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662555D0 /* 102.37.85.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A0A0 /* 102.37.160.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A314 /* 102.37.163.20/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853862 /* 102.133.56.98/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853864 /* 102.133.56.100/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853868 /* 102.133.56.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685D868 /* 102.133.216.104/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685D86C /* 102.133.216.108/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685D940 /* 102.133.217.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176D80 /* 158.23.109.128/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176D84 /* 158.23.109.132/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176D88 /* 158.23.109.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90816 /* 191.233.8.22/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90A20 /* 191.233.10.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90A28 /* 191.233.10.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE198 /* 191.235.225.152/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE19C /* 191.235.225.156/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE1B0 /* 191.235.225.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE1C0 /* 191.235.225.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE1E0 /* 191.235.225.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4880 /* 191.238.72.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4CB0 /* 191.238.76.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4DC0 /* 191.238.77.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4DD0 /* 191.238.77.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4DD8 /* 191.238.77.216/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D401B2C /* 13.64.27.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D402318 /* 13.64.35.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4026A7 /* 13.64.38.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4027AA /* 13.64.39.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D408077 /* 13.64.128.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D40AED7 /* 13.64.174.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D40B1E0 /* 13.64.177.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D425083 /* 13.66.80.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4730C0 /* 13.71.48.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D473151 /* 13.71.49.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4731F4 /* 13.71.49.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4732AF /* 13.71.50.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D473484 /* 13.71.52.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FD80 /* 13.73.253.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FE00 /* 13.73.254.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FE80 /* 13.73.254.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5311BC /* 13.83.17.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5317C2 /* 13.83.23.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D533825 /* 13.83.56.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5340A6 /* 13.83.64.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D534259 /* 13.83.66.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D53427C /* 13.83.66.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D53443C /* 13.83.68.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D534669 /* 13.83.70.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5361B4 /* 13.83.97.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5361BC /* 13.83.97.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D536626 /* 13.83.102.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5391DE /* 13.83.145.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5393C0 /* 13.83.147.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5397D4 /* 13.83.151.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D53F8F8 /* 13.83.248.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D53F922 /* 13.83.249.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D53F93A /* 13.83.249.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D55BF59 /* 13.85.191.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5688DE /* 13.86.136.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D568914 /* 13.86.137.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D568BE5 /* 13.86.139.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D569BD8 /* 13.86.155.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56B120 /* 13.86.177.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56B905 /* 13.86.185.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56B906 /* 13.86.185.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56B923 /* 13.86.185.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56B951 /* 13.86.185.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56B95B /* 13.86.185.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56C014 /* 13.86.192.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56C141 /* 13.86.193.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56C2BE /* 13.86.194.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56F962 /* 13.86.249.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56FA3E /* 13.86.250.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56FAF4 /* 13.86.250.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56FC74 /* 13.86.252.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56FE76 /* 13.86.254.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56FEBF /* 13.86.254.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57877A /* 13.87.135.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D579932 /* 13.87.153.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D579A18 /* 13.87.154.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D579A64 /* 13.87.154.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D579AA4 /* 13.87.154.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D579DBC /* 13.87.157.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A068 /* 13.87.160.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A08F /* 13.87.160.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A0D4 /* 13.87.160.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A112 /* 13.87.161.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A1EB /* 13.87.161.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A1F1 /* 13.87.161.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A25B /* 13.87.162.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A3E6 /* 13.87.163.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A414 /* 13.87.164.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A41E /* 13.87.164.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A4BA /* 13.87.164.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A4CD /* 13.87.164.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A72E /* 13.87.167.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A73F /* 13.87.167.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A7AC /* 13.87.167.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A7AE /* 13.87.167.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A7C6 /* 13.87.167.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57CF51 /* 13.87.207.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57D815 /* 13.87.216.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57D882 /* 13.87.216.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57D90B /* 13.87.217.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57D94B /* 13.87.217.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57D950 /* 13.87.217.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57DA46 /* 13.87.218.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57DAA9 /* 13.87.218.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58386B /* 13.88.56.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58418C /* 13.88.65.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5841CC /* 13.88.65.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5880DA /* 13.88.128.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D588174 /* 13.88.129.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5881A0 /* 13.88.129.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58847B /* 13.88.132.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5885A0 /* 13.88.133.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58872A /* 13.88.135.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D588743 /* 13.88.135.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D588748 /* 13.88.135.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B16F3 /* 13.91.22.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B7E4E /* 13.91.126.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B8890 /* 13.91.136.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B8AAC /* 13.91.138.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254430 /* 20.37.68.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254440 /* 20.37.68.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254480 /* 20.37.68.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254678 /* 20.37.70.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14255038 /* 20.37.80.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142552D7 /* 20.37.82.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C780 /* 20.37.199.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268C20 /* 20.38.140.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268C40 /* 20.38.140.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268E78 /* 20.38.142.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14278609 /* 20.39.134.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14278643 /* 20.39.134.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427865D /* 20.39.134.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14278BF5 /* 20.39.139.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14278C17 /* 20.39.140.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14278D32 /* 20.39.141.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14280161 /* 20.40.1.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14280165 /* 20.40.1.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142801BF /* 20.40.1.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14280403 /* 20.40.4.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14280418 /* 20.40.4.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A000 /* 20.40.160.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A239 /* 20.40.162.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A431 /* 20.40.164.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A4D7 /* 20.40.164.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A507 /* 20.40.165.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A51F /* 20.40.165.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A543 /* 20.40.165.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428B174 /* 20.40.177.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428B6B4 /* 20.40.182.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428BA76 /* 20.40.186.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428BBB7 /* 20.40.187.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428BC54 /* 20.40.188.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142962FC /* 20.41.98.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C51C /* 20.41.197.28/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C6C0 /* 20.41.198.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C700 /* 20.41.199.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A189F /* 20.42.24.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A27BC /* 20.42.39.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE6EC /* 20.42.230.236/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE6F0 /* 20.42.230.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE7C0 /* 20.42.231.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2CF0 /* 20.43.44.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2D80 /* 20.43.45.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2DC0 /* 20.43.45.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2F50 /* 20.43.47.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B46CE /* 20.43.70.206/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B46D0 /* 20.43.70.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B46E8 /* 20.43.70.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B46F0 /* 20.43.70.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4780 /* 20.43.71.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142BA174 /* 20.43.161.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142BA195 /* 20.43.161.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142BA1D7 /* 20.43.161.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142BAFBA /* 20.43.175.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142BAFD2 /* 20.43.175.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142BAFED /* 20.43.175.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142BB627 /* 20.43.182.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C2044 /* 20.44.32.68/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C20FD /* 20.44.32.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C2232 /* 20.44.34.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C229A /* 20.44.34.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C238A /* 20.44.35.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C8239 /* 20.44.130.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C82DE /* 20.44.130.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C83A2 /* 20.44.131.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142CA7CF /* 20.44.167.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142CC57E /* 20.44.197.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142CC668 /* 20.44.198.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142CF0DE /* 20.44.240.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5DA0 /* 20.45.93.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5DC0 /* 20.45.93.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5E48 /* 20.45.94.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E6C75 /* 20.46.108.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E9898 /* 20.46.152.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E9F2F /* 20.46.159.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14300FE3 /* 20.48.15.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C000 /* 20.48.192.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C010 /* 20.48.192.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C1A8 /* 20.48.193.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C960 /* 20.48.201.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C980 /* 20.48.201.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430CA08 /* 20.48.202.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316E54 /* 20.49.110.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316F30 /* 20.49.111.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316F40 /* 20.49.111.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316F80 /* 20.49.111.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143179C0 /* 20.49.121.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317A00 /* 20.49.122.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317C00 /* 20.49.124.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317D00 /* 20.49.125.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317D80 /* 20.49.125.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317DA0 /* 20.49.125.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317DB0 /* 20.49.125.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317DB8 /* 20.49.125.184/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317DC0 /* 20.49.125.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317E00 /* 20.49.126.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317FF8 /* 20.49.127.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143191F9 /* 20.49.145.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431A628 /* 20.49.166.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431A676 /* 20.49.166.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431A681 /* 20.49.166.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431F4EE /* 20.49.244.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143210EB /* 20.50.16.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143210FD /* 20.50.16.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432185F /* 20.50.24.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143219BB /* 20.50.25.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324488 /* 20.50.68.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324490 /* 20.50.68.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143244A0 /* 20.50.68.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143244C0 /* 20.50.68.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324500 /* 20.50.69.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324600 /* 20.50.70.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432863B /* 20.50.134.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432E4F8 /* 20.50.228.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432E7B0 /* 20.50.231.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432EE57 /* 20.50.238.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345DE0 /* 20.52.93.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345E00 /* 20.52.94.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345E78 /* 20.52.94.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352800 /* 20.53.40.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352840 /* 20.53.40.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352860 /* 20.53.40.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352870 /* 20.53.40.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352880 /* 20.53.40.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352CE0 /* 20.53.44.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14354AE0 /* 20.53.74.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14354DAB /* 20.53.77.171/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14354F14 /* 20.53.79.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14354F90 /* 20.53.79.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143551D1 /* 20.53.81.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14356807 /* 20.53.104.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14356884 /* 20.53.104.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14356D6A /* 20.53.109.106/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14356D90 /* 20.53.109.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14357362 /* 20.53.115.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14357365 /* 20.53.115.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14357366 /* 20.53.115.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436038F /* 20.54.3.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143603D2 /* 20.54.3.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143604D4 /* 20.54.4.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436254B /* 20.54.37.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436288B /* 20.54.40.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143642B2 /* 20.54.66.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143642BA /* 20.54.66.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143642C6 /* 20.54.66.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14366077 /* 20.54.96.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14366941 /* 20.54.105.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14366948 /* 20.54.105.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436694E /* 20.54.105.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436697A /* 20.54.105.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143669F3 /* 20.54.105.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14366A0C /* 20.54.106.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14366AD3 /* 20.54.106.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436B89A /* 20.54.184.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436D178 /* 20.54.209.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436D1A7 /* 20.54.209.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436D1AF /* 20.54.209.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436D1EC /* 20.54.209.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436D1EE /* 20.54.209.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436D1F0 /* 20.54.209.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4780 /* 20.58.71.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A47C0 /* 20.58.71.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B4D80 /* 20.59.77.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B4E00 /* 20.59.78.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B4F50 /* 20.59.79.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6000 /* 20.61.96.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6080 /* 20.61.96.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D60C0 /* 20.61.96.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6298 /* 20.61.98.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143DF9D0 /* 20.61.249.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8188 /* 20.62.129.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E9DDF /* 20.62.157.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143EB40D /* 20.62.180.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143ED472 /* 20.62.212.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143EEBF7 /* 20.62.235.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143F34AF /* 20.63.52.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418250 /* 20.65.130.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1443D39B /* 20.67.211.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1443D39D /* 20.67.211.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14447D4F /* 20.68.125.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DD20 /* 20.70.221.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DD40 /* 20.70.221.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DDC8 /* 20.70.221.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446F96B /* 20.70.249.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14475167 /* 20.71.81.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14488204 /* 20.72.130.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1448841A /* 20.72.132.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144CB5D2 /* 20.76.181.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144CDEF4 /* 20.76.222.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144CE667 /* 20.76.230.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144CFE83 /* 20.76.254.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14510092 /* 20.81.0.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14517192 /* 20.81.113.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145239EA /* 20.82.57.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14524002 /* 20.82.64.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14529B10 /* 20.82.155.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452AB9E /* 20.82.171.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452CD05 /* 20.82.205.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452E3AA /* 20.82.227.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452E7A2 /* 20.82.231.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452F692 /* 20.82.246.146/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452F694 /* 20.82.246.148/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452F6A0 /* 20.82.246.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452F6C0 /* 20.82.246.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452FB42 /* 20.82.251.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145383AE /* 20.83.131.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1454196B /* 20.84.25.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1455ADA5 /* 20.85.173.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1455B343 /* 20.85.179.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14565DE0 /* 20.86.93.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14565F00 /* 20.86.95.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1456E785 /* 20.86.231.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1456ECC4 /* 20.86.236.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575000 /* 20.87.80.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589A20 /* 20.88.154.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589A40 /* 20.88.154.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589B80 /* 20.88.155.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589C00 /* 20.88.156.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589C80 /* 20.88.156.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589D40 /* 20.88.157.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590B80 /* 20.89.11.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590BC0 /* 20.89.11.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590BF0 /* 20.89.11.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A2080 /* 20.90.32.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8300 /* 20.90.131.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8340 /* 20.90.131.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8378 /* 20.90.131.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145AA970 /* 20.90.169.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C0380 /* 20.92.3.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C03C0 /* 20.92.3.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C0480 /* 20.92.4.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145D1A6D /* 20.93.26.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145D3064 /* 20.93.48.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145D3589 /* 20.93.53.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145DB065 /* 20.93.176.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145DED27 /* 20.93.237.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14612180 /* 20.97.33.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146121C0 /* 20.97.33.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146121F0 /* 20.97.33.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146400A0 /* 20.100.0.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640100 /* 20.100.1.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146401A0 /* 20.100.1.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14651CBB /* 20.101.28.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146755E3 /* 20.103.85.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1467A2A8 /* 20.103.162.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1467CCCC /* 20.103.204.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14682550 /* 20.104.37.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14690133 /* 20.105.1.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146911FB /* 20.105.17.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D000 /* 20.105.208.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D040 /* 20.105.208.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D0C0 /* 20.105.208.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146C516B /* 20.108.81.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F0000 /* 20.111.0.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F0038 /* 20.111.0.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14972A0F /* 20.151.42.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1497498D /* 20.151.73.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1497BCAE /* 20.151.188.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1497BCBB /* 20.151.188.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1497BCBE /* 20.151.188.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1497BCC7 /* 20.151.188.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1497BCD4 /* 20.151.188.212/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1497BCFC /* 20.151.188.252/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B8FB8F /* 20.184.251.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B9084A /* 20.185.8.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B94835 /* 20.185.72.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B94949 /* 20.185.73.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B9D35E /* 20.185.211.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B9D73E /* 20.185.215.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B9D75B /* 20.185.215.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBA1AC /* 20.187.161.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBBB9B /* 20.187.187.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC380 /* 20.187.195.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC390 /* 20.187.195.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC3A0 /* 20.187.195.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC3C0 /* 20.187.195.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC518 /* 20.187.197.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC4D9B /* 20.188.77.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BCDA6F /* 20.188.218.111/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BCDAA5 /* 20.188.218.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BCDB96 /* 20.188.219.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BCDD37 /* 20.188.221.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD4A50 /* 20.189.74.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD4C64 /* 20.189.76.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD4D7E /* 20.189.77.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6F1C /* 20.189.111.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6F20 /* 20.189.111.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6F40 /* 20.189.111.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6F80 /* 20.189.111.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD70AF /* 20.189.112.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD7A29 /* 20.189.122.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD8E3A /* 20.189.142.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC120 /* 20.189.193.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC140 /* 20.189.193.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC1A8 /* 20.189.193.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE148 /* 20.189.225.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA1C8 /* 20.191.161.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02B40 /* 20.192.43.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C098A0 /* 20.192.152.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C098C0 /* 20.192.152.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09950 /* 20.192.153.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A900 /* 20.192.169.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A940 /* 20.192.169.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A970 /* 20.192.169.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C18928 /* 20.193.137.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C18985 /* 20.193.137.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1992B /* 20.193.153.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C199A2 /* 20.193.153.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C19A26 /* 20.193.154.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C23BE6 /* 20.194.59.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C29009 /* 20.194.144.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C29019 /* 20.194.144.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C2901B /* 20.194.144.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C2901F /* 20.194.144.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35340 /* 20.195.83.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35480 /* 20.195.84.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35508 /* 20.195.85.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C355C0 /* 20.195.85.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35600 /* 20.195.86.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C54085 /* 20.197.64.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C569AC /* 20.197.105.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C569E6 /* 20.197.105.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C577CC /* 20.197.119.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C68103 /* 20.198.129.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C849FD /* 20.200.73.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C000 /* 20.200.192.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C230 /* 20.200.194.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C240 /* 20.200.194.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C280 /* 20.200.194.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C340 /* 20.200.195.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C380 /* 20.200.195.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C3A8 /* 20.200.195.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C9A7 /* 20.200.201.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C90269 /* 20.201.2.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C93A75 /* 20.201.58.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C94985 /* 20.201.73.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCEAEB /* 20.204.234.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4400 /* 20.205.68.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4440 /* 20.205.68.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4470 /* 20.205.68.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0318 /* 20.206.3.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0320 /* 20.206.3.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0340 /* 20.206.3.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0380 /* 20.206.3.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0400 /* 20.206.4.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00400 /* 20.208.4.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00440 /* 20.208.4.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00468 /* 20.208.4.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D2031B /* 20.210.3.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D54153 /* 20.213.65.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626AA0 /* 23.98.106.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626AC0 /* 23.98.106.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626B00 /* 23.98.107.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626B10 /* 23.98.107.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626B18 /* 23.98.107.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626B20 /* 23.98.107.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626B40 /* 23.98.107.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626B80 /* 23.98.107.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626D28 /* 23.98.109.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763599C /* 23.99.89.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408690 /* 40.64.134.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284086C0 /* 40.64.134.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28413167 /* 40.65.49.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841318C /* 40.65.49.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28413197 /* 40.65.49.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423D7B /* 40.66.61.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423EAC /* 40.66.62.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847E908 /* 40.71.233.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847E9BD /* 40.71.233.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847EAC9 /* 40.71.234.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847EC0F /* 40.71.236.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A0562 /* 40.74.5.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A0AC1 /* 40.74.10.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1218 /* 40.74.18.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A2011 /* 40.74.32.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A2018 /* 40.74.32.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A2126 /* 40.74.33.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A2A54 /* 40.74.42.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A2A56 /* 40.74.42.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284AB752 /* 40.74.183.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284AB779 /* 40.74.183.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284AC89C /* 40.74.200.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284AC9E6 /* 40.74.201.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ACA16 /* 40.74.202.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C85EC /* 40.76.133.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C95F6 /* 40.76.149.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CA190 /* 40.76.161.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CA1A5 /* 40.76.161.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CA1A8 /* 40.76.161.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503E60 /* 40.80.62.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503F00 /* 40.80.63.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503F80 /* 40.80.63.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850F0B9 /* 40.80.240.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850F0BF /* 40.80.240.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850F0D6 /* 40.80.240.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850F12B /* 40.80.241.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850F143 /* 40.80.241.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850F84F /* 40.80.248.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850F934 /* 40.80.249.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850F9D2 /* 40.80.249.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850F9DB /* 40.80.249.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28511925 /* 40.81.25.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28511941 /* 40.81.25.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285138BE /* 40.81.56.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513CCE /* 40.81.60.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517183 /* 40.81.113.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851748D /* 40.81.116.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851748F /* 40.81.116.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285174DF /* 40.81.116.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517517 /* 40.81.117.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851B5BE /* 40.81.181.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851B5D4 /* 40.81.181.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851B5D6 /* 40.81.181.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851B675 /* 40.81.182.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851B67C /* 40.81.182.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851BA80 /* 40.81.186.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851BC6B /* 40.81.188.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851BD34 /* 40.81.189.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851BE61 /* 40.81.190.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852AD67 /* 40.82.173.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BB8D /* 40.82.187.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852E009 /* 40.82.224.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852E031 /* 40.82.224.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852E034 /* 40.82.224.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852E03C /* 40.82.224.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852E041 /* 40.82.224.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852EC09 /* 40.82.236.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852EC23 /* 40.82.236.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2853B852 /* 40.83.184.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856A109 /* 40.86.161.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856A459 /* 40.86.164.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856FE7D /* 40.86.254.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2858102C /* 40.88.16.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285812D0 /* 40.88.18.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285812F8 /* 40.88.18.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2858170F /* 40.88.23.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285817CA /* 40.88.23.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285830ED /* 40.88.48.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2858E7F9 /* 40.88.231.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2858FB9D /* 40.88.251.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285914E8 /* 40.89.20.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285914F0 /* 40.89.20.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591580 /* 40.89.21.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591600 /* 40.89.22.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591640 /* 40.89.22.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591650 /* 40.89.22.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591660 /* 40.89.22.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591680 /* 40.89.22.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285916C0 /* 40.89.22.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285917F0 /* 40.89.23.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285AB83F /* 40.90.184.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B5792 /* 40.91.87.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870FC4E /* 40.112.252.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871B234 /* 40.113.178.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871B238 /* 40.113.178.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871B280 /* 40.113.178.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871B300 /* 40.113.179.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871B400 /* 40.113.180.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28734BEB /* 40.115.75.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876B950 /* 40.118.185.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876C812 /* 40.118.200.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876D541 /* 40.118.213.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876EDD3 /* 40.118.237.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770116 /* 40.119.1.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28772A55 /* 40.119.42.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28772A56 /* 40.119.42.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28779F4E /* 40.119.159.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28779F7E /* 40.119.159.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28779FB5 /* 40.119.159.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28779FDA /* 40.119.159.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877A9F1 /* 40.119.169.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877AA34 /* 40.119.170.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877AA3C /* 40.119.170.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877AAB2 /* 40.119.170.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877AAB4 /* 40.119.170.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877D784 /* 40.119.215.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878015B /* 40.120.1.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878015E /* 40.120.1.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28780160 /* 40.120.1.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287802D0 /* 40.120.2.208/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287856A0 /* 40.120.86.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287856C0 /* 40.120.86.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28785738 /* 40.120.87.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C8802 /* 40.124.136.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C884B /* 40.124.136.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C888A /* 40.124.136.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F0ABB /* 40.127.10.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F0B0B /* 40.127.11.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F0E62 /* 40.127.14.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F0E68 /* 40.127.14.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F170C /* 40.127.23.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F54D2 /* 40.127.84.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F91BF /* 40.127.145.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F93D5 /* 40.127.147.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F9469 /* 40.127.148.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F947F /* 40.127.148.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F9655 /* 40.127.150.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FE098 /* 40.127.224.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FE317 /* 40.127.227.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FE525 /* 40.127.229.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FEAFC /* 40.127.234.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FEB14 /* 40.127.235.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FEBF7 /* 40.127.235.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FF124 /* 40.127.241.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B18C6 /* 51.11.24.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B1944 /* 51.11.25.68/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B19AC /* 51.11.25.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BAC1E /* 51.11.172.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BAC38 /* 51.11.172.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BACA0 /* 51.11.172.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BE977 /* 51.11.233.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BE9B0 /* 51.11.233.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BEB53 /* 51.11.235.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D1000 /* 51.13.16.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D19FD /* 51.13.25.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D88A8 /* 51.13.136.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8BE0 /* 51.13.139.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8D80 /* 51.13.141.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8DF8 /* 51.13.141.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D94FF /* 51.13.148.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D9546 /* 51.13.149.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367037F /* 51.103.3.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336703F0 /* 51.103.3.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681EAC /* 51.104.30.172/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681EC0 /* 51.104.30.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681F00 /* 51.104.31.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681F20 /* 51.104.31.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681F30 /* 51.104.31.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681F40 /* 51.104.31.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336824D4 /* 51.104.36.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368967F /* 51.104.150.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33689699 /* 51.104.150.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336898A2 /* 51.104.152.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33689B0F /* 51.104.155.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33689BE9 /* 51.104.155.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33689C1A /* 51.104.156.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33689F08 /* 51.104.159.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33689F0A /* 51.104.159.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33689F15 /* 51.104.159.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368B0DB /* 51.104.176.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368B135 /* 51.104.177.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368B200 /* 51.104.178.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368F80B /* 51.104.248.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695C40 /* 51.105.92.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695C80 /* 51.105.92.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695CA0 /* 51.105.92.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369602C /* 51.105.96.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33696198 /* 51.105.97.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369634F /* 51.105.99.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33696501 /* 51.105.101.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33698215 /* 51.105.130.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369908C /* 51.105.144.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369916B /* 51.105.145.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33699808 /* 51.105.152.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369985F /* 51.105.152.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336998EE /* 51.105.152.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369A00A /* 51.105.160.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369A436 /* 51.105.164.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369A5EB /* 51.105.165.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369B707 /* 51.105.183.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369C14E /* 51.105.193.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369C3A6 /* 51.105.195.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369CE40 /* 51.105.206.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369D4EF /* 51.105.212.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369F95E /* 51.105.249.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369FA3E /* 51.105.250.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369FAC4 /* 51.105.250.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369FAC8 /* 51.105.250.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B089F /* 51.107.8.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B08EE /* 51.107.8.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B0952 /* 51.107.9.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B0B44 /* 51.107.11.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B0B50 /* 51.107.11.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B2978 /* 51.107.41.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B2D42 /* 51.107.45.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B6024 /* 51.107.96.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B6030 /* 51.107.96.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B6068 /* 51.107.96.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B60CE /* 51.107.96.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B62C2 /* 51.107.98.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B64DA /* 51.107.100.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B6538 /* 51.107.101.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B65B5 /* 51.107.101.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BC92D /* 51.107.201.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BCA45 /* 51.107.202.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF168 /* 51.107.241.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF1A0 /* 51.107.241.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF1C0 /* 51.107.241.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF958 /* 51.107.249.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF9A0 /* 51.107.249.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF9C0 /* 51.107.249.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFE60 /* 51.107.254.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFE80 /* 51.107.254.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFEF8 /* 51.107.254.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337401ED /* 51.116.1.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33740265 /* 51.116.2.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337402EF /* 51.116.2.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33740310 /* 51.116.3.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33740349 /* 51.116.3.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33740357 /* 51.116.3.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33740366 /* 51.116.3.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743280 /* 51.116.50.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337432C0 /* 51.116.50.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337433B8 /* 51.116.51.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744A60 /* 51.116.74.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744A80 /* 51.116.74.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744B40 /* 51.116.75.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337463C8 /* 51.116.99.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33748455 /* 51.116.132.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33748463 /* 51.116.132.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33748597 /* 51.116.133.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33748684 /* 51.116.134.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33748688 /* 51.116.134.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33748ACA /* 51.116.138.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337491F0 /* 51.116.145.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749280 /* 51.116.146.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337492C0 /* 51.116.146.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337494E0 /* 51.116.148.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782C20 /* 51.120.44.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782C40 /* 51.120.44.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E430 /* 51.120.228.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E440 /* 51.120.228.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E480 /* 51.120.228.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E830 /* 51.120.232.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337C016C /* 51.124.1.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337C38D1 /* 51.124.56.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337C471A /* 51.124.71.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337C48A8 /* 51.124.72.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337C537F /* 51.124.83.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384447E /* 51.132.68.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33844832 /* 51.132.72.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338448B5 /* 51.132.72.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384495F /* 51.132.73.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384A1E1 /* 51.132.161.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384D7A2 /* 51.132.215.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384D7B6 /* 51.132.215.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33890A52 /* 51.137.10.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33890AAD /* 51.137.10.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33890C89 /* 51.137.12.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33890CC3 /* 51.137.12.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33890DB8 /* 51.137.13.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33898862 /* 51.137.136.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389899E /* 51.137.137.158/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338989E0 /* 51.137.137.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338989EB /* 51.137.137.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A4E0 /* 51.137.164.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A5C0 /* 51.137.165.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A600 /* 51.137.166.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A610 /* 51.137.166.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A618 /* 51.137.166.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A640 /* 51.137.166.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A7B0 /* 51.137.167.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389B456 /* 51.137.180.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338A1AA1 /* 51.138.26.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338A1AC9 /* 51.138.26.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338A1B06 /* 51.138.27.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338A1B94 /* 51.138.27.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338A1CFA /* 51.138.28.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338A1E20 /* 51.138.30.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338A1FC3 /* 51.138.31.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338A26C5 /* 51.138.38.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AB25C /* 51.138.178.92/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AB2FD /* 51.138.178.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD7C0 /* 51.138.215.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD0D8 /* 51.143.208.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33903840 /* 51.144.56.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3390BE93 /* 51.144.190.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3391681D /* 51.145.104.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3391BA9C /* 51.145.186.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3391BD95 /* 51.145.189.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488B858 /* 52.136.184.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BD60 /* 52.136.189.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BD80 /* 52.136.189.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BEB0 /* 52.136.190.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348918CE /* 52.137.24.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B116C /* 52.139.17.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B11FC /* 52.139.17.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B12F3 /* 52.139.18.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B16E3 /* 52.139.22.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B50E5 /* 52.139.80.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B53B8 /* 52.139.83.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B5634 /* 52.139.86.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6F88 /* 52.139.111.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6FA0 /* 52.139.111.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6FC0 /* 52.139.111.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B9C6E /* 52.139.156.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BAA04 /* 52.139.170.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BAA34 /* 52.139.170.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB0D8 /* 52.139.176.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB108 /* 52.139.177.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB10E /* 52.139.177.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB374 /* 52.139.179.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BE853 /* 52.139.232.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BE920 /* 52.139.233.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BEA8C /* 52.139.234.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BEAD9 /* 52.139.234.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BEB55 /* 52.139.235.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6CF2 /* 52.140.108.242/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6D80 /* 52.140.109.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6E00 /* 52.140.110.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D0185 /* 52.141.1.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D0711 /* 52.141.7.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D0715 /* 52.141.7.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D0718 /* 52.141.7.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D0724 /* 52.141.7.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E10A2 /* 52.142.16.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E1C56 /* 52.142.28.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E50A2 /* 52.142.80.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E5173 /* 52.142.81.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E52A1 /* 52.142.82.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E5654 /* 52.142.86.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E57B7 /* 52.142.87.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E7031 /* 52.142.112.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E7054 /* 52.142.112.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E7082 /* 52.142.112.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E71CB /* 52.142.113.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E798E /* 52.142.121.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E799B /* 52.142.121.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E7FFE /* 52.142.127.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348EA868 /* 52.142.168.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348EE992 /* 52.142.233.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348EE995 /* 52.142.233.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348EE9A1 /* 52.142.233.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348EEAE6 /* 52.142.234.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348EED61 /* 52.142.237.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F16D1 /* 52.143.22.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34921860 /* 52.146.24.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3492186A /* 52.146.24.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34921872 /* 52.146.24.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34921A7D /* 52.146.26.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34921ADA /* 52.146.26.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34921AF4 /* 52.146.26.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34923264 /* 52.146.50.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34923C95 /* 52.146.60.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34924800 /* 52.146.72.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34924C00 /* 52.146.76.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34924E00 /* 52.146.78.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34924F00 /* 52.146.79.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34924F80 /* 52.146.79.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928000 /* 52.146.128.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928200 /* 52.146.130.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928280 /* 52.146.130.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349282A0 /* 52.146.130.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349282B0 /* 52.146.130.176/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349282C0 /* 52.146.130.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349284E8 /* 52.146.132.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928A60 /* 52.146.138.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928A80 /* 52.146.138.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928B00 /* 52.146.139.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928BC8 /* 52.146.139.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937158 /* 52.147.113.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349374C0 /* 52.147.116.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937500 /* 52.147.117.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937580 /* 52.147.117.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349375C0 /* 52.147.117.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937700 /* 52.147.119.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3493795F /* 52.147.121.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3493DEE4 /* 52.147.222.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349470D8 /* 52.148.112.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34956C9B /* 52.149.108.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3495A9EC /* 52.149.169.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3495EE39 /* 52.149.238.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3495F04B /* 52.149.240.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3495F3B1 /* 52.149.243.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34962384 /* 52.150.35.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349625CF /* 52.150.37.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969A30 /* 52.150.154.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969A80 /* 52.150.154.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497E768 /* 52.151.231.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497EE13 /* 52.151.238.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497F3C2 /* 52.151.243.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497F66B /* 52.151.246.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3498C20A /* 52.152.194.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3498CC56 /* 52.152.204.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3498CD41 /* 52.152.205.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3498CD89 /* 52.152.205.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B1984 /* 52.155.25.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B1991 /* 52.155.25.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B199D /* 52.155.25.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B5816 /* 52.155.88.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B5B81 /* 52.155.91.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B5B92 /* 52.155.91.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B5E8B /* 52.155.94.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B5E9D /* 52.155.94.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B5FD4 /* 52.155.95.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BA289 /* 52.155.162.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BACB8 /* 52.155.172.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BAD07 /* 52.155.173.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BB0C5 /* 52.155.176.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BB203 /* 52.155.178.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BB49C /* 52.155.180.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BB54E /* 52.155.181.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BDC14 /* 52.155.220.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BDED9 /* 52.155.222.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BDF50 /* 52.155.223.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BE084 /* 52.155.224.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BE80F /* 52.155.232.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BE8A9 /* 52.155.232.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BE8DA /* 52.155.232.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BE908 /* 52.155.233.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BE96E /* 52.155.233.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BE9E3 /* 52.155.233.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BEA1C /* 52.155.234.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BEA6B /* 52.155.234.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BEA7E /* 52.155.234.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BEAB8 /* 52.155.234.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BEB97 /* 52.155.235.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BEB99 /* 52.155.235.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BEC08 /* 52.155.236.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BEC10 /* 52.155.236.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349C18E8 /* 52.156.24.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CC192 /* 52.156.193.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CC219 /* 52.156.194.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CC4DD /* 52.156.196.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCCBE /* 52.156.204.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DDD4B /* 52.157.221.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DDDA3 /* 52.157.221.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DDEAD /* 52.157.222.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DE1E0 /* 52.157.225.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DEDAF /* 52.157.237.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349E188C /* 52.158.24.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349E18B2 /* 52.158.24.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349E1B42 /* 52.158.27.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349E70AB /* 52.158.112.171/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349E79BE /* 52.158.121.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A06CE1 /* 52.160.108.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC07E1 /* 52.172.7.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC70B0 /* 52.172.112.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF78C9 /* 52.175.120.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF96FA /* 52.175.150.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B460C4 /* 52.180.96.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B46637 /* 52.180.102.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B83025 /* 52.184.48.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B85097 /* 52.184.80.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B854D2 /* 52.184.84.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B9E2F7 /* 52.185.226.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B9E614 /* 52.185.230.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BC2BF7 /* 52.188.43.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BC4D9A /* 52.188.77.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BC4F3C /* 52.188.79.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BCB17C /* 52.188.177.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BCB561 /* 52.188.181.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BCB79F /* 52.188.183.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BCD841 /* 52.188.216.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BCDDED /* 52.188.221.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BCDEA8 /* 52.188.222.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BCDECE /* 52.188.222.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDFC22 /* 52.189.252.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BE183D /* 52.190.24.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BE1B94 /* 52.190.27.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BE1E88 /* 52.190.30.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BE1E91 /* 52.190.30.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BE2741 /* 52.190.39.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BF27B5 /* 52.191.39.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFD92B /* 52.191.217.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFE885 /* 52.191.232.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFEDBA /* 52.191.237.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFEE4F /* 52.191.238.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFEE9D /* 52.191.238.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFEFD0 /* 52.191.239.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFEFF6 /* 52.191.239.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E01130 /* 52.224.17.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E01162 /* 52.224.17.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E089A0 /* 52.224.137.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E08E98 /* 52.224.142.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E09559 /* 52.224.149.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0963F /* 52.224.150.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0B8CD /* 52.224.184.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0B8DD /* 52.224.184.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0B9D8 /* 52.224.185.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0C377 /* 52.224.195.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0C81A /* 52.224.200.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0C972 /* 52.224.201.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0C979 /* 52.224.201.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0CBC0 /* 52.224.203.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0CC6E /* 52.224.204.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E229CA /* 52.226.41.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E229EB /* 52.226.41.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E23168 /* 52.226.49.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E2319C /* 52.226.49.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E2338A /* 52.226.51.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E28BCC /* 52.226.139.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E28DC8 /* 52.226.141.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E28F00 /* 52.226.143.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E29405 /* 52.226.148.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E294E1 /* 52.226.148.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E2AF3A /* 52.226.175.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E2FE76 /* 52.226.254.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E456B2 /* 52.228.86.178/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E456B4 /* 52.228.86.180/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E456B8 /* 52.228.86.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E456C0 /* 52.228.86.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45700 /* 52.228.87.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E47DE5 /* 52.228.125.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E54FE1 /* 52.229.79.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E5589E /* 52.229.88.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E577F9 /* 52.229.119.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E5E1B6 /* 52.229.225.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E788D4 /* 52.231.136.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E789ED /* 52.231.137.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E78CE0 /* 52.231.140.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E78FAB /* 52.231.143.171/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7A44F /* 52.231.164.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7B900 /* 52.231.185.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EA6831 /* 52.234.104.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EB1146 /* 52.235.17.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EB3944 /* 52.235.57.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EB398C /* 52.235.57.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EB39CB /* 52.235.57.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EB39FC /* 52.235.57.252/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EB3F00 /* 52.235.63.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EC9858 /* 52.236.152.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EC9995 /* 52.236.153.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F18A97 /* 52.241.138.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F18CD9 /* 52.241.140.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F36A5D /* 52.243.106.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F36C19 /* 52.243.108.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F36D04 /* 52.243.109.4/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F36D7E /* 52.243.109.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F36E43 /* 52.243.110.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F36E9C /* 52.243.110.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F36EB5 /* 52.243.110.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F37158 /* 52.243.113.88/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F37166 /* 52.243.113.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F678BE /* 52.246.120.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F93B9D /* 52.249.59.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F93C50 /* 52.249.60.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F93F2D /* 52.249.63.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F9C957 /* 52.249.201.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F9CC72 /* 52.249.204.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FAE424 /* 52.250.228.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FAE428 /* 52.250.228.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FAE430 /* 52.250.228.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FAE480 /* 52.250.228.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FAE500 /* 52.250.229.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FAE600 /* 52.250.230.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FFD4A4 /* 52.255.212.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FFD5D3 /* 52.255.213.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FFDDE7 /* 52.255.221.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255028 /* 102.37.80.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255520 /* 102.37.85.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255540 /* 102.37.85.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662555C8 /* 102.37.85.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A6E0 /* 102.37.166.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A700 /* 102.37.167.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668500C7 /* 102.133.0.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668500D4 /* 102.133.0.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66850118 /* 102.133.1.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853BC0 /* 102.133.59.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853C00 /* 102.133.60.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66858497 /* 102.133.132.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DB90 /* 102.133.219.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DBA0 /* 102.133.219.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DBC0 /* 102.133.219.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DD18 /* 102.133.221.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68281BA8 /* 104.40.27.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68282286 /* 104.40.34.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68284895 /* 104.40.72.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A20E4 /* 104.42.32.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A2310 /* 104.42.35.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682AD63E /* 104.42.214.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682B4C65 /* 104.43.76.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682B4C66 /* 104.43.76.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682B4C7C /* 104.43.76.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D4143 /* 104.45.65.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D430A /* 104.45.67.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D465B /* 104.45.70.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D469A /* 104.45.70.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D4D39 /* 104.45.77.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAE1A /* 104.45.174.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAF2D /* 104.45.175.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DBCF0 /* 104.45.188.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DBF59 /* 104.45.191.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DE7FC /* 104.45.231.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB000 /* 104.46.176.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB080 /* 104.46.176.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB0A0 /* 104.46.176.160/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB0C0 /* 104.46.176.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB100 /* 104.46.177.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB320 /* 104.46.179.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D23927 /* 104.210.57.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x898735C4 /* 137.135.53.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D0349 /* 168.61.3.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90095 /* 191.233.0.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE900FE /* 191.233.0.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE901AF /* 191.233.1.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE912FE /* 191.233.18.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9142B /* 191.233.20.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9199C /* 191.233.25.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE91BE2 /* 191.233.27.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE91C91 /* 191.233.28.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE91D48 /* 191.233.29.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE91E14 /* 191.233.30.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE91F00 /* 191.233.31.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE91F3F /* 191.233.31.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE91FE0 /* 191.233.31.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9F2B1 /* 191.233.242.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9F2B4 /* 191.233.242.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8940 /* 191.234.137.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8980 /* 191.234.137.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8A00 /* 191.234.138.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8BB0 /* 191.234.139.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB7FB5 /* 191.235.127.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4CC0 /* 191.238.76.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4D00 /* 191.238.77.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4D38 /* 191.238.77.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141800C0 /* 20.24.0.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141800D0 /* 20.24.0.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345F54 /* 20.52.95.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345FD8 /* 20.52.95.216/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B5418 /* 20.59.84.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B5450 /* 20.59.84.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B5460 /* 20.59.84.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B5480 /* 20.59.84.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B54A0 /* 20.59.84.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B6774 /* 20.59.103.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B6788 /* 20.59.103.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B67A0 /* 20.59.103.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B67C0 /* 20.59.103.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B67E0 /* 20.59.103.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B67F0 /* 20.59.103.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DF18 /* 20.70.223.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DF50 /* 20.70.223.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DF58 /* 20.70.223.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DFA8 /* 20.70.223.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC40C /* 20.74.196.12/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC440 /* 20.74.196.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC468 /* 20.74.196.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144F6C64 /* 20.79.108.100/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144F6C68 /* 20.79.108.104/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575298 /* 20.87.82.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575368 /* 20.87.83.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589F8C /* 20.88.159.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589F98 /* 20.88.159.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589FD0 /* 20.88.159.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589FE0 /* 20.88.159.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A2610 /* 20.90.38.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A2618 /* 20.90.38.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A2634 /* 20.90.38.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A26F0 /* 20.90.38.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C04DC /* 20.92.4.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C0550 /* 20.92.5.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C057C /* 20.92.5.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C0608 /* 20.92.6.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C06C0 /* 20.92.6.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14612334 /* 20.97.35.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14612738 /* 20.97.39.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14612770 /* 20.97.39.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640488 /* 20.100.4.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146404B4 /* 20.100.4.180/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640510 /* 20.100.5.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D340 /* 20.105.211.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D350 /* 20.105.211.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D358 /* 20.105.211.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D7E4 /* 20.105.215.228/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D7E8 /* 20.105.215.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D7F0 /* 20.105.215.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469F3D0 /* 20.105.243.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469F3E0 /* 20.105.243.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469F400 /* 20.105.244.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469F420 /* 20.105.244.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146BEFDC /* 20.107.239.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F0398 /* 20.111.3.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F03CC /* 20.111.3.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F03D8 /* 20.111.3.216/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14742B38 /* 20.116.43.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14742B50 /* 20.116.43.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14742B58 /* 20.116.43.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14742BD0 /* 20.116.43.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14742F40 /* 20.116.47.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1475C0CC /* 20.117.192.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1475C0E0 /* 20.117.192.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1475C13C /* 20.117.193.60/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1475C1B0 /* 20.117.193.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14771C00 /* 20.119.28.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14771C20 /* 20.119.28.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC2B4 /* 20.189.194.180/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC658 /* 20.189.198.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC688 /* 20.189.198.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC720 /* 20.189.199.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09DF8 /* 20.192.157.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C3565C /* 20.195.86.92/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35710 /* 20.195.87.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35720 /* 20.195.87.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C3577C /* 20.195.87.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7C87C /* 20.199.200.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7C930 /* 20.199.201.48/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7C94C /* 20.199.201.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7C990 /* 20.199.201.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8A01C /* 20.200.160.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8A0D0 /* 20.200.160.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8A0EC /* 20.200.160.236/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8A0F8 /* 20.200.160.248/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C6C8 /* 20.200.198.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C758 /* 20.200.199.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5830 /* 20.203.88.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5858 /* 20.203.88.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC06C /* 20.204.192.108/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC0C0 /* 20.204.192.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC164 /* 20.204.193.100/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC168 /* 20.204.193.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD3150 /* 20.205.49.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD3158 /* 20.205.49.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD317C /* 20.205.49.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD31C8 /* 20.205.49.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD3270 /* 20.205.50.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD459C /* 20.205.69.156/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0314 /* 20.206.3.20/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0440 /* 20.206.4.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE04E0 /* 20.206.4.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE04E8 /* 20.206.4.232/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CEB238 /* 20.206.178.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CEB260 /* 20.206.178.96/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CEB2A4 /* 20.206.178.164/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CEB380 /* 20.206.179.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CEB388 /* 20.206.179.136/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00554 /* 20.208.5.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00778 /* 20.208.7.120/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D007AC /* 20.208.7.172/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D007B8 /* 20.208.7.184/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D2449C /* 20.210.68.156/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D24550 /* 20.210.69.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D24648 /* 20.210.70.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D24650 /* 20.210.70.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5C280 /* 20.213.194.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5C288 /* 20.213.194.136/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DF4144 /* 20.223.65.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DF4148 /* 20.223.65.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DF4150 /* 20.223.65.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DF4160 /* 20.223.65.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DF4180 /* 20.223.65.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E858C8 /* 20.232.88.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E85910 /* 20.232.89.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E85920 /* 20.232.89.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E85940 /* 20.232.89.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E85960 /* 20.232.89.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28506024 /* 40.80.96.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285060C0 /* 40.80.96.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744D54 /* 51.116.77.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744DF8 /* 51.116.77.248/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744E24 /* 51.116.78.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744EC0 /* 51.116.78.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378B0C0 /* 51.120.176.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378B0DC /* 51.120.176.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378B0E8 /* 51.120.176.232/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BFF8 /* 52.136.191.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928D88 /* 52.146.141.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928DA0 /* 52.146.141.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928DC0 /* 52.146.141.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC5110 /* 52.172.81.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC51E0 /* 52.172.81.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC51E8 /* 52.172.81.232/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22CC0 /* 52.242.44.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22CD0 /* 52.242.44.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22CEC /* 52.242.44.236/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22CF8 /* 52.242.44.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22D30 /* 52.242.45.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255764 /* 102.37.87.100/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255788 /* 102.37.87.136/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662557B8 /* 102.37.87.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4E54 /* 191.238.78.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81828 /* 4.232.24.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113014 /* 20.17.48.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113F08 /* 20.17.63.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152014 /* 20.21.32.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141537A0 /* 20.21.55.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14155014 /* 20.21.80.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247878 /* 20.36.120.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254078 /* 20.37.64.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259846 /* 20.37.152.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C046 /* 20.37.192.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E078 /* 20.37.224.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265046 /* 20.38.80.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268844 /* 20.38.136.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270B18 /* 20.39.11.24/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14290044 /* 20.41.0.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294046 /* 20.41.64.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294190 /* 20.41.65.144/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C078 /* 20.41.192.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A04C8 /* 20.42.4.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8046 /* 20.42.128.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A81B8 /* 20.42.129.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE078 /* 20.42.224.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2846 /* 20.43.40.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4046 /* 20.43.64.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8046 /* 20.43.128.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7078 /* 20.45.112.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC078 /* 20.45.192.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FED62 /* 20.47.237.98/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FED68 /* 20.47.237.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143536A8 /* 20.53.54.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143536B0 /* 20.53.54.176/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353E6C /* 20.53.62.108/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353E70 /* 20.53.62.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B51F0 /* 20.59.81.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450878 /* 20.69.8.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DFA0 /* 20.70.223.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481014 /* 20.72.16.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC460 /* 20.74.196.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144F6B90 /* 20.79.107.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145752C8 /* 20.87.82.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1458426E /* 20.88.66.110/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14584340 /* 20.88.67.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A2638 /* 20.90.38.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B0938 /* 20.91.9.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C0600 /* 20.92.6.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14629508 /* 20.98.149.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C3B0 /* 20.98.195.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1463199E /* 20.99.25.158/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146319A0 /* 20.99.25.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146404B8 /* 20.100.4.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D728 /* 20.105.215.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F03D0 /* 20.111.3.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14742B78 /* 20.116.43.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1475C130 /* 20.117.193.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14764E60 /* 20.118.78.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14768BD4 /* 20.118.139.212/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14768BD8 /* 20.118.139.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D04B0 /* 20.125.4.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D04C0 /* 20.125.4.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DA292 /* 20.125.162.146/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DA298 /* 20.125.162.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A06C /* 20.150.160.108/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6844 /* 20.189.104.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC680 /* 20.189.198.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A014 /* 20.192.160.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E120 /* 20.192.225.32/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35770 /* 20.195.87.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7C958 /* 20.199.201.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8A0F0 /* 20.200.160.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C6F8 /* 20.200.198.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5850 /* 20.203.88.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC100 /* 20.204.193.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD31C0 /* 20.205.49.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0448 /* 20.206.4.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CEB2A8 /* 20.206.178.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF02A6 /* 20.207.2.166/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF02A8 /* 20.207.2.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CFA8B4 /* 20.207.168.180/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CFA8B8 /* 20.207.168.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D007B0 /* 20.208.7.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D245A8 /* 20.210.69.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70014 /* 20.215.0.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D7073C /* 20.215.7.60/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D707E8 /* 20.215.7.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92814 /* 20.217.40.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92F3C /* 20.217.47.60/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92FE8 /* 20.217.47.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DF4080 /* 20.223.64.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E4002E /* 20.228.0.46/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E40140 /* 20.228.1.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E85800 /* 20.232.88.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764D914 /* 23.100.217.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764D918 /* 23.100.217.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400B74 /* 40.64.11.116/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400B78 /* 40.64.11.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433078 /* 40.67.48.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1E68 /* 40.74.30.104/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503878 /* 40.80.56.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28506028 /* 40.80.96.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A878 /* 40.80.168.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B844 /* 40.80.184.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852FD48 /* 40.82.253.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591078 /* 40.89.16.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877084A /* 40.119.8.74/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2EE4 /* 51.12.46.228/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C4BE0 /* 51.12.75.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC6D0 /* 51.12.198.208/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351814 /* 51.53.24.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351F9C /* 51.53.31.156/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356508 /* 51.53.101.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335A814 /* 51.53.168.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681846 /* 51.104.24.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695078 /* 51.105.80.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695878 /* 51.105.88.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3046 /* 51.107.48.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9078 /* 51.107.144.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743046 /* 51.116.48.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744E28 /* 51.116.78.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749046 /* 51.116.144.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782846 /* 51.120.40.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378B0E0 /* 51.120.176.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E078 /* 51.120.224.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A044 /* 51.137.160.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC078 /* 51.143.192.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6846 /* 52.140.104.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968B48 /* 52.150.139.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC5148 /* 52.172.81.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45046 /* 52.228.80.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22CF0 /* 52.242.44.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5028 /* 68.221.80.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662557B0 /* 102.37.87.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853860 /* 102.133.56.96/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685D846 /* 102.133.216.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176028 /* 158.23.96.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90814 /* 191.233.8.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE046 /* 191.235.224.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D429148 /* 13.66.145.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E930 /* 13.69.233.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464F48 /* 13.70.79.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AFC0 /* 13.71.175.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D48496E /* 13.72.73.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F4C8 /* 13.73.244.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6FC8 /* 13.78.111.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DF60 /* 13.86.223.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5A5601 /* 13.90.86.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5C61F3 /* 13.92.97.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5CBCD1 /* 13.92.188.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5CBEB9 /* 13.92.190.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142475C8 /* 20.36.117.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268410 /* 20.38.132.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7BB0 /* 20.43.123.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C04F0 /* 20.44.4.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0AD0 /* 20.44.10.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1330 /* 20.44.19.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14350028 /* 20.53.0.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AC20 /* 20.150.172.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0B858 /* 20.192.184.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EEB0 /* 20.192.238.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CE28 /* 20.193.206.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433CA8 /* 40.67.60.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28437990 /* 40.67.121.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456F60 /* 40.69.111.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847566B /* 40.71.86.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A38CD /* 40.74.56.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E67AC /* 40.78.103.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E6A5F /* 40.78.106.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E95A6 /* 40.78.149.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEF68 /* 40.78.239.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8BC8 /* 40.79.139.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B470 /* 40.80.180.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2853BBF5 /* 40.83.187.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285979A0 /* 40.89.121.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28752363 /* 40.117.35.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876E331 /* 40.118.227.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287808A0 /* 40.120.8.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784068 /* 40.120.64.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2879D63A /* 40.121.214.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C65A0 /* 51.12.101.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCCE8 /* 51.12.204.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8010 /* 51.13.128.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8028 /* 51.107.128.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BC088 /* 51.107.192.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743CF8 /* 51.116.60.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F600 /* 51.116.246.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786D70 /* 51.120.109.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AA008 /* 51.138.160.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9518 /* 51.140.149.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD7A0 /* 51.140.215.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A02139 /* 52.160.33.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A06405 /* 52.160.100.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A858F7 /* 52.168.88.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A8591E /* 52.168.89.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A85CEA /* 52.168.92.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87400 /* 52.168.116.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A888BA /* 52.168.136.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A88B60 /* 52.168.139.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A88D5A /* 52.168.141.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A88F55 /* 52.168.143.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A8A8A5 /* 52.168.168.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A8B24D /* 52.168.178.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A8B375 /* 52.168.179.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A8B4A8 /* 52.168.180.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AA1CB8 /* 52.170.28.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AA22D9 /* 52.170.34.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AA25EC /* 52.170.37.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AAD116 /* 52.170.209.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B21110 /* 52.178.17.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B317C8 /* 52.179.23.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71760 /* 52.231.23.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79730 /* 52.231.151.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F0F158 /* 52.240.241.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254038 /* 102.37.64.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857C90 /* 102.133.124.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A9572 /* 104.42.149.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BD2C8 /* 104.43.210.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E20BF /* 104.46.32.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EA208 /* 104.46.162.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A438 /* 104.214.164.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x897560B8 /* 137.117.96.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89756133 /* 137.117.97.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8C60 /* 168.61.140.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CFC0 /* 191.233.207.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDE0A0 /* 191.237.224.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86A4C /* 4.232.106.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87A48 /* 4.232.122.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C248 /* 4.232.194.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428C98 /* 13.66.140.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42A7C2 /* 13.66.167.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E297 /* 13.66.226.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430988 /* 13.67.9.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4540E8 /* 13.69.64.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456D88 /* 13.69.109.136/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E3E8 /* 13.69.227.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4648D8 /* 13.70.72.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464EAC /* 13.70.78.172/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AAE0 /* 13.71.170.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AAF8 /* 13.71.170.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C330 /* 13.71.195.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A504A /* 13.74.80.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6F90 /* 13.74.111.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2450 /* 13.75.36.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B29A6 /* 13.75.41.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2A23 /* 13.75.42.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3400 /* 13.77.52.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6C18 /* 13.78.108.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E937D /* 13.78.147.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5075EC /* 13.80.117.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5720CC /* 13.87.32.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5738F0 /* 13.87.56.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577AF0 /* 13.87.122.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AB68 /* 13.89.171.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B07D3 /* 13.91.7.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5BFC3A /* 13.91.252.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5C7C7C /* 13.92.124.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1411424C /* 20.17.66.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B248 /* 20.18.178.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152A4C /* 20.21.42.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154248 /* 20.21.66.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154A48 /* 20.21.74.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14242846 /* 20.36.40.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424484F /* 20.36.72.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246B10 /* 20.36.107.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142472C0 /* 20.36.114.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254A50 /* 20.37.74.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142695C0 /* 20.38.149.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269844 /* 20.38.152.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4028 /* 20.42.64.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4884 /* 20.42.72.132/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0318 /* 20.44.3.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0A7C /* 20.44.10.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1300 /* 20.44.19.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1D34 /* 20.44.29.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4FF0 /* 20.45.79.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7BF4 /* 20.45.123.244/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315204 /* 20.49.82.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315A04 /* 20.49.90.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481A04 /* 20.72.26.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DAA48 /* 20.125.170.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCA48 /* 20.125.202.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AB48 /* 20.150.171.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B5A0 /* 20.150.181.160/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BD1C /* 20.150.189.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496E104 /* 20.150.225.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A248 /* 20.168.162.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B80254 /* 20.184.2.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C020E0 /* 20.192.32.224/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0651C /* 20.192.101.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EB00 /* 20.192.235.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CA18 /* 20.193.202.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CC64 /* 20.193.204.100/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24204 /* 20.194.66.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4A48 /* 20.205.74.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5248 /* 20.205.82.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D01248 /* 20.208.18.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71248 /* 20.215.18.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71A48 /* 20.215.26.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79A4C /* 20.215.154.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93A4C /* 20.217.58.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94A48 /* 20.217.74.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95A48 /* 20.217.90.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760C8E4 /* 23.96.200.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760D206 /* 23.96.210.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760D664 /* 23.96.214.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1762563C /* 23.98.86.60/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17630BDB /* 23.99.11.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764C7E6 /* 23.100.199.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433B48 /* 40.67.59.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456B00 /* 40.69.107.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2845A606 /* 40.69.166.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284692E8 /* 40.70.146.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470B68 /* 40.71.11.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A64F0 /* 40.74.100.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9238 /* 40.74.146.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B23DC /* 40.75.35.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CCB94 /* 40.76.203.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CCDB5 /* 40.76.205.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC300 /* 40.78.195.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECA78 /* 40.78.202.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEE3C /* 40.78.238.60/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF5C0 /* 40.78.245.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFD40 /* 40.78.253.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F7266 /* 40.79.114.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F82E8 /* 40.79.130.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8BC0 /* 40.79.139.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9450 /* 40.79.148.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA550 /* 40.79.165.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FABE4 /* 40.79.171.228/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAD00 /* 40.79.173.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB300 /* 40.79.179.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBD3C /* 40.79.189.60/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC524 /* 40.79.197.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503504 /* 40.80.53.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28543EBD /* 40.84.62.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28548540 /* 40.84.133.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855E076 /* 40.85.224.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E6AE /* 40.86.230.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859A80F /* 40.89.168.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F3B0 /* 40.112.243.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871179D /* 40.113.23.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28715825 /* 40.113.88.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873407B /* 40.115.64.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287371E4 /* 40.115.113.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784A04 /* 40.120.74.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BCC1A /* 40.123.204.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6340 /* 51.12.99.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C65A8 /* 51.12.101.168/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCB40 /* 51.12.203.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCCF0 /* 51.12.204.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE51C /* 51.12.229.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CED1C /* 51.12.237.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356A4C /* 51.53.106.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BA4C /* 51.53.186.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CA48 /* 51.103.202.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694554 /* 51.105.69.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694D34 /* 51.105.77.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3B28 /* 51.107.59.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B4C14 /* 51.107.76.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9B28 /* 51.107.155.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BEFFA /* 51.107.239.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743B28 /* 51.116.59.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749B68 /* 51.116.155.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D01A /* 51.116.208.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374E81B /* 51.116.232.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F5A0 /* 51.116.245.160/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FD80 /* 51.116.253.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33784417 /* 51.120.68.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337862F0 /* 51.120.98.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786D1C /* 51.120.109.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378A417 /* 51.120.164.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D51C /* 51.120.213.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DB48 /* 51.120.219.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9418 /* 51.140.148.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CB81B /* 51.140.184.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD310 /* 51.140.211.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D081E /* 51.141.8.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488881B /* 52.136.136.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A4652 /* 52.138.70.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5CA8 /* 52.138.92.168/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A8F37 /* 52.138.143.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE544 /* 52.138.229.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F880F /* 52.143.136.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FB80F /* 52.143.184.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34972690 /* 52.151.38.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349EECF7 /* 52.158.236.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26BB0 /* 52.162.107.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A35AA5 /* 52.163.90.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A35E71 /* 52.163.94.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A525BC /* 52.165.37.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A7001B /* 52.167.0.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76D44 /* 52.167.109.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A7E3DC /* 52.167.227.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEA3CC /* 52.174.163.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEA4FE /* 52.174.164.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B21EC1 /* 52.178.30.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B054 /* 52.180.176.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68D38 /* 52.182.141.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B6ACE8 /* 52.182.172.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B85E /* 52.225.184.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B99F /* 52.225.185.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E6083D /* 52.230.8.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E712E8 /* 52.231.18.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E72051 /* 52.231.32.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79310 /* 52.231.147.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7C87C /* 52.231.200.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECA14B /* 52.236.161.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBD4C /* 52.236.189.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69D08 /* 52.246.157.8/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FAE0 /* 65.52.250.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5248 /* 68.220.82.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD624C /* 68.221.98.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD9248 /* 68.221.146.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625300C /* 102.37.48.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851B18 /* 102.133.27.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685481F /* 102.133.72.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857E90 /* 102.133.126.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859B18 /* 102.133.155.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685A01C /* 102.133.160.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685EBA9 /* 102.133.235.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FBD8 /* 102.133.251.216/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68290935 /* 104.41.9.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829BB1D /* 104.41.187.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682AB579 /* 104.42.181.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BD554 /* 104.43.213.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D13FA /* 104.45.19.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EE139 /* 104.46.225.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D26B45 /* 104.210.107.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D351D8 /* 104.211.81.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D367C9 /* 104.211.103.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D392F0 /* 104.211.146.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A4A3 /* 104.211.164.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E444 /* 104.211.228.68/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D61348 /* 104.214.19.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A544 /* 104.214.165.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D74E92 /* 104.215.78.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974FC09 /* 137.116.252.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89872131 /* 137.135.33.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170A4C /* 158.23.10.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177A48 /* 158.23.122.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C248 /* 158.23.194.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8E30 /* 168.61.142.48/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93218 /* 191.233.50.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CBD8 /* 191.233.203.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9520 /* 191.234.149.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9D80 /* 191.234.157.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2EEA3E /* 207.46.234.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86550 /* 4.232.101.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86C40 /* 4.232.108.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87BE0 /* 4.232.123.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87D80 /* 4.232.125.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C3E0 /* 4.232.195.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C580 /* 4.232.197.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D409B28 /* 13.64.155.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428C60 /* 13.66.140.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428DC0 /* 13.66.141.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4308C0 /* 13.67.8.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430A20 /* 13.67.10.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454060 /* 13.69.64.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454300 /* 13.69.67.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456A60 /* 13.69.106.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456B20 /* 13.69.107.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E360 /* 13.69.227.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E5C0 /* 13.69.229.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4648A0 /* 13.70.72.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4649E0 /* 13.70.73.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D473786 /* 13.71.55.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4777A7 /* 13.71.119.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D477BEA /* 13.71.123.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AAA0 /* 13.71.170.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AD60 /* 13.71.173.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C300 /* 13.71.195.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C460 /* 13.71.196.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F0C0 /* 13.73.240.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F200 /* 13.73.242.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F9B0 /* 13.73.249.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6B60 /* 13.74.107.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6BE0 /* 13.74.107.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2420 /* 13.75.36.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2720 /* 13.75.39.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D32C0 /* 13.77.50.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3500 /* 13.77.53.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6AE0 /* 13.78.106.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6D40 /* 13.78.109.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E95A4 /* 13.78.149.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EB5F6 /* 13.78.181.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EB652 /* 13.78.182.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54344C /* 13.84.52.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DB60 /* 13.86.219.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D572785 /* 13.87.39.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5727AD /* 13.87.39.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5738C0 /* 13.87.56.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573A00 /* 13.87.58.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577AC0 /* 13.87.122.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577C00 /* 13.87.124.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AAE0 /* 13.89.170.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AE60 /* 13.89.174.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5CF229 /* 13.92.242.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5E2F26 /* 13.94.47.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68F820 /* 13.104.248.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68F860 /* 13.104.248.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113B60 /* 20.17.59.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114700 /* 20.17.71.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B3E0 /* 20.18.179.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B580 /* 20.18.181.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141527F0 /* 20.21.39.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152E00 /* 20.21.46.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14153808 /* 20.21.56.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141543E0 /* 20.21.67.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154580 /* 20.21.69.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154BE0 /* 20.21.75.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154D80 /* 20.21.77.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14242ECA /* 20.36.46.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14242EDC /* 20.36.46.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14244B4B /* 20.36.75.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14244B72 /* 20.36.75.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246C00 /* 20.36.108.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246C40 /* 20.36.108.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142473A0 /* 20.36.115.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142473C0 /* 20.36.115.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247B00 /* 20.36.123.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254340 /* 20.37.67.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254C00 /* 20.37.76.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254C40 /* 20.37.76.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C660 /* 20.37.198.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E300 /* 20.37.227.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142657D0 /* 20.38.87.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268000 /* 20.38.128.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268B40 /* 20.38.139.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142692C0 /* 20.38.146.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269320 /* 20.38.147.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269DA0 /* 20.38.157.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269DC0 /* 20.38.157.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270CF0 /* 20.39.12.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14282738 /* 20.40.39.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428C8B0 /* 20.40.200.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294360 /* 20.41.67.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C520 /* 20.41.197.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8322 /* 20.42.131.34/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE660 /* 20.42.230.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2BB0 /* 20.43.43.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4650 /* 20.43.70.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B78C0 /* 20.43.120.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0400 /* 20.44.4.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0880 /* 20.44.8.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C10A0 /* 20.44.16.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1AC0 /* 20.44.26.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1BA0 /* 20.44.27.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142CAFAE /* 20.44.175.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4BE4 /* 20.45.75.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4BE6 /* 20.45.75.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D72D0 /* 20.45.114.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7AC0 /* 20.45.122.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7E20 /* 20.45.126.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC5F0 /* 20.45.197.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FD8E0 /* 20.47.216.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143153A0 /* 20.49.83.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143153C0 /* 20.49.83.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315BA0 /* 20.49.91.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315D60 /* 20.49.93.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316330 /* 20.49.99.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316D40 /* 20.49.109.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317110 /* 20.49.113.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317830 /* 20.49.120.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143201E0 /* 20.50.1.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330D44 /* 20.51.13.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14350BDF /* 20.53.11.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1435D59F /* 20.53.213.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1443D935 /* 20.67.217.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450208 /* 20.69.2.8/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481510 /* 20.72.21.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481CE0 /* 20.72.28.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481E80 /* 20.72.30.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1448CD41 /* 20.72.205.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144A1806 /* 20.74.24.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AB6FC /* 20.74.182.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144C9E0C /* 20.76.158.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144F4BFC /* 20.79.75.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14513950 /* 20.81.57.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1457225D /* 20.87.34.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14580F1E /* 20.88.15.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1466A112 /* 20.102.161.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1470886C /* 20.112.136.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DABE0 /* 20.125.171.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DAD80 /* 20.125.173.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCBE0 /* 20.125.203.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCD80 /* 20.125.205.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14969C93 /* 20.150.156.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A5A0 /* 20.150.165.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AA20 /* 20.150.170.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AA80 /* 20.150.170.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AC60 /* 20.150.172.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B2C0 /* 20.150.178.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BAC0 /* 20.150.186.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A3E0 /* 20.168.163.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A580 /* 20.168.165.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC2D0 /* 20.187.194.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD1B1D /* 20.189.27.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEF8C5 /* 20.190.248.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C062C0 /* 20.192.98.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A5C0 /* 20.192.165.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E610 /* 20.192.230.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EE20 /* 20.192.238.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EE40 /* 20.192.238.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C171BA /* 20.193.113.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CDA0 /* 20.193.205.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CDC0 /* 20.193.205.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1D799 /* 20.193.215.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24380 /* 20.194.67.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7BD7B /* 20.199.189.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8E2D5 /* 20.200.226.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C916A4 /* 20.201.22.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4BE0 /* 20.205.75.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4D80 /* 20.205.77.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4E00 /* 20.205.78.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5580 /* 20.205.85.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D013E0 /* 20.208.19.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D01580 /* 20.208.21.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D707F0 /* 20.215.7.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D713E0 /* 20.215.19.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71580 /* 20.215.21.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71BE0 /* 20.215.27.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71D80 /* 20.215.29.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79E00 /* 20.215.158.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92FF0 /* 20.217.47.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93E00 /* 20.217.62.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94BE0 /* 20.217.75.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94D80 /* 20.217.77.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95BE0 /* 20.217.91.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95D80 /* 20.217.93.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760B93F /* 23.96.185.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760F35D /* 23.96.243.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17617818 /* 23.97.120.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17622B5E /* 23.98.43.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625280 /* 23.98.82.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625320 /* 23.98.83.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626890 /* 23.98.104.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176361FF /* 23.99.97.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408470 /* 40.64.132.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28417CA1 /* 40.65.124.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284332E0 /* 40.67.50.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433A20 /* 40.67.58.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433C20 /* 40.67.60.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456AC0 /* 40.69.106.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456C00 /* 40.69.108.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2845A1D7 /* 40.69.161.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284648E4 /* 40.70.72.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469260 /* 40.70.146.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469440 /* 40.70.148.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470AE0 /* 40.71.10.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470DC0 /* 40.71.13.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847D794 /* 40.71.215.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A64C0 /* 40.74.100.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A65E0 /* 40.74.101.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9300 /* 40.74.147.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9360 /* 40.74.147.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9380 /* 40.74.147.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284AFEE3 /* 40.74.254.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2240 /* 40.75.34.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2300 /* 40.75.35.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC2C0 /* 40.78.194.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC400 /* 40.78.196.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECB80 /* 40.78.203.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECBC0 /* 40.78.203.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE2E0 /* 40.78.226.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE500 /* 40.78.229.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEA40 /* 40.78.234.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEAE0 /* 40.78.234.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF2C0 /* 40.78.242.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF380 /* 40.78.243.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFA80 /* 40.78.250.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFB40 /* 40.78.251.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F20A2 /* 40.79.32.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F82A0 /* 40.79.130.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8400 /* 40.79.132.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8A40 /* 40.79.138.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8AA0 /* 40.79.138.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9240 /* 40.79.146.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F92A0 /* 40.79.146.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9A00 /* 40.79.154.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9AE0 /* 40.79.154.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9C00 /* 40.79.156.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA240 /* 40.79.162.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA2A0 /* 40.79.162.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAAA0 /* 40.79.170.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAB00 /* 40.79.171.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB2C0 /* 40.79.178.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB3E0 /* 40.79.179.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBA60 /* 40.79.186.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBB80 /* 40.79.187.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC200 /* 40.79.194.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC380 /* 40.79.195.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285032C0 /* 40.80.50.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503320 /* 40.80.51.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503E00 /* 40.80.62.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850AC20 /* 40.80.172.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591490 /* 40.89.20.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859C71B /* 40.89.199.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F380 /* 40.112.243.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877E59C /* 40.119.229.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784BC0 /* 40.120.75.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BCFE0 /* 40.123.207.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BDBEF /* 40.123.219.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EEE2F /* 40.126.238.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F03E8 /* 40.127.3.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C0644 /* 51.12.6.68/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2A00 /* 51.12.42.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C57C9 /* 51.12.87.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6220 /* 51.12.98.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6280 /* 51.12.98.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC200 /* 51.12.194.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCA20 /* 51.12.202.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCA80 /* 51.12.202.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE2C0 /* 51.12.226.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEAC0 /* 51.12.234.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D1893 /* 51.13.24.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D980F /* 51.13.152.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356510 /* 51.53.101.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356E00 /* 51.53.110.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B600 /* 51.53.182.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BF00 /* 51.53.191.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CBE0 /* 51.103.203.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CD80 /* 51.103.205.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336808C0 /* 51.104.8.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681CF0 /* 51.104.28.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336942C0 /* 51.105.66.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694380 /* 51.105.67.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694AC0 /* 51.105.74.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694B20 /* 51.105.75.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695300 /* 51.105.83.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695AA0 /* 51.105.90.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3300 /* 51.107.51.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3A20 /* 51.107.58.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3C00 /* 51.107.60.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9300 /* 51.107.147.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9A20 /* 51.107.154.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9C00 /* 51.107.156.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE24D /* 51.107.226.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743190 /* 51.116.49.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743A20 /* 51.116.58.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743C00 /* 51.116.60.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337450E9 /* 51.116.80.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749190 /* 51.116.145.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749A60 /* 51.116.154.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749C00 /* 51.116.156.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F2C0 /* 51.116.242.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F320 /* 51.116.243.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FAC0 /* 51.116.250.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FD60 /* 51.116.253.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782B40 /* 51.120.43.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786220 /* 51.120.98.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786400 /* 51.120.100.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786AC0 /* 51.120.106.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D2C0 /* 51.120.210.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DA20 /* 51.120.218.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DA80 /* 51.120.218.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E340 /* 51.120.227.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384ACC0 /* 51.132.172.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A460 /* 51.137.164.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C795C /* 51.140.121.92/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C7F33 /* 51.140.127.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C92E0 /* 51.140.146.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD2E0 /* 51.140.210.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD420 /* 51.140.212.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D2658 /* 51.141.38.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D27AF /* 51.141.39.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D76ED /* 51.141.118.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC300 /* 51.143.195.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883350 /* 52.136.51.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34888BE0 /* 52.136.139.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34888C9D /* 52.136.140.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34888DA8 /* 52.136.141.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5A60 /* 52.138.90.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE260 /* 52.138.226.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE2E0 /* 52.138.226.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6C50 /* 52.140.108.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F88A2 /* 52.143.136.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F8B52 /* 52.143.139.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968B4E /* 52.150.139.78/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969820 /* 52.150.152.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349AAEB6 /* 52.154.174.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A04666 /* 52.160.70.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26B80 /* 52.162.107.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26EC0 /* 52.162.110.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A4C8AE /* 52.164.200.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A51EF4 /* 52.165.30.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5EDB2 /* 52.165.237.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A6328A /* 52.166.50.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76A60 /* 52.167.106.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76AE0 /* 52.167.106.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A90646 /* 52.169.6.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACC163 /* 52.172.193.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACCCB9 /* 52.172.204.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADF3CC /* 52.173.243.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF932C /* 52.175.147.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF9CFB /* 52.175.156.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68AE0 /* 52.182.138.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68B60 /* 52.182.139.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B7402B /* 52.183.64.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B960A0 /* 52.185.96.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B99128 /* 52.185.145.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B99A88 /* 52.185.154.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BBB911 /* 52.187.185.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDEF6A /* 52.189.239.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E182AB /* 52.225.130.171/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45470 /* 52.228.84.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E46038 /* 52.228.96.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E67AC5 /* 52.230.122.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E712A0 /* 52.231.18.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E713E0 /* 52.231.19.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71EC8 /* 52.231.30.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E72215 /* 52.231.34.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E792E0 /* 52.231.146.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79420 /* 52.231.148.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7CA4C /* 52.231.202.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7CEBB /* 52.231.206.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E91E02 /* 52.233.30.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E92652 /* 52.233.38.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E98264 /* 52.233.130.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EB2483 /* 52.235.36.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EB24F2 /* 52.235.36.242/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBA60 /* 52.236.186.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBB20 /* 52.236.187.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EDF4A9 /* 52.237.244.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F224AA /* 52.242.36.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F357C8 /* 52.243.87.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69AC0 /* 52.246.154.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69B20 /* 52.246.155.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF3315 /* 52.255.51.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FC00 /* 65.52.252.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FC40 /* 65.52.252.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5500 /* 68.220.85.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD2880 /* 68.221.40.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6440 /* 68.221.100.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD93E0 /* 68.221.147.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD9580 /* 68.221.149.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851BE0 /* 102.133.27.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851C20 /* 102.133.28.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853AD0 /* 102.133.58.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854823 /* 102.133.72.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685482A /* 102.133.72.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857AC0 /* 102.133.122.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857BC0 /* 102.133.123.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859BE0 /* 102.133.155.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859C20 /* 102.133.156.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685A023 /* 102.133.160.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DA80 /* 102.133.218.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FAC0 /* 102.133.250.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FB20 /* 102.133.251.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A60AF /* 104.42.96.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D01060 /* 104.208.16.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D09060 /* 104.208.144.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D351A0 /* 104.211.81.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D392C0 /* 104.211.146.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3BBE8 /* 104.211.187.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E4C3 /* 104.211.228.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D61300 /* 104.214.19.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D62403 /* 104.214.36.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D66C50 /* 104.214.108.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D71157 /* 104.215.17.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170C40 /* 158.23.12.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177080 /* 158.23.112.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177BE0 /* 158.23.123.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177D80 /* 158.23.125.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C3E0 /* 158.23.195.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C580 /* 158.23.197.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8A33A /* 191.232.163.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90B80 /* 191.233.11.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93620 /* 191.233.54.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE936C0 /* 191.233.54.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CBA0 /* 191.233.203.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CD20 /* 191.233.205.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8840 /* 191.234.136.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA92C0 /* 191.234.146.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9AC0 /* 191.234.154.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86BB0 /* 4.232.107.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D46B0C4 /* 13.70.176.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F870 /* 13.73.248.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B99F0 /* 13.75.153.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4C512E /* 13.76.81.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141143F0 /* 20.17.67.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152A78 /* 20.21.42.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142478D8 /* 20.36.120.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142540D8 /* 20.37.64.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259D50 /* 20.37.157.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C360 /* 20.37.195.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E0D8 /* 20.37.224.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265598 /* 20.38.85.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142688E0 /* 20.38.136.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270B60 /* 20.39.11.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14290590 /* 20.41.5.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142941B8 /* 20.41.65.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C1A0 /* 20.41.193.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A04F8 /* 20.42.4.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A83E0 /* 20.42.131.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE380 /* 20.42.227.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2A08 /* 20.43.42.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4200 /* 20.43.66.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8328 /* 20.43.131.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4797 /* 20.45.71.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D70D8 /* 20.45.112.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC0F8 /* 20.45.192.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DD000 /* 20.45.208.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14320100 /* 20.50.1.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481BB8 /* 20.72.27.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144F6C78 /* 20.79.108.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575378 /* 20.87.83.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B0B90 /* 20.91.11.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B9200 /* 20.91.146.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D9D28 /* 20.125.157.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AC28 /* 20.150.172.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6C38 /* 20.189.108.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDAC98 /* 20.189.172.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C020E8 /* 20.192.32.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1A84C /* 20.193.168.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CD80 /* 20.193.205.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1D7A0 /* 20.193.215.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD32E8 /* 20.205.50.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF0468 /* 20.207.4.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79A78 /* 20.215.154.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93A78 /* 20.217.58.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E40220 /* 20.228.2.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17646A97 /* 23.100.106.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766E136 /* 23.102.225.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400E00 /* 40.64.14.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284330D0 /* 40.67.48.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456FC8 /* 40.69.111.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6320 /* 40.74.99.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285039C0 /* 40.80.57.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A9B0 /* 40.80.169.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BC18 /* 40.80.188.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852FDC0 /* 40.82.253.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285911E8 /* 40.89.17.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28709643 /* 40.112.150.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28715E43 /* 40.113.94.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B2F6E /* 40.123.47.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BD882 /* 40.123.216.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C65F0 /* 51.12.101.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCCF8 /* 51.12.204.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356BF0 /* 51.53.107.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BBF0 /* 51.53.187.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336819E0 /* 51.104.25.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336950D0 /* 51.105.80.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336958F8 /* 51.105.88.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B30E0 /* 51.107.48.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B90D8 /* 51.107.144.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743CF4 /* 51.116.60.244/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744EC8 /* 51.116.78.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F5A8 /* 51.116.245.168/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337828E0 /* 51.120.40.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E0D8 /* 51.120.224.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A1F0 /* 51.137.161.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4348 /* 51.140.67.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CCA22 /* 51.140.202.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC0D0 /* 51.143.192.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348830D8 /* 52.136.48.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34888363 /* 52.136.131.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C69B8 /* 52.140.105.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FA636 /* 52.143.166.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968B68 /* 52.150.139.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A119E9 /* 52.161.25.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B095B3 /* 52.176.149.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B71BCC /* 52.183.27.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1AB55 /* 52.225.171.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E42A29 /* 52.228.42.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E451F8 /* 52.228.81.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7434B /* 52.231.67.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79F26 /* 52.231.159.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EB2477 /* 52.235.36.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41343EA7 /* 65.52.62.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD63B0 /* 68.221.99.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853880 /* 102.133.56.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854BAD /* 102.133.75.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685AF48 /* 102.133.175.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828BF08 /* 104.40.191.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682994EE /* 104.41.148.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829A171 /* 104.41.161.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D03DDF /* 104.208.61.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D2DBFC /* 104.210.219.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D34938 /* 104.211.73.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E712 /* 104.211.231.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A558 /* 104.214.165.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170BB0 /* 158.23.11.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90960 /* 191.233.9.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE1D8 /* 191.235.225.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDFD73 /* 191.237.253.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81968 /* 4.232.25.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FFF0 /* 13.73.255.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113328 /* 20.17.51.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152288 /* 20.21.34.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247D60 /* 20.36.125.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142544E8 /* 20.37.68.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E590 /* 20.37.229.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268E50 /* 20.38.142.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E0E8 /* 20.40.224.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2EF0 /* 20.43.46.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7388 /* 20.45.115.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0A20 /* 20.46.10.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C058 /* 20.48.192.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143166E8 /* 20.49.102.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143173B0 /* 20.49.115.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330850 /* 20.51.8.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331070 /* 20.51.16.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352C08 /* 20.53.44.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6248 /* 20.61.98.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8098 /* 20.62.128.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420200 /* 20.66.2.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481178 /* 20.72.17.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A198 /* 20.150.161.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC4C8 /* 20.187.196.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA078 /* 20.191.160.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A180 /* 20.192.161.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E608 /* 20.192.230.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24830 /* 20.194.72.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70308 /* 20.215.3.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92B08 /* 20.217.43.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626CA0 /* 23.98.108.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433450 /* 40.67.52.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503FF8 /* 40.80.63.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850AD88 /* 40.80.173.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285917E0 /* 40.89.23.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2A48 /* 51.12.42.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC260 /* 51.12.194.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8800 /* 51.13.136.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351B80 /* 51.53.27.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335AB80 /* 51.53.171.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3538 /* 51.107.53.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B95F0 /* 51.107.149.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743328 /* 51.116.51.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749460 /* 51.116.148.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782CC8 /* 51.120.44.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A790 /* 51.137.167.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD088 /* 51.143.208.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348834E0 /* 52.136.52.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488B808 /* 52.136.184.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6EA8 /* 52.140.110.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928338 /* 52.146.131.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969CE0 /* 52.150.156.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7090 /* 52.172.112.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5168 /* 68.221.81.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853C28 /* 102.133.60.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DCC8 /* 102.133.220.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB208 /* 104.46.178.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176168 /* 158.23.97.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90EC8 /* 191.233.14.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8A98 /* 191.234.138.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42FB31 /* 13.66.251.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D43444E /* 13.67.68.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4418AD /* 13.68.24.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D444C68 /* 13.68.76.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45528A /* 13.69.82.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D459C55 /* 13.69.156.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4628C9 /* 13.70.40.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4678D7 /* 13.70.120.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D470514 /* 13.71.5.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D474357 /* 13.71.67.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4746D7 /* 13.71.70.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47477A /* 13.71.71.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4751A1 /* 13.71.81.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47596C /* 13.71.89.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D475EB6 /* 13.71.94.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D475F1F /* 13.71.95.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D477106 /* 13.71.113.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49ED9A /* 13.73.237.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B728F /* 13.75.114.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4BAB3D /* 13.75.171.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4BC6A9 /* 13.75.198.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4C5859 /* 13.76.88.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4CC313 /* 13.76.195.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4CE694 /* 13.76.230.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D2DD5 /* 13.77.45.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D8C3A /* 13.77.140.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E8C3F /* 13.78.140.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4ED116 /* 13.78.209.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4FF3C2 /* 13.79.243.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5167A4 /* 13.81.103.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58632D /* 13.88.99.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5864D2 /* 13.88.100.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58DD1C /* 13.88.221.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58FE62 /* 13.88.254.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1419DEB6 /* 20.25.222.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424211D /* 20.36.33.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142421AA /* 20.36.33.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142423BE /* 20.36.35.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142426C3 /* 20.36.38.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14242732 /* 20.36.39.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142427AB /* 20.36.39.171/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424294A /* 20.36.41.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294DFC /* 20.41.77.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4056 /* 20.45.64.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4370 /* 20.45.67.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D43B9 /* 20.45.67.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4F03 /* 20.45.79.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4F18 /* 20.45.79.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4F5B /* 20.45.79.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4F60 /* 20.45.79.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4FA8 /* 20.45.79.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E2EFC /* 20.46.46.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431CCC4 /* 20.49.204.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144A949E /* 20.74.148.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144A980D /* 20.74.152.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144A9AF6 /* 20.74.154.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144A9CB7 /* 20.74.156.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AB266 /* 20.74.178.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AB663 /* 20.74.182.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144DF18C /* 20.77.241.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144DF200 /* 20.77.242.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144DF2CF /* 20.77.242.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144DF360 /* 20.77.243.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145AFE65 /* 20.90.254.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145AFF2A /* 20.90.255.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14600C7B /* 20.96.12.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146170F6 /* 20.97.112.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14617E76 /* 20.97.126.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14617F40 /* 20.97.127.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14617F66 /* 20.97.127.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14617FB6 /* 20.97.127.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1468464B /* 20.104.70.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A48C6 /* 20.106.72.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A498D /* 20.106.73.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A6005 /* 20.106.96.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A630A /* 20.106.99.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A65D6 /* 20.106.101.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F2A93 /* 20.111.42.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1475480F /* 20.117.72.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147548EB /* 20.117.72.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1476A74D /* 20.118.167.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1476A7D2 /* 20.118.167.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147F898F /* 20.127.137.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14968A93 /* 20.150.138.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14976F81 /* 20.151.111.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AA0012 /* 20.170.0.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AA0758 /* 20.170.7.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B9FFE1 /* 20.185.255.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC0301 /* 20.188.3.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC276C /* 20.188.39.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC29F0 /* 20.188.41.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC2D52 /* 20.188.45.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE2B63 /* 20.190.43.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C64389 /* 20.198.67.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB00F7 /* 20.203.0.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB0733 /* 20.203.7.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB1270 /* 20.203.18.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB1AA3 /* 20.203.26.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CC5420 /* 20.204.84.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CC8854 /* 20.204.136.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CC8868 /* 20.204.136.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D4C004 /* 20.212.192.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D4C093 /* 20.212.192.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D4C448 /* 20.212.196.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D8B6B0 /* 20.216.182.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E14FC1 /* 20.225.79.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E151DE /* 20.225.81.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E1541D /* 20.225.84.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E1AABF /* 20.225.170.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E1D18F /* 20.225.209.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E1D2D3 /* 20.225.210.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E1D591 /* 20.225.213.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E1D79B /* 20.225.215.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E48479 /* 20.228.132.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E4F8DF /* 20.228.248.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E76D4B /* 20.231.109.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E76E54 /* 20.231.110.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E87B9B /* 20.232.123.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E87F45 /* 20.232.127.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EC557E /* 20.236.85.126/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17616CAA /* 23.97.108.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176242AE /* 23.98.66.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176285BB /* 23.98.133.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17638D8A /* 23.99.141.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764329A /* 23.100.50.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17646224 /* 23.100.98.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17650536 /* 23.101.5.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765DC87 /* 23.101.220.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766E571 /* 23.102.229.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28409000 /* 40.64.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28417ADE /* 40.65.122.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28441278 /* 40.68.18.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28451F49 /* 40.69.31.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28455AA6 /* 40.69.90.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2845662E /* 40.69.102.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28459597 /* 40.69.149.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2846BD57 /* 40.70.189.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A54FD /* 40.74.84.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A71CA /* 40.74.113.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A76A3 /* 40.74.118.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A8822 /* 40.74.136.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B1E75 /* 40.75.30.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28534F27 /* 40.83.79.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2853EA6D /* 40.83.234.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855F19F /* 40.85.241.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856CCF5 /* 40.86.204.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856CDD8 /* 40.86.205.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856D076 /* 40.86.208.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856DEB7 /* 40.86.222.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28598192 /* 40.89.129.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28599A4C /* 40.89.154.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871C78A /* 40.113.199.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871C83A /* 40.113.200.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872F15A /* 40.114.241.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287388AF /* 40.115.136.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878277C /* 40.120.39.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A1CC4 /* 40.122.28.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287AD414 /* 40.122.212.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BE43A /* 40.123.228.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F03CF /* 40.127.3.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B0DF8 /* 51.11.13.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BF18E /* 51.11.241.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33683158 /* 51.104.49.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369367B /* 51.105.54.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B44AC /* 51.107.68.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B4523 /* 51.107.69.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B4EA8 /* 51.107.78.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B5543 /* 51.107.85.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B556E /* 51.107.85.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B5607 /* 51.107.86.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B5663 /* 51.107.86.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374AB66 /* 51.116.171.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374B6F8 /* 51.116.182.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374E12B /* 51.116.225.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374E12C /* 51.116.225.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374E137 /* 51.116.225.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374EC4A /* 51.116.236.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374EC54 /* 51.116.236.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378459E /* 51.120.69.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33784687 /* 51.120.70.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378468D /* 51.120.70.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33784D9B /* 51.120.77.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33784E8E /* 51.120.78.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33784FD4 /* 51.120.79.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33785878 /* 51.120.88.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33841D6B /* 51.132.29.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33881CC8 /* 51.136.28.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389594F /* 51.137.89.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C399F /* 51.140.57.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CCE6E /* 51.140.206.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CE7DF /* 51.140.231.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CFF37 /* 51.140.255.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D1E1F /* 51.141.30.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D7A59 /* 51.141.122.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338DADEC /* 51.141.173.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F274F /* 51.143.39.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FA4C0 /* 51.143.164.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FA96B /* 51.143.169.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3391114B /* 51.145.17.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x339157E8 /* 51.145.87.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34890232 /* 52.137.2.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A0999 /* 52.138.9.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A1473 /* 52.138.20.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A1C17 /* 52.138.28.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C7122 /* 52.140.113.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D25C9 /* 52.141.37.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D3865 /* 52.141.56.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348EA100 /* 52.142.161.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348EA2E2 /* 52.142.162.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F6057 /* 52.143.96.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FB6D0 /* 52.143.182.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3493035D /* 52.147.3.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3493A09E /* 52.147.160.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349735C4 /* 52.151.53.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B6F7C /* 52.155.111.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CAB7F /* 52.156.171.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F55A8 /* 52.159.85.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F5780 /* 52.159.87.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F7361 /* 52.159.115.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F7456 /* 52.159.116.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F7495 /* 52.159.116.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A1213B /* 52.161.33.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A121BB /* 52.161.33.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A12612 /* 52.161.38.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A126DA /* 52.161.38.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A1403E /* 52.161.64.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A151E7 /* 52.161.81.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A3D1FF /* 52.163.209.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A47E7C /* 52.164.126.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5DA0F /* 52.165.218.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A7A387 /* 52.167.163.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A7AB35 /* 52.167.171.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A90574 /* 52.169.5.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AB2421 /* 52.171.36.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC224A /* 52.172.34.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC28D7 /* 52.172.40.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC8505 /* 52.172.133.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACC26D /* 52.172.194.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACD2EB /* 52.172.210.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACD922 /* 52.172.217.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACDF2E /* 52.172.223.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD59A8 /* 52.173.89.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE4105 /* 52.174.65.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF9078 /* 52.175.144.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AFFD9C /* 52.175.253.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B17BA2 /* 52.177.123.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B1ACF7 /* 52.177.172.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B71340 /* 52.183.19.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B78289 /* 52.183.130.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B9CA98 /* 52.185.202.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB7F98 /* 52.187.127.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDC20E /* 52.189.194.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDD797 /* 52.189.215.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDE99E /* 52.189.233.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BF81E7 /* 52.191.129.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E41DA4 /* 52.228.29.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E575FE /* 52.229.117.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E57D2D /* 52.229.125.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E5CFB4 /* 52.229.207.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E70DC1 /* 52.231.13.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E726D3 /* 52.231.38.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E75DE0 /* 52.231.93.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7623A /* 52.231.98.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79B82 /* 52.231.155.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79C13 /* 52.231.156.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7A4A3 /* 52.231.164.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7A6C7 /* 52.231.166.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7C307 /* 52.231.195.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7C5C3 /* 52.231.197.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7CEA2 /* 52.231.206.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E910C6 /* 52.233.16.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED140E /* 52.237.20.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EDC9F6 /* 52.237.201.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EDFDF5 /* 52.237.253.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F25665 /* 52.242.86.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F3416B /* 52.243.65.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F34AD5 /* 52.243.74.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F6A58C /* 52.246.165.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F6B1DD /* 52.246.177.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F6BF62 /* 52.246.191.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F77AE1 /* 52.247.122.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F77B00 /* 52.247.123.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF2869 /* 52.255.40.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF3D91 /* 52.255.61.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41344778 /* 65.52.71.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41349EB1 /* 65.52.158.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134A0DA /* 65.52.160.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x46255343 /* 70.37.83.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4625567E /* 70.37.86.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x46256318 /* 70.37.99.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66252A9F /* 102.37.42.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854024 /* 102.133.64.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854044 /* 102.133.64.68/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685405B /* 102.133.64.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685406F /* 102.133.64.111/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668548FA /* 102.133.72.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854B08 /* 102.133.75.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854B20 /* 102.133.75.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854B23 /* 102.133.75.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685A1DC /* 102.133.161.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685A687 /* 102.133.166.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685ACBF /* 102.133.172.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685AFC8 /* 102.133.175.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E051 /* 102.133.224.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685EA8B /* 102.133.234.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68281523 /* 104.40.21.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68289CC2 /* 104.40.156.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682905A2 /* 104.41.5.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68292DB6 /* 104.41.45.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829A69F /* 104.41.166.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BA904 /* 104.43.169.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EEDD1 /* 104.46.237.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D01C52 /* 104.208.28.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D1213C /* 104.209.33.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D1E9DE /* 104.209.233.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D296A0 /* 104.210.150.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D29DD1 /* 104.210.157.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D34E11 /* 104.211.78.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3723D /* 104.211.114.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D38A58 /* 104.211.138.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D38CBE /* 104.211.140.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39811 /* 104.211.152.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39A0E /* 104.211.154.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39B72 /* 104.211.155.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A57B /* 104.211.165.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3B896 /* 104.211.184.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3BC97 /* 104.211.188.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3D3D5 /* 104.211.211.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3D8E6 /* 104.211.216.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3DE32 /* 104.211.222.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3F268 /* 104.211.242.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D63C90 /* 104.214.60.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6ED17 /* 104.214.237.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D73303 /* 104.215.51.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D76733 /* 104.215.103.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D77055 /* 104.215.112.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974310C /* 137.116.49.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974A020 /* 137.116.160.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974A89C /* 137.116.168.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974F894 /* 137.116.248.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8975AB1A /* 137.117.171.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89872B1E /* 137.135.43.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8987F341 /* 137.135.243.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B2C0D /* 138.91.44.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B9E86 /* 138.91.158.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D38A059 /* 157.56.160.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83DA7C1 /* 168.61.167.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F1F36 /* 168.63.31.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F4777 /* 168.63.71.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F89D5 /* 168.63.137.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8314A /* 191.232.49.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8A695 /* 191.232.166.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8EB46 /* 191.232.235.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8EE49 /* 191.232.238.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEABF3F /* 191.234.191.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB417F /* 191.235.65.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB48AF /* 191.235.72.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB49D3 /* 191.235.73.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB4E7E /* 191.235.78.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFF810 /* 191.239.248.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424498B /* 20.36.73.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142449C1 /* 20.36.73.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14244AD6 /* 20.36.74.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14244AEF /* 20.36.74.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14244B2E /* 20.36.75.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14244B32 /* 20.36.75.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353E64 /* 20.53.62.100/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D496DC4 /* 13.73.109.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D496E94 /* 13.73.110.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4970BF /* 13.73.112.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4974E0 /* 13.73.116.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D35D8 /* 13.77.53.216/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C0572 /* 20.92.5.114/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F5973 /* 40.127.89.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F59E9 /* 40.127.89.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F59ED /* 40.127.89.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F5A01 /* 40.127.90.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F5EDD /* 40.127.94.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CF40 /* 191.233.207.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93204 /* 191.233.50.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269584 /* 20.38.149.132/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14742B6C /* 20.116.43.108/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855CD4D /* 40.85.205.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855D633 /* 40.85.214.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855D9F1 /* 40.85.217.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855E449 /* 40.85.228.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855FBE8 /* 40.85.251.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855FE1F /* 40.85.254.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A1FD3 /* 52.138.31.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456FC4 /* 40.69.111.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D470135 /* 13.71.1.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47249B /* 13.71.36.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B797C /* 20.43.121.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C180F4 /* 20.193.128.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C18106 /* 20.193.129.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1817E /* 20.193.129.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1880C /* 20.193.136.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C18839 /* 20.193.136.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1883B /* 20.193.136.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1889D /* 20.193.136.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C188A0 /* 20.193.136.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C188D6 /* 20.193.136.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C188D8 /* 20.193.136.216/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C188E0 /* 20.193.136.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C188EF /* 20.193.136.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C188F9 /* 20.193.136.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1890D /* 20.193.137.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1890E /* 20.193.137.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C18924 /* 20.193.137.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C18937 /* 20.193.137.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC0D8 /* 20.204.192.216/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC88BC /* 52.172.136.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC906F /* 52.172.144.111/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACA45A /* 52.172.164.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACBB5D /* 52.172.187.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACC6EC /* 52.172.198.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACCAC3 /* 52.172.202.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACD292 /* 52.172.210.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACD3AC /* 52.172.211.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACD54E /* 52.172.213.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACD7B4 /* 52.172.215.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACDA90 /* 52.172.218.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACDD0D /* 52.172.221.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACDD61 /* 52.172.221.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3716D /* 104.211.113.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D374B7 /* 104.211.116.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3765D /* 104.211.118.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8E34 /* 168.61.142.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A550 /* 104.214.165.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142735AE /* 20.39.53.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4024 /* 20.42.64.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14771CDC /* 20.119.28.220/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2879431E /* 40.121.67.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2879DBD7 /* 40.121.219.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2879DD3E /* 40.121.221.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2879DEC9 /* 40.121.222.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2879DFBA /* 40.121.223.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34959A8E /* 52.149.154.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349A4C5D /* 52.154.76.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349A4DA4 /* 52.154.77.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BCC892 /* 52.188.200.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3001B /* 104.211.0.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D30226 /* 104.211.2.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D30322 /* 104.211.3.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D30364 /* 104.211.3.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89752DE6 /* 137.117.45.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89752E3E /* 137.117.46.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89752EF8 /* 137.117.46.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D2E40 /* 168.61.46.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D2F16 /* 168.61.47.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C11DC /* 20.44.17.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B891A6 /* 52.184.145.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481B98 /* 20.72.27.152/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345FFE /* 20.52.95.254/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374A861 /* 51.116.168.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374A869 /* 51.116.168.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374A86B /* 51.116.168.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374A872 /* 51.116.168.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374ABA7 /* 51.116.171.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374ABAB /* 51.116.171.171/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374ABDB /* 51.116.171.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374EBDD /* 51.116.235.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374EF87 /* 51.116.239.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93A58 /* 20.217.58.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86A58 /* 4.232.106.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D491226 /* 13.73.18.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D491880 /* 13.73.24.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4919E5 /* 13.73.25.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D491C7D /* 13.73.28.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6D9C /* 13.78.109.156/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143010F7 /* 20.48.16.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14301553 /* 20.48.21.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143015F2 /* 20.48.21.242/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430287A /* 20.48.40.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D2458C /* 20.210.69.140/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F324C8 /* 52.243.36.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F324E1 /* 52.243.36.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F6B40A /* 52.246.180.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F6B7DF /* 52.246.183.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F6B870 /* 52.246.184.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B01AA /* 138.91.1.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B01AD /* 138.91.1.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B0200 /* 138.91.2.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B042B /* 138.91.4.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6618 /* 40.74.102.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EE7C /* 20.192.238.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CA04 /* 20.193.202.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114258 /* 20.17.66.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170A58 /* 158.23.10.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6A268E /* 13.106.38.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6A2694 /* 13.106.38.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14874633 /* 20.135.70.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F0F48C /* 52.240.244.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79A58 /* 20.215.154.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152A58 /* 20.21.42.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D411913 /* 13.65.25.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D423C77 /* 13.66.60.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5431F7 /* 13.84.49.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5433AC /* 13.84.51.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54343A /* 13.84.52.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6A3603 /* 13.106.54.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6A3613 /* 13.106.54.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7BEC /* 20.45.123.236/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14764E24 /* 20.118.78.36/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17629686 /* 23.98.150.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x462566B3 /* 70.37.102.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430A7C /* 13.67.10.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35736 /* 20.195.87.54/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB83EF /* 52.187.131.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB843F /* 52.187.132.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB86E6 /* 52.187.134.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB87F7 /* 52.187.135.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E65193 /* 52.230.81.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974810D /* 137.116.129.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974811E /* 137.116.129.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89748437 /* 137.116.132.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FFC05 /* 168.63.252.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6258 /* 68.221.98.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C65AC /* 51.12.101.172/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCCF4 /* 51.12.204.244/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7C942 /* 20.199.201.66/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356A58 /* 51.53.106.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BA58 /* 51.53.186.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4089 /* 20.45.64.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D408A /* 20.45.64.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D408E /* 20.45.64.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4859 /* 20.45.72.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D486F /* 20.45.72.111/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4BB7 /* 20.45.75.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB583E /* 20.203.88.62/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1475C122 /* 20.117.193.34/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680964 /* 51.104.9.100/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C3C3C /* 51.140.60.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C3CA0 /* 51.140.60.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C449E /* 51.140.68.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C46DA /* 51.140.70.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4907 /* 51.140.73.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C780F /* 51.140.120.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A2626 /* 20.90.38.38/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CF264 /* 51.140.242.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CFA79 /* 51.140.250.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CFEE1 /* 51.140.254.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D0C52 /* 51.141.12.82/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D0C54 /* 51.141.12.84/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D0CEA /* 51.141.12.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D0DAA /* 51.141.13.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C770 /* 13.71.199.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4DCAA4 /* 13.77.202.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E8091 /* 13.78.128.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E94B2 /* 13.78.148.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E9699 /* 13.78.150.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E96C9 /* 13.78.150.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E96D0 /* 13.78.150.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EDF74 /* 13.78.223.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450866 /* 20.69.8.102/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A10DA7 /* 52.161.13.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A10E03 /* 52.161.14.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A1132D /* 52.161.19.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A1137D /* 52.161.19.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A11626 /* 52.161.22.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A118A5 /* 52.161.24.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A11C3E /* 52.161.28.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A11C9F /* 52.161.28.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A11CA7 /* 52.161.28.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A11EBD /* 52.161.30.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A11FDA /* 52.161.31.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A15C93 /* 52.161.92.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A15F59 /* 52.161.95.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A16083 /* 52.161.96.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A160D5 /* 52.161.96.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A16190 /* 52.161.97.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A16272 /* 52.161.98.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A16874 /* 52.161.104.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A16A35 /* 52.161.106.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A16DC4 /* 52.161.109.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456D84 /* 13.69.109.132/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D714 /* 20.105.215.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17618DA0 /* 23.97.141.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761A9D6 /* 23.97.169.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761D143 /* 23.97.209.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761D6D2 /* 23.97.214.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761DABC /* 23.97.218.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844C389 /* 40.68.195.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844C93A /* 40.68.201.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844C941 /* 40.68.201.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844C9CE /* 40.68.201.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844C9D3 /* 40.68.201.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844CC12 /* 40.68.204.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873256A /* 40.115.37.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x339064C0 /* 51.144.100.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E22E5 /* 104.46.34.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E2AB8 /* 104.46.42.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E2DAC /* 104.46.45.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DDDC /* 13.86.221.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14874A03 /* 20.135.74.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A06141 /* 52.160.97.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428FDC /* 13.66.143.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42CA0E /* 13.66.202.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42F8E1 /* 13.66.248.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42F9D3 /* 13.66.249.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4DAC66 /* 13.77.172.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4DB7D1 /* 13.77.183.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6A39B5 /* 13.106.57.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6A39C4 /* 13.106.57.196/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D04A8 /* 20.125.4.168/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B714F4 /* 52.183.20.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B71F00 /* 52.183.31.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B75E3B /* 52.183.94.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496ACE4 /* 20.150.172.228/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246A44 /* 20.36.106.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246BB0 /* 20.36.107.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14253443 /* 20.37.52.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247214 /* 20.36.114.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247380 /* 20.36.115.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14276351 /* 20.39.99.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D46481C /* 13.70.72.28/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4648F0 /* 13.70.72.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4BD9B8 /* 13.75.217.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4BDD4E /* 13.75.221.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14287D9B /* 20.40.125.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DCB6 /* 20.70.220.182/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3244 /* 13.77.50.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D34E0 /* 13.77.52.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A06B /* 20.40.160.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C03FA /* 20.92.3.250/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE918B3 /* 191.233.24.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CB1C /* 191.233.203.28/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CBF0 /* 191.233.203.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE490E /* 191.238.73.14/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE812B5 /* 191.232.18.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE932C0 /* 191.233.50.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AA2C /* 13.71.170.44/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AC90 /* 13.71.172.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C94C /* 20.48.201.76/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B1422 /* 52.139.20.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456A44 /* 40.69.106.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456BE0 /* 40.69.107.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B5075 /* 52.139.80.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22F50 /* 52.242.47.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D473101 /* 13.71.49.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02D70 /* 20.192.45.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3511C /* 104.211.81.28/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D351F0 /* 104.211.81.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D566642 /* 13.86.102.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5921B9 /* 13.89.33.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AACC /* 13.89.170.204/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AE40 /* 13.89.174.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E73E /* 20.40.231.62/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0DE0 /* 20.46.13.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECA80 /* 40.78.202.128/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECBA0 /* 40.78.203.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD9FA0 /* 52.253.159.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2294 /* 13.75.34.148/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2610 /* 13.75.38.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B438F /* 13.75.67.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34E40 /* 20.195.78.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B981B /* 52.139.152.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134A45B /* 65.52.164.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134ADF7 /* 65.52.173.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D524798 /* 13.82.71.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589A14 /* 20.88.154.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470ACC /* 40.71.10.204/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470D80 /* 40.71.13.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287586BD /* 40.117.134.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28790D1A /* 40.121.13.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0BA63 /* 52.224.186.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C4803 /* 20.44.72.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E3FFE /* 20.62.63.254/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2846924C /* 40.70.146.76/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469410 /* 40.70.148.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FE8B8 /* 20.47.232.184/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9250 /* 40.74.146.80/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9320 /* 40.74.147.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDE5FD /* 52.253.229.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481A10 /* 20.72.26.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14630850 /* 20.99.8.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433AE0 /* 40.67.58.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423C6F /* 40.66.60.111/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F822C /* 40.79.130.44/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F83C0 /* 40.79.131.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD77C /* 51.138.215.124/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14275002 /* 20.39.80.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB244 /* 40.79.178.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB3C0 /* 40.79.179.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33740000 /* 51.116.0.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743B00 /* 51.116.59.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345E70 /* 20.52.94.112/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33746000 /* 51.116.96.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749B40 /* 51.116.155.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92BE0 /* 20.217.43.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81C00 /* 4.232.28.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6A5C /* 13.78.106.92/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6CB0 /* 13.78.108.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA7F6 /* 20.191.167.246/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348CEEB3 /* 52.140.238.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D29040 /* 20.210.144.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6434 /* 40.74.100.52/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6530 /* 40.74.101.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851B908 /* 40.81.185.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03240 /* 20.192.50.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EAA0 /* 20.192.234.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C030 /* 20.193.192.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CAA0 /* 20.193.202.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24AF0 /* 20.194.74.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28529DA7 /* 40.82.157.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7122C /* 52.231.18.44/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E713C0 /* 52.231.19.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850E8B9 /* 40.80.232.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79254 /* 52.231.146.84/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E793B0 /* 52.231.147.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141133E0 /* 20.17.51.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176480 /* 158.23.100.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143306E0 /* 20.51.6.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760E0AF /* 23.96.224.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765A626 /* 23.101.166.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28512FD8 /* 40.81.47.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26A94 /* 52.162.106.148/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26E50 /* 52.162.110.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E34C /* 13.69.227.76/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E550 /* 13.69.229.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2845CA50 /* 40.69.202.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28705EC4 /* 40.112.94.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E5F23 /* 52.142.95.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928BC2 /* 52.146.139.194/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829D9F3 /* 104.41.217.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829DAA0 /* 104.41.218.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337802B9 /* 51.120.2.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337862B0 /* 51.120.98.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378EAF0 /* 51.120.234.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33788286 /* 51.120.130.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DAE0 /* 51.120.218.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D703E0 /* 20.215.3.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152460 /* 20.21.36.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A6DC /* 102.37.166.220/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668582C5 /* 102.133.130.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859A04 /* 102.133.154.4/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859C00 /* 102.133.156.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685004F /* 102.133.0.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851A04 /* 102.133.26.4/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851C00 /* 102.133.28.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54BD11 /* 13.84.189.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D55163F /* 13.85.22.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146120BE /* 20.97.32.190/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC4D77 /* 20.188.77.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D612AC /* 104.214.18.172/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D613E0 /* 104.214.19.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEEF161 /* 191.238.241.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0204 /* 20.44.2.4/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C03E0 /* 20.44.3.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C21F6 /* 20.44.33.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC244 /* 40.78.194.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC3E0 /* 40.78.195.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D43086C /* 13.67.8.108/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4309D0 /* 13.67.9.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D4E297 /* 20.212.226.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285AB92E /* 40.90.185.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5480 /* 68.221.84.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1910 /* 51.12.25.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C62E0 /* 51.12.98.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1100 /* 51.12.17.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCAE0 /* 51.12.202.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B005B /* 51.107.0.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3B00 /* 51.107.59.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF6B0 /* 51.107.246.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B6008 /* 51.107.96.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9B00 /* 51.107.155.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351BE0 /* 51.53.27.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335ABE0 /* 51.53.171.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254AE0 /* 20.37.74.224/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254C20 /* 20.37.76.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14255129 /* 20.37.81.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5BD0 /* 20.203.91.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E9055 /* 20.46.144.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28785730 /* 40.120.87.48/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FA04 /* 65.52.250.4/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FC20 /* 65.52.252.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577A54 /* 13.87.122.84/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577B90 /* 13.87.123.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8372 /* 20.90.131.114/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C923C /* 51.140.146.60/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9500 /* 51.140.149.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3391387D /* 51.145.56.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573854 /* 13.87.56.84/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573990 /* 13.87.57.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33898800 /* 51.137.136.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD254 /* 51.140.210.84/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD3B0 /* 51.140.211.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C274 /* 13.71.194.116/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C420 /* 13.71.196.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD873A /* 52.253.135.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45404C /* 13.69.64.76/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454290 /* 13.69.66.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14565CFE /* 20.86.92.254/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765438C /* 23.101.67.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3391B34E /* 51.145.179.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8975A038 /* 137.117.160.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28515918 /* 40.81.89.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39244 /* 104.211.146.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39390 /* 104.211.147.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D402710 /* 13.64.39.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D406D6F /* 13.64.109.111/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B5110 /* 20.59.81.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F294 /* 40.112.242.148/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F3F0 /* 40.112.243.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876A223 /* 40.118.162.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134733A /* 65.52.115.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428A5C /* 13.66.138.92/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428CB0 /* 13.66.140.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453DD14 /* 20.83.221.20/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453DD40 /* 20.83.221.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453DD56 /* 20.83.221.86/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F7FCB /* 51.143.127.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B773F4 /* 52.183.115.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A7A0 /* 20.150.167.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AAE0 /* 20.150.170.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14242BCF /* 20.36.43.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246A60 /* 20.36.106.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E200 /* 20.37.226.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143534C0 /* 20.53.52.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353500 /* 20.53.53.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142448E6 /* 20.36.72.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247500 /* 20.36.117.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247A00 /* 20.36.122.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353C60 /* 20.53.60.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353D00 /* 20.53.61.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464820 /* 13.70.72.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D467B95 /* 13.70.123.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B8AE0 /* 13.75.138.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B938F /* 13.75.147.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B93C9 /* 13.75.147.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4BDA2D /* 13.75.218.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C4C0 /* 20.37.196.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D34000 /* 20.211.64.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D34700 /* 20.211.71.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D34780 /* 20.211.71.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765D034 /* 23.101.208.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA3A0 /* 40.79.163.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAB40 /* 40.79.171.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852D95D /* 40.82.217.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EE39E /* 40.126.227.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EEC16 /* 40.126.236.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EF23B /* 40.126.242.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EF5A9 /* 40.126.245.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BBCEF3 /* 52.187.206.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BBE517 /* 52.187.229.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EDCDA3 /* 52.237.205.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EDD6DD /* 52.237.214.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EDF6A2 /* 52.237.246.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D245F1 /* 104.210.69.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D25C47 /* 104.210.92.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D46926E /* 13.70.146.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4693CE /* 13.70.147.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49742D /* 13.73.116.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D497668 /* 13.73.118.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D07AF /* 13.77.7.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3260 /* 13.77.50.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE4A0 /* 20.42.228.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C3000 /* 20.92.48.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C3400 /* 20.92.52.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C3600 /* 20.92.54.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C3700 /* 20.92.55.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C3780 /* 20.92.55.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765E018 /* 23.101.224.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765E6A2 /* 23.101.230.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDD531 /* 52.189.213.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF23F9 /* 52.255.35.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF3686 /* 52.255.54.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFBC0B /* 191.239.188.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CEB000 /* 20.206.176.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17616020 /* 23.97.96.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829098B /* 104.41.9.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68290DB3 /* 104.41.13.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68293F6C /* 104.41.63.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8264D /* 191.232.38.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8B010 /* 191.232.176.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CB20 /* 191.233.203.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA92A0 /* 191.234.146.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9AA0 /* 191.234.154.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB5149 /* 191.235.81.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB5A46 /* 191.235.90.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE420 /* 191.235.228.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4E10 /* 191.238.78.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4F00 /* 191.238.79.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE00C8 /* 20.206.0.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0100 /* 20.206.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0200 /* 20.206.2.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE81010 /* 191.232.16.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE81034 /* 191.232.16.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93220 /* 191.233.50.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AA80 /* 13.71.170.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142692A0 /* 20.38.146.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430CAA0 /* 20.48.202.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430CB00 /* 20.48.203.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430CC00 /* 20.48.204.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14742800 /* 20.116.40.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14742A00 /* 20.116.42.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BF54 /* 40.82.191.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855D4AD /* 40.85.212.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855E6B6 /* 40.85.230.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E42A4C /* 52.228.42.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45420 /* 52.228.84.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E4797B /* 52.228.121.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E9268F /* 52.233.38.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED12DC /* 52.237.18.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED168B /* 52.237.22.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69AA0 /* 52.246.154.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456A60 /* 40.69.106.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E159 /* 40.86.225.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E660 /* 40.86.230.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591300 /* 40.89.19.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E57354 /* 52.229.115.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F216D5 /* 52.242.22.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F21BD5 /* 52.242.27.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F228C0 /* 52.242.40.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22900 /* 52.242.41.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22A00 /* 52.242.42.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C062A0 /* 20.192.98.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0AA08 /* 20.192.170.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0AA80 /* 20.192.170.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0AB00 /* 20.192.171.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285032A0 /* 40.80.50.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6AE0 /* 52.140.106.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACC350 /* 52.172.195.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACCCC4 /* 52.172.204.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACDB79 /* 52.172.219.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35120 /* 104.211.81.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3618A /* 104.211.97.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D43811A /* 13.67.129.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D438D62 /* 13.67.141.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D593907 /* 13.89.57.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AC00 /* 13.89.172.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59EEEF /* 13.89.238.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428CA00 /* 20.40.202.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14762800 /* 20.118.40.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14763000 /* 20.118.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17638034 /* 23.99.128.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763B795 /* 23.99.183.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763C084 /* 23.99.192.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763C4B4 /* 23.99.196.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763CE97 /* 23.99.206.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763E038 /* 23.99.224.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764520B /* 23.100.82.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17657691 /* 23.101.118.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765772C /* 23.101.119.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176577A3 /* 23.101.119.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176578C3 /* 23.101.120.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17657D41 /* 23.101.125.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2845BE29 /* 40.69.190.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D38AE /* 40.77.56.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285310AC /* 40.83.16.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28565690 /* 40.86.86.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28565BD4 /* 40.86.91.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285660B1 /* 40.86.96.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285663CA /* 40.86.99.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871CC58 /* 40.113.204.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871E8F3 /* 40.113.232.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871EC2D /* 40.113.236.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A2441 /* 40.122.36.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A41A2 /* 40.122.65.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A6E9A /* 40.122.110.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A72E5 /* 40.122.114.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A581CB /* 52.165.129.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A587EA /* 52.165.135.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A59B0C /* 52.165.155.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A59BED /* 52.165.155.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5A3DF /* 52.165.163.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5A828 /* 52.165.168.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5AE7B /* 52.165.174.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5B8AA /* 52.165.184.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5DC21 /* 52.165.220.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5E051 /* 52.165.224.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5ED0F /* 52.165.237.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD1C5F /* 52.173.28.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD2453 /* 52.173.36.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD4C21 /* 52.173.76.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD4D8C /* 52.173.77.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD5331 /* 52.173.83.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD549D /* 52.173.84.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD5782 /* 52.173.87.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD5EAD /* 52.173.94.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD8673 /* 52.173.134.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD8B63 /* 52.173.139.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD8B7D /* 52.173.139.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD95FE /* 52.173.149.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD97E5 /* 52.173.151.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADB893 /* 52.173.184.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADF5F9 /* 52.173.245.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADF989 /* 52.173.249.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B002E5 /* 52.176.2.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B005F1 /* 52.176.5.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B00600 /* 52.176.6.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B00625 /* 52.176.6.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B03D80 /* 52.176.61.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B06878 /* 52.176.104.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B095C5 /* 52.176.149.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B0A545 /* 52.176.165.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682B8169 /* 104.43.129.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682B8C65 /* 104.43.140.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682B8E21 /* 104.43.142.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BDD1F /* 104.43.221.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BF647 /* 104.43.246.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BFE66 /* 104.43.254.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D981D /* 168.61.152.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D9F72 /* 168.61.159.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83DD9D6 /* 168.61.217.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83DDA7D /* 168.61.218.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC410 /* 20.45.196.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF2B0 /* 20.45.242.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF300 /* 20.45.243.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF400 /* 20.45.244.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECCA0 /* 40.78.204.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B206 /* 52.180.178.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B742 /* 52.180.183.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D0306B /* 104.208.48.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B22A0 /* 13.75.34.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2E1A /* 13.75.46.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2F0F /* 13.75.47.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B59E0 /* 13.75.89.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B706C /* 13.75.112.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B7328 /* 13.75.115.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5E2F57 /* 13.94.47.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6860 /* 20.189.104.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6D60 /* 20.189.109.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD7042 /* 20.189.112.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD3000 /* 20.205.48.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4200 /* 20.205.66.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4550 /* 20.205.69.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4600 /* 20.205.70.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17614F77 /* 23.97.79.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17636EC0 /* 23.99.110.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17637446 /* 23.99.116.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17650A8D /* 23.101.10.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2853483B /* 40.83.72.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28537C49 /* 40.83.124.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134A077 /* 65.52.160.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134A846 /* 65.52.168.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA10BC /* 191.234.16.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E9031 /* 207.46.144.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E9394 /* 207.46.147.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D525DF5 /* 13.82.93.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5265B3 /* 13.82.101.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D52AF60 /* 13.82.175.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5A8F45 /* 13.90.143.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5AD5CC /* 13.90.213.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5C8BD6 /* 13.92.139.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5CC16E /* 13.92.193.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5CEDDA /* 13.92.237.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A1AFC /* 20.42.26.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316800 /* 20.49.104.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14770000 /* 20.119.0.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14771000 /* 20.119.16.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14771B00 /* 20.119.27.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17600034 /* 23.96.0.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760016D /* 23.96.1.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17600DF3 /* 23.96.13.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17602080 /* 23.96.32.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760608E /* 23.96.96.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760679F /* 23.96.103.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17607035 /* 23.96.112.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17607180 /* 23.96.113.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17607C19 /* 23.96.124.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284700B3 /* 40.71.0.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470B80 /* 40.71.11.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847B122 /* 40.71.177.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847C775 /* 40.71.199.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847EAFE /* 40.71.234.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847FABF /* 40.71.250.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C0589 /* 40.76.5.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CC00F /* 40.76.192.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CD236 /* 40.76.210.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CDA21 /* 40.76.218.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CDF65 /* 40.76.223.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9AC0 /* 40.79.154.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855BE0A /* 40.85.190.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28574183 /* 40.87.65.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857465F /* 40.87.70.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28720D19 /* 40.114.13.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287229F5 /* 40.114.41.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28723344 /* 40.114.51.68/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28724415 /* 40.114.68.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28726A19 /* 40.114.106.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28759AF0 /* 40.117.154.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2875BC7E /* 40.117.188.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2875BE48 /* 40.117.190.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287908F1 /* 40.121.8.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287910C1 /* 40.121.16.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287920E8 /* 40.121.32.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287923DD /* 40.121.35.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28795BC7 /* 40.121.91.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2879D4A5 /* 40.121.212.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2879DD34 /* 40.121.221.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87DBC /* 52.168.125.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AA0719 /* 52.170.7.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AA2EAE /* 52.170.46.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3610F /* 52.179.97.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E28640 /* 52.226.134.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EAD15E /* 52.234.209.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D81B2 /* 104.45.129.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D8DF7 /* 104.45.141.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D980D /* 104.45.152.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D983C /* 104.45.152.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D9AC8 /* 104.45.154.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D31AD4 /* 104.211.26.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89753ACC /* 137.117.58.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x897542A7 /* 137.117.66.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89755436 /* 137.117.84.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89755A3F /* 137.117.90.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89755D57 /* 137.117.93.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89875BB0 /* 137.135.91.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89876BEB /* 137.135.107.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E30B7 /* 168.62.48.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EB4AD /* 168.62.180.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC100C /* 191.236.16.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC3B43 /* 191.236.59.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFED1859 /* 191.237.24.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFED1B4A /* 191.237.27.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE081A /* 191.238.8.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE2132 /* 191.238.33.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D441D88 /* 13.68.29.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D44653E /* 13.68.101.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D528D /* 13.77.82.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D53F6 /* 13.77.83.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D6077 /* 13.77.96.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316100 /* 20.49.97.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14778000 /* 20.119.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14779000 /* 20.119.144.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14779B00 /* 20.119.155.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17659375 /* 23.101.147.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28461B23 /* 40.70.27.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469300 /* 40.70.147.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F41C8 /* 40.79.65.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285436CB /* 40.84.54.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28543BAE /* 40.84.59.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B2D2F /* 40.123.45.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B2F3A /* 40.123.47.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B1A996 /* 52.177.169.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B1BD8A /* 52.177.189.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B1CE49 /* 52.177.206.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3BCCE /* 52.179.188.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A287 /* 52.184.162.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8C167 /* 52.184.193.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8C168 /* 52.184.193.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E653B /* 104.46.101.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D1B243 /* 104.209.178.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D1C0CE /* 104.209.192.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D1C557 /* 104.209.197.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89744EF3 /* 137.116.78.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x897458D5 /* 137.116.88.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFECC079 /* 191.236.192.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFED80EE /* 191.237.128.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270B68 /* 20.39.11.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FE978 /* 20.47.233.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FEA00 /* 20.47.234.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FEB00 /* 20.47.235.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B327 /* 52.225.179.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1BE41 /* 52.225.190.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDE0DF /* 52.253.224.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481A20 /* 20.72.26.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315220 /* 20.49.82.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14630E00 /* 20.99.14.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14631880 /* 20.99.24.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433AC0 /* 40.67.58.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2B20 /* 20.43.43.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F00F8 /* 20.111.0.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F0100 /* 20.111.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F0200 /* 20.111.2.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8280 /* 40.79.130.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28598394 /* 40.89.131.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28598D67 /* 40.89.141.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F8996 /* 52.143.137.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB260 /* 40.79.178.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695A20 /* 51.105.90.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34888A37 /* 52.136.138.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BE00 /* 52.136.190.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BE80 /* 52.136.190.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743120 /* 51.116.49.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743AA0 /* 51.116.58.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744B80 /* 51.116.75.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744C00 /* 51.116.76.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744D00 /* 51.116.77.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144F6800 /* 20.79.104.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144F6A00 /* 20.79.106.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144F6B00 /* 20.79.107.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749120 /* 51.116.145.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749AE0 /* 51.116.154.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F2A0 /* 51.116.242.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FAA0 /* 51.116.250.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93400 /* 20.217.52.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86300 /* 4.232.99.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D479597 /* 13.71.149.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D490186 /* 13.73.1.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D491A49 /* 13.73.26.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E3BED /* 13.78.59.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6A60 /* 13.78.106.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E7556 /* 13.78.117.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E7B57 /* 13.78.123.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4320 /* 20.43.67.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590CE0 /* 20.89.12.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590D00 /* 20.89.13.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590E00 /* 20.89.14.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D24000 /* 20.210.64.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D24400 /* 20.210.68.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC300 /* 40.79.195.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873B379 /* 40.115.179.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873FB94 /* 40.115.251.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F32759 /* 52.243.39.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829BA67 /* 104.41.186.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B001E /* 138.91.0.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC270 /* 20.189.194.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC300 /* 20.189.195.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC400 /* 20.189.196.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6480 /* 40.74.100.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A8514 /* 40.74.133.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503AE0 /* 40.80.58.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF9EDB /* 52.175.158.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D689EC /* 104.214.137.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D70BB0 /* 104.215.11.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D73AE6 /* 104.215.58.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B1012 /* 138.91.16.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03600 /* 20.192.54.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EA80 /* 20.192.234.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF0060 /* 20.207.0.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF0080 /* 20.207.0.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C600 /* 20.193.198.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CA80 /* 20.193.202.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284008E0 /* 40.64.8.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400900 /* 40.64.9.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400A00 /* 40.64.10.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400A80 /* 40.64.10.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142942E0 /* 20.41.66.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1AA0 /* 20.44.26.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24220 /* 20.194.66.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C468 /* 20.200.196.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C480 /* 20.200.196.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C500 /* 20.200.197.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71280 /* 52.231.18.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E72078 /* 52.231.32.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7265F /* 52.231.38.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E74D3A /* 52.231.77.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850AAE0 /* 40.80.170.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349375E0 /* 52.147.117.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937680 /* 52.147.118.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937740 /* 52.147.119.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937780 /* 52.147.119.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79260 /* 52.231.146.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7C865 /* 52.231.200.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7C8B3 /* 52.231.200.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113E00 /* 20.17.62.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176900 /* 158.23.105.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760BB05 /* 23.96.187.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760C915 /* 23.96.201.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760CFB1 /* 23.96.207.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760D19B /* 23.96.209.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760DC74 /* 23.96.220.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176448F0 /* 23.100.72.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765A9AF /* 23.101.169.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765AB5E /* 23.101.171.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765ACF4 /* 23.101.172.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BF00 /* 40.80.191.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F4000 /* 52.159.64.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F4400 /* 52.159.68.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F4600 /* 52.159.70.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F4700 /* 52.159.71.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F4780 /* 52.159.71.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26B00 /* 52.162.107.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A2D049 /* 52.162.208.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED8200 /* 52.237.130.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F095F3 /* 52.240.149.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F09B3A /* 52.240.155.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FCA015 /* 52.252.160.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41341829 /* 65.52.24.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134D549 /* 65.52.213.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134D93B /* 65.52.217.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134DAFD /* 65.52.218.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D380D72 /* 157.56.13.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EE00D /* 168.62.224.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EE117 /* 168.62.225.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC9409 /* 191.236.148.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45BA98 /* 13.69.186.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E400 /* 13.69.228.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45FD91 /* 13.69.253.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A29E9 /* 13.74.41.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A93DA /* 13.74.147.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A9E05 /* 13.74.158.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4AFC2C /* 13.74.252.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4F0247 /* 13.79.2.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4F26E5 /* 13.79.38.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4FAC28 /* 13.79.172.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324000 /* 20.50.64.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146BE000 /* 20.107.224.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146BEF00 /* 20.107.239.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764306A /* 23.100.48.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17643233 /* 23.100.50.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17643416 /* 23.100.52.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764381B /* 23.100.56.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176536E6 /* 23.101.54.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17653FD6 /* 23.101.63.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17660C2B /* 23.102.12.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176615C6 /* 23.102.21.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176615D4 /* 23.102.21.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17661995 /* 23.102.25.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17661CB2 /* 23.102.28.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28452BE1 /* 40.69.43.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28455895 /* 40.69.88.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2845C87C /* 40.69.200.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2845D2AC /* 40.69.210.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2845DA96 /* 40.69.218.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28554AE3 /* 40.85.74.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28555C73 /* 40.85.92.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285560D0 /* 40.85.96.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870459C /* 40.112.69.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28705AF4 /* 40.112.90.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28705DC9 /* 40.112.93.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28710234 /* 40.113.2.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28714109 /* 40.113.65.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28714794 /* 40.113.71.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28715152 /* 40.113.81.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28715ACA /* 40.113.90.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28736255 /* 40.115.98.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F84CC /* 40.127.132.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F8BFC /* 40.127.139.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FC0F4 /* 40.127.192.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FC438 /* 40.127.196.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AC446 /* 52.138.196.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348ADA79 /* 52.138.218.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A4C9BA /* 52.164.201.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A4FA85 /* 52.164.250.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A949EC /* 52.169.73.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A94EA3 /* 52.169.78.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9B4DF /* 52.169.180.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9B8A3 /* 52.169.184.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9BCEC /* 52.169.188.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9BF28 /* 52.169.191.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B29EAF /* 52.178.158.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2A4EB /* 52.178.164.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2B3A9 /* 52.178.179.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2BEBF /* 52.178.190.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2C993 /* 52.178.201.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2D00C /* 52.178.208.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2D411 /* 52.178.212.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2D659 /* 52.178.214.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x5EF56849 /* 94.245.104.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829D889 /* 104.41.216.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829E5C7 /* 104.41.229.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D514F /* 104.45.81.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D5F3D /* 104.45.95.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x898781AF /* 137.135.129.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x898785DD /* 137.135.133.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F35EF /* 168.63.53.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBA00D /* 191.235.160.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBB00C /* 191.235.176.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBB11E /* 191.235.177.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBD00C /* 191.235.208.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBD7B8 /* 191.235.215.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640220 /* 20.100.2.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640280 /* 20.100.2.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640300 /* 20.100.3.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782A00 /* 51.120.42.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337862C0 /* 51.120.98.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786AA0 /* 51.120.106.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D2A0 /* 51.120.210.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8E80 /* 51.13.142.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8F40 /* 51.13.143.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8F80 /* 51.13.143.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DAC0 /* 51.120.218.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E200 /* 51.120.226.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70C00 /* 20.215.12.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14153400 /* 20.21.52.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14153600 /* 20.21.54.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14153680 /* 20.21.54.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575040 /* 20.87.80.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575080 /* 20.87.80.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575100 /* 20.87.81.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857AA0 /* 102.133.122.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859A20 /* 102.133.154.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DA20 /* 102.133.218.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FAA0 /* 102.133.250.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255640 /* 102.37.86.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255680 /* 102.37.86.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851A20 /* 102.133.26.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853980 /* 102.133.57.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D411EF5 /* 13.65.30.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41257A /* 13.65.37.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4127A5 /* 13.65.39.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D412A23 /* 13.65.42.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D412AB7 /* 13.65.42.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D412D1E /* 13.65.45.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D415592 /* 13.65.85.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41595B /* 13.65.89.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D415C48 /* 13.65.92.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D415ECC /* 13.65.94.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D415F6D /* 13.65.95.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4161F3 /* 13.65.97.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41C11D /* 13.65.193.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41D2A6 /* 13.65.210.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41D4FC /* 13.65.212.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41F182 /* 13.65.241.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41F36E /* 13.65.243.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D421065 /* 13.66.16.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D422663 /* 13.66.38.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D422758 /* 13.66.39.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D542402 /* 13.84.36.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5428E3 /* 13.84.40.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D542A23 /* 13.84.42.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D542E1D /* 13.84.46.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D543789 /* 13.84.55.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54923C /* 13.84.146.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54B420 /* 13.84.180.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54B52F /* 13.84.181.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54BCA2 /* 13.84.188.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54BD89 /* 13.84.189.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54E3A4 /* 13.84.227.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D550FC2 /* 13.85.15.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5510E0 /* 13.85.16.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D551490 /* 13.85.20.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5518DC /* 13.85.24.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D551B0E /* 13.85.27.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D551FF3 /* 13.85.31.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D554881 /* 13.85.72.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D554DB3 /* 13.85.77.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D555200 /* 13.85.82.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7AA0 /* 20.45.122.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315A20 /* 20.49.90.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14612310 /* 20.97.35.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14612400 /* 20.97.36.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14612600 /* 20.97.38.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765B44B /* 23.101.180.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17669A26 /* 23.102.154.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766A1D9 /* 23.102.161.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766BFAA /* 23.102.191.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284AF5BC /* 40.74.245.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284AFD6C /* 40.74.253.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284AFF70 /* 40.74.255.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285494F7 /* 40.84.148.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28549F3A /* 40.84.159.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854C26A /* 40.84.194.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854E2B0 /* 40.84.226.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854E3B4 /* 40.84.227.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854E81C /* 40.84.232.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770C00 /* 40.119.12.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C0C4B /* 40.124.12.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C0D3A /* 40.124.13.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AB3865 /* 52.171.56.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AB386E /* 52.171.56.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AB88C8 /* 52.171.136.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AB8CED /* 52.171.140.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ABDAEF /* 52.171.218.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ABDDAA /* 52.171.221.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ABDEF7 /* 52.171.222.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C800D /* 104.44.128.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C8226 /* 104.44.130.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D291B5 /* 104.210.145.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D29339 /* 104.210.147.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D2984C /* 104.210.152.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D2987A /* 104.210.152.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D29974 /* 104.210.153.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D29E14 /* 104.210.158.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D61400 /* 104.214.20.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D61DCB /* 104.214.29.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D640EE /* 104.214.64.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D64A6E /* 104.214.74.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D64DDD /* 104.214.77.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D66E3C /* 104.214.110.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D66EE2 /* 104.214.110.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D676AE /* 104.214.118.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D67724 /* 104.214.119.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D749EC /* 104.215.73.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D74E0D /* 104.215.78.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D75916 /* 104.215.89.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEEB08B /* 191.238.176.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEEF00C /* 191.238.240.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0220 /* 20.44.2.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764D860 /* 23.100.216.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764D880 /* 23.100.216.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D477A23 /* 13.71.122.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D477B8A /* 13.71.123.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C3C0 /* 20.41.195.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09990 /* 20.192.153.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09A00 /* 20.192.154.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09C00 /* 20.192.156.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC260 /* 40.78.194.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC36E1 /* 52.172.54.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E0FC /* 104.211.224.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E1A7 /* 104.211.225.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430900 /* 13.67.9.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4338E1 /* 13.67.56.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D433F5A /* 13.67.63.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4C2C8B /* 13.76.44.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4CF560 /* 13.76.245.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8480 /* 20.43.132.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC624A /* 20.188.98.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D44000 /* 20.212.64.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D44F00 /* 20.212.79.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176138A9 /* 23.97.56.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17624024 /* 23.98.64.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1762409E /* 23.98.64.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17651BB6 /* 23.101.27.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A37AA0 /* 52.163.122.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB117E /* 52.187.17.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB2468 /* 52.187.36.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB345E /* 52.187.52.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB874F /* 52.187.135.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E601BA /* 52.230.1.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D7932D /* 104.215.147.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D79B01 /* 104.215.155.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6FDD5F1B /* 111.221.95.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x897480BC /* 137.116.128.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x897499EE /* 137.116.153.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5900 /* 68.221.89.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1F00 /* 51.12.31.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C49E0 /* 51.12.73.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C4A00 /* 51.12.74.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C62C0 /* 51.12.98.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE2A0 /* 51.12.226.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEAA0 /* 51.12.234.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B0840 /* 20.91.8.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B0880 /* 20.91.8.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1700 /* 51.12.23.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCAC0 /* 51.12.202.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00100 /* 20.208.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00520 /* 20.208.5.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00580 /* 20.208.5.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00600 /* 20.208.6.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3200 /* 51.107.50.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3AA0 /* 51.107.58.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7C800 /* 20.199.200.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9200 /* 51.107.146.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9AA0 /* 51.107.154.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFFC0 /* 51.107.255.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356400 /* 51.53.100.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B300 /* 51.53.179.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254200 /* 20.37.66.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254A60 /* 20.37.74.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5EC0 /* 20.45.94.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5F00 /* 20.45.95.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268A00 /* 20.38.138.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC000 /* 20.74.192.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC200 /* 20.74.194.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC300 /* 20.74.195.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784A20 /* 40.120.74.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FA60 /* 65.52.250.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695318 /* 51.105.83.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695380 /* 51.105.83.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695400 /* 51.105.84.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A84A0 /* 20.90.132.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8500 /* 20.90.133.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8600 /* 20.90.134.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681C40 /* 51.104.28.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336942A0 /* 51.105.66.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694AA0 /* 51.105.74.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C25F1 /* 51.140.37.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C39B0 /* 51.140.57.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C3BE9 /* 51.140.59.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4B93 /* 51.140.75.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C5491 /* 51.140.84.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C556A /* 51.140.85.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C5727 /* 51.140.87.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C7AE2 /* 51.140.122.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9280 /* 51.140.146.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C989A /* 51.140.152.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9996 /* 51.140.153.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CB44C /* 51.140.180.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CB997 /* 51.140.185.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CBFDF /* 51.140.191.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FBF2C /* 51.143.191.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A2100 /* 20.90.33.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A2200 /* 20.90.34.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A2400 /* 20.90.36.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A320 /* 51.137.163.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD260 /* 51.140.210.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CF4A2 /* 51.140.244.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CF559 /* 51.140.245.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D0C70 /* 51.141.12.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D25F5 /* 51.141.37.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D2C8B /* 51.141.44.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D2DCF /* 51.141.45.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D5AFC /* 51.141.90.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C2C0 /* 13.71.194.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E9660 /* 13.78.150.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EB859 /* 13.78.184.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144505A8 /* 20.69.5.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450600 /* 20.69.6.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450700 /* 20.69.7.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968CE0 /* 52.150.140.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A160C1 /* 52.161.96.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454400 /* 13.69.68.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D50134A /* 13.80.19.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D510715 /* 13.81.7.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D516C63 /* 13.81.108.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D51D7EB /* 13.81.215.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5E8F39 /* 13.94.143.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5EC062 /* 13.94.192.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5ED326 /* 13.94.211.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F52B5 /* 13.95.82.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F5D98 /* 13.95.93.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F9680 /* 13.95.150.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5FEEC0 /* 13.95.238.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14320200 /* 20.50.2.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D800 /* 20.105.216.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469E000 /* 20.105.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469F300 /* 20.105.243.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761A038 /* 23.97.160.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761A04A /* 23.97.160.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761A2CA /* 23.97.162.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761C381 /* 23.97.195.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761D012 /* 23.97.208.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761D6B1 /* 23.97.214.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761D82F /* 23.97.216.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761E00B /* 23.97.224.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764011D /* 23.100.1.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176543F5 /* 23.101.67.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28442837 /* 40.68.40.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844CDB2 /* 40.68.205.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844D083 /* 40.68.208.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844D268 /* 40.68.210.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844D6B9 /* 40.68.214.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28717EFB /* 40.113.126.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28718325 /* 40.113.131.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287188F0 /* 40.113.136.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28718EDB /* 40.113.142.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872C2BC /* 40.114.194.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872D24E /* 40.114.210.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872E4A1 /* 40.114.228.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872ED41 /* 40.114.237.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872F346 /* 40.114.243.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287337FB /* 40.115.55.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28761D48 /* 40.118.29.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287647F0 /* 40.118.71.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287660E7 /* 40.118.96.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876647F /* 40.118.100.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28766543 /* 40.118.101.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876662E /* 40.118.102.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369AC19 /* 51.105.172.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33880E1F /* 51.136.14.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33896A0D /* 51.137.106.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x339007C0 /* 51.144.7.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33906B35 /* 51.144.107.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3390742B /* 51.144.116.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3390A4D7 /* 51.144.164.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3390B608 /* 51.144.182.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A64E61 /* 52.166.78.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A671BC /* 52.166.113.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A67763 /* 52.166.119.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A6B2D0 /* 52.166.178.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A6B555 /* 52.166.181.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A6C6A3 /* 52.166.198.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE0350 /* 52.174.3.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE0785 /* 52.174.7.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE2305 /* 52.174.35.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE6A0F /* 52.174.106.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE9619 /* 52.174.150.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEB5B2 /* 52.174.181.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEB812 /* 52.174.184.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEC1D2 /* 52.174.193.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEEB1D /* 52.174.235.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B21D27 /* 52.178.29.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B225F4 /* 52.178.37.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B22BD1 /* 52.178.43.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B22D8B /* 52.178.45.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B22EB5 /* 52.178.46.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B24BC8 /* 52.178.75.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B24FA3 /* 52.178.79.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B25981 /* 52.178.89.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B25AE6 /* 52.178.90.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B25C60 /* 52.178.92.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B269B3 /* 52.178.105.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B272E2 /* 52.178.114.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E813ED /* 52.232.19.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E81AE4 /* 52.232.26.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E821CA /* 52.232.33.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8384F /* 52.232.56.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E87FC4 /* 52.232.127.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E9803D /* 52.233.128.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E98512 /* 52.233.133.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E98579 /* 52.233.133.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E99BA8 /* 52.233.155.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E9A4C3 /* 52.233.164.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E9AF3B /* 52.233.175.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E9B8B5 /* 52.233.184.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E9C6CE /* 52.233.198.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41348021 /* 65.52.128.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41348201 /* 65.52.130.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68288159 /* 104.40.129.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682893B4 /* 104.40.147.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682893D8 /* 104.40.147.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68289E37 /* 104.40.158.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828B3F3 /* 104.40.179.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828B7EC /* 104.40.183.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828B9C0 /* 104.40.185.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828BB1A /* 104.40.187.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828BFAE /* 104.40.191.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828D219 /* 104.40.210.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828D7DB /* 104.40.215.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828DE51 /* 104.40.222.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828FA64 /* 104.40.250.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D0175 /* 104.45.1.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D0EF9 /* 104.45.14.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E26F5 /* 104.46.38.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E2C4E /* 104.46.44.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E3D74 /* 104.46.61.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682F893E /* 104.47.137.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682F9773 /* 104.47.151.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682FA00E /* 104.47.160.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682FA477 /* 104.47.164.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6E76E /* 104.214.231.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6EC2F /* 104.214.236.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6ED87 /* 104.214.237.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8975A623 /* 137.117.166.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8975AF0E /* 137.117.175.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8975CB82 /* 137.117.203.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8975D3F4 /* 137.117.211.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8975DA65 /* 137.117.218.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8975E0DA /* 137.117.224.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8975E157 /* 137.117.225.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F05E7 /* 168.63.5.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F6B05 /* 168.63.107.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9522C /* 191.233.82.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE955A5 /* 191.233.85.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE957C2 /* 191.233.87.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C054B0 /* 20.192.84.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C05500 /* 20.192.85.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C05600 /* 20.192.86.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883200 /* 52.136.50.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39260 /* 104.211.146.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A09F /* 104.211.160.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3B30B /* 104.211.179.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3B8C5 /* 104.211.184.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D40496E /* 13.64.73.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B28A6 /* 13.91.40.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5BF2A6 /* 13.91.242.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5D8D0A /* 13.93.141.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5D9E10 /* 13.93.158.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DDC6D /* 13.93.220.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DE74B /* 13.93.231.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B5800 /* 20.59.88.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B6000 /* 20.59.96.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B6400 /* 20.59.100.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B6600 /* 20.59.102.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B6700 /* 20.59.103.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763000C /* 23.99.0.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17634141 /* 23.99.65.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17635B37 /* 23.99.91.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17642EC6 /* 23.100.46.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765CB75 /* 23.101.203.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765CBD6 /* 23.101.203.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765CFFA /* 23.101.207.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E12E8 /* 40.78.18.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E199D /* 40.78.25.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E30DB /* 40.78.48.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28509B66 /* 40.80.155.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28509CCD /* 40.80.156.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852FF80 /* 40.82.255.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28539132 /* 40.83.145.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285396E9 /* 40.83.150.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2853B6CE /* 40.83.182.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2853B7EC /* 40.83.183.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2853B819 /* 40.83.184.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28708E94 /* 40.112.142.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28708F86 /* 40.112.143.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28708F8C /* 40.112.143.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28708FD6 /* 40.112.143.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870A52C /* 40.112.165.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870A6A1 /* 40.112.166.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870BF9F /* 40.112.191.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870C045 /* 40.112.192.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870D8BD /* 40.112.216.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F300 /* 40.112.243.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876B9A1 /* 40.118.185.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876EB71 /* 40.118.235.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876F633 /* 40.118.246.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876FF3B /* 40.118.255.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A028DA /* 52.160.40.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68280335 /* 104.40.3.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68280BC0 /* 104.40.11.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68281C85 /* 104.40.28.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682835DB /* 104.40.53.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68283F62 /* 104.40.63.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68285485 /* 104.40.84.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68285C6B /* 104.40.92.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A35F8 /* 104.42.53.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A4E99 /* 104.42.78.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A80AB /* 104.42.128.171/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A9437 /* 104.42.148.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A9840 /* 104.42.152.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A9A69 /* 104.42.154.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682ABC92 /* 104.42.188.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682AE705 /* 104.42.231.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DE262 /* 104.45.226.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DE74F /* 104.45.231.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D22695 /* 104.210.38.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x897509D4 /* 137.117.9.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89751146 /* 137.117.17.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5BE054 /* 138.91.224.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5BE128 /* 138.91.225.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5BF051 /* 138.91.240.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E1425 /* 168.62.20.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC500C /* 191.236.80.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC6A7B /* 191.236.106.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEF3AA2 /* 191.239.58.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428A60 /* 13.66.138.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42D187 /* 13.66.209.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42D4CD /* 13.66.212.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E250 /* 13.66.226.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E7D9 /* 13.66.231.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42F186 /* 13.66.241.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42F4F9 /* 13.66.244.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D9D85 /* 13.77.157.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4DA0ED /* 13.77.160.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4DB60D /* 13.77.182.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8060 /* 20.42.128.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1473E800 /* 20.115.232.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1473F700 /* 20.115.247.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284080E0 /* 40.64.128.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F6615 /* 51.143.102.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34973E33 /* 52.151.62.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AFCA19 /* 52.175.202.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AFFE0A /* 52.175.254.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B7527D /* 52.183.82.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E51ED2 /* 52.229.30.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14281810 /* 20.40.24.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14281815 /* 20.40.24.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14281817 /* 20.40.24.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428181E /* 20.40.24.30/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14281822 /* 20.40.24.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14281825 /* 20.40.24.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14281826 /* 20.40.24.38/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428182E /* 20.40.24.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14281831 /* 20.40.24.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14281832 /* 20.40.24.50/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14281836 /* 20.40.24.54/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428183E /* 20.40.24.62/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14281851 /* 20.40.24.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14281859 /* 20.40.24.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428186C /* 20.40.24.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14281890 /* 20.40.24.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14768800 /* 20.118.136.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14768A00 /* 20.118.138.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14768A80 /* 20.118.138.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14968000 /* 20.150.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14968300 /* 20.150.131.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14968400 /* 20.150.132.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AAC0 /* 20.150.170.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B2A0 /* 20.150.178.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BAA0 /* 20.150.186.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F700 /* 20.150.247.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F807 /* 20.150.248.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F808 /* 20.150.248.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F80C /* 20.150.248.12/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F80F /* 20.150.248.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F810 /* 20.150.248.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F820 /* 20.150.248.32/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F824 /* 20.150.248.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F826 /* 20.150.248.38/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F82B /* 20.150.248.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F82C /* 20.150.248.44/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F830 /* 20.150.248.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F838 /* 20.150.248.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F83B /* 20.150.248.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F83C /* 20.150.248.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F83F /* 20.150.248.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F840 /* 20.150.248.64/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F844 /* 20.150.248.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F847 /* 20.150.248.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F848 /* 20.150.248.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F850 /* 20.150.248.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F852 /* 20.150.248.82/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F856 /* 20.150.248.86/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F859 /* 20.150.248.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F85A /* 20.150.248.90/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F864 /* 20.150.248.100/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F868 /* 20.150.248.104/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F86E /* 20.150.248.110/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F870 /* 20.150.248.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F876 /* 20.150.248.118/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F87A /* 20.150.248.122/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F87C /* 20.150.248.124/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F880 /* 20.150.248.128/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F886 /* 20.150.248.134/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F888 /* 20.150.248.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F890 /* 20.150.248.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F8A0 /* 20.150.248.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F8C0 /* 20.150.248.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F8C8 /* 20.150.248.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F8CA /* 20.150.248.202/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14242A0C /* 20.36.42.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246A80 /* 20.36.106.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143535D0 /* 20.53.53.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14244ED0 /* 20.36.78.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247240 /* 20.36.114.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353CD0 /* 20.53.60.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464840 /* 13.70.72.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464980 /* 13.70.73.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DE40 /* 20.70.222.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA500 /* 40.79.165.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAF00 /* 40.79.175.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D25A41 /* 104.210.90.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3280 /* 13.77.50.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C04A0 /* 20.92.4.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765EA29 /* 23.101.234.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68292EB2 /* 104.41.46.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CB40 /* 191.233.203.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9300 /* 191.234.147.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9B00 /* 191.234.155.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4DF0 /* 191.238.77.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0070 /* 20.206.0.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761784F /* 23.97.120.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93280 /* 191.233.50.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AA40 /* 13.71.170.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AD00 /* 13.71.173.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AD80 /* 13.71.173.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430CA30 /* 20.48.202.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855E665 /* 40.85.230.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69D40 /* 52.246.157.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456A80 /* 40.69.106.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E564 /* 40.86.229.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22870 /* 52.242.40.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7880 /* 20.43.120.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06300 /* 20.192.99.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0AA10 /* 20.192.170.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503580 /* 40.80.53.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35140 /* 104.211.81.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D36218 /* 104.211.98.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D567859 /* 13.86.120.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AB00 /* 13.89.171.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0D80 /* 20.44.13.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14629220 /* 20.98.146.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763D92A /* 23.99.217.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A598D6 /* 52.165.152.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5997A /* 52.165.153.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A59AC1 /* 52.165.154.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A59E8C /* 52.165.158.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68F80 /* 52.182.143.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BA549 /* 104.43.165.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF290 /* 20.45.242.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B30E /* 52.180.179.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D0360B /* 104.208.54.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8F00 /* 168.61.143.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B22C0 /* 13.75.34.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B7F75 /* 13.75.127.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4520 /* 20.205.69.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4AC0 /* 20.205.74.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD52C0 /* 20.205.82.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17637305 /* 23.99.115.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28537840 /* 40.83.120.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28537938 /* 40.83.121.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28537DA1 /* 40.83.125.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134ACED /* 65.52.172.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F84F0 /* 168.63.132.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4480 /* 20.42.68.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4A80 /* 20.42.74.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589D80 /* 20.88.157.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470B00 /* 40.71.11.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470D40 /* 40.71.13.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E069AC /* 52.224.105.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC3C48 /* 191.236.60.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142490C0 /* 20.36.144.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C1E0 /* 20.98.193.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469280 /* 40.70.146.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76F40 /* 52.167.111.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E6C87 /* 104.46.108.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FD880 /* 20.47.216.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FE980 /* 20.47.233.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9780 /* 40.74.151.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28597A40 /* 40.89.122.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B10F /* 52.225.177.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B199 /* 52.225.177.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B1EE /* 52.225.177.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC52C0 /* 68.220.82.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481AC0 /* 20.72.26.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315280 /* 20.49.82.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14631810 /* 20.99.24.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433B00 /* 40.67.59.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F00D0 /* 20.111.0.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8240 /* 40.79.130.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8E80 /* 40.79.142.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F95C0 /* 40.79.149.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F8840 /* 52.143.136.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB280 /* 40.79.178.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34888848 /* 52.136.136.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BF10 /* 52.136.191.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743AC0 /* 51.116.58.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744B60 /* 51.116.75.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D05E /* 51.116.208.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345F10 /* 20.52.95.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749B00 /* 51.116.155.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749C40 /* 51.116.156.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374AFCC /* 51.116.175.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F340 /* 51.116.243.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FBC0 /* 51.116.251.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93AC0 /* 20.217.58.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94AC0 /* 20.217.74.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95AC0 /* 20.217.90.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86AC0 /* 4.232.106.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87AC0 /* 4.232.122.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C2C0 /* 4.232.194.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6A80 /* 13.78.106.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6D00 /* 13.78.109.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590C90 /* 20.89.12.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C28100 /* 20.194.129.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBF40 /* 40.79.191.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829B974 /* 104.41.185.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B2C0 /* 20.18.178.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC240 /* 20.189.194.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6440 /* 40.74.100.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEF6830 /* 191.239.104.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EAC0 /* 20.192.234.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF0120 /* 20.207.1.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CAC0 /* 20.193.202.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284009A0 /* 40.64.9.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1B00 /* 20.44.27.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24280 /* 20.194.66.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C440 /* 20.200.196.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71240 /* 52.231.18.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E72075 /* 52.231.32.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937720 /* 52.147.119.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79280 /* 52.231.146.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7C8B1 /* 52.231.200.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141142C0 /* 20.17.66.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170AC0 /* 158.23.10.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177AC0 /* 158.23.122.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C2C0 /* 158.23.194.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330530 /* 20.51.5.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DAAC0 /* 20.125.170.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCAC0 /* 20.125.202.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760C303 /* 23.96.195.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26AC0 /* 52.162.106.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37D0B9 /* 157.55.208.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC9A58 /* 191.236.154.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E380 /* 13.69.227.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143248C0 /* 20.50.72.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14325080 /* 20.50.80.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928BE0 /* 52.146.139.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2B193 /* 52.178.177.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2B895 /* 52.178.184.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2BE41 /* 52.178.190.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2C3C5 /* 52.178.195.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDDEBF /* 191.237.222.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640200 /* 20.100.2.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33784FAA /* 51.120.79.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786300 /* 51.120.99.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786B00 /* 51.120.107.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D300 /* 51.120.211.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8F10 /* 51.13.143.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378A44D /* 51.120.164.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DB00 /* 51.120.219.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D712C0 /* 20.215.18.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71AC0 /* 20.215.26.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79AC0 /* 20.215.154.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152AC0 /* 20.21.42.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141535A0 /* 20.21.53.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141542C0 /* 20.21.66.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154AC0 /* 20.21.74.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575020 /* 20.87.80.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F0313 /* 40.127.3.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857B00 /* 102.133.123.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857B80 /* 102.133.123.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859AC0 /* 102.133.154.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FE40 /* 102.133.254.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662555E0 /* 102.37.85.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851AC0 /* 102.133.26.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854029 /* 102.133.64.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F080 /* 13.73.240.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F240 /* 13.73.242.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7D80 /* 20.45.125.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315A80 /* 20.49.90.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146122E0 /* 20.97.34.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766BC41 /* 23.102.188.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4625393A /* 70.37.57.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x462559DE /* 70.37.89.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C818D /* 104.44.129.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C81F3 /* 104.44.129.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C81FF /* 104.44.129.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C86FF /* 104.44.134.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D612C0 /* 104.214.18.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C02C0 /* 20.44.2.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764D850 /* 23.100.216.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09970 /* 20.192.153.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC280 /* 40.78.194.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E142 /* 104.211.225.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430880 /* 13.67.8.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35580 /* 20.195.85.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CDC000 /* 20.205.192.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17627100 /* 23.98.113.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB3832 /* 52.187.56.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB3BFB /* 52.187.59.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB3F13 /* 52.187.63.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB3F25 /* 52.187.63.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D79E21 /* 104.215.158.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FF1A0 /* 168.63.241.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD62C0 /* 68.221.98.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD92C0 /* 68.221.146.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1D20 /* 51.12.29.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C49C0 /* 51.12.73.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6300 /* 51.12.99.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE300 /* 51.12.227.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEB00 /* 51.12.235.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C14C0 /* 51.12.20.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C16E0 /* 51.12.22.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCB00 /* 51.12.203.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00500 /* 20.208.5.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D012C0 /* 20.208.18.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CAC0 /* 51.103.202.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3AC0 /* 51.107.58.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B445E /* 51.107.68.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9AC0 /* 51.107.154.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE8D0 /* 51.107.232.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFF90 /* 51.107.255.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356AC0 /* 51.53.106.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BAC0 /* 51.53.186.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254A80 /* 20.37.74.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4BAD /* 20.45.75.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5E60 /* 20.45.94.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269B00 /* 20.38.155.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784A80 /* 40.120.74.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287857D0 /* 40.120.87.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BE5F2 /* 40.123.229.242/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FA80 /* 65.52.250.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577A80 /* 13.87.122.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8460 /* 20.90.132.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680800 /* 51.104.8.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680880 /* 51.104.8.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694740 /* 51.105.71.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384C100 /* 51.132.193.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9240 /* 51.140.146.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CB94B /* 51.140.185.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573880 /* 13.87.56.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A20A0 /* 20.90.32.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD280 /* 51.140.210.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D0822 /* 51.141.8.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C280 /* 13.71.194.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E944B /* 13.78.148.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450580 /* 20.69.5.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454080 /* 13.69.64.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D457400 /* 13.69.116.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5E8D73 /* 13.94.141.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5E8F7E /* 13.94.143.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5E95B3 /* 13.94.149.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432C980 /* 20.50.201.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D0D0 /* 20.105.208.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE1615 /* 52.174.22.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE95E2D /* 191.233.94.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C05490 /* 20.192.84.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39280 /* 104.211.146.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A0E5 /* 104.211.160.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B4FD0 /* 20.59.79.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A2C0 /* 20.168.162.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F2C0 /* 40.112.242.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DE325 /* 104.45.227.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428C00 /* 13.66.140.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E1BC /* 13.66.225.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453C080 /* 20.83.192.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453DDF0 /* 20.83.221.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284071C0 /* 40.64.113.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497192D /* 52.151.25.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149682D0 /* 20.150.130.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AB00 /* 20.150.171.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B300 /* 20.150.179.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BB00 /* 20.150.187.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F802 /* 20.150.248.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496FB15 /* 20.150.251.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E234 /* 20.37.226.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E408 /* 20.37.228.8/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14350022 /* 20.53.0.34/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14350070 /* 20.53.0.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14350078 /* 20.53.0.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247A34 /* 20.36.122.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C16010 /* 20.193.96.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464F40 /* 13.70.79.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464FC6 /* 13.70.79.198/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C4F8 /* 20.37.196.248/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1435292C /* 20.53.41.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA710 /* 40.79.167.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA714 /* 40.79.167.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAD24 /* 40.79.173.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D35DD /* 13.77.53.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE4D8 /* 20.42.228.216/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EA202 /* 104.46.162.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EA21C /* 104.46.162.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EA360 /* 104.46.163.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB200 /* 104.46.178.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CF1A /* 191.233.207.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CF1E /* 191.233.207.30/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA882C /* 191.234.136.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8A90 /* 191.234.138.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA958A /* 191.234.149.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9D2A /* 191.234.157.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9DAC /* 191.234.157.172/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE06BC /* 20.206.6.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDE0E6 /* 191.237.224.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AF81 /* 13.71.175.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47B1E0 /* 13.71.177.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269582 /* 20.38.149.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C04C /* 20.48.192.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14972088 /* 20.151.32.136/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45450 /* 52.228.84.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69D02 /* 52.246.157.2/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456F22 /* 40.69.111.34/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456FC0 /* 40.69.111.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28457460 /* 40.69.116.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591480 /* 40.89.20.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591720 /* 40.89.23.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B79FC /* 20.43.121.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7BDC /* 20.43.123.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0651A /* 20.192.101.26/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503502 /* 40.80.53.2/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6B5C /* 52.140.107.92/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6E6C /* 52.140.110.108/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59B314 /* 13.89.179.20/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59B318 /* 13.89.179.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428C898 /* 20.40.200.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E034 /* 20.40.224.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0DF0 /* 20.44.13.240/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68D3C /* 52.182.141.60/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC5E0 /* 20.45.197.224/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC720 /* 20.45.199.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DD00C /* 20.45.208.12/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DD028 /* 20.45.208.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECC2E /* 40.78.204.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC2CC /* 20.187.194.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6FCC /* 20.189.111.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4DC6 /* 20.205.77.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4DD0 /* 20.205.77.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD55C6 /* 20.205.85.198/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A430 /* 104.214.164.48/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5AC2B4 /* 13.90.194.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4156 /* 20.42.65.86/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4AE6 /* 20.42.74.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4AE8 /* 20.42.74.232/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316D20 /* 20.49.109.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470FC2 /* 40.71.15.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34924F84 /* 52.146.79.132/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87682 /* 52.168.118.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89876289 /* 137.135.98.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1306 /* 20.44.19.6/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431630C /* 20.49.99.12/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143166D4 /* 20.49.102.212/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284697C2 /* 40.70.151.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284697C4 /* 40.70.151.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76FA8 /* 52.167.111.168/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270CE4 /* 20.39.12.228/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270E54 /* 20.39.14.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9674 /* 40.74.150.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9678 /* 40.74.150.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285979BC /* 40.89.121.188/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5A36 /* 52.138.90.54/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2BA0 /* 20.43.43.160/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2DF0 /* 20.43.45.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8A2E /* 40.79.138.46/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F922E /* 40.79.146.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9670 /* 40.79.150.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BC022 /* 51.11.192.34/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695A94 /* 51.105.90.148/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AA05C /* 51.138.160.92/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1434483C /* 20.52.72.60/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743188 /* 51.116.49.136/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749188 /* 51.116.145.136/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337492D4 /* 51.116.146.212/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749E3C /* 51.116.158.60/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F3DA /* 51.116.243.218/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FBBA /* 51.116.251.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FDA4 /* 51.116.253.164/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D90A24 /* 20.217.10.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93E88 /* 20.217.62.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E82A0C /* 4.232.42.12/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87DB2 /* 4.232.125.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6FC1 /* 13.78.111.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4358 /* 20.43.67.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA01C /* 20.191.160.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C2816A /* 20.194.129.106/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBFD8 /* 40.79.191.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28739000 /* 40.115.144.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6610 /* 40.74.102.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503B18 /* 40.80.59.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02244 /* 20.192.34.68/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E4FC /* 20.192.228.252/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A4B0 /* 20.192.164.176/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1A0E6 /* 20.193.160.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294354 /* 20.41.67.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294534 /* 20.41.69.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1D32 /* 20.44.29.50/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1F24 /* 20.44.31.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24494 /* 20.194.68.148/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7170A /* 52.231.23.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850AC0C /* 40.80.172.12/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79750 /* 52.231.151.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170A70 /* 158.23.10.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176014 /* 158.23.96.20/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431710C /* 20.49.113.12/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317234 /* 20.49.114.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DADA0 /* 20.125.173.160/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCDA0 /* 20.125.205.160/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26F84 /* 52.162.111.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F0F4E4 /* 52.240.244.228/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45EF54 /* 13.69.239.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45EF58 /* 13.69.239.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6B5E /* 13.74.107.94/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142657BC /* 20.38.87.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE560 /* 52.138.229.96/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349282B4 /* 52.146.130.180/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782A38 /* 51.120.42.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782CC4 /* 51.120.44.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378649C /* 51.120.100.156/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786D1A /* 51.120.109.26/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D51A /* 51.120.213.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D694 /* 51.120.214.148/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8050 /* 51.13.128.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E234 /* 51.120.226.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D715B2 /* 20.215.21.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D7AA68 /* 20.215.170.104/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152E88 /* 20.21.46.136/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141545B0 /* 20.21.69.176/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154DB8 /* 20.21.77.184/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857FB0 /* 102.133.127.176/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859A06 /* 102.133.154.6/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DA34 /* 102.133.218.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DBBC /* 102.133.219.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FEC8 /* 102.133.254.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FECC /* 102.133.254.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662540A0 /* 102.37.64.160/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668539BC /* 102.133.57.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F4C4 /* 13.73.244.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FD7C /* 13.73.253.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7F08 /* 20.45.127.8/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7F0C /* 20.45.127.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315F3A /* 20.49.95.58/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287709E8 /* 40.119.9.232/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C41A0 /* 40.124.65.160/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C3FC /* 20.41.195.252/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429D010 /* 20.41.208.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430F01 /* 13.67.15.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430F7C /* 13.67.15.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1762563A /* 23.98.86.58/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1762680C /* 23.98.104.12/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626C20 /* 23.98.108.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEF60 /* 40.78.239.96/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD2948 /* 68.221.41.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6270 /* 68.221.98.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C4BBC /* 51.12.75.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE5E8 /* 51.12.229.232/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C16DC /* 51.12.22.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CA848 /* 51.12.168.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D015A2 /* 20.208.21.162/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CDA0 /* 51.103.205.160/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3238 /* 51.107.50.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3520 /* 51.107.53.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3C98 /* 51.107.60.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8168 /* 51.107.129.104/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9234 /* 51.107.146.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BC104 /* 51.107.193.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335294C /* 51.53.41.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356E8A /* 51.53.110.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B6C8 /* 51.53.182.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BF8A /* 51.53.191.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254234 /* 20.37.66.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287808B8 /* 40.120.8.184/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268A38 /* 20.38.138.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268D08 /* 20.38.141.8/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269D84 /* 20.38.157.132/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784B3A /* 40.120.75.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784DB0 /* 40.120.77.176/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FCFA /* 65.52.252.250/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680FFE /* 51.104.15.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681CD8 /* 51.104.28.216/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681FAC /* 51.104.31.172/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694790 /* 51.105.71.144/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694D32 /* 51.105.77.50/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C97A8 /* 51.140.151.168/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B6240 /* 51.11.98.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A44C /* 51.137.164.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A628 /* 51.137.166.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD4D8 /* 51.140.212.216/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD7B4 /* 51.140.215.180/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C775 /* 13.71.199.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28437A6C /* 40.67.122.108/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28437A70 /* 40.67.122.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28437A78 /* 40.67.122.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349698CC /* 52.150.152.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969C24 /* 52.150.156.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D51F49B /* 13.81.244.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143201C4 /* 20.50.1.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432C9D2 /* 20.50.201.210/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432C9D4 /* 20.50.201.212/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D60B8 /* 20.61.96.184/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B211F0 /* 52.178.17.240/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBD4A /* 52.236.189.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883344 /* 52.136.51.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D392F8 /* 104.211.146.248/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DF50 /* 13.86.223.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317820 /* 20.49.120.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317DBC /* 20.49.125.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDAB6C /* 20.189.171.108/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDAD30 /* 20.189.173.48/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428FDB /* 13.66.143.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D429544 /* 13.66.149.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453C0D0 /* 20.83.192.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453C0D4 /* 20.83.192.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408454 /* 40.64.132.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408748 /* 40.64.135.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFD54 /* 40.78.253.84/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A58C /* 20.150.165.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BE54 /* 20.150.190.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E5AC /* 20.37.229.172/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14350068 /* 20.53.0.104/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353804 /* 20.53.56.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1600C /* 20.193.96.12/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464F50 /* 13.70.79.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352F40 /* 20.53.47.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EA210 /* 104.46.162.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB3F0 /* 104.46.179.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CFD4 /* 191.233.207.212/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4848 /* 191.238.72.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C39240 /* 20.195.146.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE933DC /* 191.233.51.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AFD0 /* 13.71.175.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C1B4 /* 20.48.193.180/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456F74 /* 40.69.111.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859172C /* 40.89.23.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7BC4 /* 20.43.123.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02B4C /* 20.192.43.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E13C /* 20.40.225.60/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0C8C /* 20.44.12.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0B04 /* 20.46.11.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8C6C /* 168.61.140.108/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC5E4 /* 20.187.197.228/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A46C /* 104.214.164.108/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8194 /* 20.62.129.148/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470FCC /* 40.71.15.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C13A4 /* 20.44.19.164/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431677C /* 20.49.103.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331450 /* 20.51.20.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285979A8 /* 40.89.121.168/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481590 /* 20.72.21.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481EB4 /* 20.72.30.180/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143153F4 /* 20.49.83.244/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433474 /* 40.67.52.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8D84 /* 40.79.141.132/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD280 /* 51.138.210.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AA04C /* 51.138.160.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488B8E8 /* 52.136.184.232/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1434482C /* 20.52.72.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743648 /* 51.116.54.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337495E0 /* 51.116.149.224/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F610 /* 51.116.246.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D9282C /* 20.217.40.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81C18 /* 4.232.28.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA1DC /* 20.191.161.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBD74 /* 40.79.189.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE154 /* 20.189.225.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B4C4 /* 40.80.180.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E7F0 /* 20.192.231.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EEBC /* 20.192.238.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A6BC /* 20.192.166.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24894 /* 20.194.72.148/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71774 /* 52.231.23.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850ADD8 /* 40.80.173.216/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79744 /* 52.231.151.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113324 /* 20.17.51.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176498 /* 158.23.100.152/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317614 /* 20.49.118.20/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26F8C /* 52.162.111.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E980 /* 13.69.233.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349284F4 /* 52.146.132.244/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337864F4 /* 51.120.100.244/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E980 /* 51.120.233.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8040 /* 51.13.128.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D88B8 /* 51.13.136.184/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D7002C /* 20.215.0.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1415202C /* 20.21.32.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857E84 /* 102.133.126.132/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DDC4 /* 102.133.221.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254078 /* 102.37.64.120/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255034 /* 102.37.80.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7E74 /* 20.45.126.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1441825C /* 20.65.130.92/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C04F8 /* 20.44.4.248/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D745C /* 20.45.116.92/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0B874 /* 20.192.184.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7400 /* 52.172.116.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626D34 /* 23.98.109.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEF74 /* 40.78.239.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5498 /* 68.221.84.152/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2EE0 /* 51.12.46.224/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC604 /* 51.12.198.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3534 /* 51.107.53.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8024 /* 51.107.128.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BC098 /* 51.107.192.152/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFA28 /* 51.107.250.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351BF0 /* 51.53.27.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335ABF0 /* 51.53.171.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254728 /* 20.37.71.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287808B0 /* 40.120.8.176/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268F28 /* 20.38.143.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784B3C /* 40.120.75.60/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9554 /* 51.140.149.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD184 /* 51.143.209.132/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A7B8 /* 51.137.167.184/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD7A8 /* 51.140.215.168/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284379C4 /* 40.67.121.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969DAC /* 52.150.157.172/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456D8C /* 13.69.109.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6364 /* 20.61.99.100/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268418 /* 20.38.132.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883584 /* 52.136.53.132/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DFC0 /* 13.86.223.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317FF4 /* 20.49.127.244/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4291E0 /* 13.66.145.224/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143308CC /* 20.51.8.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AE84 /* 20.150.174.132/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F420 /* 20.150.244.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246B20 /* 20.36.107.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246B40 /* 20.36.107.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353100 /* 20.53.49.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142472E0 /* 20.36.114.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247300 /* 20.36.115.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143538C0 /* 20.53.56.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4649C0 /* 13.70.73.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464A00 /* 13.70.74.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352F80 /* 20.53.47.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA280 /* 40.79.162.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA2C0 /* 40.79.162.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAA40 /* 40.79.170.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAA80 /* 40.79.170.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAB20 /* 40.79.171.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3420 /* 13.77.52.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3440 /* 13.77.52.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB740 /* 104.46.183.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CC00 /* 191.233.204.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CC40 /* 191.233.204.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9350 /* 191.234.147.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9380 /* 191.234.147.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA95A0 /* 191.234.149.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9B50 /* 191.234.155.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9B80 /* 191.234.155.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9D40 /* 191.234.157.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4800 /* 191.238.72.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C39280 /* 20.195.146.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE932E0 /* 191.233.50.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93340 /* 191.233.51.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AC00 /* 13.71.172.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AC40 /* 13.71.172.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269300 /* 20.38.147.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269340 /* 20.38.147.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C500 /* 20.48.197.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69B00 /* 52.246.155.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69B40 /* 52.246.155.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456B20 /* 40.69.107.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456B40 /* 40.69.107.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6B80 /* 52.139.107.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02C80 /* 20.192.44.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06350 /* 20.192.99.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06380 /* 20.192.99.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503300 /* 40.80.51.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285035C0 /* 40.80.53.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35200 /* 104.211.82.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35240 /* 104.211.82.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AB80 /* 13.89.171.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59ABC0 /* 13.89.171.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E580 /* 20.40.229.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0820 /* 20.44.8.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0840 /* 20.44.8.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68B40 /* 52.182.139.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68B80 /* 52.182.139.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0C00 /* 20.46.12.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECAA0 /* 40.78.202.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECAC0 /* 40.78.202.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2480 /* 13.75.36.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2500 /* 13.75.37.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34900 /* 20.195.73.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34A00 /* 20.195.74.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4A60 /* 20.205.74.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4B00 /* 20.205.75.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5260 /* 20.205.82.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5300 /* 20.205.83.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A560 /* 104.214.165.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A5C0 /* 104.214.165.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8580 /* 20.62.133.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8600 /* 20.62.134.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470C00 /* 40.71.12.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470C80 /* 40.71.12.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE340 /* 40.78.227.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE380 /* 40.78.227.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9B40 /* 40.79.155.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9B80 /* 40.79.155.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1080 /* 20.44.16.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C10C0 /* 20.44.16.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E3B80 /* 20.62.59.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469380 /* 40.70.147.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284693C0 /* 40.70.147.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76AC0 /* 52.167.106.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76B00 /* 52.167.107.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331480 /* 20.51.20.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9260 /* 40.74.146.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9280 /* 40.74.146.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2260 /* 40.75.34.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B22C0 /* 40.75.34.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5AA0 /* 52.138.90.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5AC0 /* 52.138.90.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481B40 /* 20.72.27.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143152C0 /* 20.49.82.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315300 /* 20.49.83.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14630980 /* 20.99.9.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433B60 /* 40.67.59.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433B80 /* 40.67.59.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8300 /* 40.79.131.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8340 /* 40.79.131.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8EC0 /* 40.79.142.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9600 /* 40.79.150.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD2C0 /* 51.138.210.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB320 /* 40.79.179.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB340 /* 40.79.179.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488B9C0 /* 52.136.185.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743700 /* 51.116.55.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743B40 /* 51.116.59.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743B80 /* 51.116.59.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345800 /* 20.52.88.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749B80 /* 51.116.155.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749BC0 /* 51.116.155.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749C90 /* 51.116.156.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749CC0 /* 51.116.156.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F500 /* 51.116.245.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F540 /* 51.116.245.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FAF0 /* 51.116.250.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FB40 /* 51.116.251.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FD00 /* 51.116.253.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92C00 /* 20.217.44.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93B40 /* 20.217.59.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94B00 /* 20.217.75.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95B00 /* 20.217.91.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81C40 /* 4.232.28.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86B00 /* 4.232.107.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87B00 /* 4.232.123.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87DC0 /* 4.232.125.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C300 /* 4.232.195.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6C20 /* 13.78.108.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6C40 /* 13.78.108.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA680 /* 20.191.166.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBB20 /* 40.79.187.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBB40 /* 40.79.187.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC320 /* 40.79.195.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC340 /* 40.79.195.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B300 /* 20.18.179.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE440 /* 20.189.228.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6240 /* 40.74.98.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6280 /* 40.74.98.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03280 /* 20.192.50.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EB20 /* 20.192.235.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EB40 /* 20.192.235.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C0C0 /* 20.193.192.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CB00 /* 20.193.203.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CB40 /* 20.193.203.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1B80 /* 20.44.27.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1FC0 /* 20.44.31.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C242C0 /* 20.194.66.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24300 /* 20.194.67.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24A00 /* 20.194.74.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71300 /* 52.231.19.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71340 /* 52.231.19.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937100 /* 52.147.113.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79320 /* 52.231.147.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79340 /* 52.231.147.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113400 /* 20.17.52.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114340 /* 20.17.67.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E1764C0 /* 158.23.100.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330000 /* 20.51.0.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DAB00 /* 20.125.171.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCB00 /* 20.125.203.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26BC0 /* 52.162.107.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26E00 /* 52.162.110.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E480 /* 13.69.228.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E500 /* 13.69.229.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6BC0 /* 13.74.107.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6C00 /* 13.74.108.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE2C0 /* 52.138.226.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE300 /* 52.138.227.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928840 /* 52.146.136.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928880 /* 52.146.136.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786360 /* 51.120.99.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786380 /* 51.120.99.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786B50 /* 51.120.107.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786B80 /* 51.120.107.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786E80 /* 51.120.110.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D350 /* 51.120.211.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D380 /* 51.120.211.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D640 /* 51.120.214.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E9C0 /* 51.120.233.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8980 /* 51.13.137.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DB60 /* 51.120.219.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DB80 /* 51.120.219.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70400 /* 20.215.4.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71300 /* 20.215.19.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71B00 /* 20.215.27.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79B40 /* 20.215.155.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152480 /* 20.21.36.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152B40 /* 20.21.43.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154300 /* 20.21.67.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154B00 /* 20.21.75.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A0C0 /* 102.37.160.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857B60 /* 102.133.123.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859B40 /* 102.133.155.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859B80 /* 102.133.155.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FB00 /* 102.133.251.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FE80 /* 102.133.254.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255100 /* 102.37.81.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851B40 /* 102.133.27.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851B80 /* 102.133.27.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7B00 /* 20.45.123.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7B40 /* 20.45.123.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7DC0 /* 20.45.125.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315AC0 /* 20.49.90.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315B00 /* 20.49.91.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418580 /* 20.65.133.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D61360 /* 104.214.19.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D61380 /* 104.214.19.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0340 /* 20.44.3.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0380 /* 20.44.3.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC320 /* 40.78.195.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC340 /* 40.78.195.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7440 /* 52.172.116.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430C00 /* 13.67.12.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430D00 /* 13.67.13.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34200 /* 20.195.66.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34300 /* 20.195.67.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625300 /* 23.98.83.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625380 /* 23.98.83.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625400 /* 23.98.84.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEAC0 /* 40.78.234.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEB00 /* 40.78.235.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEC00 /* 40.78.236.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD54C0 /* 68.221.84.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1980 /* 51.12.25.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6360 /* 51.12.99.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6380 /* 51.12.99.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE350 /* 51.12.227.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE380 /* 51.12.227.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEB50 /* 51.12.235.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEB80 /* 51.12.235.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1140 /* 51.12.17.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCB60 /* 51.12.203.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCB80 /* 51.12.203.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D01300 /* 20.208.19.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CB00 /* 51.103.203.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3B40 /* 51.107.59.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3B80 /* 51.107.59.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF300 /* 51.107.243.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9B40 /* 51.107.155.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9B80 /* 51.107.155.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFB00 /* 51.107.251.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351C00 /* 51.53.28.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335AC00 /* 51.53.172.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BB40 /* 51.53.187.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254B00 /* 20.37.75.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254B40 /* 20.37.75.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5A00 /* 20.45.90.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269B40 /* 20.38.155.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784AC0 /* 40.120.74.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784B00 /* 40.120.75.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28785200 /* 40.120.82.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FB00 /* 65.52.251.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FB40 /* 65.52.251.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577B00 /* 13.87.123.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577B40 /* 13.87.123.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694320 /* 51.105.67.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694340 /* 51.105.67.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694B00 /* 51.105.75.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694B40 /* 51.105.75.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9440 /* 51.140.148.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9480 /* 51.140.148.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD4C0 /* 51.143.212.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD500 /* 51.143.213.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573900 /* 13.87.57.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573940 /* 13.87.57.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4380 /* 20.58.67.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD320 /* 51.140.211.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD340 /* 51.140.211.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C340 /* 13.71.195.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C380 /* 13.71.195.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450100 /* 20.69.1.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454120 /* 13.69.65.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454180 /* 13.69.65.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456B00 /* 13.69.107.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456B80 /* 13.69.107.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6680 /* 20.61.102.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6700 /* 20.61.103.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBB00 /* 52.236.187.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBB80 /* 52.236.187.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C05040 /* 20.192.80.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39300 /* 104.211.147.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39340 /* 104.211.147.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DA00 /* 13.86.218.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DA80 /* 13.86.218.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420400 /* 20.66.4.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420480 /* 20.66.4.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A300 /* 20.168.163.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428CC0 /* 13.66.140.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428D00 /* 13.66.141.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330C80 /* 20.51.12.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF320 /* 40.78.243.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF340 /* 40.78.243.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFAE0 /* 40.78.250.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFB00 /* 40.78.251.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AB60 /* 20.150.171.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AB80 /* 20.150.171.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B350 /* 20.150.179.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B380 /* 20.150.179.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B540 /* 20.150.181.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BB50 /* 20.150.187.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BB80 /* 20.150.187.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BE00 /* 20.150.190.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F440 /* 20.150.244.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246C70 /* 20.36.108.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E040 /* 20.37.224.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142473F0 /* 20.36.115.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247840 /* 20.36.120.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464A70 /* 13.70.74.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C040 /* 20.37.192.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3550 /* 13.77.53.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE040 /* 20.42.224.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CD60 /* 191.233.205.96/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE040 /* 191.235.224.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90810 /* 191.233.8.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47ADF0 /* 13.71.173.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45040 /* 52.228.80.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456C38 /* 40.69.108.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591040 /* 40.89.16.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7908 /* 20.43.121.8/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6840 /* 52.140.104.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AB74 /* 13.89.171.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259840 /* 20.37.152.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC040 /* 20.45.192.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECA84 /* 40.78.202.132/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2748 /* 13.75.39.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6840 /* 20.189.104.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A0040 /* 20.42.0.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470CF4 /* 40.71.12.244/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14290040 /* 20.41.0.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1118 /* 20.44.17.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270840 /* 20.39.8.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A93A8 /* 40.74.147.168/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481010 /* 20.72.16.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433040 /* 40.67.48.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433A04 /* 40.67.58.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2840 /* 20.43.40.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8438 /* 40.79.132.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB418 /* 40.79.180.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695840 /* 51.105.88.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743040 /* 51.116.48.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749040 /* 51.116.144.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92810 /* 20.217.40.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81810 /* 4.232.24.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6CAC /* 13.78.108.172/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4040 /* 20.43.64.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503840 /* 40.80.56.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B020 /* 40.80.176.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E040 /* 20.192.224.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A010 /* 20.192.160.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294040 /* 20.41.64.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1BD0 /* 20.44.27.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A840 /* 40.80.168.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79458 /* 52.231.148.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113010 /* 20.17.48.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176010 /* 158.23.96.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B840 /* 40.80.184.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26F10 /* 52.162.111.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E3FC /* 13.69.227.252/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265040 /* 20.38.80.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782840 /* 51.120.40.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378620C /* 51.120.98.12/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DA04 /* 51.120.218.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E040 /* 51.120.224.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70010 /* 20.215.0.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152010 /* 20.21.32.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857C08 /* 102.133.124.8/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685D840 /* 102.133.216.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851C58 /* 102.133.28.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853840 /* 102.133.56.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F800 /* 13.73.248.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7B70 /* 20.45.123.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0448 /* 20.44.4.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7040 /* 20.45.112.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C040 /* 20.41.192.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC438 /* 40.78.196.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430A58 /* 13.67.10.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8040 /* 20.43.128.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5010 /* 68.221.80.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2840 /* 51.12.40.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC040 /* 51.12.192.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3040 /* 51.107.48.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3A04 /* 51.107.58.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9040 /* 51.107.144.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9A04 /* 51.107.154.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351810 /* 51.53.24.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335A810 /* 51.53.168.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254040 /* 20.37.64.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254C68 /* 20.37.76.104/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268840 /* 20.38.136.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FC68 /* 65.52.252.104/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577C28 /* 13.87.124.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695040 /* 51.105.80.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336808F8 /* 51.104.8.248/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681840 /* 51.104.24.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573A28 /* 13.87.58.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC040 /* 51.143.192.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A040 /* 51.137.160.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD448 /* 51.140.212.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C4A0 /* 13.71.196.160/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968840 /* 52.150.136.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454338 /* 13.69.67.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1840 /* 40.74.24.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268048 /* 20.38.128.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883040 /* 52.136.48.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DBA8 /* 13.86.219.168/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852F840 /* 40.82.248.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428E40 /* 13.66.142.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8040 /* 20.42.128.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A078 /* 20.150.160.120/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E080 /* 20.37.224.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247880 /* 20.36.120.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C1C0 /* 20.37.193.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14287B24 /* 20.40.123.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14287B27 /* 20.40.123.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14287B2E /* 20.40.123.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14287B48 /* 20.40.123.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE1C0 /* 20.42.225.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE91A9C /* 191.233.26.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE140 /* 191.235.225.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90900 /* 191.233.9.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B002F /* 52.139.0.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B0031 /* 52.139.0.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45140 /* 52.228.81.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591140 /* 40.89.17.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851FD9A /* 40.81.253.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6940 /* 52.140.105.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D560533 /* 13.86.5.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259C80 /* 20.37.156.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349ED00B /* 52.158.208.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F2D62D /* 52.242.214.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC080 /* 20.45.192.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6A80 /* 20.189.106.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28511D98 /* 40.81.29.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B850DD /* 52.184.80.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A0480 /* 20.42.4.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A185A /* 20.42.24.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A1DD4 /* 20.42.29.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A1E69 /* 20.42.30.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A22BE /* 20.42.34.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A23CC /* 20.42.35.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B96EC7 /* 20.185.110.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285AF011 /* 40.90.240.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497EB96 /* 52.151.235.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497EBF2 /* 52.151.235.242/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497EBF4 /* 52.151.235.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BCD9EB /* 52.188.217.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BCDAE4 /* 52.188.218.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BCDAEF /* 52.188.218.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14290480 /* 20.41.4.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C4AB6 /* 20.44.74.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C4C35 /* 20.44.76.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C4C3D /* 20.44.76.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C4C56 /* 20.44.76.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142708C0 /* 20.39.8.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDE578 /* 52.253.229.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481100 /* 20.72.17.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433080 /* 40.67.48.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2940 /* 20.43.41.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284238E9 /* 40.66.56.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695880 /* 51.105.88.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743060 /* 51.116.48.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749060 /* 51.116.144.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D928C0 /* 20.217.40.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E818C0 /* 4.232.24.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4140 /* 20.43.65.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348CE969 /* 52.140.233.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503940 /* 40.80.57.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851BC82 /* 40.81.188.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851BF3A /* 40.81.191.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E140 /* 20.192.225.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A100 /* 20.192.161.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400840 /* 40.64.8.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294140 /* 20.41.65.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28529B41 /* 40.82.155.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A940 /* 40.80.169.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141130C0 /* 20.17.48.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E1760C0 /* 158.23.96.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764EE1B /* 23.100.238.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764EE22 /* 23.100.238.34/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764EE25 /* 23.100.238.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BAC0 /* 40.80.186.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265400 /* 20.38.84.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BD8F5 /* 52.155.216.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BD954 /* 52.155.217.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BDDF2 /* 52.155.221.242/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BDDFA /* 52.155.221.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BDE23 /* 52.155.222.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BDE38 /* 52.155.222.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349E1CB5 /* 52.158.28.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349E1EF1 /* 52.158.30.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782880 /* 51.120.40.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E080 /* 51.120.224.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D700C0 /* 20.215.0.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141520C0 /* 20.21.32.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66858021 /* 102.133.128.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685D980 /* 102.133.217.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662554C0 /* 102.37.84.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D0031 /* 20.45.0.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D027A /* 20.45.2.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850D8E7 /* 40.80.216.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850D926 /* 40.80.217.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850DB2E /* 40.80.219.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770B00 /* 40.119.11.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B9E00D /* 52.185.224.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B9E026 /* 52.185.224.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7080 /* 20.45.112.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C140 /* 20.41.193.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8280 /* 20.43.130.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841AD9D /* 40.65.173.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841AFD4 /* 40.65.175.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841AFE4 /* 40.65.175.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285ABEB4 /* 40.90.190.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD50C0 /* 68.221.80.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2940 /* 51.12.41.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC140 /* 51.12.193.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3080 /* 51.107.48.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9080 /* 51.107.144.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x333518C0 /* 51.53.24.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335A8C0 /* 51.53.168.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254080 /* 20.37.64.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268880 /* 20.38.136.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695080 /* 51.105.80.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681940 /* 51.104.25.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33842B42 /* 51.132.43.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33917C9D /* 51.145.124.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33917C9E /* 51.145.124.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC080 /* 51.143.192.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A140 /* 51.137.161.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968B00 /* 52.150.139.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD854A /* 52.253.133.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A129A /* 40.74.18.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1E00 /* 40.74.30.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3391B0F9 /* 51.145.176.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3391B1D4 /* 51.145.177.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3391B28A /* 51.145.178.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3391B28C /* 51.145.178.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348918EC /* 52.137.24.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34891A72 /* 52.137.26.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34891A9B /* 52.137.26.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34891AC6 /* 52.137.26.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34891B31 /* 52.137.27.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34893873 /* 52.137.56.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34893CD0 /* 52.137.60.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DE740 /* 52.157.231.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D4000 /* 104.45.64.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D4093 /* 104.45.64.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D40E0 /* 104.45.64.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D411E /* 104.45.65.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D4159 /* 104.45.65.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883080 /* 52.136.48.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D40208D /* 13.64.32.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D53162D /* 13.83.22.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D53164A /* 13.83.22.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D531677 /* 13.83.22.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD815E /* 20.189.129.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28510964 /* 40.81.9.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28510983 /* 40.81.9.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285109CB /* 40.81.9.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285109D1 /* 40.81.9.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285109D5 /* 40.81.9.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285109DD /* 40.81.9.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28510A24 /* 40.81.10.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28510C85 /* 40.81.12.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28510F08 /* 40.81.15.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28510F27 /* 40.81.15.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852FD00 /* 40.82.253.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349D16E9 /* 52.157.22.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A81C0 /* 20.42.129.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B5D54 /* 40.91.93.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B7F74 /* 40.91.127.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B7FF1 /* 40.91.127.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F6836 /* 51.143.104.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F685A /* 51.143.104.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A080 /* 20.150.160.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246B00 /* 20.36.107.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14350000 /* 20.53.0.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353440 /* 20.53.52.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353460 /* 20.53.52.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142472B0 /* 20.36.114.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142475A0 /* 20.36.117.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353C10 /* 20.53.60.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353C20 /* 20.53.60.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4648C0 /* 13.70.72.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464EE0 /* 13.70.78.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D48F30A /* 13.72.243.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B8B00 /* 13.75.139.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DCC0 /* 20.70.220.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DCE0 /* 20.70.220.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5CA33 /* 20.213.202.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5CA54 /* 20.213.202.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EDD648 /* 52.237.214.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4688AE /* 13.70.136.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D2D22 /* 13.77.45.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D32F0 /* 13.77.50.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D37A0 /* 13.77.55.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C0340 /* 20.92.3.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C0360 /* 20.92.3.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF30CA /* 52.255.48.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C94414 /* 20.201.68.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C9441E /* 20.201.68.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68293B33 /* 104.41.59.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8BF9D /* 191.232.191.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CBC0 /* 191.233.203.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CFA0 /* 191.233.207.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEAB470 /* 191.234.180.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4C70 /* 191.238.76.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4C80 /* 191.238.76.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0000 /* 20.206.0.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761786D /* 23.97.120.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93300 /* 191.233.51.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AAD0 /* 13.71.170.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AFA0 /* 13.71.175.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C8C0 /* 20.48.200.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C8E0 /* 20.48.200.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852B806 /* 40.82.184.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852B82B /* 40.82.184.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855CE5F /* 40.85.206.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED187E /* 52.237.24.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED20D4 /* 52.237.32.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456AF0 /* 40.69.106.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456F00 /* 40.69.111.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6F00 /* 52.139.111.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6F20 /* 52.139.111.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F21E70 /* 52.242.30.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22398 /* 52.242.35.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22428 /* 52.242.36.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D471ED3 /* 13.71.30.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7B00 /* 20.43.123.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A840 /* 20.192.168.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A860 /* 20.192.168.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCCBC1 /* 20.204.203.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCCC05 /* 20.204.204.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACD30C /* 52.172.211.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACD481 /* 52.172.212.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D351C0 /* 104.211.81.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AB50 /* 13.89.171.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59B240 /* 13.89.178.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14507B39 /* 20.80.123.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14507B86 /* 20.80.123.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146290E0 /* 20.98.144.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14629100 /* 20.98.145.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871F2F6 /* 40.113.242.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADF11B /* 52.173.241.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADF5A4 /* 52.173.245.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF070 /* 20.45.240.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF180 /* 20.45.241.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECA60 /* 40.78.202.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4A4D6 /* 52.180.164.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8C00 /* 168.61.140.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8F40 /* 168.61.143.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2440 /* 13.75.36.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B6E83 /* 13.75.110.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B71E0 /* 13.75.113.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4330 /* 20.205.67.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4340 /* 20.205.67.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF17A9 /* 52.175.23.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A400 /* 104.214.164.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A580 /* 104.214.165.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145899B0 /* 20.88.153.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145899C0 /* 20.88.153.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470B50 /* 40.71.11.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470FA0 /* 40.71.15.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847C1CB /* 40.71.193.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847F98B /* 40.71.249.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847F9CD /* 40.71.249.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28722884 /* 40.114.40.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497DD77 /* 52.151.221.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497DDB8 /* 52.151.221.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682984B4 /* 104.41.132.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145550C5 /* 20.85.80.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14555189 /* 20.85.81.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C050 /* 20.98.192.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C060 /* 20.98.192.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284692D0 /* 40.70.146.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469760 /* 40.70.151.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E18190 /* 52.225.129.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8BC9A /* 52.232.188.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D1F717 /* 104.209.247.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D20E9C /* 104.210.14.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FE850 /* 20.47.232.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FE860 /* 20.47.232.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9240 /* 40.74.146.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5CC0 /* 52.138.92.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1BCB6 /* 52.225.188.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1BEBE /* 52.225.190.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481B00 /* 20.72.27.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14584220 /* 20.88.66.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14584240 /* 20.88.66.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433AF0 /* 40.67.58.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433CE0 /* 40.67.60.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F82D0 /* 40.79.130.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9460 /* 40.79.148.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28598303 /* 40.89.131.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28598702 /* 40.89.135.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28599B3B /* 40.89.155.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BE594 /* 51.11.229.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BE59C /* 51.11.229.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD730 /* 51.138.215.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD740 /* 51.138.215.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB2F0 /* 40.79.178.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB4E0 /* 40.79.180.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348885B8 /* 52.136.133.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34888E9A /* 52.136.142.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BD10 /* 52.136.189.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BD20 /* 52.136.189.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337437F0 /* 51.116.55.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743B10 /* 51.116.59.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743CC0 /* 51.116.60.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744A20 /* 51.116.74.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D3D4 /* 51.116.211.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345D50 /* 20.52.93.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345D60 /* 20.52.93.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144FE254 /* 20.79.226.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14711159 /* 20.113.17.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749B50 /* 51.116.155.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749E60 /* 51.116.158.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374EC4E /* 51.116.236.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D937C0 /* 20.217.55.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93B00 /* 20.217.59.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E862C0 /* 4.232.98.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47809F /* 13.71.128.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D479913 /* 13.71.153.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4915E6 /* 13.73.21.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6C00 /* 13.78.108.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590B30 /* 20.89.11.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590B40 /* 20.89.11.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1459A309 /* 20.89.163.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1459A311 /* 20.89.163.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBD40 /* 40.79.189.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC090 /* 20.189.192.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC0A0 /* 20.189.192.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D29280 /* 20.210.146.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A64E0 /* 40.74.100.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B440 /* 40.80.180.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B580 /* 40.80.181.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D71B18 /* 104.215.27.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D71C80 /* 104.215.28.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D73DF8 /* 104.215.61.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02040 /* 20.192.32.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF0000 /* 20.207.0.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CEC0 /* 20.193.206.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400830 /* 40.64.8.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400880 /* 40.64.8.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1D40 /* 20.44.29.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C2286A /* 20.194.40.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C4F991 /* 20.196.249.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C4FA87 /* 20.196.250.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C2A0 /* 20.200.194.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C2C0 /* 20.200.194.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D0168 /* 52.141.1.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D24D6 /* 52.141.36.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E712D0 /* 52.231.18.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937520 /* 52.147.117.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937540 /* 52.147.117.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79300 /* 52.231.147.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E794E0 /* 52.231.148.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7A30A /* 52.231.163.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7C9AD /* 52.231.201.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14111900 /* 20.17.25.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114300 /* 20.17.67.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176C40 /* 158.23.108.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143304C0 /* 20.51.4.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143304E0 /* 20.51.4.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26BA0 /* 52.162.107.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26FC0 /* 52.162.111.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A27E04 /* 52.162.126.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A2F2A1 /* 52.162.242.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134C540 /* 65.52.197.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45AB00 /* 13.69.171.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E3D0 /* 13.69.227.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E7C0 /* 13.69.231.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452E03B /* 20.82.224.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452E234 /* 20.82.226.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452F670 /* 20.82.246.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928A20 /* 52.146.138.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B29644 /* 52.178.150.68/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x5EF55B5D /* 94.245.91.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640060 /* 20.100.0.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640080 /* 20.100.0.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D12D8 /* 51.13.18.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D12E9 /* 51.13.18.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337862E0 /* 51.120.98.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337864C0 /* 51.120.100.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8BA0 /* 51.13.139.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8BC0 /* 51.13.139.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DAF0 /* 51.120.218.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DCC0 /* 51.120.220.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79B00 /* 20.215.155.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D7A980 /* 20.215.169.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152B00 /* 20.21.43.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A650 /* 102.37.166.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A660 /* 102.37.166.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859B00 /* 102.133.155.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685A8A7 /* 102.133.168.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685CBFB /* 102.133.203.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685CC41 /* 102.133.204.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FD00 /* 102.133.253.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254000 /* 102.37.64.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255480 /* 102.37.84.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662554A0 /* 102.37.84.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851B00 /* 102.133.27.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854855 /* 102.133.72.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D415639 /* 13.65.86.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F4E0 /* 13.73.244.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145EA4C9 /* 20.94.164.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145EA4F4 /* 20.94.164.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14612130 /* 20.97.33.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14612140 /* 20.97.33.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AB825C /* 52.171.130.92/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D61330 /* 104.214.19.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D646BF /* 104.214.70.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D66B94 /* 104.214.107.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0300 /* 20.44.3.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764D000 /* 23.100.208.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D477D16 /* 13.71.125.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D477F1A /* 13.71.127.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D477FA9 /* 13.71.127.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09840 /* 20.192.152.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09860 /* 20.192.152.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0B820 /* 20.192.184.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC2F0 /* 40.78.194.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC5000 /* 52.172.80.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4308F0 /* 13.67.8.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430F20 /* 13.67.15.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C352F0 /* 20.195.82.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35300 /* 20.195.83.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C69448 /* 20.198.148.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CDF8E0 /* 20.205.248.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB4413 /* 52.187.68.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB931B /* 52.187.147.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5C40 /* 68.221.92.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1D70 /* 51.12.29.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C4880 /* 51.12.72.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C62F0 /* 51.12.98.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6600 /* 51.12.102.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C14E0 /* 51.12.20.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1680 /* 51.12.22.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCAF0 /* 51.12.202.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCDC0 /* 51.12.205.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33678E16 /* 51.103.142.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33678FA3 /* 51.103.143.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3B10 /* 51.107.59.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3CE0 /* 51.107.60.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B56D9 /* 51.107.86.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF670 /* 51.107.246.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF680 /* 51.107.246.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9B10 /* 51.107.155.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9CE0 /* 51.107.156.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFE20 /* 51.107.254.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFE40 /* 51.107.254.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33352840 /* 51.53.40.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356B00 /* 51.53.107.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BB00 /* 51.53.187.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254AC0 /* 20.37.74.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4324 /* 20.45.67.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D432D /* 20.45.67.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5AD0 /* 20.45.90.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5AE0 /* 20.45.90.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28780800 /* 40.120.8.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877A22C /* 40.119.162.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784040 /* 40.120.64.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28785610 /* 40.120.86.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28785620 /* 40.120.86.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FAD0 /* 65.52.250.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577AE0 /* 13.87.122.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A7C86 /* 20.90.124.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A7DD3 /* 20.90.125.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8100 /* 20.90.129.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8120 /* 20.90.129.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694D60 /* 51.105.77.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C3D7C /* 51.140.61.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4A96 /* 51.140.74.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4DE3 /* 51.140.77.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C5033 /* 51.140.80.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9400 /* 51.140.148.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5738E0 /* 13.87.56.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A46C0 /* 20.58.70.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A46E0 /* 20.58.70.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD300 /* 51.140.211.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD4E0 /* 51.140.212.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CF51D /* 51.140.245.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D2F69 /* 51.141.47.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D34B9 /* 51.141.52.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D7C0D /* 51.141.124.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C320 /* 13.71.195.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C7C0 /* 13.71.199.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E8452 /* 13.78.132.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EB2BB /* 13.78.178.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450400 /* 20.69.4.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450420 /* 20.69.4.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A165CC /* 52.161.101.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A16616 /* 52.161.102.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4540D0 /* 13.69.64.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4547C0 /* 13.69.71.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14565D20 /* 20.86.93.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14565D40 /* 20.86.93.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14678301 /* 20.103.131.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1467848B /* 20.103.132.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147EF1EE /* 20.126.241.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147EF397 /* 20.126.243.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285BD041 /* 40.91.208.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE5876 /* 52.174.88.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEB4A0 /* 52.174.180.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8975A1B5 /* 137.117.161.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142680E0 /* 20.38.128.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C05230 /* 20.192.82.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C05240 /* 20.192.82.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D392E0 /* 104.211.146.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3BD7C /* 104.211.189.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3BDDA /* 104.211.189.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DF20 /* 13.86.223.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B5D3F /* 13.91.93.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B61C4 /* 13.91.97.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5D943E /* 13.93.148.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B4D00 /* 20.59.77.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420670 /* 20.66.6.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870C357 /* 40.112.195.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F3A0 /* 40.112.243.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A7A31 /* 104.42.122.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4282F3 /* 13.66.130.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428C80 /* 13.66.140.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D429160 /* 13.66.145.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453DCD0 /* 20.83.220.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453DCE0 /* 20.83.220.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1473A822 /* 20.115.168.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1473A914 /* 20.115.169.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34972AAC /* 52.151.42.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B74E9D /* 52.183.78.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A46E0 /* 20.106.70.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A4714 /* 20.106.71.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149681B0 /* 20.150.129.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149681C0 /* 20.150.129.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AAF0 /* 20.150.170.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AD40 /* 20.150.173.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143500C0 /* 20.53.0.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14350100 /* 20.53.1.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C16040 /* 20.193.96.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C16080 /* 20.193.96.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464888 /* 13.70.72.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464E00 /* 13.70.78.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4672C0 /* 13.70.114.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352980 /* 20.53.41.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA220 /* 40.79.162.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA580 /* 40.79.165.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA600 /* 40.79.166.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAA00 /* 40.79.170.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAD80 /* 40.79.173.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAE00 /* 40.79.174.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3250 /* 13.77.50.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EA180 /* 104.46.161.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EA280 /* 104.46.162.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB180 /* 104.46.177.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C38800 /* 20.195.136.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C38900 /* 20.195.137.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C398C0 /* 20.195.152.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C39980 /* 20.195.153.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CB88 /* 191.233.203.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CDC0 /* 191.233.205.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8B00 /* 191.234.139.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9290 /* 191.234.146.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9540 /* 191.234.149.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9600 /* 191.234.150.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9700 /* 191.234.151.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9A90 /* 191.234.154.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9DC0 /* 191.234.157.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93210 /* 191.233.50.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93640 /* 191.233.54.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93680 /* 191.233.54.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AA38 /* 13.71.170.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47B000 /* 13.71.176.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47B080 /* 13.71.176.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269290 /* 20.38.146.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269500 /* 20.38.149.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C080 /* 20.48.192.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69A90 /* 52.246.154.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69D80 /* 52.246.157.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69E00 /* 52.246.158.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456A50 /* 40.69.106.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456E00 /* 40.69.110.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28457400 /* 40.69.116.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591740 /* 40.89.23.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7980 /* 20.43.121.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7B40 /* 20.43.123.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7F00 /* 20.43.127.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06290 /* 20.192.98.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06540 /* 20.192.101.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06580 /* 20.192.101.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503290 /* 40.80.50.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285033C0 /* 40.80.51.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503540 /* 40.80.53.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503680 /* 40.80.54.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6EC0 /* 52.140.110.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35188 /* 104.211.81.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AAD8 /* 13.89.170.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AF00 /* 13.89.175.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59B2C0 /* 13.89.178.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E040 /* 20.40.224.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0B00 /* 20.44.11.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0B80 /* 20.44.11.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0C00 /* 20.44.12.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68AD0 /* 52.182.138.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68E00 /* 52.182.142.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68E80 /* 52.182.142.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D01050 /* 104.208.16.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC780 /* 20.45.199.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECA48 /* 40.78.202.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8C80 /* 168.61.140.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8D00 /* 168.61.141.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8D80 /* 168.61.141.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8EC0 /* 168.61.142.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2400 /* 13.75.36.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC440 /* 20.187.196.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4A80 /* 20.205.74.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4D00 /* 20.205.77.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5280 /* 20.205.82.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5500 /* 20.205.85.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A180 /* 104.214.161.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A500 /* 104.214.165.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4200 /* 20.42.66.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4300 /* 20.42.67.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4A40 /* 20.42.74.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8000 /* 20.62.128.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470AD8 /* 40.71.10.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE2D0 /* 40.78.226.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE700 /* 40.78.231.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9A68 /* 40.79.154.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A870C0 /* 52.168.112.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87200 /* 52.168.114.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87300 /* 52.168.115.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1340 /* 20.44.19.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1600 /* 20.44.22.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1700 /* 20.44.23.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316680 /* 20.49.102.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14410000 /* 20.65.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469258 /* 40.70.146.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469600 /* 40.70.150.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76A50 /* 52.167.106.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76E00 /* 52.167.110.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76F00 /* 52.167.111.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D09050 /* 104.208.144.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270F80 /* 20.39.15.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9230 /* 40.74.146.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9580 /* 40.74.149.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9740 /* 40.74.151.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2220 /* 40.75.34.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28597800 /* 40.89.120.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28597900 /* 40.89.121.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5A20 /* 52.138.90.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5D00 /* 52.138.93.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5D80 /* 52.138.93.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5280 /* 68.220.82.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5380 /* 68.220.83.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481280 /* 20.72.18.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481A80 /* 20.72.26.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481E00 /* 20.72.30.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315210 /* 20.49.82.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315440 /* 20.49.84.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315600 /* 20.49.86.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146308C0 /* 20.99.8.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433A18 /* 40.67.58.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2E40 /* 20.43.46.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8238 /* 40.79.130.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F84C0 /* 40.79.132.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8A20 /* 40.79.138.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8D00 /* 40.79.141.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8D40 /* 40.79.141.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8F80 /* 40.79.143.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9220 /* 40.79.146.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9480 /* 40.79.148.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F94C0 /* 40.79.148.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9680 /* 40.79.150.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BC100 /* 51.11.193.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BC180 /* 51.11.193.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB250 /* 40.79.178.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AA080 /* 51.138.160.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344880 /* 20.52.72.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344900 /* 20.52.73.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743A18 /* 51.116.58.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345840 /* 20.52.88.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749A58 /* 51.116.154.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749E80 /* 51.116.158.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749EC0 /* 51.116.158.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F290 /* 51.116.242.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FA90 /* 51.116.250.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FE40 /* 51.116.254.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FE80 /* 51.116.254.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92B80 /* 20.217.43.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93A80 /* 20.217.58.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93C80 /* 20.217.60.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94A80 /* 20.217.74.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94D00 /* 20.217.77.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95A80 /* 20.217.90.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95D00 /* 20.217.93.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81A80 /* 4.232.26.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86A80 /* 4.232.106.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86C80 /* 4.232.108.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87A80 /* 4.232.122.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87D00 /* 4.232.125.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C280 /* 4.232.194.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C500 /* 4.232.197.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6AC8 /* 13.78.106.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6F00 /* 13.78.111.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145900C0 /* 20.89.0.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA080 /* 20.191.160.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C28000 /* 20.194.128.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBA08 /* 40.79.186.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBD80 /* 40.79.189.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBE00 /* 40.79.190.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC260 /* 40.79.194.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC580 /* 40.79.197.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B280 /* 20.18.178.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B500 /* 20.18.181.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE000 /* 20.189.224.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A64A0 /* 40.74.100.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B080 /* 40.80.176.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B500 /* 40.80.181.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02000 /* 20.192.32.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02100 /* 20.192.33.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02180 /* 20.192.33.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03200 /* 20.192.50.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EA18 /* 20.192.234.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EC00 /* 20.192.236.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1A040 /* 20.193.160.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C080 /* 20.193.192.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CA10 /* 20.193.202.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CC80 /* 20.193.204.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CD00 /* 20.193.205.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CE40 /* 20.193.206.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294580 /* 20.41.69.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1A90 /* 20.44.26.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1D80 /* 20.44.29.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1DC0 /* 20.44.29.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24210 /* 20.194.66.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24400 /* 20.194.68.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24440 /* 20.194.68.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24600 /* 20.194.70.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C25080 /* 20.194.80.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C25100 /* 20.194.81.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C25180 /* 20.194.81.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71238 /* 52.231.18.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71480 /* 52.231.20.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14871A40 /* 20.135.26.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34936180 /* 52.147.97.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E792C0 /* 52.231.146.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79780 /* 52.231.151.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113380 /* 20.17.51.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114280 /* 20.17.66.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114480 /* 20.17.68.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170A80 /* 158.23.10.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170C80 /* 158.23.12.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176400 /* 158.23.100.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177A80 /* 158.23.122.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177D00 /* 158.23.125.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C280 /* 158.23.194.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C500 /* 158.23.197.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317300 /* 20.49.115.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DAA80 /* 20.125.170.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DAD00 /* 20.125.173.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCA80 /* 20.125.202.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCD00 /* 20.125.205.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A268C0 /* 52.162.104.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26AA0 /* 52.162.106.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F0F180 /* 52.240.241.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F0F400 /* 52.240.244.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E358 /* 13.69.227.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45EC00 /* 13.69.236.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45EE00 /* 13.69.238.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6B50 /* 13.74.107.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6E00 /* 13.74.110.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324880 /* 20.50.72.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE250 /* 52.138.226.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE600 /* 52.138.230.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE700 /* 52.138.231.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928380 /* 52.146.131.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D0000 /* 51.13.0.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D0140 /* 51.13.1.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337862A0 /* 51.120.98.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786A90 /* 51.120.106.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786D80 /* 51.120.109.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786E00 /* 51.120.110.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D290 /* 51.120.210.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D580 /* 51.120.213.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D600 /* 51.120.214.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378EA00 /* 51.120.234.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8080 /* 51.13.128.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8100 /* 51.13.129.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DA18 /* 51.120.218.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70380 /* 20.215.3.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71280 /* 20.215.18.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71500 /* 20.215.21.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71A80 /* 20.215.26.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71D00 /* 20.215.29.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79A80 /* 20.215.154.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79C80 /* 20.215.156.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152400 /* 20.21.36.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152A80 /* 20.21.42.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152C80 /* 20.21.44.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152EC0 /* 20.21.46.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154280 /* 20.21.66.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154500 /* 20.21.69.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154A80 /* 20.21.74.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154D00 /* 20.21.77.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254880 /* 102.37.72.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857A90 /* 102.133.122.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857CC0 /* 102.133.124.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857E00 /* 102.133.126.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859A18 /* 102.133.154.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859CC0 /* 102.133.156.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DC40 /* 102.133.220.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FA90 /* 102.133.250.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FD40 /* 102.133.253.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FD80 /* 102.133.253.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254140 /* 102.37.65.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662541C0 /* 102.37.65.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851A18 /* 102.133.26.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F540 /* 13.73.245.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F580 /* 13.73.245.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FF40 /* 13.73.255.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7A90 /* 20.45.122.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7D00 /* 20.45.125.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315A10 /* 20.49.90.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315C00 /* 20.49.92.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315C80 /* 20.49.92.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315D00 /* 20.49.93.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C4000 /* 40.124.64.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D612B8 /* 104.214.18.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0218 /* 20.44.2.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C7C0 /* 20.41.199.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429D040 /* 20.41.208.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC250 /* 40.78.194.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC4C0 /* 40.78.196.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430878 /* 13.67.8.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430E00 /* 13.67.14.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430E80 /* 13.67.14.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34080 /* 20.195.64.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625270 /* 23.98.82.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625680 /* 23.98.86.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625700 /* 23.98.87.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17627000 /* 23.98.112.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEA30 /* 40.78.234.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEF80 /* 40.78.239.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5400 /* 68.221.84.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6280 /* 68.221.98.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6480 /* 68.221.100.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD9280 /* 68.221.146.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD9500 /* 68.221.149.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1940 /* 51.12.25.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2000 /* 51.12.32.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2080 /* 51.12.32.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6218 /* 51.12.98.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C64C0 /* 51.12.100.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6500 /* 51.12.101.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE290 /* 51.12.226.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE580 /* 51.12.229.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE600 /* 51.12.230.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEA90 /* 51.12.234.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CED80 /* 51.12.237.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEE00 /* 51.12.238.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CA880 /* 51.12.168.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC7C0 /* 51.12.199.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCA18 /* 51.12.202.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCD80 /* 51.12.205.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCE80 /* 51.12.206.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D01280 /* 20.208.18.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D01500 /* 20.208.21.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CA80 /* 51.103.202.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CD00 /* 51.103.205.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3540 /* 51.107.53.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B38C0 /* 51.107.56.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3A18 /* 51.107.58.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9480 /* 51.107.148.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B98C0 /* 51.107.152.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9A18 /* 51.107.154.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BC000 /* 51.107.192.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351B40 /* 51.53.27.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356A80 /* 51.53.106.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356C80 /* 51.53.108.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335AB40 /* 51.53.171.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BA80 /* 51.53.186.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BC80 /* 51.53.188.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254500 /* 20.37.69.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254A48 /* 20.37.74.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28780840 /* 40.120.8.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28780900 /* 40.120.9.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268CC0 /* 20.38.140.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142698C0 /* 20.38.152.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269D00 /* 20.38.157.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784200 /* 40.120.66.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784A10 /* 40.120.74.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784D00 /* 40.120.77.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784D40 /* 40.120.77.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134F8C0 /* 65.52.248.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FA10 /* 65.52.250.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577A60 /* 13.87.122.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680980 /* 51.104.9.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694290 /* 51.105.66.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694580 /* 51.105.69.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694600 /* 51.105.70.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694A90 /* 51.105.74.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694D80 /* 51.105.77.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384C000 /* 51.132.192.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C92C8 /* 51.140.146.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9740 /* 51.140.151.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD000 /* 51.143.208.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573860 /* 13.87.56.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B6180 /* 51.11.97.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A6C0 /* 51.137.166.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD2C0 /* 51.140.210.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD700 /* 51.140.215.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C2E0 /* 13.71.194.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28437900 /* 40.67.121.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28437A80 /* 40.67.122.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969C40 /* 52.150.156.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454058 /* 13.69.64.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456A50 /* 13.69.106.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456E00 /* 13.69.110.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4570C0 /* 13.69.112.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432C800 /* 20.50.200.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6180 /* 20.61.97.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B21200 /* 52.178.18.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B21400 /* 52.178.20.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBA50 /* 52.236.186.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBF00 /* 52.236.191.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142684C0 /* 20.38.132.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39250 /* 104.211.146.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317F00 /* 20.49.127.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A280 /* 20.168.162.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A500 /* 20.168.165.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDA900 /* 20.189.169.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDAB80 /* 20.189.171.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F2A0 /* 40.112.242.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428C48 /* 13.66.140.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D429200 /* 13.66.146.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D429300 /* 13.66.147.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D429400 /* 13.66.148.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453C040 /* 20.83.192.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28407000 /* 40.64.112.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28407180 /* 40.64.113.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408780 /* 40.64.135.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF2A0 /* 40.78.242.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF600 /* 40.78.246.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFA60 /* 40.78.250.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AA18 /* 20.150.170.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AD80 /* 20.150.173.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AE00 /* 20.150.174.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AF80 /* 20.150.175.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B290 /* 20.150.178.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B5C0 /* 20.150.181.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B680 /* 20.150.182.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BA90 /* 20.150.186.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BDC0 /* 20.150.189.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BE80 /* 20.150.190.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496E140 /* 20.150.225.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F100 /* 20.150.241.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14242A08 /* 20.36.42.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246A00 /* 20.36.106.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E420 /* 20.37.228.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427413A /* 20.39.65.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5E080 /* 20.213.224.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5E1C0 /* 20.213.225.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5E200 /* 20.213.226.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14244BA3 /* 20.36.75.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247200 /* 20.36.114.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247B60 /* 20.36.123.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142763E6 /* 20.39.99.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353FC0 /* 20.53.63.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A78080 /* 20.167.128.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A78180 /* 20.167.129.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464A88 /* 13.70.74.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D48FF96 /* 13.72.255.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B8654 /* 13.75.134.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352900 /* 20.53.41.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14355BD0 /* 20.53.91.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5C5C0 /* 20.213.197.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5C780 /* 20.213.199.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA348 /* 40.79.163.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA3C0 /* 40.79.163.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAA30 /* 40.79.170.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAEC0 /* 40.79.174.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EF4D1 /* 40.126.244.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CAA68 /* 52.156.170.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DA7800 /* 68.218.120.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D25963 /* 104.210.89.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4964B7 /* 13.73.100.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3200 /* 13.77.50.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D3E180 /* 20.211.225.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D3E5C0 /* 20.211.229.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D3E600 /* 20.211.230.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765F063 /* 23.101.240.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF3413 /* 52.255.52.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF3ADD /* 52.255.58.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB140 /* 104.46.177.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFB37C /* 191.239.179.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E2D000 /* 20.226.208.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E2D200 /* 20.226.210.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E2D280 /* 20.226.210.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829343D /* 104.41.52.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68293645 /* 104.41.54.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE833AF /* 191.232.51.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE835CB /* 191.232.53.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CC80 /* 191.233.204.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8AA0 /* 191.234.138.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9200 /* 191.234.146.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9A00 /* 191.234.154.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEAB39D /* 191.234.179.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEACE51 /* 191.234.206.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0640 /* 20.206.6.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6C8C0000 /* 108.140.0.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6C8C0080 /* 108.140.0.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90BC0 /* 191.233.11.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93240 /* 191.233.50.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AA00 /* 13.71.170.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58FDB4 /* 13.88.253.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269200 /* 20.38.146.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C020 /* 20.48.192.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14975119 /* 20.151.81.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DC0200 /* 20.220.2.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DC0440 /* 20.220.4.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DC0480 /* 20.220.4.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED14FC /* 52.237.20.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69A00 /* 52.246.154.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AF0080 /* 20.175.0.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AF0600 /* 20.175.6.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AF0680 /* 20.175.6.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456A00 /* 40.69.106.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28457500 /* 40.69.117.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E5F5 /* 40.86.229.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285916E0 /* 40.89.22.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B56D2 /* 52.139.86.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EB28F7 /* 52.235.40.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EB2E1C /* 52.235.46.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7E80 /* 20.43.126.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06200 /* 20.192.98.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1F903 /* 20.193.249.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC340 /* 20.204.195.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC500 /* 20.204.197.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC580 /* 20.204.197.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503200 /* 40.80.50.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6E40 /* 52.140.110.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACCE82 /* 52.172.206.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35400 /* 104.211.84.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D36632 /* 104.211.102.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5929F5 /* 13.89.41.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D598EAD /* 13.89.142.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AA00 /* 13.89.170.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59BEBA /* 13.89.190.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59E0E5 /* 13.89.224.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140F84C0 /* 20.15.132.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140F8500 /* 20.15.133.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428CFA0 /* 20.40.207.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0A00 /* 20.44.10.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1476C7C0 /* 20.118.199.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D3FB3 /* 40.77.63.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A8459 /* 40.122.132.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287AAE8C /* 40.122.174.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A52ACC /* 52.165.42.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A52EF9 /* 52.165.46.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A581B8 /* 52.165.129.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5E570 /* 52.165.229.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD94D9 /* 52.173.148.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADC4AA /* 52.173.196.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADF0F4 /* 52.173.240.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B00088 /* 52.176.0.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B00747 /* 52.176.7.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B06531 /* 52.176.101.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B09B7F /* 52.176.155.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68A00 /* 52.182.138.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC660 /* 20.45.198.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E40440 /* 20.228.4.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E40640 /* 20.228.6.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E40680 /* 20.228.6.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECB20 /* 40.78.203.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B0FB57 /* 52.176.251.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4A0FB /* 52.180.160.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4A101 /* 52.180.161.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B189 /* 52.180.177.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8E80 /* 168.61.142.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2200 /* 13.75.34.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140689C0 /* 20.6.137.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14068C00 /* 20.6.140.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14068C80 /* 20.6.140.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC400 /* 20.187.196.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4A00 /* 20.205.74.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5200 /* 20.205.82.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766EF86 /* 23.102.239.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF19D3 /* 52.175.25.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF27E8 /* 52.175.39.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974A5CC /* 137.116.165.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E96FC /* 207.46.150.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5235BF /* 13.82.53.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5AC79B /* 13.90.199.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470A00 /* 40.71.10.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28471113 /* 40.71.17.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847CB25 /* 40.71.203.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847CC73 /* 40.71.204.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847D872 /* 40.71.216.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE200 /* 40.78.226.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9A80 /* 40.79.154.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855B2D3 /* 40.85.178.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34924FA0 /* 52.146.79.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34962624 /* 52.150.38.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A81CDE /* 52.168.28.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AACC53 /* 52.170.204.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B34980 /* 52.179.73.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BA45E0 /* 52.186.69.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BF2840 /* 52.191.40.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BF2980 /* 52.191.41.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFC5DC /* 52.191.197.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E2128C /* 52.226.18.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E215B2 /* 52.226.21.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D83C1 /* 104.45.131.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D9049 /* 104.45.144.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D441C87 /* 13.68.28.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140F0940 /* 20.15.9.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140F0D80 /* 20.15.13.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140F0E00 /* 20.15.14.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316640 /* 20.49.102.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2846008C /* 40.70.0.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2846DCCA /* 40.70.220.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F27A2 /* 40.79.39.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F3B5C /* 40.79.59.92/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F4388 /* 40.79.67.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A75250 /* 52.167.82.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76B80 /* 52.167.107.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B1AC4A /* 52.177.172.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B1CE99 /* 52.177.206.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B38D21 /* 52.179.141.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B38FE9 /* 52.179.143.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3C800 /* 52.179.200.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B898F1 /* 52.184.152.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D0E700 /* 104.208.231.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270F40 /* 20.39.15.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F9111 /* 20.47.145.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DD8D00 /* 20.221.141.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14FCD040 /* 20.252.208.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14FCD080 /* 20.252.208.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A93C0 /* 40.74.147.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2020 /* 40.75.32.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2280 /* 40.75.34.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285943D0 /* 40.89.67.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A425A /* 52.138.66.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5C00 /* 52.138.92.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5200 /* 68.220.82.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481240 /* 20.72.18.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481A40 /* 20.72.26.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315240 /* 20.49.82.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284333A0 /* 40.67.51.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433A40 /* 40.67.58.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14131C80 /* 20.19.28.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14131E80 /* 20.19.30.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14131F00 /* 20.19.31.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2E00 /* 20.43.46.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8200 /* 40.79.130.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8A30 /* 40.79.138.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8E40 /* 40.79.142.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9230 /* 40.79.146.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9580 /* 40.79.149.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285984EE /* 40.89.132.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BC0C0 /* 51.11.192.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367061B /* 51.103.6.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F8829 /* 52.143.136.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14275099 /* 20.39.80.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB200 /* 40.79.178.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28506580 /* 40.80.101.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28506700 /* 40.80.103.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28506780 /* 40.80.103.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695CC0 /* 51.105.92.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348886FA /* 52.136.134.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34888846 /* 52.136.136.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1471F8C0 /* 20.113.248.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1471FA40 /* 20.113.250.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1471FA80 /* 20.113.250.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337401F7 /* 51.116.1.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337432E0 /* 51.116.50.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743A40 /* 51.116.58.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DAB9C0 /* 20.218.185.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DABCC0 /* 20.218.188.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DABD00 /* 20.218.189.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33747BED /* 51.116.123.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337492E0 /* 51.116.146.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749A80 /* 51.116.154.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F200 /* 51.116.242.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FA00 /* 51.116.250.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D90A40 /* 20.217.10.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92B20 /* 20.217.43.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81A40 /* 4.232.26.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E82A40 /* 4.232.42.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E3323 /* 13.78.51.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6A00 /* 13.78.106.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14120300 /* 20.18.3.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14120540 /* 20.18.5.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14120580 /* 20.18.5.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143F816B /* 20.63.129.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590080 /* 20.89.0.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA020 /* 20.191.160.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBA10 /* 40.79.186.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBF00 /* 40.79.191.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC280 /* 40.79.194.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873F125 /* 40.115.241.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829B15D /* 104.41.177.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04BE8340 /* 4.190.131.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04BE8380 /* 4.190.131.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B200 /* 20.18.178.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D295C0 /* 20.210.149.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6200 /* 40.74.98.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A8FEB /* 40.74.143.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503FA0 /* 40.80.63.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851B718 /* 40.81.183.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D70135 /* 104.215.1.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D71527 /* 104.215.21.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D737E3 /* 104.215.55.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E700 /* 20.192.231.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EA40 /* 20.192.234.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF0600 /* 20.207.6.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF06C0 /* 20.207.6.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF0780 /* 20.207.7.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A6C0 /* 20.192.166.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CA40 /* 20.193.202.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F4C000 /* 20.244.192.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F4C180 /* 20.244.193.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400F00 /* 40.64.15.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294540 /* 20.41.69.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1A00 /* 20.44.26.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C20372 /* 20.194.3.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24240 /* 20.194.66.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C25040 /* 20.194.80.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D68400 /* 20.214.132.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D68640 /* 20.214.134.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D68680 /* 20.214.134.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71200 /* 52.231.18.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7197B /* 52.231.25.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7278F /* 52.231.39.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E73800 /* 52.231.56.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8A340 /* 20.200.163.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8A4C0 /* 20.200.164.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8A500 /* 20.200.165.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850AD00 /* 40.80.173.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850EC9F /* 40.80.236.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79200 /* 52.231.146.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7CEEA /* 52.231.206.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7CF1F /* 52.231.207.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14111840 /* 20.17.24.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113300 /* 20.17.51.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114200 /* 20.17.66.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E1771C0 /* 158.23.113.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14299251 /* 20.41.146.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317280 /* 20.49.114.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DAA00 /* 20.125.170.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCA00 /* 20.125.202.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F17200 /* 20.241.114.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F174C0 /* 20.241.116.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F17500 /* 20.241.117.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760B4D5 /* 23.96.180.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760DBCF /* 23.96.219.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760F2EA /* 23.96.242.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26A00 /* 52.162.106.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A2FC1A /* 52.162.252.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134D209 /* 65.52.210.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37AA85 /* 157.55.170.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E200 /* 13.69.226.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6A00 /* 13.74.106.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4F22EC /* 13.79.34.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14362623 /* 20.54.38.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A62A80 /* 20.166.42.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A62E80 /* 20.166.46.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A62F00 /* 20.166.47.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28715A5B /* 40.113.90.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A8D70 /* 52.138.141.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AC521 /* 52.138.197.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AC92F /* 52.138.201.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348ACD61 /* 52.138.205.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348ACE99 /* 52.138.206.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE3C0 /* 52.138.227.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928300 /* 52.146.131.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A4FABC /* 52.164.250.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A97A25 /* 52.169.122.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9DBB7 /* 52.169.219.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14641000 /* 20.100.16.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146413C0 /* 20.100.19.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14641400 /* 20.100.20.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D19B6 /* 51.13.25.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782C80 /* 51.120.44.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786240 /* 51.120.98.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786A00 /* 51.120.106.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D200 /* 51.120.210.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D96AF /* 51.13.150.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378B3C0 /* 51.120.179.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378B5C0 /* 51.120.181.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378B600 /* 51.120.182.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DA40 /* 51.120.218.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E4A0 /* 51.120.228.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70320 /* 20.215.3.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71200 /* 20.215.18.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71A00 /* 20.215.26.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79A00 /* 20.215.154.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04AB1880 /* 4.171.24.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04AB1900 /* 4.171.25.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141522A0 /* 20.21.34.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152A00 /* 20.21.42.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154200 /* 20.21.66.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154A00 /* 20.21.74.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141555C0 /* 20.21.85.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14572221 /* 20.87.34.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575780 /* 20.87.87.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A49900 /* 20.164.153.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A49980 /* 20.164.153.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857A00 /* 102.133.122.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859A40 /* 102.133.154.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DC00 /* 102.133.220.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FA00 /* 102.133.250.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28751940 /* 40.117.25.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28751B00 /* 40.117.27.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28751B80 /* 40.117.27.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851A40 /* 102.133.26.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853C40 /* 102.133.60.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04957200 /* 4.149.114.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04957280 /* 4.149.114.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41915C /* 13.65.145.92/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D421A6B /* 13.66.26.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FEE0 /* 13.73.254.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5496B2 /* 13.84.150.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D549D46 /* 13.84.157.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5510BC /* 13.85.16.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7A00 /* 20.45.122.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315A40 /* 20.49.90.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14402959 /* 20.64.41.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EC9700 /* 20.236.151.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766BF0D /* 23.102.191.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D2D9FB /* 104.210.217.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D61200 /* 104.214.18.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D617C0 /* 104.214.23.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D61AB1 /* 104.214.26.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0240 /* 20.44.2.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D73A0 /* 20.45.115.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47737D /* 13.71.115.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D477C51 /* 13.71.124.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C780 /* 20.41.199.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC200 /* 40.78.194.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC377F /* 52.172.55.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC5240 /* 52.172.82.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC5440 /* 52.172.84.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC5480 /* 52.172.84.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E354 /* 104.211.227.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04C2E100 /* 4.194.225.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04C2E180 /* 4.194.225.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430800 /* 13.67.8.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4CA182 /* 13.76.161.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14180640 /* 20.24.6.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C33A1A /* 20.195.58.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625200 /* 23.98.82.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626BE0 /* 23.98.107.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EECC0 /* 40.78.236.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A33F14 /* 52.163.63.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A3F952 /* 52.163.249.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB0B08 /* 52.187.11.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB0C5D /* 52.187.12.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E60F3F /* 52.230.15.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E617AA /* 52.230.23.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E6465E /* 52.230.70.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E65715 /* 52.230.87.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD2A00 /* 68.221.42.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5240 /* 68.221.82.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B93C0 /* 20.91.147.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B9600 /* 20.91.150.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B9680 /* 20.91.150.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2B00 /* 51.12.43.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6240 /* 51.12.98.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE200 /* 51.12.226.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEA00 /* 51.12.234.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B0D80 /* 20.91.13.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B0F80 /* 20.91.15.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B6000 /* 20.91.96.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC300 /* 51.12.195.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCA40 /* 51.12.202.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D01200 /* 20.208.18.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D094C0 /* 20.208.148.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D09700 /* 20.208.151.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D09780 /* 20.208.151.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CA00 /* 51.103.202.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B07BF /* 51.107.7.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B34E0 /* 51.107.52.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3A40 /* 51.107.58.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7CC00 /* 20.199.204.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7CCC0 /* 20.199.204.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7CD80 /* 20.199.205.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9420 /* 51.107.148.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9A40 /* 51.107.154.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE355 /* 51.107.227.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351B00 /* 51.53.27.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356740 /* 51.53.103.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335AB00 /* 51.53.171.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BA00 /* 51.53.186.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142544A0 /* 20.37.68.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254B80 /* 20.37.75.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425544D /* 20.37.84.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5B00 /* 20.203.91.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5C00 /* 20.203.92.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5C80 /* 20.203.92.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268C80 /* 20.38.140.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269880 /* 20.38.152.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC740 /* 20.74.199.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB0556 /* 20.203.5.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E98340 /* 20.233.131.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E98380 /* 20.233.131.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784A40 /* 40.120.74.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FB80 /* 65.52.251.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577A00 /* 13.87.122.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141A1580 /* 20.26.21.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BA968 /* 51.11.169.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681F80 /* 51.104.31.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694200 /* 51.105.66.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694A00 /* 51.105.74.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C464B /* 51.140.70.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4B92 /* 51.140.75.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C5338 /* 51.140.83.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C63E9 /* 51.140.99.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9200 /* 51.140.146.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FBD25 /* 51.143.189.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACA7E800 /* 172.167.232.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACA7E880 /* 172.167.232.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573800 /* 13.87.56.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33844263 /* 51.132.66.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A680 /* 51.137.166.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD200 /* 51.140.210.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D194D /* 51.141.25.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D354C /* 51.141.53.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D37E5 /* 51.141.55.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338E82C0 /* 51.142.130.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338E8480 /* 51.142.132.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338E8500 /* 51.142.133.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C200 /* 13.71.194.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EBC19 /* 13.78.188.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34942900 /* 52.148.41.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34942A80 /* 52.148.42.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34942B00 /* 52.148.43.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969AE0 /* 52.150.154.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F32B3 /* 52.159.50.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A10D43 /* 52.161.13.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A11683 /* 52.161.22.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A1647E /* 52.161.100.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454200 /* 13.69.66.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454280 /* 13.69.66.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D457000 /* 13.69.112.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D513363 /* 13.81.51.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5EC905 /* 13.94.201.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5FEA44 /* 13.95.234.68/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14325D80 /* 20.50.93.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6100 /* 20.61.97.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144752CA /* 20.71.82.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28442C55 /* 40.68.44.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872F0FD /* 40.114.240.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3390B1A6 /* 51.144.177.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3390B6E9 /* 51.144.182.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEFDEF /* 52.174.253.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B26CDE /* 52.178.108.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E83BDC /* 52.232.59.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E98056 /* 52.233.128.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBD00 /* 52.236.189.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D10B7 /* 104.45.16.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE97B40 /* 191.233.123.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE97B80 /* 191.233.123.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CFAA40 /* 20.207.170.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CFAD80 /* 20.207.173.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CFAE00 /* 20.207.174.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285158E5 /* 40.81.88.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883440 /* 52.136.52.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39200 /* 104.211.146.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A25E /* 104.211.162.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3B875 /* 104.211.184.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3BCAE /* 104.211.188.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D404597 /* 13.64.69.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D407144 /* 13.64.113.68/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D407230 /* 13.64.114.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D40C28C /* 13.64.194.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D581E27 /* 13.88.30.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5BF634 /* 13.91.246.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5D9950 /* 13.93.153.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5D9C7D /* 13.93.156.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DCF42 /* 13.93.207.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317EA0 /* 20.49.126.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A200 /* 20.168.162.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285389BF /* 40.83.137.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28708C0C /* 40.112.140.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F100 /* 40.112.241.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F93C /* 40.112.249.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876F52C /* 40.118.245.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876F5FB /* 40.118.245.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349FC980 /* 52.159.201.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC2240 /* 68.220.34.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC2300 /* 68.220.35.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68280858 /* 104.40.8.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8975099D /* 137.117.9.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428A00 /* 13.66.138.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14099C80 /* 20.9.156.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14241A84 /* 20.36.26.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AA9C0 /* 20.42.169.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AAA80 /* 20.42.170.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408700 /* 40.64.135.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28416A9A /* 40.65.106.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28417269 /* 40.65.114.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF3C0 /* 40.78.243.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFA00 /* 40.78.250.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F55E7 /* 52.143.85.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34971076 /* 52.151.16.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349EEACB /* 52.158.234.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B72AFC /* 52.183.42.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B74224 /* 52.183.66.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B75CDF /* 52.183.92.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B77765 /* 52.183.119.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140E7AC0 /* 20.14.122.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140E7E80 /* 20.14.126.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140E7F00 /* 20.14.127.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A6C0 /* 20.150.166.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AA40 /* 20.150.170.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B200 /* 20.150.178.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BA00 /* 20.150.186.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14251801 /* 20.37.24.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14276126 /* 20.39.97.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142763B1 /* 20.39.99.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464970 /* 13.70.73.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852D954 /* 40.82.217.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D34F0 /* 13.77.52.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A127 /* 20.40.161.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851387A /* 40.81.56.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14287215 /* 20.40.114.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE919B7 /* 191.233.25.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CD00 /* 191.233.205.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE932D0 /* 191.233.50.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AD40 /* 13.71.173.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BCD0 /* 40.82.188.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456BF0 /* 40.69.107.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850FAA8 /* 40.80.250.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850FF0C /* 40.80.255.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22F80 /* 52.242.47.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7860 /* 20.43.120.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02F60 /* 20.192.47.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851F835 /* 40.81.248.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851F9FB /* 40.81.249.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56242A /* 13.86.36.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AE50 /* 13.89.174.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2843BC44 /* 40.67.188.68/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0DF0 /* 20.46.13.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECBB0 /* 40.78.203.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28593845 /* 40.89.56.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD9FBA /* 52.253.159.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2700 /* 13.75.39.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD4A67 /* 20.189.74.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34E50 /* 20.195.78.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28511C32 /* 40.81.28.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B9641B /* 20.185.100.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470DB0 /* 40.71.13.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E09238 /* 52.224.146.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424F268 /* 20.36.242.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1060 /* 20.44.16.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8E6C9 /* 52.232.230.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9350 /* 40.74.147.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDE1BA /* 52.253.225.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDE26E /* 52.253.226.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481B80 /* 20.72.27.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146309E0 /* 20.99.9.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423939 /* 40.66.57.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2842395B /* 40.66.57.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F83E0 /* 40.79.131.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB3D0 /* 40.79.179.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852EC18 /* 40.82.236.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743BA0 /* 51.116.59.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33746296 /* 51.116.98.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749BE0 /* 51.116.155.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93530 /* 20.217.53.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81EA0 /* 4.232.30.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B595A /* 20.43.89.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBB10 /* 40.79.187.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851DC26 /* 40.81.220.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D29060 /* 20.210.144.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A65D0 /* 40.74.101.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851B856 /* 40.81.184.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EB80 /* 20.192.235.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF0270 /* 20.207.2.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CB60 /* 20.193.203.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1B60 /* 20.44.27.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24BE0 /* 20.194.75.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28529AAE /* 40.82.154.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28529C95 /* 40.82.156.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850EA09 /* 40.80.234.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79410 /* 52.231.148.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113680 /* 20.17.54.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176730 /* 158.23.103.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143306F0 /* 20.51.6.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28512B2F /* 40.81.43.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26EB0 /* 52.162.110.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E5B0 /* 13.69.229.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E5BDD /* 52.142.91.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786350 /* 51.120.99.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378EBE0 /* 51.120.235.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DBC0 /* 51.120.219.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70D30 /* 20.215.13.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152500 /* 20.21.37.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668582CE /* 102.133.130.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859C10 /* 102.133.156.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668500C0 /* 102.133.0.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851C70 /* 102.133.28.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F060 /* 13.73.240.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D033C /* 20.45.3.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287703C3 /* 40.119.3.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC3F0 /* 40.78.195.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851486E /* 40.81.72.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176252F0 /* 23.98.82.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877CBFC /* 40.119.203.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5730 /* 68.221.87.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1C30 /* 51.12.28.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C63C0 /* 51.12.99.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1430 /* 51.12.20.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCBC0 /* 51.12.203.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3BA0 /* 51.107.59.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF780 /* 51.107.247.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B62C9 /* 51.107.98.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9BA0 /* 51.107.155.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351E80 /* 51.53.30.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335AE80 /* 51.53.174.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5B70 /* 20.203.91.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E9207 /* 20.46.146.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC310 /* 20.74.195.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577BE0 /* 13.87.123.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28519AFE /* 40.81.154.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680870 /* 51.104.8.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5739E0 /* 13.87.57.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517A27 /* 40.81.122.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD400 /* 51.140.212.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C440 /* 13.71.196.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F3778 /* 52.159.55.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456AF0 /* 13.69.106.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3391B0D7 /* 51.145.176.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28515870 /* 40.81.88.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285159F2 /* 40.81.89.242/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D393E0 /* 104.211.147.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4026E1 /* 13.64.38.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DB40 /* 13.86.219.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B5180 /* 20.59.81.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428DA0 /* 13.66.141.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285ADB17 /* 40.90.219.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B4A5F /* 40.91.74.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496ABC0 /* 20.150.171.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F570 /* 20.150.245.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8A85 /* 40.90.138.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8A88 /* 40.90.138.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C58B0 /* 104.44.88.176/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C58B8 /* 104.44.88.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5BA0 /* 104.44.91.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41346C1F /* 65.52.108.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41346C26 /* 65.52.108.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C586A /* 104.44.88.106/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5870 /* 104.44.88.112/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8D80 /* 40.90.141.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A91E0 /* 40.90.145.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5842 /* 104.44.88.66/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5927 /* 104.44.89.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C592A /* 104.44.89.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5A80 /* 104.44.90.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8DA7 /* 40.90.141.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A91C0 /* 40.90.145.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5AC2 /* 104.44.90.194/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C200 /* 20.37.194.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE200 /* 20.42.226.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE200 /* 191.235.226.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45200 /* 52.228.82.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC5C0 /* 20.204.197.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259E00 /* 20.37.158.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC440 /* 20.45.196.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6B00 /* 20.189.107.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A0500 /* 20.42.5.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14290600 /* 20.41.6.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270D00 /* 20.39.13.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BB00 /* 40.80.187.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A62900 /* 20.166.41.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770A00 /* 40.119.10.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C200 /* 20.41.194.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34400 /* 20.195.68.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B9480 /* 20.91.148.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E98200 /* 20.233.130.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681A00 /* 51.104.26.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968A00 /* 52.150.138.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1C00 /* 40.74.28.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852FC00 /* 40.82.252.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8600 /* 20.42.134.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D9B00 /* 20.125.155.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464EB0 /* 13.70.78.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C350 /* 20.37.195.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE640 /* 20.42.230.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AF70 /* 13.71.175.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E451E0 /* 52.228.81.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456EB0 /* 40.69.110.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285911C0 /* 40.89.17.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259D40 /* 20.37.157.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68D80 /* 52.182.141.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6C20 /* 20.189.108.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A130 /* 104.214.161.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A0620 /* 20.42.6.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A0680 /* 20.42.6.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4040 /* 20.42.64.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14290580 /* 20.41.5.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469750 /* 40.70.151.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270B40 /* 20.39.11.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B23E0 /* 40.75.35.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6F90 /* 13.78.111.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B41D0 /* 20.43.65.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6F80 /* 13.74.111.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265580 /* 20.38.85.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F480 /* 13.73.244.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287709F0 /* 40.119.9.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B82F0 /* 20.43.130.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEF00 /* 40.78.239.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336819D0 /* 51.104.25.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694D40 /* 51.105.77.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C760 /* 13.71.199.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968B90 /* 52.150.139.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454790 /* 13.69.71.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1E90 /* 40.74.30.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DDE0 /* 13.86.221.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852FD70 /* 40.82.253.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A83C0 /* 20.42.131.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFBE0 /* 40.78.251.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353000 /* 20.53.48.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353020 /* 20.53.48.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247D78 /* 20.36.125.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247DC0 /* 20.36.125.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352C58 /* 20.53.44.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352C60 /* 20.53.44.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1435721A /* 20.53.114.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14357247 /* 20.53.114.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14357254 /* 20.53.114.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14357276 /* 20.53.114.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C10359 /* 20.193.3.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C103F3 /* 20.193.3.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C10746 /* 20.193.7.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C10784 /* 20.193.7.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C13BAC /* 20.193.59.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C13BFD /* 20.193.59.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB278 /* 104.46.178.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB2A0 /* 104.46.178.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8BA8 /* 191.234.139.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8E00 /* 191.234.142.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90F10 /* 191.233.15.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90F20 /* 191.233.15.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C180 /* 20.48.193.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C1A0 /* 20.48.193.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6A60 /* 52.139.106.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6F70 /* 52.140.111.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6FC0 /* 52.140.111.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E130 /* 20.40.225.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E180 /* 20.40.225.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0A38 /* 20.46.10.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0A60 /* 20.46.10.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC510 /* 20.187.197.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC580 /* 20.187.197.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8120 /* 20.62.129.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8180 /* 20.62.129.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B94B06 /* 20.185.75.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B94BD1 /* 20.185.75.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3495EA98 /* 52.149.234.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3495EEBE /* 52.149.238.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3495EF22 /* 52.149.239.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AAA131 /* 52.170.161.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AAA21C /* 52.170.162.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BA6ADA /* 52.186.106.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BF10BF /* 52.191.16.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BF126A /* 52.191.18.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316770 /* 20.49.103.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143167C0 /* 20.49.103.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F74C4A /* 52.247.76.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F74CA7 /* 52.247.76.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F74CBB /* 52.247.76.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F74CC7 /* 52.247.76.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F74CD8 /* 52.247.76.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F74CF6 /* 52.247.76.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F74CFC /* 52.247.76.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F74D07 /* 52.247.77.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F74D16 /* 52.247.77.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F74D1A /* 52.247.77.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270286 /* 20.39.2.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142702D0 /* 20.39.2.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142702ED /* 20.39.2.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427030B /* 20.39.3.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427030E /* 20.39.3.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270311 /* 20.39.3.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270326 /* 20.39.3.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142712A9 /* 20.39.18.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143310B0 /* 20.51.16.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331100 /* 20.51.17.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDE092 /* 52.253.224.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDE09A /* 52.253.224.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481400 /* 20.72.20.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433468 /* 40.67.52.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284334C0 /* 40.67.52.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2F48 /* 20.43.47.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2F60 /* 20.43.47.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488B850 /* 52.136.184.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488B860 /* 52.136.184.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337433B0 /* 51.116.51.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743600 /* 51.116.54.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749478 /* 51.116.148.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337494C0 /* 51.116.148.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92BC0 /* 20.217.43.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81AE0 /* 4.232.26.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA160 /* 20.191.161.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA1C0 /* 20.191.161.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE0E0 /* 20.189.224.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE140 /* 20.189.225.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E7C0 /* 20.192.231.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E7E0 /* 20.192.231.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A6B0 /* 20.192.166.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A780 /* 20.192.167.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24888 /* 20.194.72.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C248A0 /* 20.194.72.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850ADD0 /* 40.80.173.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850ADE0 /* 40.80.173.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141133C0 /* 20.17.51.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176460 /* 158.23.100.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317608 /* 20.49.118.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317620 /* 20.49.118.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33688DE3 /* 51.104.141.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E7812 /* 52.142.120.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E7816 /* 52.142.120.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E7839 /* 52.142.120.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E784A /* 52.142.120.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E785A /* 52.142.120.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E7868 /* 52.142.120.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E789C /* 52.142.120.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349284C0 /* 52.146.132.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349284E0 /* 52.146.132.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCF3A /* 52.156.207.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCFC3 /* 52.156.207.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E828 /* 51.120.232.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E880 /* 51.120.232.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8880 /* 51.13.136.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D88A0 /* 51.13.136.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D703C0 /* 20.215.3.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152440 /* 20.21.36.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DD10 /* 102.133.221.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DD20 /* 102.133.221.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255000 /* 102.37.80.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255020 /* 102.37.80.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418248 /* 20.65.130.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418260 /* 20.65.130.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C61F3 /* 40.124.97.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C620E /* 40.124.98.14/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C6217 /* 40.124.98.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C6222 /* 40.124.98.34/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C6230 /* 40.124.98.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C6234 /* 40.124.98.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C6246 /* 40.124.98.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C6364 /* 40.124.99.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7450 /* 20.45.116.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7460 /* 20.45.116.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC70A8 /* 52.172.112.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7100 /* 52.172.113.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626CB8 /* 23.98.108.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626D00 /* 23.98.109.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877F182 /* 40.119.241.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877F194 /* 40.119.241.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877F19A /* 40.119.241.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877F249 /* 40.119.242.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877F24F /* 40.119.242.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877F2A8 /* 40.119.242.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877F2E8 /* 40.119.242.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877F314 /* 40.119.243.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877F377 /* 40.119.243.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877F3B2 /* 40.119.243.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5460 /* 68.221.84.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2B90 /* 51.12.43.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2BA0 /* 51.12.43.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC278 /* 51.12.194.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC3C0 /* 51.12.195.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF140 /* 51.107.241.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF160 /* 51.107.241.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF950 /* 51.107.249.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF960 /* 51.107.249.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351BC0 /* 51.53.27.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335ABC0 /* 51.53.171.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254670 /* 20.37.70.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142546C0 /* 20.37.70.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268E70 /* 20.38.142.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268EC0 /* 20.38.142.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431F8D1 /* 20.49.248.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431F938 /* 20.49.249.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431F94E /* 20.49.249.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431F965 /* 20.49.249.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431F96A /* 20.49.249.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431F99C /* 20.49.249.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431F9BD /* 20.49.249.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431F9D0 /* 20.49.249.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431F9EC /* 20.49.249.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431FA02 /* 20.49.250.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD0D0 /* 51.143.208.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD0E0 /* 51.143.208.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4200 /* 20.58.66.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4220 /* 20.58.66.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34941D1B /* 52.148.29.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969CF8 /* 52.150.156.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969D20 /* 52.150.157.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34999992 /* 52.153.153.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349999F6 /* 52.153.153.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349999FF /* 52.153.153.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34999A0D /* 52.153.154.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34999A28 /* 52.153.154.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34999A7B /* 52.153.154.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34999A9E /* 52.153.154.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34999AA1 /* 52.153.154.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A1B931 /* 52.161.185.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432D3C0 /* 20.50.211.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432D463 /* 20.50.212.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432D467 /* 20.50.212.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432D48C /* 20.50.212.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432D506 /* 20.50.213.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432D54C /* 20.50.213.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432D558 /* 20.50.213.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432D55D /* 20.50.213.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432D55E /* 20.50.213.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432D578 /* 20.50.213.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6290 /* 20.61.98.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6300 /* 20.61.99.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348834F8 /* 52.136.52.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883540 /* 52.136.53.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420210 /* 20.66.2.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420280 /* 20.66.2.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330860 /* 20.51.8.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143308C0 /* 20.51.8.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14334908 /* 20.51.73.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1433490B /* 20.51.73.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14334916 /* 20.51.73.22/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14334919 /* 20.51.73.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1433491A /* 20.51.73.26/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14334924 /* 20.51.73.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14334927 /* 20.51.73.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1433492C /* 20.51.73.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3495148E /* 52.149.20.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA279E /* 52.250.39.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA27EC /* 52.250.39.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA27F6 /* 52.250.39.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA27FA /* 52.250.39.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA4891 /* 52.250.72.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA4924 /* 52.250.73.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA49B2 /* 52.250.73.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA49CC /* 52.250.73.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA4A03 /* 52.250.74.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A6B0 /* 20.150.166.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A780 /* 20.150.167.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14253720 /* 20.37.55.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E100 /* 20.37.225.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247900 /* 20.36.121.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14276340 /* 20.39.99.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142763F0 /* 20.39.99.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C400 /* 20.37.196.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428AF30 /* 20.40.175.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428AF40 /* 20.40.175.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE400 /* 20.42.228.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB7E00 /* 191.235.126.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB7E90 /* 191.235.126.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE300 /* 191.235.227.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90980 /* 191.233.9.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B0950 /* 52.139.9.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B0B10 /* 52.139.11.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45300 /* 52.228.83.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591200 /* 40.89.18.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B5510 /* 52.139.85.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B5520 /* 52.139.85.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4738F0 /* 13.71.56.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D473900 /* 13.71.57.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6A00 /* 52.140.106.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D563820 /* 13.86.56.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5638A0 /* 13.86.56.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259D80 /* 20.37.157.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859F090 /* 40.89.240.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349A3930 /* 52.154.57.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349A3950 /* 52.154.57.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC300 /* 20.45.195.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6C80 /* 20.189.108.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD7350 /* 20.189.115.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD7B50 /* 20.189.123.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD7D20 /* 20.189.125.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A0700 /* 20.42.7.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3495F800 /* 52.149.248.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3495F840 /* 52.149.248.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3495F860 /* 52.149.248.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349A4410 /* 52.154.68.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349A4420 /* 52.154.68.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AAABC0 /* 52.170.171.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AAABF0 /* 52.170.171.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BA2410 /* 52.186.36.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316000 /* 20.49.96.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A715A0 /* 52.167.21.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A715D0 /* 52.167.21.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A715E0 /* 52.167.21.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B126A0 /* 52.177.38.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270B80 /* 20.39.11.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14271410 /* 20.39.20.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481180 /* 20.72.17.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433100 /* 40.67.49.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14289880 /* 20.40.152.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2A80 /* 20.43.42.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14275070 /* 20.39.80.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14275080 /* 20.39.80.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695900 /* 51.105.89.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33740320 /* 51.116.3.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744800 /* 51.116.72.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345A80 /* 20.52.90.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337464D0 /* 51.116.100.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337464E0 /* 51.116.100.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92980 /* 20.217.41.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81980 /* 4.232.25.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4280 /* 20.43.66.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142CA840 /* 20.44.168.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B9B070 /* 52.185.176.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6A60 /* 40.74.106.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503A00 /* 40.80.58.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E400 /* 20.192.228.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A400 /* 20.192.164.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294200 /* 20.41.66.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E770C0 /* 52.231.112.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E770E0 /* 52.231.112.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850AA00 /* 40.80.170.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850ECC0 /* 40.80.236.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113180 /* 20.17.49.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176180 /* 158.23.97.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142988F0 /* 20.41.136.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BE00 /* 40.80.190.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FCD5C0 /* 52.252.213.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265700 /* 20.38.87.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BF3B80 /* 20.191.59.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BF3BB0 /* 20.191.59.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F9BC0 /* 40.127.155.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FFB90 /* 40.127.251.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33780400 /* 51.120.4.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782900 /* 51.120.41.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33788340 /* 51.120.131.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E100 /* 51.120.225.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70180 /* 20.215.1.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152180 /* 20.21.33.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A200 /* 102.37.162.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66858710 /* 102.133.135.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66858720 /* 102.133.135.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668500F0 /* 102.133.0.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66850100 /* 102.133.1.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853900 /* 102.133.57.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F880 /* 13.73.248.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B9D4B0 /* 52.185.212.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B9D4C0 /* 52.185.212.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF5010 /* 52.255.80.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF52A0 /* 52.255.82.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7100 /* 20.45.113.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C300 /* 20.41.195.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C27B0 /* 20.44.39.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C27C0 /* 20.44.39.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8380 /* 20.43.131.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142BA590 /* 20.43.165.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142BAC80 /* 20.43.172.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142CCD70 /* 20.44.205.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5180 /* 68.221.81.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2F80 /* 51.12.47.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC700 /* 51.12.199.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B0480 /* 51.107.4.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3100 /* 51.107.49.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B6320 /* 51.107.99.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9100 /* 51.107.145.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351980 /* 51.53.25.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335A980 /* 51.53.169.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254100 /* 20.37.65.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142552E0 /* 20.37.82.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268900 /* 20.38.137.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E9870 /* 20.46.152.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E9880 /* 20.46.152.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695100 /* 51.105.81.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681B80 /* 51.104.27.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384A1A0 /* 51.132.161.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384AA40 /* 51.132.170.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC100 /* 51.143.193.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33898E20 /* 51.137.142.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A200 /* 51.137.162.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E9890 /* 52.142.152.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968C00 /* 52.150.140.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F3190 /* 52.159.49.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F33A0 /* 52.159.51.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F3540 /* 52.159.53.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F3570 /* 52.159.53.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A1BA80 /* 52.161.186.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A1BAD0 /* 52.161.186.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1F80 /* 40.74.31.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872A0B0 /* 40.114.160.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872A0C0 /* 40.114.160.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872A900 /* 40.114.169.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338910E0 /* 51.137.16.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28515DF0 /* 40.81.93.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28515F80 /* 40.81.95.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883100 /* 52.136.49.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D584910 /* 13.88.73.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D584920 /* 13.88.73.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5887D0 /* 13.88.135.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5BC100 /* 13.91.193.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852FE80 /* 40.82.254.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A08810 /* 52.160.136.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A08820 /* 52.160.136.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408000 /* 40.64.128.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349517A0 /* 52.149.23.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34953050 /* 52.149.48.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34953060 /* 52.149.48.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349C67C0 /* 52.156.103.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA1CB0 /* 52.250.28.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA20A0 /* 52.250.32.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A400 /* 20.150.164.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14242E8E /* 20.36.46.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246AC0 /* 20.36.106.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353300 /* 20.53.51.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14244A82 /* 20.36.74.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247220 /* 20.36.114.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353B00 /* 20.53.59.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464800 /* 13.70.72.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464F10 /* 13.70.79.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D467240 /* 13.70.114.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D48FE86 /* 13.72.254.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14355552 /* 20.53.85.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DB00 /* 20.70.219.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA200 /* 40.79.162.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA6C0 /* 40.79.166.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAA20 /* 40.79.170.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAE80 /* 40.79.174.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D26A1F /* 104.210.106.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEF408E /* 191.239.64.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEF4090 /* 191.239.64.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3220 /* 13.77.50.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C0200 /* 20.92.2.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28734F02 /* 40.115.79.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F537B /* 40.127.83.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFA02D /* 191.239.160.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFA0B2 /* 191.239.160.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C389C0 /* 20.195.137.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C39840 /* 20.195.152.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17616124 /* 23.97.97.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17616703 /* 23.97.103.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68293FD5 /* 104.41.63.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CB00 /* 191.233.203.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9240 /* 191.234.146.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA96C0 /* 191.234.150.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9A40 /* 191.234.154.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4B00 /* 191.238.75.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C396A0 /* 20.195.150.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C396C0 /* 20.195.150.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C39700 /* 20.195.151.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17617833 /* 23.97.120.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90940 /* 191.233.9.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDE000 /* 191.237.224.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AA10 /* 13.71.170.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47B180 /* 13.71.177.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269240 /* 20.38.146.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C880 /* 20.48.200.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14972040 /* 20.151.32.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855E23E /* 40.85.226.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855E520 /* 40.85.229.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B0476 /* 52.139.4.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E91E29 /* 52.233.30.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED2124 /* 52.237.33.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED2168 /* 52.237.33.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69A40 /* 52.246.154.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69F00 /* 52.246.159.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456A20 /* 40.69.106.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28457540 /* 40.69.117.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E18E /* 40.86.225.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E677 /* 40.86.230.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6D00 /* 52.139.109.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F214CC /* 52.242.20.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D471ED6 /* 13.71.30.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7E40 /* 20.43.126.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06240 /* 20.192.98.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06600 /* 20.192.102.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A800 /* 20.192.168.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503240 /* 40.80.50.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACDDF5 /* 52.172.221.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACDFD3 /* 52.172.223.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35100 /* 104.211.81.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D362B9 /* 104.211.98.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3663A /* 104.211.102.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D593A25 /* 13.89.58.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D593BE7 /* 13.89.59.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AA80 /* 13.89.170.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59B270 /* 13.89.178.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0D40 /* 20.44.13.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14629300 /* 20.98.147.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17638045 /* 23.99.128.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176381AA /* 23.99.129.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763C0FE /* 23.99.192.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763C438 /* 23.99.196.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763E4AE /* 23.99.228.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28564D0C /* 40.86.77.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28566664 /* 40.86.102.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287AAD6C /* 40.122.173.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287AD59B /* 40.122.213.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A52290 /* 52.165.34.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5B36D /* 52.165.179.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5EB77 /* 52.165.235.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5ED08 /* 52.165.237.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADC76A /* 52.173.199.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B02FC6 /* 52.176.47.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68A80 /* 52.182.138.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68F40 /* 52.182.143.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BA8C8 /* 104.43.168.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BC02B /* 104.43.192.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BC0DE /* 104.43.192.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D01000 /* 104.208.16.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D94CD /* 168.61.148.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF080 /* 20.45.240.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF100 /* 20.45.241.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0F40 /* 20.46.15.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECA20 /* 40.78.202.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B4E4 /* 52.180.180.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B64B /* 52.180.182.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8F80 /* 168.61.143.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2240 /* 13.75.34.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5E2F3D /* 13.94.47.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34D00 /* 20.195.77.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4B80 /* 20.205.75.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5380 /* 20.205.83.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761435A /* 23.97.67.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17637630 /* 23.99.118.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17650344 /* 23.101.3.68/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176508E5 /* 23.101.8.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766EA31 /* 23.102.234.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF23EB /* 52.175.35.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8D1B /* 168.63.141.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E997F /* 207.46.153.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E9A10 /* 207.46.154.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5A5307 /* 13.90.83.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5AD0B8 /* 13.90.208.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5C7C97 /* 13.92.124.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5CB4D0 /* 13.92.180.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5CBEB8 /* 13.92.190.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4440 /* 20.42.68.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4A00 /* 20.42.74.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589900 /* 20.88.153.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470A80 /* 40.71.10.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28476462 /* 40.71.100.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C1DC5 /* 40.76.29.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C280B /* 40.76.40.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CC277 /* 40.76.194.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE280 /* 40.78.226.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9B00 /* 40.79.155.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28755842 /* 40.117.88.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28795432 /* 40.121.84.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28798DE8 /* 40.121.141.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287994C1 /* 40.121.148.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A80E90 /* 52.168.14.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A842B4 /* 52.168.66.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87500 /* 52.168.117.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A89245 /* 52.168.146.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A8930B /* 52.168.147.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B306F0 /* 52.179.6.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B30823 /* 52.179.8.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFD5BC /* 52.191.213.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFE4F5 /* 52.191.228.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E224EB /* 52.226.36.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D8722 /* 104.45.135.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D9318 /* 104.45.147.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x897555EC /* 137.117.85.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x897559FD /* 137.117.89.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89755B98 /* 137.117.91.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x898766E2 /* 137.135.102.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E34EB /* 168.62.52.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC2049 /* 191.236.32.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC20BF /* 191.236.32.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC23E1 /* 191.236.35.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFED2F5D /* 191.237.47.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D441465 /* 13.68.20.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4415A9 /* 13.68.21.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D444DD7 /* 13.68.77.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14249040 /* 20.36.144.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E3E00 /* 20.62.62.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28464E9A /* 40.70.78.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469200 /* 40.70.146.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F2C3B /* 40.79.44.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F4A56 /* 40.79.74.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76A00 /* 52.167.106.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76DC0 /* 52.167.109.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A79100 /* 52.167.145.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B39D3B /* 52.179.157.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E6209 /* 104.46.98.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E6249 /* 104.46.98.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E63B0 /* 104.46.99.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D09000 /* 104.208.144.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D0ED93 /* 104.208.237.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D1BA46 /* 104.209.186.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D20E31 /* 104.210.14.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974302E /* 137.116.48.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89744D9D /* 137.116.77.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89745BB2 /* 137.116.91.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFED819E /* 191.237.129.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FD840 /* 20.47.216.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331680 /* 20.51.22.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331700 /* 20.51.23.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331780 /* 20.51.23.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9210 /* 40.74.146.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9700 /* 40.74.151.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2200 /* 40.75.34.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28597A00 /* 40.89.122.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5A00 /* 52.138.90.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B8E0 /* 52.225.184.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1BA82 /* 52.225.186.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5300 /* 68.220.83.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481BC0 /* 20.72.27.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14584100 /* 20.88.65.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143154C0 /* 20.49.84.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14630F00 /* 20.99.15.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433A80 /* 40.67.58.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28434840 /* 40.67.72.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8210 /* 40.79.130.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8A00 /* 40.79.138.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8E00 /* 40.79.142.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9200 /* 40.79.146.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9540 /* 40.79.149.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BC080 /* 51.11.192.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD600 /* 51.138.214.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F8837 /* 52.143.136.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB220 /* 40.79.178.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488883E /* 52.136.136.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BC00 /* 52.136.188.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743A80 /* 51.116.58.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744900 /* 51.116.73.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344080 /* 20.52.64.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345C00 /* 20.52.92.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749AC0 /* 51.116.154.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F240 /* 51.116.242.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F5C0 /* 51.116.245.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F6C0 /* 51.116.246.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FA40 /* 51.116.250.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FE00 /* 51.116.254.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92D00 /* 20.217.45.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93B80 /* 20.217.59.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94B40 /* 20.217.75.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95B40 /* 20.217.91.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81D00 /* 4.232.29.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86B40 /* 4.232.107.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87B40 /* 4.232.123.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C340 /* 4.232.195.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D479A0B /* 13.71.154.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6A40 /* 13.78.106.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590040 /* 20.89.0.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590A00 /* 20.89.10.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C280C0 /* 20.194.128.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17646454 /* 23.100.100.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBA20 /* 40.79.186.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBF80 /* 40.79.191.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC2C0 /* 40.79.194.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F324A1 /* 52.243.36.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B0169 /* 138.91.1.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B340 /* 20.18.179.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE700 /* 20.189.231.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6400 /* 40.74.100.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A8DBB /* 40.74.141.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B5C0 /* 40.80.181.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B1126 /* 138.91.17.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B1155 /* 138.91.17.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02140 /* 20.192.33.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03360 /* 20.192.51.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03380 /* 20.192.51.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03700 /* 20.192.55.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E1A0 /* 20.192.225.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EA20 /* 20.192.234.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A140 /* 20.192.161.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C320 /* 20.193.195.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C340 /* 20.193.195.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C380 /* 20.193.195.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CA20 /* 20.193.202.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CCC0 /* 20.193.204.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1A40 /* 20.44.26.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1F80 /* 20.44.31.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C244C0 /* 20.194.68.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C25000 /* 20.194.80.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C100 /* 20.200.193.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71210 /* 52.231.18.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71D69 /* 52.231.29.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E72055 /* 52.231.32.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7205E /* 52.231.32.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937300 /* 52.147.115.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79220 /* 52.231.146.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7C890 /* 52.231.200.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7C899 /* 52.231.200.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7CF9B /* 52.231.207.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113500 /* 20.17.53.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114380 /* 20.17.67.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170B40 /* 158.23.11.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176600 /* 158.23.102.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177B40 /* 158.23.123.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C340 /* 158.23.195.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330300 /* 20.51.3.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DAB40 /* 20.125.171.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCB40 /* 20.125.203.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760D6B5 /* 23.96.214.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760FDEC /* 23.96.253.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26A40 /* 52.162.106.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED8FB0 /* 52.237.143.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EEAFA /* 168.62.234.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EED03 /* 168.62.237.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EF9E2 /* 168.62.249.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC80FD /* 191.236.128.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC816B /* 191.236.129.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E300 /* 13.69.227.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45EF00 /* 13.69.239.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45FD87 /* 13.69.253.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45FF8C /* 13.69.255.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6B00 /* 13.74.107.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324840 /* 20.50.72.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14325040 /* 20.50.80.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452F500 /* 20.82.245.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176600BA /* 23.102.0.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176600EF /* 23.102.0.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17663571 /* 23.102.53.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28451DD8 /* 40.69.29.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2845D9F6 /* 40.69.217.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F84FE /* 40.127.132.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368A5A2 /* 51.104.165.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A9394 /* 52.138.147.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE200 /* 52.138.226.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A91208 /* 52.169.18.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2D3E3 /* 52.178.211.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829C90A /* 104.41.201.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D5CC5 /* 168.61.92.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE6383 /* 191.238.99.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640000 /* 20.100.0.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D00C0 /* 51.13.0.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786280 /* 51.120.98.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786A40 /* 51.120.106.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D240 /* 51.120.210.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8C00 /* 51.13.140.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DAA0 /* 51.120.218.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70500 /* 20.215.5.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71340 /* 20.215.19.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71B40 /* 20.215.27.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79B80 /* 20.215.155.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152600 /* 20.21.38.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152B80 /* 20.21.43.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154340 /* 20.21.67.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154B40 /* 20.21.75.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254840 /* 102.37.72.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A500 /* 102.37.165.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857A40 /* 102.133.122.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857F00 /* 102.133.127.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859A80 /* 102.133.154.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FA40 /* 102.133.250.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FE00 /* 102.133.254.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254100 /* 102.37.65.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255300 /* 102.37.83.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851A80 /* 102.133.26.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41D118 /* 13.65.209.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5491C4 /* 13.84.145.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7A40 /* 20.45.122.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7EC0 /* 20.45.126.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315D40 /* 20.49.93.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315D80 /* 20.49.93.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315F80 /* 20.49.95.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146120C0 /* 20.97.32.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766800F /* 23.102.128.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766A027 /* 23.102.160.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766A1E3 /* 23.102.161.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766A304 /* 23.102.163.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766A57F /* 23.102.165.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766A749 /* 23.102.167.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766B41A /* 23.102.180.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285496F1 /* 40.84.150.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854B943 /* 40.84.185.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C4140 /* 40.124.65.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C810E /* 104.44.129.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C813B /* 104.44.129.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D292FA /* 104.210.146.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D61280 /* 104.214.18.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D646E5 /* 104.214.70.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEEA0DD /* 191.238.160.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0280 /* 20.44.2.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7580 /* 20.45.117.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D477B4E /* 13.71.123.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC220 /* 40.78.194.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7700 /* 52.172.119.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E0BE /* 104.211.224.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E0EE /* 104.211.224.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430840 /* 13.67.8.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D431440 /* 13.67.20.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4CB3DF /* 13.76.179.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4CD8D9 /* 13.76.216.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35100 /* 20.195.81.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C36100 /* 20.195.97.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1762405C /* 23.98.64.92/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17624118 /* 23.98.65.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625240 /* 23.98.82.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176257C0 /* 23.98.87.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176270C0 /* 23.98.112.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEA00 /* 40.78.234.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB02E2 /* 52.187.2.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB3BBC /* 52.187.59.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB3D52 /* 52.187.61.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BBB99F /* 52.187.185.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682B12DB /* 104.43.18.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89749D1A /* 137.116.157.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89749E1E /* 137.116.158.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2EE30E /* 207.46.227.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5600 /* 68.221.86.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6340 /* 68.221.99.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD9340 /* 68.221.147.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1E00 /* 51.12.30.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C62A0 /* 51.12.98.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6640 /* 51.12.102.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE240 /* 51.12.226.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEA40 /* 51.12.234.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1500 /* 51.12.21.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCAA0 /* 51.12.202.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCE40 /* 51.12.206.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D01340 /* 20.208.19.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CB40 /* 51.103.203.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3A80 /* 51.107.58.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8100 /* 51.107.129.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF500 /* 51.107.245.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9A80 /* 51.107.154.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFD00 /* 51.107.253.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351D00 /* 51.53.29.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356B80 /* 51.53.107.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335AD00 /* 51.53.173.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BB80 /* 51.53.187.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254A00 /* 20.37.74.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5C00 /* 20.45.92.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269B80 /* 20.38.155.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784B40 /* 40.120.75.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784E00 /* 40.120.78.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28785400 /* 40.120.84.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FA20 /* 65.52.250.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577A20 /* 13.87.122.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8080 /* 20.90.128.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694240 /* 51.105.66.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694700 /* 51.105.71.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694A40 /* 51.105.74.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384C0C0 /* 51.132.192.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C5063 /* 51.140.80.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C575D /* 51.140.87.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C7D08 /* 51.140.125.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9220 /* 51.140.146.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C95C0 /* 51.140.149.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CBD34 /* 51.140.189.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CBD6C /* 51.140.189.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57228B /* 13.87.34.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5722F3 /* 13.87.34.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573820 /* 13.87.56.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4500 /* 20.58.69.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD220 /* 51.140.210.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D0E71 /* 51.141.14.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D0EA8 /* 51.141.14.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D32B3 /* 51.141.50.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C240 /* 13.71.194.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E95D1 /* 13.78.149.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E96E9 /* 13.78.150.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EBF2C /* 13.78.191.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450300 /* 20.69.3.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28437B00 /* 40.67.123.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A113A0 /* 52.161.19.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A11840 /* 52.161.24.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454000 /* 13.69.64.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456A00 /* 13.69.106.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456F80 /* 13.69.111.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432C940 /* 20.50.201.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144CF22D /* 20.76.242.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14565900 /* 20.86.89.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761E215 /* 23.97.226.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17640EB9 /* 23.100.14.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284423E6 /* 40.68.35.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844270F /* 40.68.39.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28445D91 /* 40.68.93.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844CD71 /* 40.68.205.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844D9F2 /* 40.68.217.242/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3390EE17 /* 51.144.238.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEF339 /* 52.174.243.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B21180 /* 52.178.17.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B24E3D /* 52.178.78.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E81BBD /* 52.232.27.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E9BE23 /* 52.233.190.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E9C0F7 /* 52.233.192.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBA00 /* 52.236.186.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41348110 /* 65.52.129.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828968B /* 104.40.150.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828B3B9 /* 104.40.179.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828D8AE /* 104.40.216.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E2038 /* 104.46.32.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E203A /* 104.46.32.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE949E4 /* 191.233.73.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C05300 /* 20.192.83.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39220 /* 104.211.146.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A079 /* 104.211.160.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A090 /* 104.211.160.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D40C375 /* 13.64.195.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D581475 /* 13.88.20.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D581A1C /* 13.88.26.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B3D0B /* 13.91.61.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DE28A /* 13.93.226.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420700 /* 20.66.7.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A340 /* 20.168.163.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17630769 /* 23.99.7.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176336EB /* 23.99.54.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17633CFD /* 23.99.60.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176350BA /* 23.99.80.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E6EC4 /* 40.78.110.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2853BFCA /* 40.83.191.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2853DE64 /* 40.83.222.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856B017 /* 40.86.176.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870B973 /* 40.112.185.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870D50B /* 40.112.213.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F200 /* 40.112.242.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68281AC7 /* 104.40.26.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68281D71 /* 104.40.29.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682844FA /* 104.40.68.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68284540 /* 104.40.69.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A615F /* 104.42.97.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5BC1B8 /* 138.91.193.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428A40 /* 13.66.138.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D429180 /* 13.66.145.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D429500 /* 13.66.149.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E4CC /* 13.66.228.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E62A /* 13.66.230.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8310 /* 20.42.131.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8340 /* 20.42.131.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330E60 /* 20.51.14.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330E80 /* 20.51.14.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453C000 /* 20.83.192.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28407140 /* 40.64.113.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF280 /* 40.78.242.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF700 /* 40.78.247.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFA40 /* 40.78.250.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFD80 /* 40.78.253.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287D67FB /* 40.125.103.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34973A79 /* 52.151.58.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B72E49 /* 52.183.46.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B75666 /* 52.183.86.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A0E0 /* 20.150.160.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AAA0 /* 20.150.170.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AF40 /* 20.150.175.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B240 /* 20.150.178.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B600 /* 20.150.182.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BA40 /* 20.150.186.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BD80 /* 20.150.189.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F620 /* 20.150.246.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F640 /* 20.150.246.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F680 /* 20.150.246.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246CA0 /* 20.36.108.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E340 /* 20.37.227.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E380 /* 20.37.227.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247540 /* 20.36.117.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247B20 /* 20.36.123.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247B80 /* 20.36.123.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464AC0 /* 13.70.74.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C6A0 /* 20.37.198.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C700 /* 20.37.199.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA320 /* 40.79.163.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAB80 /* 40.79.171.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34930A8D /* 52.147.10.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34930A95 /* 52.147.10.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D26907 /* 104.210.105.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D46B6CC /* 13.70.182.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D46B6D2 /* 13.70.182.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D497333 /* 13.73.115.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3580 /* 13.77.53.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE6A0 /* 20.42.230.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE700 /* 20.42.231.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682922B4 /* 104.41.34.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CD80 /* 191.233.205.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8880 /* 191.234.136.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8900 /* 191.234.137.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA93E0 /* 191.234.147.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9BE0 /* 191.234.155.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90BA0 /* 191.233.11.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90E00 /* 191.233.14.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93600 /* 191.233.54.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AF20 /* 13.71.175.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142693C0 /* 20.38.147.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E455E0 /* 52.228.85.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45600 /* 52.228.86.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED1B7B /* 52.237.27.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69BC0 /* 52.246.155.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456C80 /* 40.69.108.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285914C0 /* 40.89.20.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591500 /* 40.89.21.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F21F4D /* 52.242.31.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7940 /* 20.43.121.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C063E0 /* 20.192.99.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503380 /* 40.80.51.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6CA0 /* 52.140.108.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6D00 /* 52.140.109.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACCB90 /* 52.172.203.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D43EA16 /* 13.67.234.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AEA0 /* 13.89.174.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59E795 /* 13.89.231.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428CEC0 /* 20.40.206.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428CF00 /* 20.40.207.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C08E0 /* 20.44.8.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D176B /* 40.77.23.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B00404 /* 52.176.4.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B05C1B /* 52.176.92.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68BE0 /* 52.182.139.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BFC62 /* 104.43.252.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83DD0DA /* 168.61.208.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC620 /* 20.45.198.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC680 /* 20.45.198.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECC40 /* 40.78.204.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4A558 /* 52.180.165.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4A5F8 /* 52.180.165.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B17D /* 52.180.177.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B27A0 /* 13.75.39.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5E2848 /* 13.94.40.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC300 /* 20.187.195.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6DC0 /* 20.189.109.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4BC0 /* 20.205.75.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD53C0 /* 20.205.83.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17636D51 /* 23.99.109.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766EB1F /* 23.102.235.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E8A66 /* 207.46.138.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D525D8A /* 13.82.93.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316D80 /* 20.49.109.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316E00 /* 20.49.110.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316E80 /* 20.49.110.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470E80 /* 40.71.14.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C47B9 /* 40.76.71.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE580 /* 40.78.229.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9C80 /* 40.79.156.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28723592 /* 40.114.53.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A8B45F /* 52.168.180.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D31299 /* 104.211.18.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89755326 /* 137.117.83.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D36FF /* 168.61.54.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1160 /* 20.44.17.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316360 /* 20.49.99.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316380 /* 20.49.99.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469480 /* 40.70.148.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854359D /* 40.84.53.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76BC0 /* 52.167.107.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A79B59 /* 52.167.155.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B1C432 /* 52.177.196.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B39FE7 /* 52.179.159.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E73ED /* 104.46.115.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270E20 /* 20.39.14.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270E80 /* 20.39.14.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9500 /* 40.74.149.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2360 /* 40.75.35.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F7290 /* 40.79.114.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5C60 /* 52.138.92.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B0A7 /* 52.225.176.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B119 /* 52.225.177.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B3DC /* 52.225.179.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B41A /* 52.225.180.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B4D9 /* 52.225.180.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1BB95 /* 52.225.187.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5360 /* 68.220.83.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481CA0 /* 20.72.28.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315380 /* 20.49.83.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433300 /* 40.67.51.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433380 /* 40.67.51.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433C80 /* 40.67.60.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2CA0 /* 20.43.44.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2D00 /* 20.43.45.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC277E /* 20.188.39.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8480 /* 40.79.132.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8B20 /* 40.79.139.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9400 /* 40.79.148.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB460 /* 40.79.180.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695B80 /* 51.105.91.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695C00 /* 51.105.92.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348884EC /* 52.136.132.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337431E0 /* 51.116.49.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743200 /* 51.116.50.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743C60 /* 51.116.60.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337491C0 /* 51.116.145.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749200 /* 51.116.146.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749E00 /* 51.116.158.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F3A0 /* 51.116.243.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FB80 /* 51.116.251.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93C60 /* 20.217.60.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94BA0 /* 20.217.75.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95BA0 /* 20.217.91.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86C20 /* 4.232.108.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87BA0 /* 4.232.123.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C3A0 /* 4.232.195.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D479613 /* 13.71.150.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6DA0 /* 13.78.109.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B46A0 /* 20.43.70.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4700 /* 20.43.71.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC0033 /* 20.188.0.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC0391 /* 20.188.3.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBBE0 /* 40.79.187.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC3C0 /* 40.79.195.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B3A0 /* 20.18.179.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176469C0 /* 23.100.105.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A428B /* 40.74.66.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A7D2C /* 40.74.125.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503E40 /* 40.80.62.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503E80 /* 40.80.62.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B040 /* 40.80.176.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E620 /* 20.192.230.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E680 /* 20.192.230.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EE00 /* 20.192.238.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A5E0 /* 20.192.165.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A600 /* 20.192.166.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CE00 /* 20.193.206.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294460 /* 20.41.68.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294480 /* 20.41.68.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1D00 /* 20.44.29.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24360 /* 20.194.67.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71420 /* 52.231.20.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E720EC /* 52.231.32.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850AC40 /* 40.80.172.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850AC80 /* 40.80.172.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79480 /* 52.231.148.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7CD0F /* 52.231.205.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114460 /* 20.17.68.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170C20 /* 158.23.12.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177BA0 /* 158.23.123.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C3A0 /* 158.23.195.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317120 /* 20.49.113.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317180 /* 20.49.113.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DABA0 /* 20.125.171.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCBA0 /* 20.125.203.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760DE2D /* 23.96.222.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760DF59 /* 23.96.223.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26F40 /* 52.162.111.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37FD2B /* 157.55.253.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45C02B /* 13.69.192.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E640 /* 13.69.230.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6CC0 /* 13.74.108.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4FAC2B /* 13.79.172.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324180 /* 20.50.65.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324400 /* 20.50.68.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28578AAC /* 40.87.138.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28578F61 /* 40.87.143.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F8411 /* 40.127.132.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE500 /* 52.138.229.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A98ADE /* 52.169.138.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B29390 /* 52.178.147.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782B80 /* 51.120.43.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782C00 /* 51.120.44.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786460 /* 51.120.100.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786BE0 /* 51.120.107.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D3E0 /* 51.120.211.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E380 /* 51.120.227.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E400 /* 51.120.228.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D713A0 /* 20.215.19.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71BA0 /* 20.215.27.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79C60 /* 20.215.156.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14150C2B /* 20.21.12.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14150E48 /* 20.21.14.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152C60 /* 20.21.44.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141543A0 /* 20.21.67.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154BA0 /* 20.21.75.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14155240 /* 20.21.82.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14155280 /* 20.21.82.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857C20 /* 102.133.124.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859C40 /* 102.133.156.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DAC0 /* 102.133.218.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DB00 /* 102.133.219.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FB80 /* 102.133.251.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851CA0 /* 102.133.28.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853B00 /* 102.133.59.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853B80 /* 102.133.59.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F400 /* 13.73.244.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FC80 /* 13.73.252.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54BD06 /* 13.84.189.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D554471 /* 13.85.68.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7B80 /* 20.45.123.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315B80 /* 20.49.91.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770BE0 /* 40.119.11.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6227B /* 104.214.34.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0480 /* 20.44.4.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D72E0 /* 20.45.114.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7300 /* 20.45.115.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D475422 /* 13.71.84.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47717F /* 13.71.113.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C540 /* 20.41.197.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C580 /* 20.41.197.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC460 /* 40.78.196.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3D2C3 /* 104.211.210.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430AE0 /* 13.67.10.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4C539B /* 13.76.83.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4CD92E /* 13.76.217.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625600 /* 23.98.86.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176268C0 /* 23.98.104.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626A00 /* 23.98.106.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17651DE4 /* 23.101.29.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEE00 /* 40.78.238.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A3D427 /* 52.163.212.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A3D77A /* 52.163.215.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6420 /* 68.221.100.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD93A0 /* 68.221.147.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2A20 /* 51.12.42.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2A80 /* 51.12.42.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6440 /* 51.12.100.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE3E0 /* 51.12.227.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEBE0 /* 51.12.235.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC220 /* 51.12.194.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC280 /* 51.12.194.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCC40 /* 51.12.204.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D013A0 /* 20.208.19.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CBA0 /* 51.103.203.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3340 /* 51.107.51.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3380 /* 51.107.51.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3C60 /* 51.107.60.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9340 /* 51.107.147.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9380 /* 51.107.147.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9C60 /* 51.107.156.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356C60 /* 51.53.108.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BC60 /* 51.53.188.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254380 /* 20.37.67.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254400 /* 20.37.68.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254CA0 /* 20.37.76.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268B80 /* 20.38.139.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268C00 /* 20.38.140.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269BE0 /* 20.38.155.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784BA0 /* 40.120.75.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FCA0 /* 65.52.252.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577C60 /* 13.87.124.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681E00 /* 51.104.30.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681E80 /* 51.104.30.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694500 /* 51.105.69.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694BC0 /* 51.105.75.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C54FB /* 51.140.84.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C7E0A /* 51.140.126.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9520 /* 51.140.149.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34974E33 /* 52.151.78.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573A60 /* 13.87.58.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A4A0 /* 51.137.164.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A500 /* 51.137.165.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD4A0 /* 51.140.212.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CE2CF /* 51.140.226.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CF0EA /* 51.140.240.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D31FD /* 51.141.49.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C4E0 /* 13.71.196.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E819A /* 13.78.129.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E8245 /* 13.78.130.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969860 /* 52.150.152.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969980 /* 52.150.153.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A10FF7 /* 52.161.15.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454700 /* 13.69.71.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456D00 /* 13.69.109.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F0FFB /* 13.95.15.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176404FD /* 23.100.4.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17640882 /* 23.100.8.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28719932 /* 40.113.153.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871B0A0 /* 40.113.176.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871B0C0 /* 40.113.176.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871B100 /* 40.113.177.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28761BC0 /* 40.118.27.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3390761F /* 51.144.118.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBD80 /* 52.236.189.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268080 /* 20.38.128.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883380 /* 52.136.51.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883400 /* 52.136.52.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DD00 /* 13.86.221.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317860 /* 20.49.120.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317880 /* 20.49.120.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317900 /* 20.49.121.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A3A0 /* 20.168.163.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E1611 /* 40.78.22.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2853B12A /* 40.83.177.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870DDBC /* 40.112.221.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870DFEB /* 40.112.223.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FAE120 /* 52.250.225.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828312C /* 104.40.49.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428E60 /* 13.66.142.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284084A0 /* 40.64.132.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408600 /* 40.64.134.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF520 /* 40.78.245.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFBA0 /* 40.78.251.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497064D /* 52.151.6.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349EECFC /* 52.158.236.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AFDD6A /* 52.175.221.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A5C0 /* 20.150.165.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A600 /* 20.150.166.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496ACC0 /* 20.150.172.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B3E0 /* 20.150.179.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BBE0 /* 20.150.187.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14242827 /* 20.36.40.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424282A /* 20.36.40.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246A40 /* 20.36.106.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353028 /* 20.53.48.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353160 /* 20.53.49.96/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14244822 /* 20.36.72.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14244826 /* 20.36.72.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247210 /* 20.36.114.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353928 /* 20.53.57.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353930 /* 20.53.57.48/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464818 /* 13.70.72.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D48FAEF /* 13.72.250.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352F44 /* 20.53.47.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352FC8 /* 20.53.47.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA39C /* 40.79.163.156/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAD04 /* 40.79.173.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EDFDC2 /* 52.237.253.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D468A81 /* 13.70.138.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3240 /* 13.77.50.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF3F6B /* 52.255.63.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB3F4 /* 104.46.179.244/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB798 /* 104.46.183.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829008D /* 104.41.0.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682901EF /* 104.41.1.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CB18 /* 191.233.203.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA958C /* 191.234.149.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9D2C /* 191.234.157.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE484C /* 191.238.72.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4898 /* 191.238.72.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C39244 /* 20.195.146.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C392C0 /* 20.195.146.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17617819 /* 23.97.120.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761781D /* 23.97.120.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17617827 /* 23.97.120.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17617839 /* 23.97.120.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93200 /* 191.233.50.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AA28 /* 13.71.170.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142695C4 /* 20.38.149.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C568 /* 20.48.197.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C570 /* 20.48.197.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855E509 /* 40.85.229.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855E7E7 /* 40.85.231.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69D04 /* 52.246.157.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456A40 /* 40.69.106.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E05E /* 40.86.224.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E7B4 /* 40.86.231.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6BD0 /* 52.139.107.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6BD8 /* 52.139.107.216/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02C70 /* 20.192.44.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02C78 /* 20.192.44.120/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06640 /* 20.192.102.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503508 /* 40.80.53.8/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35118 /* 104.211.81.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3620B /* 104.211.98.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D363AE /* 104.211.99.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D593DF8 /* 13.89.61.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AAC8 /* 13.89.170.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E620 /* 20.40.230.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E630 /* 20.40.230.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0DE0 /* 20.44.13.224/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14629150 /* 20.98.145.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176384CF /* 23.99.132.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349AB02F /* 52.154.176.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349AB1B3 /* 52.154.177.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5159F /* 52.165.21.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5D02F /* 52.165.208.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD5AFA /* 52.173.90.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADC79A /* 52.173.199.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADD837 /* 52.173.216.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B0303A /* 52.176.48.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68FC0 /* 52.182.143.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BA122 /* 104.43.161.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BC01A /* 104.43.192.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D01A2F /* 104.208.26.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DD008 /* 20.45.208.8/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF1B0 /* 20.45.241.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0BF8 /* 20.46.11.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0CC0 /* 20.46.12.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B0FEA5 /* 52.176.254.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B079 /* 52.180.176.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B07A /* 52.180.176.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2290 /* 13.75.34.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34AA8 /* 20.195.74.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34AB0 /* 20.195.74.176/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4A4C /* 20.205.74.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD524C /* 20.205.82.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FDBC8 /* 168.63.219.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FDBCD /* 168.63.219.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A402C /* 20.42.64.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4908 /* 20.42.73.8/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E864C /* 20.62.134.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E86E0 /* 20.62.134.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589CA0 /* 20.88.156.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B9D9FB /* 20.185.217.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B9DA01 /* 20.185.218.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470AC8 /* 40.71.10.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CC44B /* 40.76.196.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CD425 /* 40.76.212.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855B9D0 /* 40.85.185.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285745B8 /* 40.87.69.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28759D7A /* 40.117.157.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A86D65 /* 52.168.109.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF98FC /* 52.255.152.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF98FF /* 52.255.152.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x897478F4 /* 137.116.120.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4418D8 /* 13.68.24.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D441DCB /* 13.68.29.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4468F0 /* 13.68.104.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C13AC /* 20.44.19.172/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E3C80 /* 20.62.60.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C0B0 /* 20.98.192.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BA2953 /* 20.186.41.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BA2FB6 /* 20.186.47.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17659F6B /* 23.101.159.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469248 /* 40.70.146.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2846BA5B /* 40.70.186.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2846CC06 /* 40.70.204.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2846CC20 /* 40.70.204.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28542F18 /* 40.84.47.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76FA0 /* 52.167.111.160/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A78FB3 /* 52.167.143.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A7E436 /* 52.167.228.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B14733 /* 52.177.71.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B89BB5 /* 52.184.155.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B89E25 /* 52.184.158.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A40C /* 52.184.164.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1DADA /* 52.225.218.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89742C94 /* 137.116.44.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331454 /* 20.51.20.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331540 /* 20.51.21.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9644 /* 40.74.150.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F7601 /* 40.79.118.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F7605 /* 40.79.118.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285979AC /* 40.89.121.172/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A4905 /* 52.138.73.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A4933 /* 52.138.73.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5CBC /* 52.138.92.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B382 /* 52.225.179.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B6E1 /* 52.225.182.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1BCE1 /* 52.225.188.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1BF24 /* 52.225.191.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC524C /* 68.220.82.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481594 /* 20.72.21.148/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144815C0 /* 20.72.21.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481A00 /* 20.72.26.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315200 /* 20.49.82.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284335B8 /* 40.67.53.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284335E0 /* 40.67.53.224/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433A00 /* 40.67.58.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B3826 /* 20.43.56.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B3842 /* 20.43.56.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC282C /* 20.188.40.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC282E /* 20.188.40.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8228 /* 40.79.130.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8D88 /* 40.79.141.136/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9454 /* 40.79.148.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28599159 /* 40.89.145.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859915D /* 40.89.145.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859B40A /* 40.89.180.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859B419 /* 40.89.180.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD284 /* 51.138.210.132/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD308 /* 51.138.211.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB240 /* 40.79.178.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488880F /* 52.136.136.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34888810 /* 52.136.136.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488B8EC /* 52.136.184.236/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488B9B0 /* 52.136.185.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374364C /* 51.116.54.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743758 /* 51.116.55.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743A00 /* 51.116.58.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345890 /* 20.52.88.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345898 /* 20.52.88.152/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749A40 /* 51.116.154.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F3DC /* 51.116.243.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FBBC /* 51.116.251.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92F20 /* 20.217.47.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93BF0 /* 20.217.59.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94A4C /* 20.217.74.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95A4C /* 20.217.90.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81ED8 /* 4.232.30.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86A7C /* 4.232.106.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87A4C /* 4.232.122.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C24C /* 4.232.194.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6A58 /* 13.78.106.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC0294 /* 20.188.2.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC029C /* 20.188.2.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA678 /* 20.191.166.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA780 /* 20.191.167.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17664872 /* 23.102.72.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17664B12 /* 23.102.75.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBFC0 /* 40.79.191.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC570 /* 40.79.197.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829A2DB /* 104.41.162.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829A2E4 /* 104.41.162.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EDB97 /* 104.46.219.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EDBB8 /* 104.46.219.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B24C /* 20.18.178.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE488 /* 20.189.228.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE4D0 /* 20.189.228.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6430 /* 40.74.100.48/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D71243 /* 104.215.18.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D71F43 /* 104.215.31.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C032D8 /* 20.192.50.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C032E0 /* 20.192.50.224/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EA00 /* 20.192.234.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C22C /* 20.193.194.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C250 /* 20.193.194.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CA00 /* 20.193.202.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1D70 /* 20.44.29.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24200 /* 20.194.66.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24A50 /* 20.194.74.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24A58 /* 20.194.74.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71228 /* 52.231.18.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E72041 /* 52.231.32.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E72042 /* 52.231.32.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937148 /* 52.147.113.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937150 /* 52.147.113.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79250 /* 52.231.146.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7C86B /* 52.231.200.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7C86C /* 52.231.200.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113A30 /* 20.17.58.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1411427C /* 20.17.66.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170A7C /* 158.23.10.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176770 /* 158.23.103.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177A4C /* 158.23.122.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C24C /* 158.23.194.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143177E8 /* 20.49.119.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143177F0 /* 20.49.119.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DAA4C /* 20.125.170.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCA4C /* 20.125.202.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760D2CF /* 23.96.210.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760FA30 /* 23.96.250.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26A90 /* 52.162.106.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A2FFC2 /* 52.162.255.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E6C1B /* 168.62.108.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EED1D /* 168.62.237.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E348 /* 13.69.227.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A0A27 /* 13.74.10.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A0A71 /* 13.74.10.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6F94 /* 13.74.111.148/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143250C0 /* 20.50.80.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17643918 /* 23.100.57.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17643A95 /* 23.100.58.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AA067 /* 52.138.160.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AA069 /* 52.138.160.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928944 /* 52.146.137.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349289A8 /* 52.146.137.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9E893 /* 52.169.232.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974E9BF /* 137.116.233.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786208 /* 51.120.98.8/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786EC0 /* 51.120.110.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D680 /* 51.120.214.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E984 /* 51.120.233.132/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378EA80 /* 51.120.234.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D88BC /* 51.13.136.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D89D8 /* 51.13.137.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DA00 /* 51.120.218.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70720 /* 20.215.7.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70D80 /* 20.215.13.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D7124C /* 20.215.18.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71A4C /* 20.215.26.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79BF0 /* 20.215.155.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152570 /* 20.21.37.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152BF4 /* 20.21.43.244/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1415424C /* 20.21.66.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154A4C /* 20.21.74.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14155000 /* 20.21.80.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A0B0 /* 102.37.160.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A0B8 /* 102.37.160.184/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857C8C /* 102.133.124.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859A00 /* 102.133.154.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FBDC /* 102.133.251.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255158 /* 102.37.81.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255180 /* 102.37.81.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851A00 /* 102.133.26.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54AE8F /* 13.84.174.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7BF0 /* 20.45.123.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7BFC /* 20.45.123.252/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315A00 /* 20.49.90.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315BE8 /* 20.49.91.232/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418630 /* 20.65.134.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418640 /* 20.65.134.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C4080 /* 40.124.64.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C882A /* 104.44.136.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D2C33D /* 104.210.195.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D612A8 /* 104.214.18.168/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D75E4C /* 104.215.94.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D76375 /* 104.215.99.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0200 /* 20.44.2.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7520 /* 20.45.117.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7528 /* 20.45.117.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC240 /* 40.78.194.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7404 /* 52.172.116.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7488 /* 52.172.116.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E0BA /* 104.211.224.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E186 /* 104.211.225.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430868 /* 13.67.8.104/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C343C0 /* 20.195.67.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C343C8 /* 20.195.67.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C3533C /* 20.195.83.60/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C354A8 /* 20.195.84.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CDC040 /* 20.205.192.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761322B /* 23.97.50.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17651567 /* 23.101.21.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176515C1 /* 23.101.21.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176517BE /* 23.101.23.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176517C0 /* 23.101.23.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841BCF4 /* 40.65.188.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841BDDB /* 40.65.189.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEF7C /* 40.78.239.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3494548E /* 52.148.84.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34945491 /* 52.148.84.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BBA10D /* 52.187.161.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BBA38B /* 52.187.163.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D78BA6 /* 104.215.139.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D78C84 /* 104.215.140.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FA71B /* 168.63.167.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5770 /* 68.221.87.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD627C /* 68.221.98.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD924C /* 68.221.146.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C19CC /* 51.12.25.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1C20 /* 51.12.28.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6200 /* 51.12.98.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE518 /* 51.12.229.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CED18 /* 51.12.237.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C11E8 /* 51.12.17.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C11F0 /* 51.12.17.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCA00 /* 51.12.202.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D0124C /* 20.208.18.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CA4C /* 51.103.202.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3A00 /* 51.107.58.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF174 /* 51.107.241.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF2F8 /* 51.107.242.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9A00 /* 51.107.154.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFA2C /* 51.107.250.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFB68 /* 51.107.251.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351F80 /* 51.53.31.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356580 /* 51.53.101.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356A7C /* 51.53.106.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B210 /* 51.53.178.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B2CC /* 51.53.178.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BA7C /* 51.53.186.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254AE4 /* 20.37.74.228/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5A48 /* 20.45.90.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5A50 /* 20.45.90.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269D80 /* 20.38.157.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784A00 /* 40.120.74.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28785268 /* 40.120.82.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28785270 /* 40.120.82.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FA00 /* 65.52.250.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577A50 /* 13.87.122.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368C081 /* 51.104.192.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368C08A /* 51.104.192.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33690443 /* 51.105.4.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369044B /* 51.105.4.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336947A0 /* 51.105.71.160/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694D38 /* 51.105.77.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9238 /* 51.140.146.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9D3C /* 51.140.157.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CB826 /* 51.140.184.38/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD4B8 /* 51.143.212.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD5C0 /* 51.143.213.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34974B56 /* 52.151.75.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D572233 /* 13.87.34.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D572700 /* 13.87.39.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573850 /* 13.87.56.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4330 /* 20.58.67.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4338 /* 20.58.67.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD250 /* 51.140.210.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D082A /* 51.141.8.42/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C270 /* 13.71.194.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450168 /* 20.69.1.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450170 /* 20.69.1.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A1192A /* 52.161.25.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A11F88 /* 52.161.31.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A11F8B /* 52.161.31.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454048 /* 13.69.64.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456FC0 /* 13.69.111.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D50F713 /* 13.80.247.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D50F72A /* 13.80.247.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D67E0 /* 20.61.103.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D67E8 /* 20.61.103.232/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761B200 /* 23.97.178.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285BC14E /* 40.91.193.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285BC7D5 /* 40.91.199.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DA289 /* 52.157.162.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DA293 /* 52.157.162.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBD50 /* 52.236.189.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E281F /* 104.46.40.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C05030 /* 20.192.80.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C05038 /* 20.192.80.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39240 /* 104.211.146.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A652 /* 104.211.166.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A739 /* 104.211.167.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1442021C /* 20.66.2.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420580 /* 20.66.5.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A24C /* 20.168.162.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F290 /* 40.112.242.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A065B /* 104.42.6.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A88B4 /* 104.42.136.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428A58 /* 13.66.138.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E2F9 /* 13.66.226.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E6F1 /* 13.66.230.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330CF8 /* 20.51.12.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330D40 /* 20.51.13.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453DD60 /* 20.83.221.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF5C8 /* 40.78.245.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFD44 /* 40.78.253.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F0615 /* 51.143.6.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497295C /* 52.151.41.92/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34972F04 /* 52.151.47.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349EECFD /* 52.158.236.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349EEF23 /* 52.158.239.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AFEC56 /* 52.175.236.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B71816 /* 52.183.24.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B75085 /* 52.183.80.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B75D5C /* 52.183.93.92/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B75EA6 /* 52.183.94.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F7C145 /* 52.247.193.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AA00 /* 20.150.170.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B51C /* 20.150.181.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B5A4 /* 20.150.181.164/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BD20 /* 20.150.189.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F424 /* 20.150.244.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F538 /* 20.150.245.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246A50 /* 20.36.106.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142472A0 /* 20.36.114.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464890 /* 13.70.72.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C060 /* 20.37.192.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446D860 /* 20.70.216.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BCDB9D /* 20.188.219.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BCDD0F /* 20.188.221.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA230 /* 40.79.162.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAAE0 /* 40.79.170.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D32E0 /* 13.77.50.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE330 /* 20.42.227.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CB90 /* 191.233.203.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9F0A5 /* 191.233.240.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9F2A7 /* 191.233.242.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9340 /* 191.234.147.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9B40 /* 191.234.155.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE060 /* 191.235.224.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4950 /* 191.238.73.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90830 /* 191.233.8.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AAC0 /* 13.71.170.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AD50 /* 13.71.173.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269380 /* 20.38.147.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C5F0 /* 20.48.197.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BBE6 /* 40.82.187.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B0321 /* 52.139.3.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45050 /* 52.228.80.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69B80 /* 52.246.155.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456AE0 /* 40.69.106.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285911D0 /* 40.89.17.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7870 /* 20.43.120.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02F70 /* 20.192.47.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06340 /* 20.192.99.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503340 /* 40.80.51.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6B60 /* 52.140.107.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35190 /* 104.211.81.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AB40 /* 13.89.171.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142598F0 /* 20.37.152.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E720 /* 20.40.231.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68B20 /* 52.182.139.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B94638 /* 52.185.70.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F2E0D7 /* 52.242.224.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D010A0 /* 104.208.16.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF040 /* 20.45.240.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0DC0 /* 20.46.13.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECA50 /* 40.78.202.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2410 /* 13.75.36.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6A50 /* 20.189.106.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34B30 /* 20.195.75.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34B60 /* 20.195.75.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28511BE4 /* 40.81.27.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8574C /* 52.184.87.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A00F0 /* 20.42.0.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E87D0 /* 20.62.135.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470B40 /* 40.71.11.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE320 /* 40.78.227.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9A40 /* 40.79.154.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FFD66D /* 52.255.214.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FFD97F /* 52.255.217.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142900F0 /* 20.41.0.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E3D80 /* 20.62.61.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C340 /* 20.98.195.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284692C0 /* 40.70.146.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469AA1 /* 40.70.154.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76AA0 /* 52.167.106.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B1A4DB /* 52.177.164.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D090A0 /* 104.208.144.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142701CD /* 20.39.1.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270B50 /* 20.39.11.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143315E0 /* 20.51.21.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9330 /* 40.74.147.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2330 /* 40.75.35.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5A90 /* 52.138.90.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDE3D0 /* 52.253.227.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481030 /* 20.72.16.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14630860 /* 20.99.8.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433B50 /* 40.67.59.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14288DAB /* 20.40.141.171/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2860 /* 20.43.40.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423D92 /* 40.66.61.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F82C0 /* 40.79.130.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8A80 /* 40.79.138.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9280 /* 40.79.146.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD510 /* 51.138.213.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB2E0 /* 40.79.178.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336958E0 /* 51.105.88.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337431B0 /* 51.116.49.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743B30 /* 51.116.59.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749B70 /* 51.116.155.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749C80 /* 51.116.156.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FAE0 /* 51.116.250.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92900 /* 20.217.41.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81900 /* 4.232.25.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6AD0 /* 13.78.106.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4060 /* 20.43.64.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C84A6 /* 20.44.132.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590900 /* 20.89.9.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBAA0 /* 40.79.186.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC240 /* 40.79.194.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B7307 /* 52.155.115.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE5B0 /* 20.189.229.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D29220 /* 20.210.146.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A64B0 /* 40.74.100.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285039B0 /* 40.80.57.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E190 /* 20.192.225.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EB10 /* 20.192.235.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A030 /* 20.192.160.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C2B0 /* 20.193.194.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294050 /* 20.41.64.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1AE0 /* 20.44.26.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C010 /* 20.200.192.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D193A /* 52.141.25.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D1A61 /* 52.141.26.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E712C0 /* 52.231.18.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A9A0 /* 40.80.169.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E792D0 /* 52.231.146.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113100 /* 20.17.49.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176100 /* 158.23.97.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330130 /* 20.51.1.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764E8D8 /* 23.100.232.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B850 /* 40.80.184.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BC60 /* 40.80.188.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26AB0 /* 52.162.106.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FCA01A /* 52.252.160.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E3C0 /* 13.69.227.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6BA0 /* 13.74.107.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265060 /* 20.38.80.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452F400 /* 20.82.244.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE2A0 /* 52.138.226.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B5AFE /* 52.155.90.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CC132 /* 52.156.193.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786340 /* 51.120.99.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786B40 /* 51.120.107.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D340 /* 51.120.211.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378EAE0 /* 51.120.234.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DB50 /* 51.120.219.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E350 /* 51.120.227.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70100 /* 20.215.1.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152100 /* 20.21.33.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14155340 /* 20.21.83.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A320 /* 102.37.163.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857AE0 /* 102.133.122.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859B20 /* 102.133.155.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FB40 /* 102.133.251.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851B20 /* 102.133.27.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853AE0 /* 102.133.58.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D425787 /* 13.66.87.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F010 /* 13.73.240.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F070 /* 13.73.240.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F0F0 /* 13.73.240.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F860 /* 13.73.248.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418700 /* 20.65.135.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770850 /* 40.119.8.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F93B5B /* 52.249.59.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D61320 /* 104.214.19.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0320 /* 20.44.3.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C500 /* 20.41.197.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC2E0 /* 40.78.194.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4308E0 /* 13.67.8.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8070 /* 20.43.128.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34540 /* 20.195.69.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176252C0 /* 23.98.82.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEA80 /* 40.78.234.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285AB8F9 /* 40.90.184.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E63888 /* 52.230.56.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5100 /* 68.221.81.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1D00 /* 51.12.29.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1D40 /* 51.12.29.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2F20 /* 51.12.47.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6350 /* 51.12.99.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE340 /* 51.12.227.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEB40 /* 51.12.235.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC6E0 /* 51.12.198.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCB50 /* 51.12.203.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3B30 /* 51.107.59.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF740 /* 51.107.247.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9320 /* 51.107.147.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9B30 /* 51.107.155.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351900 /* 51.53.25.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335A900 /* 51.53.169.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254350 /* 20.37.67.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254AD0 /* 20.37.74.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC320 /* 20.74.195.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FAC0 /* 65.52.250.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577A70 /* 13.87.122.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B1831 /* 51.11.24.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680840 /* 51.104.8.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681860 /* 51.104.24.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694310 /* 51.105.67.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694B80 /* 51.105.75.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C92D0 /* 51.140.146.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD620 /* 51.143.214.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34976FF9 /* 52.151.111.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573870 /* 13.87.56.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A1E0 /* 51.137.161.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD2D0 /* 51.140.210.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C2F0 /* 13.71.194.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144501F0 /* 20.69.1.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968850 /* 52.150.136.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD834F /* 52.253.131.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD83C6 /* 52.253.131.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4540C0 /* 13.69.64.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456AC0 /* 13.69.106.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145658A0 /* 20.86.88.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1860 /* 40.74.24.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33698187 /* 51.105.129.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3390B82F /* 51.144.184.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBAC0 /* 52.236.186.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268030 /* 20.38.128.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56C323 /* 13.86.195.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A081 /* 13.87.160.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420630 /* 20.66.6.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852F850 /* 40.82.248.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F2B0 /* 40.112.242.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428C50 /* 13.66.140.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8110 /* 20.42.129.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330E30 /* 20.51.14.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF2B0 /* 40.78.242.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFA70 /* 40.78.250.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B4D4C /* 40.91.77.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3494A32B /* 52.148.163.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A180 /* 20.150.161.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AB50 /* 20.150.171.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B340 /* 20.150.179.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BB40 /* 20.150.187.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F610 /* 20.150.246.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246B18 /* 20.36.107.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246BA0 /* 20.36.107.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E310 /* 20.37.227.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E364 /* 20.37.227.100/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E368 /* 20.37.227.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E370 /* 20.37.227.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14350080 /* 20.53.0.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353040 /* 20.53.48.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143537A0 /* 20.53.55.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142472C8 /* 20.36.114.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142472D0 /* 20.36.114.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247DE0 /* 20.36.125.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353CE0 /* 20.53.60.224/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353F60 /* 20.53.63.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C16020 /* 20.193.96.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4648E8 /* 13.70.72.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464968 /* 13.70.73.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464F58 /* 13.70.79.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464F60 /* 13.70.79.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D467C1B /* 13.70.124.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D467F3D /* 13.70.127.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4BC30F /* 13.75.195.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C044 /* 20.37.192.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C31A /* 20.37.195.26/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C670 /* 20.37.198.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C68C /* 20.37.198.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C6E8 /* 20.37.198.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C6F0 /* 20.37.198.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14287C00 /* 20.40.124.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B62EA /* 20.43.98.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B639E /* 20.43.99.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352E40 /* 20.53.46.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5C4D0 /* 20.213.196.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA228 /* 40.79.162.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA300 /* 40.79.163.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA540 /* 40.79.165.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA558 /* 40.79.165.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAA18 /* 40.79.170.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAAF0 /* 40.79.170.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAD08 /* 40.79.173.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EF6B7 /* 40.126.246.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CA852 /* 52.156.168.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3410 /* 13.77.52.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3530 /* 13.77.53.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D35DC /* 13.77.53.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A078 /* 20.40.160.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE670 /* 20.42.230.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE6D0 /* 20.42.230.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE6E0 /* 20.42.230.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE6E8 /* 20.42.230.232/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D3E038 /* 20.211.224.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765E19B /* 23.101.225.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765E878 /* 23.101.232.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765EFEE /* 23.101.239.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513AE1 /* 40.81.58.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F4B7D /* 40.127.75.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F54C5 /* 40.127.84.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EA240 /* 104.46.162.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB380 /* 104.46.179.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CEB740 /* 20.206.183.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68293DA9 /* 104.41.61.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE82153 /* 191.232.33.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8A14B /* 191.232.161.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8D5EF /* 191.232.213.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8D606 /* 191.232.214.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8EFB5 /* 191.232.239.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CBE8 /* 191.233.203.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CCF8 /* 191.233.204.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CFD8 /* 191.233.207.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA883C /* 191.234.136.60/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8850 /* 191.234.136.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8928 /* 191.234.137.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8930 /* 191.234.137.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9298 /* 191.234.146.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9528 /* 191.234.149.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9590 /* 191.234.149.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9A98 /* 191.234.154.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9D30 /* 191.234.157.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9DA0 /* 191.234.157.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE044 /* 191.235.224.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFFB5A /* 191.239.251.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE00C4 /* 20.206.0.196/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0528 /* 20.206.5.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90F80 /* 191.233.15.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93380 /* 191.233.51.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDE0B0 /* 191.237.224.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDE0C0 /* 191.237.224.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AC80 /* 13.71.172.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47ACF8 /* 13.71.172.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AF80 /* 13.71.175.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AFD8 /* 13.71.175.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47B120 /* 13.71.177.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47BB5B /* 13.71.187.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47BF2F /* 13.71.191.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58E62B /* 13.88.230.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58F7D0 /* 13.88.247.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58FF73 /* 13.88.255.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269298 /* 20.38.146.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269390 /* 20.38.147.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142695C8 /* 20.38.149.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C1E0 /* 20.48.193.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DC0140 /* 20.220.1.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855C9A8 /* 40.85.201.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855DAAF /* 40.85.218.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855F82B /* 40.85.248.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A1F70 /* 52.138.31.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A1F7F /* 52.138.31.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B0820 /* 52.139.8.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45044 /* 52.228.80.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E451A2 /* 52.228.81.162/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E455C0 /* 52.228.85.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45698 /* 52.228.86.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E456A0 /* 52.228.86.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E456B0 /* 52.228.86.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED2229 /* 52.237.34.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69A98 /* 52.246.154.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69B90 /* 52.246.155.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69D10 /* 52.246.157.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69EA0 /* 52.246.158.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AF02FE /* 20.175.2.254/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AF0580 /* 20.175.5.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AF0588 /* 20.175.5.136/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456B10 /* 40.69.107.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456C30 /* 40.69.108.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456F80 /* 40.69.111.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28457470 /* 40.69.116.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856C980 /* 40.86.201.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6AA0 /* 52.139.106.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F228D0 /* 52.242.40.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22F08 /* 52.242.47.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7800 /* 20.43.120.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B78F0 /* 20.43.120.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7BC8 /* 20.43.123.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02B60 /* 20.192.43.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02D64 /* 20.192.45.100/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06298 /* 20.192.98.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06520 /* 20.192.101.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06648 /* 20.192.102.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC290 /* 20.204.194.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503298 /* 40.80.50.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503350 /* 40.80.51.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503620 /* 40.80.54.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6844 /* 52.140.104.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6C60 /* 52.140.108.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6CD8 /* 52.140.108.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6CE0 /* 52.140.108.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6CF0 /* 52.140.108.240/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACD17D /* 52.172.209.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D34F54 /* 104.211.79.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35AEA /* 104.211.90.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35BFE /* 104.211.91.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35C36 /* 104.211.92.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35CDA /* 104.211.92.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35F3B /* 104.211.95.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D360E4 /* 104.211.96.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D36760 /* 104.211.103.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D592A7F /* 13.89.42.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AB70 /* 13.89.171.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AE80 /* 13.89.174.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59B300 /* 13.89.179.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259844 /* 20.37.152.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428C8AC /* 20.40.200.172/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428C8AE /* 20.40.200.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428CE80 /* 20.40.206.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428CEE8 /* 20.40.206.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428CF80 /* 20.40.207.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E400 /* 20.40.228.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0800 /* 20.44.8.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0BC0 /* 20.44.11.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0CC0 /* 20.44.12.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0DE8 /* 20.44.13.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1476C620 /* 20.118.198.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176382AC /* 23.99.130.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D11B7 /* 40.77.17.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D16EA /* 40.77.22.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D181B /* 40.77.24.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D655F /* 40.77.101.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D6D86 /* 40.77.109.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285659A5 /* 40.86.89.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A51BBB /* 52.165.27.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A52275 /* 52.165.34.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A52614 /* 52.165.38.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A596F2 /* 52.165.150.242/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD1919 /* 52.173.25.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD21FE /* 52.173.33.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD5AC7 /* 52.173.90.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADB918 /* 52.173.185.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADC4D1 /* 52.173.196.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADC4E6 /* 52.173.196.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADF98A /* 52.173.249.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B02ACE /* 52.176.42.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B02E1E /* 52.176.46.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B031CE /* 52.176.49.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B03787 /* 52.176.55.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B05CC4 /* 52.176.92.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68AD8 /* 52.182.138.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68B30 /* 52.182.139.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68FC8 /* 52.182.143.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E6E0ED /* 52.230.224.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F2E6D1 /* 52.242.230.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D0219B /* 104.208.33.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D02262 /* 104.208.34.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D023A9 /* 104.208.35.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83DB3B2 /* 168.61.179.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DD020 /* 20.45.208.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0AE0 /* 20.46.10.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0CC4 /* 20.46.12.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0DD8 /* 20.46.13.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0F30 /* 20.46.15.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECA90 /* 40.78.202.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECBF0 /* 40.78.203.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4A084 /* 52.180.160.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4A45B /* 52.180.164.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B2BB /* 52.180.178.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B6D1 /* 52.180.182.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8E00 /* 168.61.142.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2600 /* 13.75.38.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2678 /* 13.75.38.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B274C /* 13.75.39.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B75DD /* 13.75.117.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B77A9 /* 13.75.119.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5E270D /* 13.94.39.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC5C0 /* 20.187.197.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD510B /* 20.189.81.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD510E /* 20.189.81.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD5118 /* 20.189.81.24/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD511A /* 20.189.81.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD511C /* 20.189.81.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD511F /* 20.189.81.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD5120 /* 20.189.81.32/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD5122 /* 20.189.81.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6D90 /* 20.189.109.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6F00 /* 20.189.111.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6F10 /* 20.189.111.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6F18 /* 20.189.111.24/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34ABC /* 20.195.74.188/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD37E0 /* 20.205.55.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4DB8 /* 20.205.77.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4EA0 /* 20.205.78.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD53E8 /* 20.205.83.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5600 /* 20.205.86.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17614167 /* 23.97.65.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17645A07 /* 23.100.90.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17645EDD /* 23.100.94.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765008E /* 23.101.0.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17650904 /* 23.101.9.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17650D41 /* 23.101.13.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E5DADD /* 52.229.218.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E5E106 /* 52.229.225.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A480 /* 104.214.164.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A660 /* 104.214.166.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5264B0 /* 13.82.100.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D52B897 /* 13.82.184.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5A5DCE /* 13.90.93.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5AF88D /* 13.90.248.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5AF9E5 /* 13.90.249.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5AFB7B /* 13.90.251.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5C28C6 /* 13.92.40.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5C28DF /* 13.92.40.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5C8A10 /* 13.92.138.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5CB334 /* 13.92.179.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5CD3F9 /* 13.92.211.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5CE892 /* 13.92.232.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5CFEDA /* 13.92.254.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5CFF92 /* 13.92.255.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A0044 /* 20.42.0.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4148 /* 20.42.65.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4180 /* 20.42.65.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4910 /* 20.42.73.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4980 /* 20.42.73.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316D2E /* 20.49.109.46/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316D50 /* 20.49.109.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316F10 /* 20.49.111.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316F20 /* 20.49.111.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8400 /* 20.62.132.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17601C26 /* 23.96.28.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470CE0 /* 40.71.12.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470CF0 /* 40.71.12.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470CF8 /* 40.71.12.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470DA8 /* 40.71.13.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470E70 /* 40.71.14.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847B7E1 /* 40.71.183.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C1D37 /* 40.76.29.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C35E1 /* 40.76.53.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE2D8 /* 40.78.226.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE520 /* 40.78.229.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9A50 /* 40.79.154.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9C20 /* 40.79.156.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855B45A /* 40.85.180.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28574376 /* 40.87.67.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28703165 /* 40.112.49.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287550CF /* 40.117.80.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28755FA2 /* 40.117.95.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2875934A /* 40.117.147.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2875BEEF /* 40.117.190.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2875C5E0 /* 40.117.197.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28793902 /* 40.121.57.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28793DD0 /* 40.121.61.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28798783 /* 40.121.135.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2879A3E4 /* 40.121.163.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2879A596 /* 40.121.165.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2879D2A3 /* 40.121.210.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349624BB /* 52.150.36.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87040 /* 52.168.112.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87448 /* 52.168.116.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A888B1 /* 52.168.136.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B34920 /* 52.179.73.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BA7929 /* 52.186.121.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BA7E1F /* 52.186.126.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFC534 /* 52.191.197.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E07DE6 /* 52.224.125.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0A2DC /* 52.224.162.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0EB03 /* 52.224.235.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E297FA /* 52.226.151.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68299865 /* 104.41.152.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68299D3B /* 104.41.157.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D882A /* 104.45.136.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EA911 /* 168.62.169.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D441FED /* 13.68.31.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4465D3 /* 13.68.101.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D446A4D /* 13.68.106.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D446DD4 /* 13.68.109.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D446FF7 /* 13.68.111.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140F0880 /* 20.15.8.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142490A6 /* 20.36.144.166/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142931D0 /* 20.41.49.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1000 /* 20.44.16.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1100 /* 20.44.17.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C49C4 /* 20.44.73.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431632C /* 20.49.99.44/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316340 /* 20.49.99.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316618 /* 20.49.102.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316620 /* 20.49.102.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14410140 /* 20.65.1.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C000 /* 20.98.192.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284617CD /* 40.70.23.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469400 /* 40.70.148.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469408 /* 40.70.148.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284697D0 /* 40.70.151.208/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76A58 /* 52.167.106.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76B40 /* 52.167.107.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76D48 /* 52.167.109.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A791A0 /* 52.167.145.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A791B0 /* 52.167.145.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A7DDB8 /* 52.167.221.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B1DF3C /* 52.177.223.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3C0B2 /* 52.179.192.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B89ECD /* 52.184.158.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E7BA4 /* 104.46.123.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D09058 /* 104.208.144.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D0E780 /* 104.208.231.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D19C6A /* 104.209.156.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D1A1D9 /* 104.209.161.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D2092A /* 104.210.9.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x897452AF /* 137.116.82.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270E00 /* 20.39.14.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270F10 /* 20.39.15.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270F20 /* 20.39.15.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FD8C8 /* 20.47.216.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FD900 /* 20.47.217.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331140 /* 20.51.17.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DD8C10 /* 20.221.140.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9254 /* 40.74.146.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A93A0 /* 40.74.147.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9620 /* 40.74.150.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9648 /* 40.74.150.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2228 /* 40.75.34.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2340 /* 40.75.35.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285979B0 /* 40.89.121.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5A30 /* 52.138.90.48/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5A38 /* 52.138.90.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5540 /* 68.220.85.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5550 /* 68.220.85.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481430 /* 20.72.20.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481500 /* 20.72.21.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481520 /* 20.72.21.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481CC0 /* 20.72.28.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315320 /* 20.49.83.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315420 /* 20.49.84.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14630B30 /* 20.99.11.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14630B60 /* 20.99.11.96/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284334E0 /* 40.67.52.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433BC0 /* 40.67.59.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14131B80 /* 20.19.27.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428895B /* 20.40.137.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14288CD4 /* 20.40.140.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2844 /* 20.43.40.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B29B2 /* 20.43.41.178/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2C80 /* 20.43.44.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2CD8 /* 20.43.44.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2CE0 /* 20.43.44.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F02C0 /* 20.111.2.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC241C /* 20.188.36.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F82F0 /* 40.79.130.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8420 /* 40.79.132.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8A28 /* 40.79.138.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8A90 /* 40.79.138.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8D90 /* 40.79.141.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8F10 /* 40.79.143.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9228 /* 40.79.146.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9290 /* 40.79.146.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9660 /* 40.79.150.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9702 /* 40.79.151.2/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285999AB /* 40.89.153.171/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859BD3D /* 40.89.189.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BC028 /* 51.11.192.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB308 /* 40.79.179.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB310 /* 40.79.179.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285064C8 /* 40.80.100.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AA050 /* 51.138.160.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BF0C /* 52.136.191.12/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344840 /* 20.52.72.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344860 /* 20.52.72.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743620 /* 51.116.54.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743BB0 /* 51.116.59.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744B5C /* 51.116.75.92/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744DFE /* 51.116.77.254/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344018 /* 20.52.64.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344020 /* 20.52.64.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345F32 /* 20.52.95.50/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345FDC /* 20.52.95.220/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DAB8C0 /* 20.218.184.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DAB910 /* 20.218.185.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749500 /* 51.116.149.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749BF0 /* 51.116.155.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F298 /* 51.116.242.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F560 /* 51.116.245.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F660 /* 51.116.246.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FA98 /* 51.116.250.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FD20 /* 51.116.253.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FD88 /* 51.116.253.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D90900 /* 20.217.9.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92828 /* 20.217.40.40/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92CFA /* 20.217.44.250/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92F30 /* 20.217.47.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92F38 /* 20.217.47.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92FC0 /* 20.217.47.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93E80 /* 20.217.62.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93E90 /* 20.217.62.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94BC8 /* 20.217.75.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94DA0 /* 20.217.77.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95BC8 /* 20.217.91.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95DA0 /* 20.217.93.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8626E /* 4.232.98.110/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E862A4 /* 4.232.98.164/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86540 /* 4.232.101.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86560 /* 4.232.101.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86580 /* 4.232.101.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86F40 /* 4.232.111.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86F50 /* 4.232.111.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87BC8 /* 4.232.123.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87DA0 /* 4.232.125.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C3C8 /* 4.232.195.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C5A0 /* 4.232.197.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D491AD5 /* 13.73.26.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E0A3A /* 13.78.10.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E0DBD /* 13.78.13.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6CA0 /* 13.78.108.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6CA8 /* 13.78.108.168/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6D70 /* 13.78.109.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6FC0 /* 13.78.111.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14120240 /* 20.18.2.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4044 /* 20.43.64.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B419A /* 20.43.65.154/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4660 /* 20.43.70.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B46C0 /* 20.43.70.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B46C8 /* 20.43.70.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B46CC /* 20.43.70.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B46E0 /* 20.43.70.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590120 /* 20.89.1.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA540 /* 20.191.165.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17664284 /* 23.102.66.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17664D30 /* 23.102.77.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBB08 /* 40.79.187.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBEA0 /* 40.79.190.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBFC8 /* 40.79.191.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBFDA /* 40.79.191.218/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC268 /* 40.79.194.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC270 /* 40.79.194.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC578 /* 40.79.197.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B7661 /* 52.155.118.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349C288E /* 52.156.40.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B98465 /* 52.185.132.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B984AA /* 52.185.132.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B0962 /* 138.91.9.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B3C8 /* 20.18.179.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B5A0 /* 20.18.181.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC266 /* 20.189.194.102/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE180 /* 20.189.225.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D29072 /* 20.210.144.114/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D29074 /* 20.210.144.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D29078 /* 20.210.144.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D29160 /* 20.210.145.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D292C0 /* 20.210.146.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6340 /* 40.74.99.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6520 /* 40.74.101.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A65C8 /* 40.74.101.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B4A0 /* 40.80.180.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C020C0 /* 20.192.32.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02250 /* 20.192.34.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03000 /* 20.192.48.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C032C0 /* 20.192.50.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E7F4 /* 20.192.231.244/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EB90 /* 20.192.235.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF0568 /* 20.207.5.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A7A0 /* 20.192.167.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1A028 /* 20.193.160.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1A030 /* 20.193.160.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C218 /* 20.193.194.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C220 /* 20.193.194.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C228 /* 20.193.194.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CB70 /* 20.193.203.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CC40 /* 20.193.204.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284008B4 /* 40.64.8.180/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400E40 /* 40.64.14.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400E60 /* 40.64.14.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294044 /* 20.41.64.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294370 /* 20.41.67.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294504 /* 20.41.69.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294510 /* 20.41.69.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294530 /* 20.41.69.48/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429453E /* 20.41.69.62/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1A98 /* 20.44.26.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1AF8 /* 20.44.26.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1D78 /* 20.44.29.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24320 /* 20.194.67.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C243D8 /* 20.194.67.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C243E0 /* 20.194.67.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C248E0 /* 20.194.72.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D68330 /* 20.214.131.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D1695 /* 52.141.22.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D16EF /* 52.141.22.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E712F0 /* 52.231.18.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71778 /* 52.231.23.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71CCC /* 52.231.28.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E72110 /* 52.231.33.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E74048 /* 52.231.64.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E743D0 /* 52.231.67.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E74600 /* 52.231.70.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E76C2E /* 52.231.108.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E76F34 /* 52.231.111.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8A2A8 /* 20.200.162.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34936140 /* 52.147.97.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937060 /* 52.147.112.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937760 /* 52.147.119.96/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E793A0 /* 52.231.147.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79450 /* 52.231.148.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141119C0 /* 20.17.25.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113B24 /* 20.17.59.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113B28 /* 20.17.59.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113B30 /* 20.17.59.48/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113B40 /* 20.17.59.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114780 /* 20.17.71.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170F40 /* 158.23.15.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170F50 /* 158.23.15.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176D82 /* 158.23.109.130/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177020 /* 158.23.112.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177028 /* 158.23.112.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177040 /* 158.23.112.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177BC8 /* 158.23.123.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177DA0 /* 158.23.125.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C3C8 /* 158.23.195.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C5A0 /* 158.23.197.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317214 /* 20.49.114.20/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317220 /* 20.49.114.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317230 /* 20.49.114.48/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1433052C /* 20.51.5.44/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330700 /* 20.51.7.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DABC8 /* 20.125.171.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCBC8 /* 20.125.203.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F170E0 /* 20.241.112.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760FCA1 /* 23.96.252.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760FCD8 /* 23.96.252.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764E420 /* 23.100.228.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BFE0 /* 40.80.191.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A25732 /* 52.162.87.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26E40 /* 52.162.110.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26EA8 /* 52.162.110.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A2D64B /* 52.162.214.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED9D46 /* 52.237.157.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F0F490 /* 52.240.244.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F0F4EC /* 52.240.244.236/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F0F540 /* 52.240.245.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41340291 /* 65.52.2.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134054C /* 65.52.5.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E540 /* 13.69.229.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E5F0 /* 13.69.229.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E900 /* 13.69.233.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E960 /* 13.69.233.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45EF60 /* 13.69.239.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6B58 /* 13.74.107.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6C80 /* 13.74.108.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6F98 /* 13.74.111.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4AC958 /* 13.74.201.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265044 /* 20.38.80.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324150 /* 20.50.65.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324470 /* 20.50.68.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324478 /* 20.50.68.120/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432447C /* 20.50.68.124/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324480 /* 20.50.68.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324910 /* 20.50.73.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143250C8 /* 20.50.80.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A62840 /* 20.166.40.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17662CD3 /* 23.102.44.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17662DD8 /* 23.102.45.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2845519F /* 40.69.81.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2845C29E /* 40.69.194.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28578ADC /* 40.87.138.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28578CD7 /* 40.87.140.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28704AF1 /* 40.112.74.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287367A8 /* 40.115.103.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873681F /* 40.115.104.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F908D /* 40.127.144.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348ADE6E /* 52.138.222.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE258 /* 52.138.226.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE380 /* 52.138.227.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928520 /* 52.146.133.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BA2EE /* 52.155.162.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A478B7 /* 52.164.120.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A47D16 /* 52.164.125.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A4E105 /* 52.164.225.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A904EC /* 52.169.4.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A90FFE /* 52.169.15.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A91E6E /* 52.169.30.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A940F4 /* 52.169.64.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829E086 /* 104.41.224.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974E251 /* 137.116.226.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640700 /* 20.100.7.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640730 /* 20.100.7.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D0108 /* 51.13.1.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782844 /* 51.120.40.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786200 /* 51.120.98.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337862F8 /* 51.120.98.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786A98 /* 51.120.106.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786EC8 /* 51.120.110.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D298 /* 51.120.210.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D540 /* 51.120.213.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D688 /* 51.120.214.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E822 /* 51.120.232.34/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E8A0 /* 51.120.232.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378EA8C /* 51.120.234.140/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378EBF0 /* 51.120.235.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8020 /* 51.13.128.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8060 /* 51.13.128.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D88C0 /* 51.13.136.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8F30 /* 51.13.143.48/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378B290 /* 51.120.178.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DBD0 /* 51.120.219.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70028 /* 20.215.0.40/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D704FA /* 20.215.4.250/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70730 /* 20.215.7.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70738 /* 20.215.7.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D707C0 /* 20.215.7.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D713C8 /* 20.215.19.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D715A0 /* 20.215.21.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71BC8 /* 20.215.27.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71DA0 /* 20.215.29.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79E80 /* 20.215.158.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79E90 /* 20.215.158.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D7A8E0 /* 20.215.168.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152574 /* 20.21.37.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152578 /* 20.21.37.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141527E0 /* 20.21.39.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152E80 /* 20.21.46.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152E90 /* 20.21.46.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14153500 /* 20.21.53.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141536A4 /* 20.21.54.164/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141543C8 /* 20.21.67.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141545A0 /* 20.21.69.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154BC8 /* 20.21.75.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154DA0 /* 20.21.77.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141553A0 /* 20.21.83.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14155480 /* 20.21.84.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145756D0 /* 20.87.86.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662548F0 /* 102.37.72.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857A98 /* 102.133.122.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857BF0 /* 102.133.123.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857E40 /* 102.133.126.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857E98 /* 102.133.126.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859B30 /* 102.133.155.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685A149 /* 102.133.161.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685A2E9 /* 102.133.162.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685D844 /* 102.133.216.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685D86A /* 102.133.216.106/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DA90 /* 102.133.218.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DAF4 /* 102.133.218.244/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DB80 /* 102.133.219.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DDA0 /* 102.133.221.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FA98 /* 102.133.250.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FB50 /* 102.133.251.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FEE0 /* 102.133.254.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28751880 /* 40.117.24.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254080 /* 102.37.64.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255040 /* 102.37.80.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662556C4 /* 102.37.86.196/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851B30 /* 102.133.27.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851C40 /* 102.133.28.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4160AF /* 13.65.96.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41CE43 /* 13.65.206.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41D37D /* 13.65.211.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D422490 /* 13.66.36.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4225AC /* 13.66.37.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D423BE2 /* 13.66.59.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D423C97 /* 13.66.60.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F000 /* 13.73.240.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F220 /* 13.73.242.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F4C0 /* 13.73.244.192/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F806 /* 13.73.248.6/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FD68 /* 13.73.253.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FD70 /* 13.73.253.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FD78 /* 13.73.253.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54863B /* 13.84.134.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D549407 /* 13.84.148.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5495BA /* 13.84.149.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54ADB3 /* 13.84.173.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54BD5F /* 13.84.189.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54E10A /* 13.84.225.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D55468E /* 13.85.70.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7A98 /* 20.45.122.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7B50 /* 20.45.123.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7B74 /* 20.45.123.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7DE0 /* 20.45.125.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7F40 /* 20.45.127.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315B20 /* 20.49.91.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315DC0 /* 20.49.93.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315F30 /* 20.49.95.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418400 /* 20.65.132.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EC9600 /* 20.236.150.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17647A71 /* 23.100.122.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766B5C5 /* 23.102.181.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284AF962 /* 40.74.249.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28548505 /* 40.84.133.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854962F /* 40.84.150.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854BD6B /* 40.84.189.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854C074 /* 40.84.192.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770480 /* 40.119.4.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770848 /* 40.119.8.72/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770BA0 /* 40.119.11.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770BB4 /* 40.119.11.180/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C4090 /* 40.124.64.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C40C0 /* 40.124.64.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AB38B2 /* 52.171.56.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AB8AA7 /* 52.171.138.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B9D7AB /* 52.185.215.171/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C8C54 /* 104.44.140.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D646DB /* 104.214.70.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6686D /* 104.214.104.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D7517C /* 104.215.81.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D76069 /* 104.215.96.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D76416 /* 104.215.100.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D7674E /* 104.215.103.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D77376 /* 104.215.115.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37B106 /* 157.55.177.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0330 /* 20.44.3.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429D020 /* 20.41.208.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0996A /* 20.192.153.106/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09F50 /* 20.192.159.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC310 /* 40.78.195.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC430 /* 40.78.196.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7140 /* 52.172.113.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3D8A1 /* 104.211.216.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4309C0 /* 13.67.9.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430A40 /* 13.67.10.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430A5C /* 13.67.10.92/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430F00 /* 13.67.15.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430F70 /* 13.67.15.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D434DE9 /* 13.67.77.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4359BF /* 13.67.89.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4C55F3 /* 13.76.85.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4C5756 /* 13.76.87.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14180480 /* 20.24.4.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8044 /* 20.43.128.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B982D /* 20.43.152.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142CC0D9 /* 20.44.192.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C352A0 /* 20.195.82.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CDC048 /* 20.205.192.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625278 /* 23.98.82.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176252D0 /* 23.98.82.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176268A0 /* 23.98.104.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626A88 /* 23.98.106.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626A90 /* 23.98.106.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626A94 /* 23.98.106.148/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626A96 /* 23.98.106.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626A98 /* 23.98.106.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17627160 /* 23.98.113.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17627170 /* 23.98.113.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEA38 /* 40.78.234.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEA90 /* 40.78.234.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A35E83 /* 52.163.94.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A37A14 /* 52.163.122.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6FDD58AD /* 111.221.88.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x897492D7 /* 137.116.146.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974978B /* 137.116.151.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B2062 /* 138.91.32.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B255D /* 138.91.37.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FAEA9 /* 168.63.174.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FF2DD /* 168.63.242.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2EE065 /* 207.46.224.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2EECBF /* 207.46.236.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD2810 /* 68.221.40.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD2840 /* 68.221.40.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5C06 /* 68.221.92.6/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5D98 /* 68.221.93.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6740 /* 68.221.103.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6750 /* 68.221.103.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD93C8 /* 68.221.147.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD95A0 /* 68.221.149.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B9240 /* 20.91.146.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B9270 /* 20.91.146.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1938 /* 51.12.25.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C19C0 /* 51.12.25.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C19C8 /* 51.12.25.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2E00 /* 51.12.46.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C495E /* 51.12.73.94/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6348 /* 51.12.99.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C66C0 /* 51.12.102.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C66E0 /* 51.12.102.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C66F0 /* 51.12.102.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE298 /* 51.12.226.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE5E0 /* 51.12.229.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEA98 /* 51.12.234.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CED20 /* 51.12.237.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEDC0 /* 51.12.237.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B0CF0 /* 20.91.12.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B0D00 /* 20.91.13.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1114 /* 51.12.17.20/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1138 /* 51.12.17.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1180 /* 51.12.17.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C16CE /* 51.12.22.206/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CA840 /* 51.12.168.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CA850 /* 51.12.168.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC3E0 /* 51.12.195.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCBD0 /* 51.12.203.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCD60 /* 51.12.205.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D013C8 /* 20.208.19.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D015E0 /* 20.208.21.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D09410 /* 20.208.148.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CBC8 /* 51.103.203.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3044 /* 51.107.48.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B307E /* 51.107.48.126/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3310 /* 51.107.51.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3378 /* 51.107.51.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B34C0 /* 51.107.52.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B34C8 /* 51.107.52.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3BB0 /* 51.107.59.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B4B90 /* 51.107.75.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B4BCF /* 51.107.75.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8038 /* 51.107.128.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8060 /* 51.107.128.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8170 /* 51.107.129.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8180 /* 51.107.129.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF200 /* 51.107.242.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF3AC /* 51.107.243.172/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7CB50 /* 20.199.203.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9310 /* 51.107.147.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9374 /* 51.107.147.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9400 /* 51.107.148.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9410 /* 51.107.148.16/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9BB0 /* 51.107.155.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9C30 /* 51.107.156.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BC0A0 /* 51.107.192.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFA00 /* 51.107.250.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351CD6 /* 51.53.28.214/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351E9C /* 51.53.30.156/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351F90 /* 51.53.31.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351F98 /* 51.53.31.152/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351FE0 /* 51.53.31.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33352A00 /* 51.53.42.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356E80 /* 51.53.110.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356E90 /* 51.53.110.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335ACD6 /* 51.53.172.214/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335ACDC /* 51.53.172.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B2C0 /* 51.53.178.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B2C8 /* 51.53.178.200/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B2E0 /* 51.53.178.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BF80 /* 51.53.191.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254700 /* 20.37.71.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254AE8 /* 20.37.74.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254AF0 /* 20.37.74.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5F44 /* 20.45.95.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5928 /* 20.203.89.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5B98 /* 20.203.91.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5EC0 /* 20.203.94.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5ED0 /* 20.203.94.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287808C0 /* 40.120.8.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28780958 /* 40.120.9.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268F00 /* 20.38.143.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268F2C /* 20.38.143.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269820 /* 20.38.152.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269D88 /* 20.38.157.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC340 /* 20.74.195.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC348 /* 20.74.195.72/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC560 /* 20.74.197.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC6A0 /* 20.74.198.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287840C8 /* 40.120.64.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784100 /* 40.120.65.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784B20 /* 40.120.75.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784DA0 /* 40.120.77.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784E40 /* 40.120.78.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287857CC /* 40.120.87.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FAE8 /* 65.52.250.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FAF0 /* 65.52.250.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577AF8 /* 13.87.122.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577B80 /* 13.87.123.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141A1440 /* 20.26.20.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680868 /* 51.104.8.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680FFF /* 51.104.15.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681844 /* 51.104.24.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368198E /* 51.104.25.142/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681DC0 /* 51.104.29.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681EA0 /* 51.104.30.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681EA8 /* 51.104.30.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681EB0 /* 51.104.30.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368FC0D /* 51.104.252.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368FFF9 /* 51.104.255.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694298 /* 51.105.66.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336943A0 /* 51.105.67.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694680 /* 51.105.70.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336947A8 /* 51.105.71.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694A98 /* 51.105.74.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694B90 /* 51.105.75.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384C160 /* 51.132.193.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C0617 /* 51.140.6.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C36D0 /* 51.140.54.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C3CEB /* 51.140.60.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4590 /* 51.140.69.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9430 /* 51.140.148.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C97A0 /* 51.140.151.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C983D /* 51.140.152.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C98BA /* 51.140.152.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CA3CF /* 51.140.163.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CB434 /* 51.140.180.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CB528 /* 51.140.181.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FA516 /* 51.143.165.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD160 /* 51.143.209.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33912CF2 /* 51.145.44.242/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5738F8 /* 13.87.56.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573980 /* 13.87.57.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4260 /* 20.58.66.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B6160 /* 51.11.97.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A45C /* 51.137.164.92/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A470 /* 51.137.164.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A4C8 /* 51.137.164.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A4D0 /* 51.137.164.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD3A0 /* 51.140.211.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD440 /* 51.140.212.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D7180 /* 51.141.113.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338E8208 /* 51.142.130.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C3C0 /* 13.71.195.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C438 /* 13.71.196.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C774 /* 13.71.199.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E870F /* 13.78.135.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E910B /* 13.78.145.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EAC3A /* 13.78.172.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EBD70 /* 13.78.189.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EEC95 /* 13.78.236.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450D70 /* 20.69.13.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28437A00 /* 40.67.122.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28437A60 /* 40.67.122.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969830 /* 52.150.152.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3496985A /* 52.150.152.90/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969A18 /* 52.150.154.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969A20 /* 52.150.154.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A1084C /* 52.161.8.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A10B47 /* 52.161.11.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4533AF /* 13.69.51.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4533DA /* 13.69.51.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454110 /* 13.69.65.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454288 /* 13.69.66.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45433C /* 13.69.67.60/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45437E /* 13.69.67.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456A58 /* 13.69.106.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456AD0 /* 13.69.106.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456DE0 /* 13.69.109.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456FC8 /* 13.69.111.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5086FF /* 13.80.134.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143258E0 /* 20.50.88.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6340 /* 20.61.99.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176545DF /* 23.101.69.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28443DE5 /* 40.68.61.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28449A27 /* 40.68.154.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1844 /* 40.74.24.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A24D0 /* 40.74.36.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A3B28 /* 40.74.59.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871B080 /* 40.113.176.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871B210 /* 40.113.178.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871B220 /* 40.113.178.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871B230 /* 40.113.178.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872F18D /* 40.114.241.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28733678 /* 40.115.54.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369F817 /* 51.105.248.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33902926 /* 51.144.41.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x339051FC /* 51.144.81.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B211E0 /* 52.178.17.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B21A49 /* 52.178.26.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B225D1 /* 52.178.37.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E82321 /* 52.232.35.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E84185 /* 52.232.65.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E86AF2 /* 52.232.106.242/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBA58 /* 52.236.186.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBAD0 /* 52.236.186.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBD58 /* 52.236.189.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828DE24 /* 104.40.222.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89759021 /* 137.117.144.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268040 /* 20.38.128.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268440 /* 20.38.132.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C054A4 /* 20.192.84.164/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883560 /* 52.136.53.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39380 /* 104.211.147.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DAE0 /* 13.86.218.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DAF8 /* 13.86.218.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DF80 /* 13.86.223.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58B11C /* 13.88.177.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B2A1B /* 13.91.42.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B661B /* 13.91.102.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DD750 /* 13.93.215.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DE931 /* 13.93.233.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DEC49 /* 13.93.236.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317840 /* 20.49.120.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B510C /* 20.59.81.12/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144202C0 /* 20.66.2.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A3C8 /* 20.168.163.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDAC00 /* 20.189.172.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E1756 /* 40.78.23.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E393D /* 40.78.57.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E6BB1 /* 40.78.107.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876813A /* 40.118.129.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349FC840 /* 52.159.200.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FAE408 /* 52.250.228.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FAE410 /* 52.250.228.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FAE420 /* 52.250.228.32/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41347AD0 /* 65.52.122.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A281C /* 104.42.40.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DE645 /* 104.45.230.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DE848 /* 104.45.232.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428CA8 /* 13.66.140.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428D98 /* 13.66.141.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428FDA /* 13.66.143.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4291E8 /* 13.66.145.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D429390 /* 13.66.147.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42A07C /* 13.66.160.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42DCBB /* 13.66.220.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E71B /* 13.66.231.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D96A6 /* 13.77.150.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D9B27 /* 13.77.155.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4DAEB1 /* 13.77.174.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14099B90 /* 20.9.155.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8044 /* 20.42.128.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330900 /* 20.51.9.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453C0C0 /* 20.83.192.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE3C26 /* 20.190.60.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408480 /* 40.64.132.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284084F0 /* 40.64.132.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408680 /* 40.64.134.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408688 /* 40.64.134.136/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2840868A /* 40.64.134.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF2A8 /* 40.78.242.168/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF310 /* 40.78.243.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF740 /* 40.78.247.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF7A0 /* 40.78.247.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFA68 /* 40.78.250.104/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFAD0 /* 40.78.250.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFD48 /* 40.78.253.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFDC0 /* 40.78.253.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F58B7 /* 51.143.88.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34970BB0 /* 52.151.11.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AFC64A /* 52.175.198.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AFE769 /* 52.175.231.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AFEB94 /* 52.175.235.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B7296D /* 52.183.41.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B74270 /* 52.183.66.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B74970 /* 52.183.73.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B75F56 /* 52.183.95.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B77F9B /* 52.183.127.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFAAFD /* 52.191.170.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E51982 /* 52.229.25.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E5254B /* 52.229.37.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F7CA5A /* 52.247.202.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140E79C0 /* 20.14.121.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140E79F0 /* 20.14.121.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149682F0 /* 20.150.130.240/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A7B8 /* 20.150.167.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496ABD0 /* 20.150.171.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AD00 /* 20.150.173.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B298 /* 20.150.178.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B560 /* 20.150.181.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B5A8 /* 20.150.181.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B620 /* 20.150.182.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BA98 /* 20.150.186.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BD28 /* 20.150.189.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BE5C /* 20.150.190.92/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496E108 /* 20.150.225.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F140 /* 20.150.241.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F148 /* 20.150.241.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F160 /* 20.150.241.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E0C0 /* 20.37.224.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142478C0 /* 20.36.120.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C320 /* 20.37.195.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE300 /* 20.42.227.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE1A0 /* 191.235.225.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45190 /* 52.228.81.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591180 /* 40.89.17.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6980 /* 52.140.105.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259CE0 /* 20.37.156.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC0C0 /* 20.45.192.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6AD0 /* 20.189.106.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A04E0 /* 20.42.4.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142904C0 /* 20.41.4.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270B20 /* 20.39.11.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284330C0 /* 40.67.48.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B29A0 /* 20.43.41.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336958C0 /* 51.105.88.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743070 /* 51.116.48.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749070 /* 51.116.144.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B41A0 /* 20.43.65.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503980 /* 40.80.57.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E180 /* 20.192.225.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142941A0 /* 20.41.65.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A980 /* 40.80.169.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BC20 /* 40.80.188.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265470 /* 20.38.84.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337828C0 /* 51.120.40.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E0C0 /* 51.120.224.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685D870 /* 102.133.216.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853870 /* 102.133.56.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F820 /* 13.73.248.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D70C0 /* 20.45.112.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C180 /* 20.41.193.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8270 /* 20.43.130.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2920 /* 51.12.41.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC120 /* 51.12.193.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B30C0 /* 51.107.48.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B90C0 /* 51.107.144.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142540C0 /* 20.37.64.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142688C0 /* 20.38.136.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336950C0 /* 51.105.80.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336819A0 /* 51.104.25.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC0C0 /* 51.143.192.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A190 /* 51.137.161.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968B50 /* 52.150.139.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1E70 /* 40.74.30.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348830C0 /* 52.136.48.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852FD50 /* 40.82.253.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8300 /* 20.42.131.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A0C0 /* 20.150.160.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E180 /* 20.37.225.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E238 /* 20.37.226.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E598 /* 20.37.229.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247980 /* 20.36.121.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247A38 /* 20.36.122.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247D68 /* 20.36.125.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C3E0 /* 20.37.195.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C4FC /* 20.37.196.252/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C640 /* 20.37.198.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352C04 /* 20.53.44.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352C40 /* 20.53.44.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D01EC /* 13.77.1.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D37D0 /* 13.77.55.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE3C0 /* 20.42.227.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE4DC /* 20.42.228.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE4E0 /* 20.42.228.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE650 /* 20.42.230.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F34CF6 /* 52.243.76.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB260 /* 104.46.178.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8800 /* 191.234.136.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8830 /* 191.234.136.48/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8B90 /* 191.234.139.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE3A0 /* 191.235.227.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90A60 /* 191.233.10.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90F00 /* 191.233.15.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47BEE4 /* 13.71.190.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142695D0 /* 20.38.149.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C130 /* 20.48.193.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E4189F /* 52.228.24.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E453A0 /* 52.228.83.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45454 /* 52.228.84.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45460 /* 52.228.84.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285912A0 /* 40.89.18.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591484 /* 40.89.20.132/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285917E8 /* 40.89.23.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7BA0 /* 20.43.123.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C69E0 /* 52.140.105.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6B70 /* 52.140.107.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6C40 /* 52.140.108.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6F60 /* 52.140.111.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACB5E3 /* 52.172.181.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACBE47 /* 52.172.190.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACBF04 /* 52.172.191.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACD757 /* 52.172.215.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D359D5 /* 104.211.89.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D36574 /* 104.211.101.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428C800 /* 20.40.200.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428C8A0 /* 20.40.200.160/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E0E2 /* 20.40.224.226/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E120 /* 20.40.225.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1476C460 /* 20.118.196.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1476C480 /* 20.118.196.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC3A0 /* 20.45.195.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC5C0 /* 20.45.197.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC5E4 /* 20.45.197.228/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0A28 /* 20.46.10.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58DC6D /* 13.88.220.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58DE00 /* 13.88.222.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC500 /* 20.187.197.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6C60 /* 20.189.108.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6D58 /* 20.189.109.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6DA0 /* 20.189.109.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4482FB /* 13.68.130.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D44EB62 /* 13.68.235.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5A9C47 /* 13.90.156.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5C8A4C /* 13.92.138.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A06C0 /* 20.42.6.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316D24 /* 20.49.109.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316D2C /* 20.49.109.44/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316D30 /* 20.49.109.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E80F0 /* 20.62.128.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470F90 /* 40.71.15.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28724E84 /* 40.114.78.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287556F3 /* 40.117.86.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2875ED4E /* 40.117.237.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142905C0 /* 20.41.5.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1320 /* 20.44.19.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316310 /* 20.49.99.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316320 /* 20.49.99.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316760 /* 20.49.103.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270C20 /* 20.39.12.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270CE8 /* 20.39.12.232/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FE820 /* 20.47.232.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331078 /* 20.51.16.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481460 /* 20.72.20.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2843307C /* 40.67.48.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433180 /* 40.67.49.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284332C0 /* 40.67.50.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433458 /* 40.67.52.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2A40 /* 20.43.42.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2BA4 /* 20.43.43.164/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2EF8 /* 20.43.46.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336959A0 /* 51.105.89.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695A98 /* 51.105.90.152/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488B840 /* 52.136.184.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337430C0 /* 51.116.48.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374318C /* 51.116.49.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337433A0 /* 51.116.51.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337490C0 /* 51.116.144.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374918C /* 51.116.145.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749468 /* 51.116.148.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92F00 /* 20.217.47.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E864E0 /* 4.232.100.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E31BB /* 13.78.49.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4240 /* 20.43.66.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B435C /* 20.43.67.92/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4360 /* 20.43.67.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4640 /* 20.43.70.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA150 /* 20.191.161.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17664186 /* 23.102.65.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBD60 /* 40.79.189.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE0D0 /* 20.189.224.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503A80 /* 40.80.58.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503B1C /* 40.80.59.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503B20 /* 40.80.59.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E480 /* 20.192.228.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E600 /* 20.192.230.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E670 /* 20.192.230.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A1C0 /* 20.192.161.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A4B4 /* 20.192.164.180/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A6A0 /* 20.192.166.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142941E0 /* 20.41.65.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294358 /* 20.41.67.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24838 /* 20.194.72.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A9E0 /* 40.80.169.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850AC10 /* 40.80.172.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850ADC0 /* 40.80.173.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113A80 /* 20.17.58.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177000 /* 158.23.112.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143173B8 /* 20.49.115.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BEA0 /* 40.80.190.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BFC8 /* 40.80.191.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142655C0 /* 20.38.85.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142657E0 /* 20.38.87.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324148 /* 20.50.65.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928450 /* 52.146.132.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829D8E4 /* 104.41.216.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974F7B3 /* 137.116.247.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337829A0 /* 51.120.41.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782A3C /* 51.120.42.60/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E810 /* 51.120.232.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8808 /* 51.13.136.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E180 /* 51.120.225.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E238 /* 51.120.226.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70700 /* 20.215.7.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152740 /* 20.21.39.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685D9C0 /* 102.133.217.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DA38 /* 102.133.218.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DD00 /* 102.133.221.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668538A0 /* 102.133.56.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853AC0 /* 102.133.58.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853DB0 /* 102.133.61.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F920 /* 13.73.249.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F9A0 /* 13.73.249.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FFF8 /* 13.73.255.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7DF0 /* 20.45.125.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285484EF /* 40.84.132.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854E4FF /* 40.84.228.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287709EC /* 40.119.9.236/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6759B /* 104.214.117.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D778A0 /* 104.215.120.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D707C /* 20.45.112.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7180 /* 20.45.113.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7440 /* 20.45.116.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C1E0 /* 20.41.193.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C510 /* 20.41.197.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7098 /* 52.172.112.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D432323 /* 13.67.35.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D43234D /* 13.67.35.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8420 /* 20.43.132.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626850 /* 23.98.104.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626860 /* 23.98.104.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626880 /* 23.98.104.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626C2C /* 23.98.108.44/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626CA8 /* 23.98.108.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEF30 /* 40.78.239.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A3CF50 /* 52.163.207.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D79280 /* 104.215.146.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD2820 /* 68.221.40.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5D8C /* 68.221.93.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2914 /* 51.12.41.20/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C29A0 /* 51.12.41.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2B80 /* 51.12.43.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC114 /* 51.12.193.20/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC1A0 /* 51.12.193.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC268 /* 51.12.194.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B31A0 /* 51.107.49.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B323C /* 51.107.50.60/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B35F0 /* 51.107.53.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9180 /* 51.107.145.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9238 /* 51.107.146.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B95F8 /* 51.107.149.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351EE0 /* 51.53.30.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B220 /* 51.53.178.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254180 /* 20.37.65.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254238 /* 20.37.66.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254660 /* 20.37.70.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142689A0 /* 20.38.137.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268A3C /* 20.38.138.60/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268E58 /* 20.38.142.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369507C /* 51.105.80.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695180 /* 51.105.81.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681B60 /* 51.104.27.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681CDC /* 51.104.28.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681CE0 /* 51.104.28.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4519 /* 51.140.69.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C8A54 /* 51.140.138.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9540 /* 51.140.149.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD0C0 /* 51.143.208.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3391031B /* 51.145.3.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x339115C3 /* 51.145.21.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC07C /* 51.143.192.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC180 /* 51.143.193.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A2A0 /* 51.137.162.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A450 /* 51.137.164.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A798 /* 51.137.167.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4DCA02 /* 13.77.202.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E849B /* 13.78.132.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EE68E /* 13.78.230.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28437980 /* 40.67.121.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968BE0 /* 52.150.139.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968CD8 /* 52.150.140.216/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969810 /* 52.150.152.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349698E0 /* 52.150.152.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969CE8 /* 52.150.156.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A16556 /* 52.161.101.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4570B0 /* 13.69.112.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D457E5C /* 13.69.126.92/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14320120 /* 20.50.1.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143201A0 /* 20.50.1.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143201C8 /* 20.50.1.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143201D0 /* 20.50.1.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6280 /* 20.61.98.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28717539 /* 40.113.117.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872ECFB /* 40.114.236.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xD5C780E2 /* 213.199.128.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348831A0 /* 52.136.49.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883348 /* 52.136.51.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348834E8 /* 52.136.52.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317800 /* 20.49.120.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317824 /* 20.49.120.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317E9C /* 20.49.126.156/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317FE0 /* 20.49.127.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852FDE0 /* 40.82.253.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682AC35C /* 104.42.195.92/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408080 /* 40.64.128.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408458 /* 40.64.132.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408460 /* 40.64.132.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408758 /* 40.64.135.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284172EA /* 40.65.114.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF5D0 /* 40.78.245.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E9422E /* 52.233.66.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A1C0 /* 20.150.161.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A590 /* 20.150.165.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A6A0 /* 20.150.166.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246C30 /* 20.36.108.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246E00 /* 20.36.110.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E600 /* 20.37.230.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247390 /* 20.36.115.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247600 /* 20.36.118.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247E00 /* 20.36.126.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464A40 /* 13.70.74.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464C00 /* 13.70.76.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352A00 /* 20.53.42.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3520 /* 13.77.53.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3700 /* 13.77.55.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EA000 /* 104.46.160.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EA100 /* 104.46.161.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB400 /* 104.46.180.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CD10 /* 191.233.205.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8C00 /* 191.234.140.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9E00 /* 191.234.158.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C39000 /* 20.195.144.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93400 /* 191.233.52.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47ADC0 /* 13.71.173.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269600 /* 20.38.150.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C200 /* 20.48.194.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456C20 /* 40.69.108.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28457000 /* 40.69.112.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6800 /* 52.139.104.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B78E0 /* 20.43.120.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7C00 /* 20.43.124.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02800 /* 20.192.40.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59B400 /* 13.89.180.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428CEF0 /* 20.40.206.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E200 /* 20.40.226.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0810 /* 20.44.8.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0800 /* 20.46.8.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECBE0 /* 40.78.203.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECE00 /* 40.78.206.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8A00 /* 168.61.138.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8FC0 /* 168.61.143.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2710 /* 13.75.39.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC600 /* 20.187.198.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A200 /* 104.214.162.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A600 /* 104.214.166.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8200 /* 20.62.130.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470DE0 /* 40.71.13.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9E00 /* 40.79.158.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1070 /* 20.44.16.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1400 /* 20.44.20.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E3800 /* 20.62.56.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331200 /* 20.51.18.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2320 /* 40.75.35.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2600 /* 40.75.38.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5E00 /* 52.138.94.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481C40 /* 20.72.28.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14584040 /* 20.88.64.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433600 /* 40.67.54.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433BD0 /* 40.67.59.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433E00 /* 40.67.62.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F83F0 /* 40.79.131.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8600 /* 40.79.134.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD000 /* 51.138.208.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB400 /* 40.79.180.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB600 /* 40.79.182.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695E00 /* 51.105.94.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743400 /* 51.116.52.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743C20 /* 51.116.60.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743E00 /* 51.116.62.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749600 /* 51.116.150.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749C20 /* 51.116.156.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749F00 /* 51.116.159.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93200 /* 20.217.50.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93C00 /* 20.217.60.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86000 /* 4.232.96.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86BC0 /* 4.232.107.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6D60 /* 13.78.109.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA200 /* 20.191.162.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC600 /* 40.79.198.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE200 /* 20.189.226.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6600 /* 40.74.102.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B200 /* 40.80.178.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02080 /* 20.192.32.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03400 /* 20.192.52.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C400 /* 20.193.196.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CC00 /* 20.193.204.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294600 /* 20.41.70.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1E00 /* 20.44.30.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E713D0 /* 52.231.19.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71600 /* 52.231.22.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850AE00 /* 40.80.174.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34936000 /* 52.147.96.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79440 /* 52.231.148.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79600 /* 52.231.150.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113C00 /* 20.17.60.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114400 /* 20.17.68.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176A00 /* 158.23.106.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317400 /* 20.49.116.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26EE0 /* 52.162.110.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F0F200 /* 52.240.242.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E5E0 /* 13.69.229.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45EA00 /* 13.69.234.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324460 /* 20.50.68.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928600 /* 52.146.134.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782E00 /* 51.120.46.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786420 /* 51.120.100.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786600 /* 51.120.102.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DC20 /* 51.120.220.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DE00 /* 51.120.222.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E600 /* 51.120.230.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70A00 /* 20.215.10.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79C00 /* 20.215.156.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152C00 /* 20.21.44.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14153200 /* 20.21.50.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857BE0 /* 102.133.123.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859E00 /* 102.133.158.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DE00 /* 102.133.222.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851C10 /* 102.133.28.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851E00 /* 102.133.30.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853E00 /* 102.133.62.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F0E0 /* 13.73.240.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F600 /* 13.73.246.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418000 /* 20.65.128.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C03F0 /* 20.44.3.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0600 /* 20.44.6.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7600 /* 20.45.118.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC420 /* 40.78.196.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC600 /* 40.78.198.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7200 /* 52.172.114.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D431200 /* 13.67.18.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626E00 /* 23.98.110.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEAB0 /* 40.78.234.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5A00 /* 68.221.90.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2C00 /* 51.12.44.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6540 /* 51.12.101.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC400 /* 51.12.196.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCD00 /* 51.12.205.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3600 /* 51.107.54.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3C20 /* 51.107.60.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3E00 /* 51.107.62.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9600 /* 51.107.150.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9C20 /* 51.107.156.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9E00 /* 51.107.158.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356200 /* 51.53.98.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B400 /* 51.53.180.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BC00 /* 51.53.188.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254C30 /* 20.37.76.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254E00 /* 20.37.78.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5800 /* 20.45.88.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28785000 /* 40.120.80.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FC30 /* 65.52.252.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FE00 /* 65.52.254.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577BF0 /* 13.87.123.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577E00 /* 13.87.126.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B4000 /* 51.11.64.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336808E0 /* 51.104.8.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694E00 /* 51.105.78.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD200 /* 51.143.210.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5739F0 /* 13.87.57.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573C00 /* 13.87.60.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4000 /* 20.58.64.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B6000 /* 51.11.96.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD410 /* 51.140.212.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD600 /* 51.140.214.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C450 /* 13.71.196.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C600 /* 13.71.198.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28437800 /* 40.67.120.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969E00 /* 52.150.158.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454320 /* 13.69.67.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D457200 /* 13.69.114.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6400 /* 20.61.100.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871B200 /* 40.113.178.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268020 /* 20.38.128.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268200 /* 20.38.130.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883600 /* 52.136.54.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DB50 /* 13.86.219.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DE00 /* 13.86.222.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420000 /* 20.66.0.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDA800 /* 20.189.168.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428DB0 /* 13.66.141.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330A00 /* 20.51.10.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFE00 /* 40.78.254.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496E180 /* 20.150.225.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F200 /* 20.150.242.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246800 /* 20.36.104.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246900 /* 20.36.105.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246920 /* 20.36.105.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353060 /* 20.53.48.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353080 /* 20.53.48.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143530C0 /* 20.53.48.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5E100 /* 20.213.225.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247000 /* 20.36.112.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247100 /* 20.36.113.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247120 /* 20.36.113.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353820 /* 20.53.56.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353840 /* 20.53.56.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353880 /* 20.53.56.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A78100 /* 20.167.129.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D467000 /* 13.70.112.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D467020 /* 13.70.112.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D467100 /* 13.70.113.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D467280 /* 13.70.114.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B9557 /* 13.75.149.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352E80 /* 20.53.46.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5C700 /* 20.213.199.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA000 /* 40.79.160.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA020 /* 40.79.160.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA100 /* 40.79.161.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA780 /* 40.79.167.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA800 /* 40.79.168.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA820 /* 40.79.168.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA900 /* 40.79.169.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAF40 /* 40.79.175.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4694FB /* 13.70.148.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D496DFB /* 13.73.109.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3000 /* 13.77.48.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3100 /* 13.77.49.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3120 /* 13.77.49.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D3E500 /* 20.211.229.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F5245 /* 40.127.82.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F53A4 /* 40.127.83.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EA2C0 /* 104.46.162.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EA300 /* 104.46.163.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB3A0 /* 104.46.179.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB3C0 /* 104.46.179.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB700 /* 104.46.183.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFC06D /* 191.239.192.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E2D080 /* 20.226.208.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E2D180 /* 20.226.209.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68290B05 /* 104.41.11.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682938DA /* 104.41.56.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9C800 /* 191.233.200.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9C820 /* 191.233.200.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9C900 /* 191.233.201.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8EA0 /* 191.234.142.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8EC0 /* 191.234.142.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9000 /* 191.234.144.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9020 /* 191.234.144.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9100 /* 191.234.145.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9800 /* 191.234.152.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9900 /* 191.234.153.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9D88 /* 191.234.157.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C39200 /* 20.195.146.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0780 /* 20.206.7.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90FA0 /* 191.233.15.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90FC0 /* 191.233.15.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93000 /* 191.233.48.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93020 /* 191.233.48.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93100 /* 191.233.49.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47A800 /* 13.71.168.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47A820 /* 13.71.168.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47A900 /* 13.71.169.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47B1C0 /* 13.71.177.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47B200 /* 13.71.178.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269000 /* 20.38.144.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269020 /* 20.38.144.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269100 /* 20.38.145.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C420 /* 20.48.196.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C440 /* 20.48.196.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C480 /* 20.48.196.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DC0300 /* 20.220.3.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855E0F9 /* 40.85.224.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E423DD /* 52.228.35.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69800 /* 52.246.152.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69820 /* 52.246.152.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69900 /* 52.246.153.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AF0480 /* 20.175.4.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456800 /* 40.69.104.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456900 /* 40.69.105.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456920 /* 40.69.105.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28457480 /* 40.69.116.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E2A6 /* 40.86.226.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6AC0 /* 52.139.106.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6B00 /* 52.139.107.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F21E9A /* 52.242.30.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02BA0 /* 20.192.43.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02BC0 /* 20.192.43.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02C00 /* 20.192.44.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06000 /* 20.192.96.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06020 /* 20.192.96.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06100 /* 20.192.97.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC480 /* 20.204.196.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503000 /* 40.80.48.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503020 /* 40.80.48.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503100 /* 40.80.49.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACD9E9 /* 52.172.217.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35500 /* 104.211.85.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35600 /* 104.211.86.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35620 /* 104.211.86.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3609F /* 104.211.96.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D43D73E /* 13.67.215.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59246E /* 13.89.36.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59253D /* 13.89.37.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D593932 /* 13.89.57.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D593973 /* 13.89.57.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59A800 /* 13.89.168.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59A8C0 /* 13.89.168.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59A900 /* 13.89.169.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59B340 /* 13.89.179.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140F8180 /* 20.15.129.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140F8200 /* 20.15.130.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140F8380 /* 20.15.131.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E480 /* 20.40.228.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0E00 /* 20.44.14.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763A08B /* 23.99.160.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763A08C /* 23.99.160.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763CDB7 /* 23.99.205.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2845BD30 /* 40.69.189.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D1EC9 /* 40.77.30.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871C877 /* 40.113.200.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ADCD3B /* 52.173.205.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B03B0C /* 52.176.59.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B06462 /* 52.176.100.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68800 /* 52.182.136.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B688C0 /* 52.182.136.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68900 /* 52.182.137.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B69000 /* 52.182.144.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BCB48 /* 104.43.203.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D01500 /* 104.208.21.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D015C0 /* 104.208.21.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D01600 /* 104.208.22.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D01C10 /* 104.208.28.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D01C35 /* 104.208.28.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0B20 /* 20.46.11.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0B40 /* 20.46.11.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0B80 /* 20.46.11.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E40580 /* 20.228.5.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC880 /* 40.78.200.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC980 /* 40.78.201.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B09A /* 52.180.176.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B7E2 /* 52.180.183.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8800 /* 168.61.136.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8900 /* 168.61.137.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2000 /* 13.75.32.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B20C0 /* 13.75.32.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2100 /* 13.75.33.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B21C0 /* 13.75.33.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14068B00 /* 20.6.139.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34820 /* 20.195.72.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34840 /* 20.195.72.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34880 /* 20.195.72.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4840 /* 20.205.72.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4940 /* 20.205.73.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4DB0 /* 20.205.77.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4DC8 /* 20.205.77.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5040 /* 20.205.80.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5140 /* 20.205.81.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD53E0 /* 20.205.83.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF2196 /* 52.175.33.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA028B /* 191.234.2.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4140 /* 20.42.65.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4160 /* 20.42.65.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A44C0 /* 20.42.68.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4500 /* 20.42.69.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4580 /* 20.42.69.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4900 /* 20.42.73.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4920 /* 20.42.73.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4AC0 /* 20.42.74.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4B00 /* 20.42.75.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4B80 /* 20.42.75.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E84A0 /* 20.62.132.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E84C0 /* 20.62.132.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8500 /* 20.62.133.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760596D /* 23.96.89.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17606ABF /* 23.96.106.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470800 /* 40.71.8.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284708C0 /* 40.71.8.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470900 /* 40.71.9.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284709C0 /* 40.71.9.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28475371 /* 40.71.83.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C02AC /* 40.76.2.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C1A5A /* 40.76.26.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C2A2C /* 40.76.42.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C41DE /* 40.76.65.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C4209 /* 40.76.66.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CC1DD /* 40.76.193.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE000 /* 40.78.224.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE080 /* 40.78.224.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE100 /* 40.78.225.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE180 /* 40.78.225.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9800 /* 40.79.152.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F98C0 /* 40.79.152.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9900 /* 40.79.153.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F99C0 /* 40.79.153.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28722DC3 /* 40.114.45.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872518E /* 40.114.81.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28752A49 /* 40.117.42.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28752C47 /* 40.117.44.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28798FCC /* 40.121.143.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28799531 /* 40.121.149.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28799E1E /* 40.121.158.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87440 /* 52.168.116.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87560 /* 52.168.117.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87580 /* 52.168.117.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A875A0 /* 52.168.117.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A875C0 /* 52.168.117.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87600 /* 52.168.118.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A8A699 /* 52.168.166.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AA621D /* 52.170.98.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B34B00 /* 52.179.75.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B34E00 /* 52.179.78.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BA4F31 /* 52.186.79.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829984A /* 104.41.152.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D9E1E /* 104.45.158.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE062B /* 191.238.6.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE062C /* 191.238.6.44/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE062E /* 191.238.6.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140F0A00 /* 20.15.10.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140F0C00 /* 20.15.12.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14249080 /* 20.36.144.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14249100 /* 20.36.145.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E3A80 /* 20.62.58.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14410100 /* 20.65.1.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469000 /* 40.70.144.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284690C0 /* 40.70.144.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469100 /* 40.70.145.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F54B4 /* 40.79.84.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76800 /* 52.167.104.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A768C0 /* 52.167.104.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A768E0 /* 52.167.104.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76900 /* 52.167.105.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76F90 /* 52.167.111.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76FC0 /* 52.167.111.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A775E2 /* 52.167.117.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A79140 /* 52.167.145.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A79180 /* 52.167.145.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A791C0 /* 52.167.145.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B1B9B5 /* 52.177.185.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3B2B8 /* 52.179.178.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D09500 /* 104.208.149.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D09600 /* 104.208.150.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D096C0 /* 104.208.150.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D09740 /* 104.208.151.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFE06B /* 191.239.224.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFE06C /* 191.239.224.108/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFE06E /* 191.239.224.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143311A0 /* 20.51.17.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143311C0 /* 20.51.17.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331400 /* 20.51.20.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DD8C80 /* 20.221.140.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DD8F00 /* 20.221.143.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9000 /* 40.74.144.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9020 /* 40.74.144.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9100 /* 40.74.145.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9120 /* 40.74.145.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2000 /* 40.75.32.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2028 /* 40.75.32.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2100 /* 40.75.33.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2120 /* 40.75.33.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5800 /* 52.138.88.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5820 /* 52.138.88.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5900 /* 52.138.89.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5920 /* 52.138.89.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1BC2E /* 52.225.188.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1BC71 /* 52.225.188.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5040 /* 68.220.80.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5140 /* 68.220.81.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5258 /* 68.220.82.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89741FE0 /* 137.116.31.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144815E0 /* 20.72.21.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481840 /* 20.72.24.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481880 /* 20.72.24.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481980 /* 20.72.25.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14584000 /* 20.88.64.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315000 /* 20.49.80.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315020 /* 20.49.80.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315100 /* 20.49.81.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14631B80 /* 20.99.27.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433500 /* 40.67.53.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433800 /* 40.67.56.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433820 /* 40.67.56.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433900 /* 40.67.57.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14131E00 /* 20.19.30.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2FC0 /* 20.43.47.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8000 /* 40.79.128.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8020 /* 40.79.128.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8100 /* 40.79.129.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8800 /* 40.79.136.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8820 /* 40.79.136.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8900 /* 40.79.137.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9000 /* 40.79.144.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9020 /* 40.79.144.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9100 /* 40.79.145.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD200 /* 51.138.210.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB000 /* 40.79.176.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB028 /* 40.79.176.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB100 /* 40.79.177.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB120 /* 40.79.177.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28506680 /* 40.80.102.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488B900 /* 52.136.185.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1471F980 /* 20.113.249.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743660 /* 51.116.54.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743680 /* 51.116.54.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337436C0 /* 51.116.54.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743800 /* 51.116.56.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743900 /* 51.116.57.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743920 /* 51.116.57.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344100 /* 20.52.65.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DABC00 /* 20.218.188.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749520 /* 51.116.149.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749540 /* 51.116.149.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749580 /* 51.116.149.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749800 /* 51.116.152.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749820 /* 51.116.152.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749900 /* 51.116.153.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F000 /* 51.116.240.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F020 /* 51.116.240.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F100 /* 51.116.241.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F700 /* 51.116.247.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F800 /* 51.116.248.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F820 /* 51.116.248.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F900 /* 51.116.249.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FF00 /* 51.116.255.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93500 /* 20.217.53.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93540 /* 20.217.53.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93840 /* 20.217.56.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93940 /* 20.217.57.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93BF8 /* 20.217.59.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94840 /* 20.217.72.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94940 /* 20.217.73.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94BC0 /* 20.217.75.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95840 /* 20.217.88.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95940 /* 20.217.89.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95BC0 /* 20.217.91.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E865A0 /* 4.232.101.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E865C0 /* 4.232.101.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86840 /* 4.232.104.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86940 /* 4.232.105.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86BB8 /* 4.232.107.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87840 /* 4.232.120.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87940 /* 4.232.121.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87BC0 /* 4.232.123.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C040 /* 4.232.192.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C140 /* 4.232.193.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C3C0 /* 4.232.195.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E3DC4 /* 13.78.61.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6800 /* 13.78.104.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6820 /* 13.78.104.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6900 /* 13.78.105.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14120400 /* 20.18.4.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590140 /* 20.89.1.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590180 /* 20.89.1.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA5A0 /* 20.191.165.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA5C0 /* 20.191.165.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA600 /* 20.191.166.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C28140 /* 20.194.129.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DE8000 /* 20.222.128.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB800 /* 40.79.184.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB820 /* 40.79.184.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB900 /* 40.79.185.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBFE0 /* 40.79.191.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC000 /* 40.79.192.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC020 /* 40.79.192.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC100 /* 40.79.193.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDF02B /* 191.237.240.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04BE8280 /* 4.190.130.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B040 /* 20.18.176.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B140 /* 20.18.177.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B3C0 /* 20.18.179.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE1A0 /* 20.189.225.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE1C0 /* 20.189.225.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE400 /* 20.189.228.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6000 /* 40.74.96.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6020 /* 40.74.96.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6100 /* 40.74.97.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B540 /* 40.80.181.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6949C /* 104.214.148.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE440B /* 191.238.68.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03020 /* 20.192.48.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03040 /* 20.192.48.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03080 /* 20.192.48.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E800 /* 20.192.232.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E900 /* 20.192.233.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E920 /* 20.192.233.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF0700 /* 20.207.7.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A7E0 /* 20.192.167.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C000 /* 20.193.192.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C040 /* 20.193.192.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C800 /* 20.193.200.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C820 /* 20.193.200.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C900 /* 20.193.201.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F4C100 /* 20.244.193.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1800 /* 20.44.24.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1820 /* 20.44.24.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1900 /* 20.44.25.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24000 /* 20.194.64.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24020 /* 20.194.64.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24100 /* 20.194.65.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24940 /* 20.194.73.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24980 /* 20.194.73.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C250C0 /* 20.194.80.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D68580 /* 20.214.133.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71000 /* 52.231.16.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71020 /* 52.231.16.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71100 /* 52.231.17.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7202A /* 52.231.32.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349370A0 /* 52.147.112.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79000 /* 52.231.144.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79100 /* 52.231.145.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79760 /* 52.231.151.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7C856 /* 52.231.200.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113B80 /* 20.17.59.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113BC0 /* 20.17.59.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114040 /* 20.17.64.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114140 /* 20.17.65.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141143F8 /* 20.17.67.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170840 /* 158.23.8.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170940 /* 158.23.9.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170BB8 /* 158.23.11.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E1770A0 /* 158.23.112.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E1770C0 /* 158.23.112.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177840 /* 158.23.120.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177940 /* 158.23.121.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177BC0 /* 158.23.123.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C040 /* 158.23.192.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C140 /* 158.23.193.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C3C0 /* 158.23.195.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317720 /* 20.49.119.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317740 /* 20.49.119.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317780 /* 20.49.119.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DA840 /* 20.125.168.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DA940 /* 20.125.169.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DABC0 /* 20.125.171.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DC840 /* 20.125.200.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DC940 /* 20.125.201.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCBC0 /* 20.125.203.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F17300 /* 20.241.115.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760B2C7 /* 23.96.178.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760CAE5 /* 23.96.202.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760CCF9 /* 23.96.204.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760CDD7 /* 23.96.205.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760F925 /* 23.96.249.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760FAB2 /* 23.96.250.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1762374B /* 23.98.55.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26800 /* 52.162.104.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26900 /* 52.162.105.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A269C0 /* 52.162.105.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F0F500 /* 52.240.245.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134D56C /* 65.52.213.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134DA52 /* 65.52.218.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EE8BC /* 168.62.232.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EEB31 /* 168.62.235.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EEBF1 /* 168.62.235.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EEF1D /* 168.62.239.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E7370 /* 168.62.115.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E000 /* 13.69.224.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E0C0 /* 13.69.224.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E100 /* 13.69.225.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E1C0 /* 13.69.225.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E988 /* 13.69.233.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45EF80 /* 13.69.239.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6840 /* 13.74.104.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6880 /* 13.74.104.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6900 /* 13.74.105.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6980 /* 13.74.105.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A69C0 /* 13.74.105.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324920 /* 20.50.73.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324940 /* 20.50.73.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14325100 /* 20.50.81.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A62B00 /* 20.166.43.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A62D00 /* 20.166.45.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17661082 /* 23.102.16.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766349B /* 23.102.52.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28556632 /* 40.85.102.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28710E35 /* 40.113.14.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287110BE /* 40.113.16.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28715D5B /* 40.113.93.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F800A /* 40.127.128.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F89D1 /* 40.127.137.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F8DC2 /* 40.127.141.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FB18B /* 40.127.177.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE000 /* 52.138.224.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE080 /* 52.138.224.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE100 /* 52.138.225.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE180 /* 52.138.225.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE548 /* 52.138.229.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928580 /* 52.146.133.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134E1F5 /* 65.52.225.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134E2D1 /* 65.52.226.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829CA1E /* 104.41.202.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBC14B /* 191.235.193.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBC18B /* 191.235.193.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBC18C /* 191.235.193.140/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14641300 /* 20.100.19.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786000 /* 51.120.96.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786020 /* 51.120.96.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786100 /* 51.120.97.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786800 /* 51.120.104.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786820 /* 51.120.104.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786900 /* 51.120.105.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D000 /* 51.120.208.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D020 /* 51.120.208.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D100 /* 51.120.209.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E8C0 /* 51.120.232.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E900 /* 51.120.233.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D88E0 /* 51.13.136.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8900 /* 51.13.137.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8940 /* 51.13.137.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378B500 /* 51.120.181.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D800 /* 51.120.216.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D900 /* 51.120.217.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D920 /* 51.120.217.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70D00 /* 20.215.13.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70D40 /* 20.215.13.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71040 /* 20.215.16.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71140 /* 20.215.17.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D713C0 /* 20.215.19.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71840 /* 20.215.24.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71940 /* 20.215.25.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71BC0 /* 20.215.27.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79840 /* 20.215.152.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79940 /* 20.215.153.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79BF8 /* 20.215.155.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D7AB80 /* 20.215.171.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04AB1800 /* 4.171.24.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152840 /* 20.21.40.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152940 /* 20.21.41.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152BF8 /* 20.21.43.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14153520 /* 20.21.53.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14153540 /* 20.21.53.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154040 /* 20.21.64.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154140 /* 20.21.65.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141543C0 /* 20.21.67.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154840 /* 20.21.72.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154940 /* 20.21.73.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154BC0 /* 20.21.75.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14155780 /* 20.21.87.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A49880 /* 20.164.152.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A000 /* 102.37.160.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A040 /* 102.37.160.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857800 /* 102.133.120.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857820 /* 102.133.120.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857900 /* 102.133.121.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859800 /* 102.133.152.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859820 /* 102.133.152.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859900 /* 102.133.153.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DDE0 /* 102.133.221.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685F800 /* 102.133.248.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685F820 /* 102.133.248.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685F900 /* 102.133.249.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28751A80 /* 40.117.26.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255060 /* 102.37.80.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255080 /* 102.37.80.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662550C0 /* 102.37.80.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851800 /* 102.133.24.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851900 /* 102.133.25.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851920 /* 102.133.25.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04957080 /* 4.149.112.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04957100 /* 4.149.113.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41D1F3 /* 13.65.209.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D423C48 /* 13.66.60.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D423E7C /* 13.66.62.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D554130 /* 13.85.65.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7800 /* 20.45.120.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7900 /* 20.45.121.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7920 /* 20.45.121.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7F80 /* 20.45.127.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315800 /* 20.49.88.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315820 /* 20.49.88.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315900 /* 20.49.89.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315920 /* 20.49.89.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315FC0 /* 20.49.95.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144184A0 /* 20.65.132.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144184C0 /* 20.65.132.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418500 /* 20.65.133.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1762A24B /* 23.98.162.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1762A24C /* 23.98.162.76/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1762AA4B /* 23.98.170.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1762AA4C /* 23.98.170.76/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766B3BB /* 23.102.179.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854995F /* 40.84.153.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28549BD2 /* 40.84.155.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854BF01 /* 40.84.191.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854C110 /* 40.84.193.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854C3BD /* 40.84.195.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854E7CB /* 40.84.231.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C084C /* 40.124.8.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C4088 /* 40.124.64.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C40A0 /* 40.124.64.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C4180 /* 40.124.65.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C41C0 /* 40.124.65.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B7FA3E /* 52.183.250.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D61000 /* 104.214.16.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D610C0 /* 104.214.16.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D61100 /* 104.214.17.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D611C0 /* 104.214.17.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D64989 /* 104.214.73.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0000 /* 20.44.0.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0100 /* 20.44.1.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC000 /* 40.78.192.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC020 /* 40.78.192.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC100 /* 40.78.193.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC120 /* 40.78.193.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC182F /* 52.172.24.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC5380 /* 52.172.83.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7160 /* 52.172.113.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7180 /* 52.172.113.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC71C0 /* 52.172.113.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E092 /* 104.211.224.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04C2E080 /* 4.194.224.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D431000 /* 13.67.16.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4310C0 /* 13.67.16.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D431100 /* 13.67.17.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D431480 /* 13.67.20.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34120 /* 20.195.65.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34140 /* 20.195.65.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34180 /* 20.195.65.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CDC080 /* 20.205.192.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625000 /* 23.98.80.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176250C0 /* 23.98.80.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625100 /* 23.98.81.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17627180 /* 23.98.113.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764755F /* 23.100.117.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE800 /* 40.78.232.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE8C0 /* 40.78.232.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE900 /* 40.78.233.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682B0F00 /* 104.43.15.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD28A0 /* 68.221.40.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD28C0 /* 68.221.40.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6040 /* 68.221.96.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6140 /* 68.221.97.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD63B8 /* 68.221.99.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD9040 /* 68.221.144.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD9140 /* 68.221.145.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD93C0 /* 68.221.147.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B9580 /* 20.91.149.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2E20 /* 51.12.46.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2E40 /* 51.12.46.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2E80 /* 51.12.46.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6000 /* 51.12.96.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6020 /* 51.12.96.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6100 /* 51.12.97.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE000 /* 51.12.224.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE020 /* 51.12.224.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE100 /* 51.12.225.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE800 /* 51.12.232.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE820 /* 51.12.232.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE900 /* 51.12.233.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B0F00 /* 20.91.15.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC620 /* 51.12.198.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC640 /* 51.12.198.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC680 /* 51.12.198.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC800 /* 51.12.200.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC820 /* 51.12.200.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC900 /* 51.12.201.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC920 /* 51.12.201.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D01040 /* 20.208.16.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D01140 /* 20.208.17.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D013C0 /* 20.208.19.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D09680 /* 20.208.150.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367C840 /* 51.103.200.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367C940 /* 51.103.201.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CBC0 /* 51.103.203.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3800 /* 51.107.56.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3820 /* 51.107.56.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3900 /* 51.107.57.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF220 /* 51.107.242.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF240 /* 51.107.242.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF280 /* 51.107.242.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7CD00 /* 20.199.205.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9800 /* 51.107.152.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9900 /* 51.107.153.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9920 /* 51.107.153.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFA40 /* 51.107.250.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFA80 /* 51.107.250.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356520 /* 51.53.101.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356540 /* 51.53.101.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356840 /* 51.53.104.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356940 /* 51.53.105.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356BF8 /* 51.53.107.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B620 /* 51.53.182.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B640 /* 51.53.182.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B840 /* 51.53.184.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B940 /* 51.53.185.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BBF8 /* 51.53.187.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254740 /* 20.37.71.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254780 /* 20.37.71.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254840 /* 20.37.72.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254860 /* 20.37.72.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254940 /* 20.37.73.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254960 /* 20.37.73.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5F80 /* 20.203.95.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268F40 /* 20.38.143.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268F80 /* 20.38.143.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269818 /* 20.38.152.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269940 /* 20.38.153.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269A40 /* 20.38.154.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E98280 /* 20.233.130.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784800 /* 40.120.72.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784820 /* 40.120.72.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784900 /* 40.120.73.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134F800 /* 65.52.248.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134F820 /* 65.52.248.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134F900 /* 65.52.249.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577800 /* 13.87.120.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577900 /* 13.87.121.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141A1700 /* 20.26.23.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680A00 /* 51.104.10.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694000 /* 51.105.64.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694020 /* 51.105.64.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694100 /* 51.105.65.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336947C0 /* 51.105.71.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694800 /* 51.105.72.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694820 /* 51.105.72.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694900 /* 51.105.73.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384C140 /* 51.132.193.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384C180 /* 51.132.193.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4D09 /* 51.140.77.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C7396 /* 51.140.115.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9000 /* 51.140.144.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9020 /* 51.140.144.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9100 /* 51.140.145.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9780 /* 51.140.151.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CB80B /* 51.140.184.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD1E0 /* 51.143.209.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD400 /* 51.143.212.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD440 /* 51.143.212.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D571040 /* 13.87.16.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D571100 /* 13.87.17.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5721EA /* 13.87.33.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D572207 /* 13.87.34.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D572213 /* 13.87.34.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57268A /* 13.87.38.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4280 /* 20.58.66.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4438 /* 20.58.68.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B61C0 /* 51.11.97.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD040 /* 51.140.208.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD060 /* 51.140.208.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD100 /* 51.140.209.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD120 /* 51.140.209.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D080B /* 51.141.8.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C000 /* 13.71.192.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C100 /* 13.71.193.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C120 /* 13.71.193.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E9119 /* 13.78.145.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EF820 /* 13.78.248.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450020 /* 20.69.0.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450040 /* 20.69.0.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450080 /* 20.69.0.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34942A00 /* 52.148.42.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A1649E /* 52.161.100.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A18020 /* 52.161.128.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456800 /* 13.69.104.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4568C0 /* 13.69.104.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456900 /* 13.69.105.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4569C0 /* 13.69.105.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456F20 /* 13.69.111.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4570A8 /* 13.69.112.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D457440 /* 13.69.116.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D457460 /* 13.69.116.96/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D457480 /* 13.69.116.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D457500 /* 13.69.117.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14325E00 /* 20.50.94.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432C9E0 /* 20.50.201.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432CA00 /* 20.50.202.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432CA80 /* 20.50.202.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D63C0 /* 20.61.99.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6600 /* 20.61.102.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761A72E /* 23.97.167.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761A913 /* 23.97.169.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761DDB0 /* 23.97.221.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844259E /* 40.68.37.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A3C5B /* 40.74.60.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872F07D /* 40.114.240.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873253D /* 40.115.37.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873348D /* 40.115.52.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287335FF /* 40.115.53.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28760CD0 /* 40.118.12.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A64C00 /* 52.166.76.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B211C0 /* 52.178.17.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B21500 /* 52.178.21.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B21540 /* 52.178.21.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B21580 /* 52.178.21.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B21600 /* 52.178.22.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECB800 /* 52.236.184.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECB820 /* 52.236.184.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECB880 /* 52.236.184.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECB900 /* 52.236.185.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECB980 /* 52.236.185.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68289BF7 /* 104.40.155.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828A840 /* 104.40.168.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828A8C0 /* 104.40.168.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828A900 /* 104.40.169.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828A920 /* 104.40.169.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828A980 /* 104.40.169.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F0DD6 /* 168.63.13.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE97800 /* 191.233.120.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDE84B /* 191.237.232.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDE8EB /* 191.237.232.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDE8EC /* 191.237.232.236/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CFAAC0 /* 20.207.170.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CFAD00 /* 20.207.173.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348835A0 /* 52.136.53.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348835C0 /* 52.136.53.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39000 /* 104.211.144.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39020 /* 104.211.144.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39100 /* 104.211.145.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39120 /* 104.211.145.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A050 /* 104.211.160.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56D800 /* 13.86.216.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56D880 /* 13.86.216.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56D8C0 /* 13.86.216.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56D900 /* 13.86.217.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56D980 /* 13.86.217.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56D9C0 /* 13.86.217.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56D9E0 /* 13.86.217.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D581D46 /* 13.88.29.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B04DB /* 13.91.4.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DA5FB /* 13.93.165.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DED9E /* 13.93.237.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420340 /* 20.66.3.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420380 /* 20.66.3.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A040 /* 20.168.160.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A140 /* 20.168.161.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A3C0 /* 20.168.163.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDACE0 /* 20.189.172.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDAD40 /* 20.189.173.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176304F8 /* 23.99.4.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763224B /* 23.99.34.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176325EB /* 23.99.37.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176325EC /* 23.99.37.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E107A /* 40.78.16.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E17FC /* 40.78.23.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E396D /* 40.78.57.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28708BFA /* 40.112.139.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F000 /* 40.112.240.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F600 /* 40.112.246.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287681A7 /* 40.118.129.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876D1CE /* 40.118.209.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876F4E3 /* 40.118.244.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876F97B /* 40.118.249.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876FA13 /* 40.118.250.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349FCB00 /* 52.159.203.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68283167 /* 104.40.49.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682ABC82 /* 104.42.188.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682AC0BE /* 104.42.192.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682AEDC6 /* 104.42.237.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682AEECD /* 104.42.238.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC771F /* 191.236.119.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428800 /* 13.66.136.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4288C0 /* 13.66.136.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428900 /* 13.66.137.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D429580 /* 13.66.149.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E2CA /* 13.66.226.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AA880 /* 20.42.168.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330980 /* 20.51.9.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453C100 /* 20.83.193.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28407200 /* 40.64.114.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF000 /* 40.78.240.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF0C0 /* 40.78.240.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF100 /* 40.78.241.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF800 /* 40.78.248.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF8C0 /* 40.78.248.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF900 /* 40.78.249.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BF9040 /* 52.191.144.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BF9840 /* 52.191.152.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E5115D /* 52.229.17.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F6FBF8 /* 52.246.251.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140E7D80 /* 20.14.125.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A800 /* 20.150.168.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A820 /* 20.150.168.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A900 /* 20.150.169.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B000 /* 20.150.176.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B020 /* 20.150.176.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B100 /* 20.150.177.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B800 /* 20.150.184.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B820 /* 20.150.184.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B900 /* 20.150.185.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F180 /* 20.150.241.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14350040 /* 20.53.0.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142475E0 /* 20.36.117.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464F20 /* 13.70.79.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EA220 /* 104.46.162.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA95E0 /* 191.234.149.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDE080 /* 191.237.224.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47B100 /* 13.71.177.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456F40 /* 40.69.111.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7B80 /* 20.43.123.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0AE0 /* 20.44.10.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8C40 /* 168.61.140.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A440 /* 104.214.164.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87060 /* 52.168.112.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1380 /* 20.44.19.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28597980 /* 40.89.121.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315400 /* 20.49.84.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8BE0 /* 40.79.139.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AA020 /* 51.138.160.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344800 /* 20.52.72.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F5E0 /* 51.116.245.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBE80 /* 40.79.190.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B480 /* 40.80.180.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EEE0 /* 20.192.238.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CEA0 /* 20.193.206.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71740 /* 52.231.23.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79700 /* 52.231.151.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F0F160 /* 52.240.241.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E940 /* 13.69.233.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786D40 /* 51.120.109.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DCE0 /* 51.120.220.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857CA0 /* 102.133.124.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254040 /* 102.37.64.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7E40 /* 20.45.126.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764D020 /* 23.100.208.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0B880 /* 20.192.184.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEF40 /* 40.78.239.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6580 /* 51.12.101.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCD40 /* 51.12.205.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8040 /* 51.107.128.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BC060 /* 51.107.192.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28780880 /* 40.120.8.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784080 /* 40.120.64.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577CC0 /* 13.87.124.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9560 /* 51.140.149.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573AC0 /* 13.87.58.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD780 /* 51.140.215.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284379A0 /* 40.67.121.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B21120 /* 52.178.17.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268420 /* 20.38.132.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDAB40 /* 20.189.171.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4291C0 /* 13.66.145.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496ADE0 /* 20.150.173.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14242EBB /* 20.36.46.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246AE0 /* 20.36.106.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353280 /* 20.53.50.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14244941 /* 20.36.73.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247280 /* 20.36.114.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353A80 /* 20.53.58.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464810 /* 13.70.72.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D467200 /* 13.70.114.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446D880 /* 20.70.216.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA210 /* 40.79.162.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA680 /* 40.79.166.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAA10 /* 40.79.170.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAD40 /* 40.79.173.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BBC0F3 /* 52.187.192.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D46BA21 /* 13.70.186.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3210 /* 13.77.50.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C0080 /* 20.92.0.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFB64B /* 191.239.182.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C38980 /* 20.195.137.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C39800 /* 20.195.152.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8B8FD /* 191.232.184.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CB10 /* 191.233.203.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9280 /* 191.234.146.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9680 /* 191.234.150.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9A80 /* 191.234.154.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9D90 /* 191.234.157.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4980 /* 191.238.73.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C39780 /* 20.195.151.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17617822 /* 23.97.120.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17617825 /* 23.97.120.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17617899 /* 23.97.120.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90828 /* 191.233.8.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDE040 /* 191.237.224.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AA20 /* 13.71.170.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47B140 /* 13.71.177.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269280 /* 20.38.146.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C780 /* 20.48.199.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14972000 /* 20.151.32.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855E1D8 /* 40.85.225.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E921E2 /* 52.233.33.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69A80 /* 52.246.154.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69EC0 /* 52.246.158.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456A10 /* 40.69.106.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6E00 /* 52.139.110.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22400 /* 52.242.36.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7E00 /* 20.43.126.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02FC0 /* 20.192.47.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06280 /* 20.192.98.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C065C0 /* 20.192.101.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503280 /* 40.80.50.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503510 /* 40.80.53.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACDCBC /* 52.172.220.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35110 /* 104.211.81.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D36139 /* 104.211.97.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AAC0 /* 13.89.170.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59B280 /* 13.89.178.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E780 /* 20.40.231.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0D00 /* 20.44.13.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763815D /* 23.99.129.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28565B82 /* 40.86.91.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68AC0 /* 52.182.138.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68F00 /* 52.182.143.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D01040 /* 104.208.16.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF000 /* 20.45.240.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF140 /* 20.45.241.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECA10 /* 40.78.202.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B2CC /* 52.180.178.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8E38 /* 168.61.142.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2280 /* 13.75.34.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34B80 /* 20.195.75.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4A50 /* 20.205.74.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4B40 /* 20.205.75.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5250 /* 20.205.82.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5340 /* 20.205.83.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134A07F /* 65.52.160.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A548 /* 104.214.165.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E8A0F /* 207.46.138.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4100 /* 20.42.65.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4400 /* 20.42.68.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A48C0 /* 20.42.72.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4940 /* 20.42.73.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589940 /* 20.88.153.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470AC0 /* 40.71.10.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE2C0 /* 40.78.226.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9A58 /* 40.79.154.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28725621 /* 40.114.86.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28726F16 /* 40.114.111.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287958E7 /* 40.121.88.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A81D56 /* 52.168.29.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87080 /* 52.168.112.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A874C0 /* 52.168.116.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A885E3 /* 52.168.133.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E30EE /* 168.62.48.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E3634 /* 168.62.54.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D446E24 /* 13.68.110.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14249000 /* 20.36.144.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E3F00 /* 20.62.63.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17644358 /* 23.100.67.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469240 /* 40.70.146.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469780 /* 40.70.151.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3493A34F /* 52.147.163.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76A40 /* 52.167.106.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76D80 /* 52.167.109.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D09040 /* 104.208.144.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FD800 /* 20.47.216.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143316C0 /* 20.51.22.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143317C0 /* 20.51.23.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9220 /* 40.74.146.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A96C0 /* 40.74.150.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2210 /* 40.75.34.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285979C0 /* 40.89.121.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A475F /* 52.138.71.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5A10 /* 52.138.90.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5250 /* 68.220.82.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5260 /* 68.220.82.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481B90 /* 20.72.27.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481BA0 /* 20.72.27.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14584080 /* 20.88.64.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143153F8 /* 20.49.83.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315480 /* 20.49.84.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14630B80 /* 20.99.11.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433A08 /* 40.67.58.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28434800 /* 40.67.72.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8220 /* 40.79.130.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8A10 /* 40.79.138.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8DC0 /* 40.79.141.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9210 /* 40.79.146.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9500 /* 40.79.149.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BC040 /* 51.11.192.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD580 /* 51.138.213.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F882E /* 52.143.136.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F8E32 /* 52.143.142.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB210 /* 40.79.178.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34888835 /* 52.136.136.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BB80 /* 52.136.187.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743A08 /* 51.116.58.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744880 /* 51.116.72.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D03E /* 51.116.208.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344040 /* 20.52.64.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345B80 /* 20.52.91.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749A48 /* 51.116.154.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374E826 /* 51.116.232.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374E887 /* 51.116.232.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F280 /* 51.116.242.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F680 /* 51.116.246.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FA80 /* 51.116.250.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FDC0 /* 51.116.253.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92E00 /* 20.217.46.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93A50 /* 20.217.58.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93A60 /* 20.217.58.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94A50 /* 20.217.74.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94A60 /* 20.217.74.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95A50 /* 20.217.90.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95A60 /* 20.217.90.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81E00 /* 4.232.30.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86A50 /* 4.232.106.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86A60 /* 4.232.106.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87A50 /* 4.232.122.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87A60 /* 4.232.122.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C250 /* 4.232.194.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C260 /* 4.232.194.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E5EBB /* 13.78.94.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6A50 /* 13.78.106.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590000 /* 20.89.0.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590980 /* 20.89.9.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C28080 /* 20.194.128.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176641E9 /* 23.102.65.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBA40 /* 40.79.186.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC250 /* 40.79.194.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B250 /* 20.18.178.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B260 /* 20.18.178.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE680 /* 20.189.230.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6420 /* 40.74.100.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A7A4E /* 40.74.122.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C020F0 /* 20.192.32.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03740 /* 20.192.55.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03780 /* 20.192.55.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E138 /* 20.192.225.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EA08 /* 20.192.234.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1D00E /* 20.193.208.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A028 /* 20.192.160.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C700 /* 20.193.199.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CC68 /* 20.193.204.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CC70 /* 20.193.204.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2840103C /* 40.64.16.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1A80 /* 20.44.26.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1F40 /* 20.44.31.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C243D0 /* 20.194.67.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24480 /* 20.194.68.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C080 /* 20.200.192.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71220 /* 52.231.18.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71780 /* 52.231.23.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E72061 /* 52.231.32.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937400 /* 52.147.116.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79240 /* 52.231.146.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113600 /* 20.17.54.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114250 /* 20.17.66.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114260 /* 20.17.66.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170A50 /* 158.23.10.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170A60 /* 158.23.10.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176580 /* 158.23.101.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177A50 /* 158.23.122.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177A60 /* 158.23.122.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C250 /* 158.23.194.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C260 /* 158.23.194.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330180 /* 20.51.1.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DAA50 /* 20.125.170.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DAA60 /* 20.125.170.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCA50 /* 20.125.202.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCA60 /* 20.125.202.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26A80 /* 52.162.106.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41340033 /* 65.52.0.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41340062 /* 65.52.0.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41340134 /* 65.52.1.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134DBBA /* 65.52.219.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37AA71 /* 157.55.170.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EF96F /* 168.62.249.111/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E340 /* 13.69.227.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E9C0 /* 13.69.233.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6B40 /* 13.74.107.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A8E58 /* 13.74.142.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324800 /* 20.50.72.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14325000 /* 20.50.80.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452F480 /* 20.82.244.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE240 /* 52.138.226.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A90AEB /* 52.169.10.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x5EF558C0 /* 94.245.88.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBAAB6 /* 191.235.170.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D0080 /* 51.13.0.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33784C22 /* 51.120.76.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337853C8 /* 51.120.83.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786210 /* 51.120.98.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786A80 /* 51.120.106.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786DD0 /* 51.120.109.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D280 /* 51.120.210.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D530 /* 51.120.213.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378ED40 /* 51.120.237.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8D00 /* 51.13.141.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378A41F /* 51.120.164.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DA08 /* 51.120.218.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70600 /* 20.215.6.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71250 /* 20.215.18.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71260 /* 20.215.18.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71A50 /* 20.215.26.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71A60 /* 20.215.26.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79A50 /* 20.215.154.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79A60 /* 20.215.154.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14150803 /* 20.21.8.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152580 /* 20.21.37.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152A50 /* 20.21.42.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152A60 /* 20.21.42.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154250 /* 20.21.66.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154260 /* 20.21.66.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154A50 /* 20.21.74.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154A60 /* 20.21.74.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F01C1 /* 40.127.1.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F07F3 /* 40.127.7.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254800 /* 102.37.72.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A380 /* 102.37.163.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857A80 /* 102.133.122.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857EC0 /* 102.133.126.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859A08 /* 102.133.154.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FA80 /* 102.133.250.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FDC0 /* 102.133.253.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662540C0 /* 102.37.64.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255400 /* 102.37.84.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851A08 /* 102.133.26.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668547F6 /* 102.133.71.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5551DA /* 13.85.81.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7A80 /* 20.45.122.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7E80 /* 20.45.126.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315BE0 /* 20.49.91.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315BF0 /* 20.49.91.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315F40 /* 20.49.95.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418780 /* 20.65.135.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C4100 /* 40.124.65.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x462568F0 /* 70.37.104.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x462568F2 /* 70.37.104.242/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D612A0 /* 104.214.18.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0208 /* 20.44.2.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D75C0 /* 20.45.117.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47729D /* 13.71.114.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC210 /* 40.78.194.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7680 /* 52.172.118.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430860 /* 13.67.8.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D431400 /* 13.67.20.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4C8D24 /* 13.76.141.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35200 /* 20.195.82.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17624ACD /* 23.98.74.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625260 /* 23.98.82.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625780 /* 23.98.87.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17627080 /* 23.98.112.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEA20 /* 40.78.234.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6FDD50F4 /* 111.221.80.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6FDD59DE /* 111.221.89.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5580 /* 68.221.85.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6250 /* 68.221.98.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6260 /* 68.221.98.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD9250 /* 68.221.146.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD9260 /* 68.221.146.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1D80 /* 51.12.29.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6208 /* 51.12.98.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C65E0 /* 51.12.101.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE280 /* 51.12.226.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE550 /* 51.12.229.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEA80 /* 51.12.234.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CED50 /* 51.12.237.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BB08A /* 51.107.176.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BB0C1 /* 51.107.176.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C005A /* 51.12.0.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1600 /* 51.12.22.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCA08 /* 51.12.202.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCE00 /* 51.12.206.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D01250 /* 20.208.18.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D01260 /* 20.208.18.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CA50 /* 51.103.202.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CA60 /* 51.103.202.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3A08 /* 51.107.58.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B47CD /* 51.107.71.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B47EC /* 51.107.71.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B80C0 /* 51.107.128.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF480 /* 51.107.244.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9A08 /* 51.107.154.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE3E7 /* 51.107.227.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFC80 /* 51.107.252.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351E00 /* 51.53.30.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356A50 /* 51.53.106.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356A60 /* 51.53.106.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335AE00 /* 51.53.174.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BA50 /* 51.53.186.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BA60 /* 51.53.186.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254A20 /* 20.37.74.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D47EA /* 20.45.71.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5D00 /* 20.45.93.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269850 /* 20.38.152.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269860 /* 20.38.152.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784A18 /* 40.120.74.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784DC0 /* 40.120.77.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28785500 /* 40.120.85.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BCFD2 /* 40.123.207.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BDBE4 /* 40.123.219.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FA40 /* 65.52.250.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577A40 /* 13.87.122.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A80C0 /* 20.90.128.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694280 /* 51.105.66.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336946C0 /* 51.105.70.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694A80 /* 51.105.74.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384C080 /* 51.132.192.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C03EF /* 51.140.3.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C2B0C /* 51.140.43.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9230 /* 51.140.146.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9580 /* 51.140.149.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D572308 /* 13.87.35.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573840 /* 13.87.56.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4600 /* 20.58.70.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD240 /* 51.140.210.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D0181 /* 51.141.1.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C260 /* 13.71.194.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450280 /* 20.69.2.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A111C6 /* 52.161.17.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454040 /* 13.69.64.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456A40 /* 13.69.106.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456F40 /* 13.69.111.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432C900 /* 20.50.201.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14565C00 /* 20.86.92.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17640F57 /* 23.100.15.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28447F44 /* 40.68.127.68/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33907CFF /* 51.144.124.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A67F25 /* 52.166.127.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B21140 /* 52.178.17.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E877BF /* 52.232.119.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBA40 /* 52.236.186.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x413480F6 /* 65.52.128.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134891D /* 65.52.137.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C05280 /* 20.192.82.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39210 /* 104.211.146.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3BE58 /* 104.211.190.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D580A5D /* 13.88.10.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420680 /* 20.66.6.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A250 /* 20.168.162.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A260 /* 20.168.162.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E1BDA /* 40.78.27.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F280 /* 40.112.242.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68280F80 /* 104.40.15.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DEF73 /* 104.45.239.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5BF262 /* 138.91.242.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E10B4 /* 168.62.16.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428A50 /* 13.66.138.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4293C0 /* 13.66.147.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330F00 /* 20.51.15.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28407100 /* 40.64.113.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28416C92 /* 40.65.108.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF290 /* 40.78.242.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF7C0 /* 40.78.247.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFA50 /* 40.78.250.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14260025 /* 20.38.0.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14968100 /* 20.150.129.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A0D8 /* 20.150.160.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AA08 /* 20.150.170.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AF00 /* 20.150.175.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B280 /* 20.150.178.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B640 /* 20.150.182.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BA80 /* 20.150.186.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BD30 /* 20.150.189.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BD40 /* 20.150.189.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464AE0 /* 13.70.74.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352F20 /* 20.53.47.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D3E100 /* 20.211.225.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4860 /* 191.238.72.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE05C0 /* 20.206.5.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C4C0 /* 20.48.196.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456E80 /* 40.69.110.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6B60 /* 52.139.107.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02C40 /* 20.192.44.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503520 /* 40.80.53.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AF80 /* 13.89.175.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E500 /* 20.40.229.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0A80 /* 20.44.10.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68D40 /* 52.182.141.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0B60 /* 20.46.11.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECC60 /* 40.78.204.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C348C0 /* 20.195.72.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8540 /* 20.62.133.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589B00 /* 20.88.155.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E3B20 /* 20.62.59.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143311E0 /* 20.51.17.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5CE0 /* 52.138.92.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F84A0 /* 40.79.132.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8B60 /* 40.79.139.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9420 /* 40.79.148.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD260 /* 51.138.210.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749560 /* 51.116.149.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F620 /* 51.116.246.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6DE0 /* 13.78.109.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA640 /* 20.191.166.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE5E0 /* 20.189.229.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02200 /* 20.192.34.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C037C0 /* 20.192.55.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C7A0 /* 20.193.199.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CDE0 /* 20.193.205.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C249C0 /* 20.194.73.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71460 /* 52.231.20.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E714C0 /* 52.231.20.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317760 /* 20.49.119.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452F780 /* 20.82.247.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928820 /* 52.146.136.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D560 /* 51.120.213.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E960 /* 51.120.233.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378B340 /* 51.120.179.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14153700 /* 20.21.55.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A020 /* 102.37.160.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857E60 /* 102.133.126.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F440 /* 13.73.244.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144184E0 /* 20.65.132.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09D00 /* 20.192.157.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430F40 /* 13.67.15.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C341C0 /* 20.195.65.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35400 /* 20.195.84.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625640 /* 23.98.86.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEE80 /* 40.78.238.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2EC0 /* 51.12.46.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C65C0 /* 51.12.101.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C11A0 /* 51.12.17.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CA800 /* 51.12.168.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8080 /* 51.107.128.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF2C0 /* 51.107.242.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BC0C0 /* 51.107.192.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFAC0 /* 51.107.250.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268FC0 /* 20.38.143.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287840A0 /* 40.120.64.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680940 /* 51.104.9.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD480 /* 51.143.212.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A2500 /* 20.90.37.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144500C0 /* 20.69.0.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6640 /* 20.61.102.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14565E80 /* 20.86.94.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268460 /* 20.38.132.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348835E0 /* 52.136.53.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144203E0 /* 20.66.3.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDAA00 /* 20.189.170.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D429100 /* 13.66.145.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330C20 /* 20.51.12.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF540 /* 40.78.245.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFD00 /* 40.78.253.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AEA0 /* 20.150.174.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F4A0 /* 20.150.244.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2300 /* 20.47.35.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CD600 /* 20.60.214.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967C00 /* 20.150.124.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8A00 /* 20.157.138.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFD800 /* 52.239.216.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2400 /* 20.47.36.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966700 /* 20.150.103.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFDA00 /* 52.239.218.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D466310 /* 13.70.99.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D466330 /* 13.70.99.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D466340 /* 13.70.99.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D48EB40 /* 13.72.235.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D48EB60 /* 13.72.235.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D48EB90 /* 13.72.235.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D48ED30 /* 13.72.237.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D48ED40 /* 13.72.237.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4BF010 /* 13.75.240.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4BF020 /* 13.75.240.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4BF040 /* 13.75.240.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267000 /* 20.38.112.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2500 /* 20.47.37.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C4800 /* 20.60.72.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CB600 /* 20.60.182.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964200 /* 20.150.66.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965C00 /* 20.150.92.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967500 /* 20.150.117.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2C00 /* 20.157.44.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9B00 /* 20.157.155.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DE200 /* 20.157.226.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF8200 /* 52.239.130.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE200 /* 52.239.226.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E1F10 /* 104.46.31.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4200 /* 191.238.66.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D0810 /* 13.77.8.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D0820 /* 13.77.8.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D0840 /* 13.77.8.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D0860 /* 13.77.8.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D0880 /* 13.77.8.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D08A0 /* 13.77.8.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D08C0 /* 13.77.8.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2600 /* 20.47.38.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C2000 /* 20.60.32.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14960C00 /* 20.150.12.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967700 /* 20.150.119.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2D00 /* 20.157.45.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF8400 /* 52.239.132.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE100 /* 52.239.225.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFC000 /* 191.239.192.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2700 /* 20.47.39.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C2400 /* 20.60.36.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966F00 /* 20.150.111.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3700 /* 20.157.55.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DE300 /* 20.157.227.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D10C00 /* 20.209.12.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D15200 /* 20.209.82.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17617040 /* 23.97.112.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8D820 /* 191.232.216.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8DD10 /* 191.232.221.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8DD20 /* 191.232.221.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE98000 /* 191.233.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBF800 /* 191.235.248.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBFA00 /* 191.235.250.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964900 /* 20.150.73.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965000 /* 20.150.80.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967B00 /* 20.150.123.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2A00 /* 20.157.42.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DBD00 /* 20.157.189.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267200 /* 20.38.114.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2800 /* 20.47.40.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C2A00 /* 20.60.42.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CF200 /* 20.60.242.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961000 /* 20.150.16.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961F00 /* 20.150.31.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964700 /* 20.150.71.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966400 /* 20.150.100.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3400 /* 20.157.52.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9400 /* 20.157.148.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D14600 /* 20.209.70.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855E840 /* 40.85.232.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855E860 /* 40.85.232.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855E890 /* 40.85.232.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855EB20 /* 40.85.235.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855EB50 /* 40.85.235.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855EB60 /* 40.85.235.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9440 /* 52.239.148.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFBD00 /* 52.239.189.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267980 /* 20.38.121.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2900 /* 20.47.41.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C8E00 /* 20.60.142.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14960100 /* 20.150.1.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962880 /* 20.150.40.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967100 /* 20.150.113.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DA100 /* 20.157.161.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D14000 /* 20.209.64.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E840 /* 40.86.232.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E860 /* 40.86.232.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E880 /* 40.86.232.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E8B0 /* 40.86.232.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E8C0 /* 40.86.232.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E55040 /* 52.229.80.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA480 /* 52.239.164.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFBE00 /* 52.239.190.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267E00 /* 20.38.126.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2A00 /* 20.47.42.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C5400 /* 20.60.84.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967200 /* 20.150.114.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8B00 /* 20.157.139.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DB200 /* 20.157.178.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D13800 /* 20.209.56.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF8740 /* 52.239.135.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFCA00 /* 52.239.202.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D36840 /* 104.211.104.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D36860 /* 104.211.104.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D36880 /* 104.211.104.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D36D00 /* 104.211.109.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D36D20 /* 104.211.109.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D36D50 /* 104.211.109.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D36D60 /* 104.211.109.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D439B10 /* 13.67.155.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14266000 /* 20.38.96.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267A00 /* 20.38.122.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3A00 /* 20.47.58.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1200 /* 20.60.18.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1E00 /* 20.60.30.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CB200 /* 20.60.178.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CC200 /* 20.60.194.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CF000 /* 20.60.240.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CF400 /* 20.60.244.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962B80 /* 20.150.43.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963A00 /* 20.150.58.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963F00 /* 20.150.63.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964D00 /* 20.150.77.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965900 /* 20.150.89.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965F00 /* 20.150.95.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2200 /* 20.157.34.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8E00 /* 20.157.142.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DA300 /* 20.157.163.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DB800 /* 20.157.184.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D11200 /* 20.209.18.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D12400 /* 20.209.36.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D16200 /* 20.209.98.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763A040 /* 23.99.160.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763A0C0 /* 23.99.160.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2845B010 /* 40.69.176.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28531810 /* 40.83.24.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28531850 /* 40.83.24.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A6010 /* 40.122.96.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287AD810 /* 40.122.216.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A56810 /* 52.165.104.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A56820 /* 52.165.104.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A56840 /* 52.165.104.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A56870 /* 52.165.104.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A58820 /* 52.165.136.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5F040 /* 52.165.240.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD9840 /* 52.173.152.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD9860 /* 52.173.152.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B0E040 /* 52.176.224.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B0E060 /* 52.176.224.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B810 /* 52.180.184.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B6B010 /* 52.182.176.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B6B020 /* 52.182.176.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B6B040 /* 52.182.176.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B93850 /* 52.185.56.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B93860 /* 52.185.56.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B93890 /* 52.185.56.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B938A0 /* 52.185.56.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B97010 /* 52.185.112.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B97030 /* 52.185.112.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B97070 /* 52.185.112.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E4E800 /* 52.228.232.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E6F010 /* 52.230.240.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E6F020 /* 52.230.240.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E6F040 /* 52.230.240.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E6F070 /* 52.230.240.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E6F080 /* 52.230.240.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E6F0A0 /* 52.230.240.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EEC820 /* 52.238.200.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9600 /* 52.239.150.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB120 /* 52.239.177.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB140 /* 52.239.177.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB180 /* 52.239.177.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC300 /* 52.239.195.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFEA00 /* 52.239.234.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D00010 /* 104.208.0.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D00030 /* 104.208.0.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D80C0 /* 168.61.128.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8100 /* 168.61.129.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8240 /* 168.61.130.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8280 /* 168.61.130.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8300 /* 168.61.131.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8380 /* 168.61.131.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8400 /* 168.61.132.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0500 /* 20.47.5.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1800 /* 20.60.24.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961700 /* 20.150.23.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962F00 /* 20.150.47.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DEB00 /* 20.157.235.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28531860 /* 40.83.24.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A56890 /* 52.165.104.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A568A0 /* 52.165.104.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B97050 /* 52.185.112.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB100 /* 52.239.177.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFEE00 /* 52.239.238.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2B00 /* 20.47.43.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C5600 /* 20.60.86.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C8300 /* 20.60.131.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CFE00 /* 20.60.254.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14960180 /* 20.150.1.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961600 /* 20.150.22.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966000 /* 20.150.96.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3500 /* 20.157.53.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DB100 /* 20.157.177.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285368B0 /* 40.83.104.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285368D0 /* 40.83.104.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF2880 /* 52.175.40.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF7010 /* 52.175.112.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B82810 /* 52.184.40.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B82820 /* 52.184.40.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF8000 /* 52.239.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE000 /* 52.239.224.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8000 /* 168.63.128.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8080 /* 168.63.128.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8180 /* 168.63.129.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8200 /* 168.63.130.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8280 /* 168.63.130.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8300 /* 168.63.131.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F9C40 /* 168.63.156.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F9CC0 /* 168.63.156.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDEE20 /* 191.237.238.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D44A320 /* 13.68.163.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D44A540 /* 13.68.165.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D44A7F0 /* 13.68.167.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D522120 /* 13.82.33.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D529810 /* 13.82.152.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D529830 /* 13.82.152.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D529850 /* 13.82.152.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14266200 /* 20.38.98.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0100 /* 20.47.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1000 /* 20.47.16.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1F00 /* 20.47.31.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0000 /* 20.60.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0200 /* 20.60.2.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0600 /* 20.60.6.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C3C00 /* 20.60.60.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C8000 /* 20.60.128.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C8600 /* 20.60.134.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C9200 /* 20.60.146.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CDC00 /* 20.60.220.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962000 /* 20.150.32.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965A00 /* 20.150.90.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2700 /* 20.157.39.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3B00 /* 20.157.59.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3D00 /* 20.157.61.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8400 /* 20.157.132.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9300 /* 20.157.147.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DAB00 /* 20.157.171.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DE700 /* 20.157.231.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DF000 /* 20.157.240.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D10000 /* 20.209.0.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D12800 /* 20.209.40.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D13400 /* 20.209.52.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D14A00 /* 20.209.74.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D15400 /* 20.209.84.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D16A00 /* 20.209.106.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17604040 /* 23.96.64.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28476810 /* 40.71.104.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28476820 /* 40.71.104.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847F010 /* 40.71.240.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28753050 /* 40.117.48.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28753070 /* 40.117.48.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28756810 /* 40.117.104.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B31810 /* 52.179.24.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BA7020 /* 52.186.112.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E20820 /* 52.226.8.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E20850 /* 52.226.8.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E20860 /* 52.226.8.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E20880 /* 52.226.8.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EAB030 /* 52.234.176.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EAB040 /* 52.234.176.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EAB060 /* 52.234.176.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9800 /* 52.239.152.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA800 /* 52.239.168.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFCFC0 /* 52.239.207.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFD600 /* 52.239.214.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFDC00 /* 52.239.220.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFF600 /* 52.239.246.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFFC00 /* 52.239.252.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F03010 /* 52.240.48.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F03020 /* 52.240.48.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F03C10 /* 52.240.60.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F03C20 /* 52.240.60.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F03C40 /* 52.240.60.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B6040 /* 138.91.96.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B6080 /* 138.91.96.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E2000 /* 168.62.32.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E20C0 /* 168.62.32.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E2180 /* 168.62.33.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFED2080 /* 191.237.32.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFED20D0 /* 191.237.32.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFED20F0 /* 191.237.32.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE0000 /* 191.238.0.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE00E0 /* 191.238.0.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D447840 /* 13.68.120.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D7010 /* 13.77.112.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D7020 /* 13.77.112.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D7070 /* 13.77.112.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D7080 /* 13.77.112.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D7310 /* 13.77.115.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D7320 /* 13.77.115.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14266400 /* 20.38.100.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3C00 /* 20.47.60.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C3800 /* 20.60.56.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C5800 /* 20.60.88.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C8400 /* 20.60.132.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CB400 /* 20.60.180.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CE000 /* 20.60.224.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CEC00 /* 20.60.236.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961D00 /* 20.150.29.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962400 /* 20.150.36.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963200 /* 20.150.50.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964800 /* 20.150.72.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965200 /* 20.150.82.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965800 /* 20.150.88.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2400 /* 20.157.36.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3000 /* 20.157.48.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3E00 /* 20.157.62.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DA700 /* 20.157.167.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DB900 /* 20.157.185.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DEF00 /* 20.157.239.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DF800 /* 20.157.248.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D14400 /* 20.209.68.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D15A00 /* 20.209.90.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D16E00 /* 20.209.110.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766CE00 /* 23.102.206.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766CE80 /* 23.102.206.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766CEC0 /* 23.102.206.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F0810 /* 40.79.8.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F3010 /* 40.79.48.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28540820 /* 40.84.8.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28540B50 /* 40.84.11.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B1010 /* 40.123.16.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A75850 /* 52.167.88.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A75870 /* 52.167.88.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A7F010 /* 52.167.240.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B1D050 /* 52.177.208.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B39020 /* 52.179.144.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B39040 /* 52.179.144.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3F010 /* 52.179.240.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3F030 /* 52.179.240.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3F040 /* 52.179.240.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3F060 /* 52.179.240.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3F090 /* 52.179.240.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3F0A0 /* 52.179.240.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3F0C0 /* 52.179.240.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3F0F0 /* 52.179.240.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3F100 /* 52.179.241.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3F120 /* 52.179.241.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A860 /* 52.184.168.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E18810 /* 52.225.136.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E18820 /* 52.225.136.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1F000 /* 52.225.240.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8E810 /* 52.232.232.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8E820 /* 52.232.232.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8E850 /* 52.232.232.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8E860 /* 52.232.232.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8E880 /* 52.232.232.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8E8B0 /* 52.232.232.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8E8C0 /* 52.232.232.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9C00 /* 52.239.156.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9D00 /* 52.239.157.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9D80 /* 52.239.157.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9DC0 /* 52.239.157.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFAC00 /* 52.239.172.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB800 /* 52.239.184.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB8A0 /* 52.239.184.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB8C0 /* 52.239.184.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB920 /* 52.239.185.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC000 /* 52.239.192.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC040 /* 52.239.192.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC060 /* 52.239.192.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC0A0 /* 52.239.192.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC0C0 /* 52.239.192.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC600 /* 52.239.198.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC6C0 /* 52.239.198.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFCE00 /* 52.239.206.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFCF20 /* 52.239.207.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFCF40 /* 52.239.207.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFCF80 /* 52.239.207.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFDE00 /* 52.239.222.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D08010 /* 104.208.128.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D0F810 /* 104.208.248.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89740100 /* 137.116.1.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89740200 /* 137.116.2.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89740260 /* 137.116.2.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89740268 /* 137.116.2.104/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974026C /* 137.116.2.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974026E /* 137.116.2.110/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89740270 /* 137.116.2.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89740272 /* 137.116.2.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89740274 /* 137.116.2.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89740278 /* 137.116.2.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89740300 /* 137.116.3.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89740380 /* 137.116.3.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89746000 /* 137.116.96.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89746080 /* 137.116.96.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDA040 /* 191.237.160.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDA0E0 /* 191.237.160.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFE000 /* 191.239.224.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0600 /* 20.47.6.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C9A00 /* 20.60.154.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CB800 /* 20.60.184.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CEE00 /* 20.60.238.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966C00 /* 20.150.108.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3A00 /* 20.157.58.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9500 /* 20.157.149.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28465800 /* 40.70.88.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28465804 /* 40.70.88.4/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28465806 /* 40.70.88.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28465808 /* 40.70.88.8/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2846580A /* 40.70.88.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2846580C /* 40.70.88.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2846580E /* 40.70.88.14/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F5810 /* 40.79.88.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F5814 /* 40.79.88.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F5816 /* 40.79.88.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F5818 /* 40.79.88.24/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F581A /* 40.79.88.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F581C /* 40.79.88.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F581E /* 40.79.88.30/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A820 /* 52.184.168.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A824 /* 52.184.168.36/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A826 /* 52.184.168.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A828 /* 52.184.168.40/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A82A /* 52.184.168.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A82C /* 52.184.168.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A82E /* 52.184.168.46/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9DE0 /* 52.239.157.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA5C0 /* 52.239.165.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB8B0 /* 52.239.184.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB8E0 /* 52.239.184.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB900 /* 52.239.185.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC080 /* 52.239.192.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC680 /* 52.239.198.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE600 /* 52.239.230.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFEF00 /* 52.239.239.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89740240 /* 137.116.2.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C2C00 /* 20.60.44.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C2E00 /* 20.60.46.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C9E00 /* 20.60.158.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267700 /* 20.38.119.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0D00 /* 20.47.13.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0500 /* 20.60.5.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CC600 /* 20.60.198.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963900 /* 20.150.57.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2C00 /* 20.47.44.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0D00 /* 20.60.13.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C9C00 /* 20.60.156.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963D00 /* 20.150.61.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8100 /* 20.157.129.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D10800 /* 20.209.8.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF8600 /* 52.239.134.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC200 /* 52.239.194.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFF100 /* 52.239.241.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1C00 /* 20.47.28.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0B00 /* 20.60.11.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CBC00 /* 20.60.188.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961300 /* 20.150.19.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9C00 /* 20.157.156.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF8700 /* 52.239.135.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC400 /* 52.239.196.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267300 /* 20.38.115.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2D00 /* 20.47.45.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963C00 /* 20.150.60.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967000 /* 20.150.112.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DE500 /* 20.157.229.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267600 /* 20.38.118.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1B00 /* 20.47.27.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1600 /* 20.60.22.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963600 /* 20.150.54.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967D00 /* 20.150.125.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DA000 /* 20.157.160.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DB700 /* 20.157.183.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D12000 /* 20.209.32.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C5E00 /* 20.60.94.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DA900 /* 20.157.169.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DED00 /* 20.157.237.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D15000 /* 20.209.80.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D15600 /* 20.209.86.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D490810 /* 13.73.8.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D490820 /* 13.73.8.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267400 /* 20.38.116.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0C00 /* 20.47.12.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CAC00 /* 20.60.172.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CF800 /* 20.60.248.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965500 /* 20.150.85.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966900 /* 20.150.105.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2600 /* 20.157.38.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9000 /* 20.157.144.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DE000 /* 20.157.224.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D11600 /* 20.209.22.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17623940 /* 23.98.57.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873A920 /* 40.115.169.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873AF10 /* 40.115.175.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873AF20 /* 40.115.175.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873E350 /* 40.115.227.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873E510 /* 40.115.229.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873E520 /* 40.115.229.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873E740 /* 40.115.231.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873E770 /* 40.115.231.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873E780 /* 40.115.231.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9000 /* 52.239.144.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0A00 /* 20.47.10.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0C00 /* 20.60.12.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CBA00 /* 20.60.186.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14960A00 /* 20.150.10.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3800 /* 20.157.56.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DF200 /* 20.157.242.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D11000 /* 20.209.16.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17623800 /* 23.98.56.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9200 /* 52.239.146.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D69810 /* 104.214.152.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D698B0 /* 104.214.152.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D72010 /* 104.215.32.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D72020 /* 104.215.32.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D72040 /* 104.215.32.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D72320 /* 104.215.35.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CAA00 /* 20.60.170.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964000 /* 20.150.64.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966D00 /* 20.150.109.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9800 /* 20.157.152.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DE900 /* 20.157.233.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C3600 /* 20.60.54.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964100 /* 20.150.65.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966100 /* 20.150.97.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9900 /* 20.157.153.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DEA00 /* 20.157.234.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2E00 /* 20.47.46.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1000 /* 20.60.16.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CC800 /* 20.60.200.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14960400 /* 20.150.4.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8C00 /* 20.157.140.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D12E00 /* 20.209.46.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E75040 /* 52.231.80.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E75070 /* 52.231.80.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E75080 /* 52.231.80.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E750A0 /* 52.231.80.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9400 /* 52.239.148.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA4C0 /* 52.239.164.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFBE80 /* 52.239.190.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2F00 /* 20.47.47.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CCA00 /* 20.60.202.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14960E00 /* 20.150.14.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8900 /* 20.157.137.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7A840 /* 52.231.168.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7A870 /* 52.231.168.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7A880 /* 52.231.168.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7D010 /* 52.231.208.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7D020 /* 52.231.208.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA500 /* 52.239.165.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA5A0 /* 52.239.165.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFBEC0 /* 52.239.190.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DEE00 /* 20.157.238.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D14200 /* 20.209.66.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D14E00 /* 20.209.78.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C6000 /* 20.60.96.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DF100 /* 20.157.241.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0300 /* 20.47.3.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0F00 /* 20.47.15.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1C00 /* 20.60.28.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C5200 /* 20.60.82.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961100 /* 20.150.17.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961900 /* 20.150.25.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963100 /* 20.150.49.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964300 /* 20.150.67.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967E00 /* 20.150.126.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2F00 /* 20.157.47.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DAC00 /* 20.157.172.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D12600 /* 20.209.38.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17623100 /* 23.98.49.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176231C0 /* 23.98.49.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17623700 /* 23.98.55.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17623770 /* 23.98.55.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17623790 /* 23.98.55.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28747810 /* 40.116.120.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2874E810 /* 40.116.232.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2874E830 /* 40.116.232.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2874E860 /* 40.116.232.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A23810 /* 52.162.56.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A23820 /* 52.162.56.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A23840 /* 52.162.56.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A23870 /* 52.162.56.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A23880 /* 52.162.56.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9500 /* 52.239.149.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFBA00 /* 52.239.186.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFFD00 /* 52.239.253.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D38D800 /* 157.56.216.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E6080 /* 168.62.96.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E60D2 /* 168.62.96.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E60E0 /* 168.62.96.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E60C0 /* 168.62.96.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E60C8 /* 168.62.96.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E60CC /* 168.62.96.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E60CE /* 168.62.96.206/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E60D0 /* 168.62.96.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E60D4 /* 168.62.96.212/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E60D8 /* 168.62.96.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D46D010 /* 13.70.208.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4AD040 /* 13.74.208.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4AD070 /* 13.74.208.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4AD090 /* 13.74.208.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4FB010 /* 13.79.176.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4FB030 /* 13.79.176.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4FB050 /* 13.79.176.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14266600 /* 20.38.102.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0800 /* 20.47.8.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1400 /* 20.47.20.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2000 /* 20.47.32.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1300 /* 20.60.19.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C2800 /* 20.60.40.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C9000 /* 20.60.144.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CCC00 /* 20.60.204.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CF600 /* 20.60.246.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961A00 /* 20.150.26.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962F80 /* 20.150.47.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963000 /* 20.150.48.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964B00 /* 20.150.75.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965400 /* 20.150.84.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966800 /* 20.150.104.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3C00 /* 20.157.60.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9F00 /* 20.157.159.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DB300 /* 20.157.179.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DF400 /* 20.157.244.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DF700 /* 20.157.247.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D10E00 /* 20.209.14.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D13A00 /* 20.209.58.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D16000 /* 20.209.96.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D16800 /* 20.209.104.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28556920 /* 40.85.105.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28711BB0 /* 40.113.27.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A47010 /* 52.164.112.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A4E810 /* 52.164.232.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A4E820 /* 52.164.232.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A4E840 /* 52.164.232.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9A820 /* 52.169.168.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9F010 /* 52.169.240.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9F020 /* 52.169.240.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9F040 /* 52.169.240.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2A820 /* 52.178.168.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2A850 /* 52.178.168.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2A860 /* 52.178.168.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2A880 /* 52.178.168.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EC2810 /* 52.236.40.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EC2820 /* 52.236.40.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF8800 /* 52.239.136.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFCD00 /* 52.239.205.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFF800 /* 52.239.248.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52800 /* 52.245.40.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829E810 /* 104.41.232.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8987C040 /* 137.135.192.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8987C0C0 /* 137.135.192.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8987C1C0 /* 137.135.193.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8987C200 /* 137.135.194.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8987C2C0 /* 137.135.194.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D7820 /* 168.61.120.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D7840 /* 168.61.120.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D7900 /* 168.61.121.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F2000 /* 168.63.32.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F21C0 /* 168.63.33.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBC0C0 /* 191.235.192.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBC120 /* 191.235.193.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBFFC0 /* 191.235.255.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267800 /* 20.38.120.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3000 /* 20.47.48.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CCE00 /* 20.60.206.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963500 /* 20.150.53.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967900 /* 20.150.121.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DA500 /* 20.157.165.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D11800 /* 20.209.24.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3100 /* 20.47.49.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0F00 /* 20.60.15.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14960000 /* 20.150.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963800 /* 20.150.56.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C5C00 /* 20.60.92.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DA800 /* 20.157.168.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DE100 /* 20.157.225.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D13C00 /* 20.209.60.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D15E00 /* 20.209.94.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CD000 /* 20.60.208.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9A00 /* 20.157.154.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DBE00 /* 20.157.190.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D10200 /* 20.209.2.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D13600 /* 20.209.54.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267280 /* 20.38.114.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3200 /* 20.47.50.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CBE00 /* 20.60.190.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961500 /* 20.150.21.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963E00 /* 20.150.62.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966500 /* 20.150.101.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DA200 /* 20.157.162.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE800 /* 52.239.232.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267900 /* 20.38.121.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3300 /* 20.47.51.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0800 /* 20.60.8.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CD200 /* 20.60.210.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961400 /* 20.150.20.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DE400 /* 20.157.228.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE880 /* 52.239.232.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D416B20 /* 13.65.107.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41A010 /* 13.65.160.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41A030 /* 13.65.160.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41A040 /* 13.65.160.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D543810 /* 13.84.56.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D555810 /* 13.85.88.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D55C880 /* 13.85.200.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14266800 /* 20.38.104.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0000 /* 20.47.0.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1800 /* 20.47.24.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1D00 /* 20.47.29.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C3000 /* 20.60.48.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C4000 /* 20.60.64.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C8C00 /* 20.60.140.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C9400 /* 20.60.148.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CA000 /* 20.60.160.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961480 /* 20.150.20.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962600 /* 20.150.38.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964600 /* 20.150.70.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964F00 /* 20.150.79.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965D00 /* 20.150.93.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965E00 /* 20.150.94.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2B00 /* 20.157.43.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3600 /* 20.157.54.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8600 /* 20.157.134.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DA400 /* 20.157.164.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DA600 /* 20.157.166.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DB500 /* 20.157.181.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D11A00 /* 20.209.26.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D12200 /* 20.209.34.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D13E00 /* 20.209.62.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1762A040 /* 23.98.160.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1762A2C0 /* 23.98.162.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1762A800 /* 23.98.168.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1762C040 /* 23.98.192.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1762FF40 /* 23.98.255.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AB9020 /* 52.171.144.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AB9050 /* 52.171.144.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AB9060 /* 52.171.144.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AB9080 /* 52.171.144.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B9E900 /* 52.185.233.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDB100 /* 52.189.177.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9E00 /* 52.239.158.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB200 /* 52.239.178.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB400 /* 52.239.180.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC700 /* 52.239.199.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC800 /* 52.239.200.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFCB00 /* 52.239.203.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFD000 /* 52.239.208.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D62810 /* 104.214.40.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D65010 /* 104.214.80.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D65030 /* 104.214.80.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D76840 /* 104.215.104.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E8080 /* 168.62.128.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14266E00 /* 20.38.110.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0E00 /* 20.47.14.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0900 /* 20.60.9.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3400 /* 20.47.52.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0A00 /* 20.60.10.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CE200 /* 20.60.226.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961800 /* 20.150.24.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8700 /* 20.157.135.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC1010 /* 52.172.16.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC1050 /* 52.172.16.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC1060 /* 52.172.16.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC1080 /* 52.172.16.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF8780 /* 52.239.135.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFBC00 /* 52.239.188.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E810 /* 104.211.232.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E830 /* 104.211.232.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E850 /* 104.211.232.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E8B0 /* 104.211.232.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4C6810 /* 13.76.104.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0900 /* 20.47.9.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2100 /* 20.47.33.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C8800 /* 20.60.136.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C8A00 /* 20.60.138.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961180 /* 20.150.17.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961C00 /* 20.150.28.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965600 /* 20.150.86.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967F00 /* 20.150.127.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8000 /* 20.157.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DB000 /* 20.157.176.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D11400 /* 20.209.20.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A3B010 /* 52.163.176.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A3E810 /* 52.163.232.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB8D20 /* 52.187.141.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED6810 /* 52.237.104.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED6820 /* 52.237.104.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF8100 /* 52.239.129.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC500 /* 52.239.197.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE300 /* 52.239.227.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFF900 /* 52.239.249.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D7F040 /* 104.215.240.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D7F060 /* 104.215.240.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FA000 /* 168.63.160.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FA0C0 /* 168.63.160.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FA140 /* 168.63.161.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FA1A0 /* 168.63.161.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FA1C0 /* 168.63.161.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FA220 /* 168.63.162.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FA240 /* 168.63.162.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FA290 /* 168.63.162.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FA2C0 /* 168.63.162.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FA380 /* 168.63.163.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FB440 /* 168.63.180.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4040 /* 191.238.64.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE40C0 /* 191.238.64.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C6200 /* 20.60.98.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DF300 /* 20.157.243.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C4E00 /* 20.60.78.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CEA00 /* 20.60.234.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CFC00 /* 20.60.252.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962C00 /* 20.150.44.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967800 /* 20.150.120.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9700 /* 20.157.151.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DE800 /* 20.157.232.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C4C00 /* 20.60.76.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CC000 /* 20.60.192.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962D00 /* 20.150.45.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966300 /* 20.150.99.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9600 /* 20.157.150.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3500 /* 20.47.53.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CAE00 /* 20.60.174.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963B00 /* 20.150.59.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967600 /* 20.150.118.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DAF00 /* 20.157.175.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D11C00 /* 20.209.28.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFFB00 /* 52.239.251.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1A00 /* 20.47.26.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CB000 /* 20.60.176.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963700 /* 20.150.55.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967400 /* 20.150.116.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8500 /* 20.157.133.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFFA00 /* 52.239.250.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DAD00 /* 20.157.173.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DBB00 /* 20.157.187.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D12A00 /* 20.209.42.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DAE00 /* 20.157.174.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DBC00 /* 20.157.188.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D12C00 /* 20.209.44.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3600 /* 20.47.54.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14960600 /* 20.150.6.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967300 /* 20.150.115.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8300 /* 20.157.131.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE900 /* 52.239.233.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267C00 /* 20.38.124.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3700 /* 20.47.55.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1500 /* 20.60.21.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CD400 /* 20.60.212.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8D00 /* 20.157.141.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D13200 /* 20.209.50.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE980 /* 52.239.233.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962E00 /* 20.150.46.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14266A00 /* 20.38.106.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0B00 /* 20.47.11.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2200 /* 20.47.34.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1100 /* 20.60.17.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CA600 /* 20.60.166.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961200 /* 20.150.18.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962800 /* 20.150.40.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962900 /* 20.150.41.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964500 /* 20.150.69.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9D00 /* 20.157.157.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DB600 /* 20.157.182.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DF600 /* 20.157.246.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D10600 /* 20.209.6.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D11E00 /* 20.209.30.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D15800 /* 20.209.88.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C1010 /* 51.140.16.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C1020 /* 51.140.16.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CA840 /* 51.140.168.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CA870 /* 51.140.168.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CA880 /* 51.140.168.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D8020 /* 51.141.128.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D8140 /* 51.141.129.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D8200 /* 51.141.130.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFBB00 /* 52.239.187.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE700 /* 52.239.231.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D572840 /* 13.87.40.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D572860 /* 13.87.40.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961B00 /* 20.150.27.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D81C0 /* 51.141.129.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3800 /* 20.47.56.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CA400 /* 20.60.164.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14960200 /* 20.150.2.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963400 /* 20.150.52.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966E00 /* 20.150.110.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2E00 /* 20.157.46.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CE840 /* 51.140.232.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CE870 /* 51.140.232.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CE880 /* 51.140.232.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CE8A0 /* 51.140.232.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D8000 /* 51.141.128.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D8040 /* 51.141.128.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D8080 /* 51.141.128.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D8180 /* 51.141.129.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFF000 /* 52.239.240.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C840 /* 13.71.200.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C860 /* 13.71.200.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C8F0 /* 13.71.200.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47CA10 /* 13.71.202.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47CA20 /* 13.71.202.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47CA40 /* 13.71.202.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E9840 /* 13.78.152.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EF010 /* 13.78.240.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0400 /* 20.47.4.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0400 /* 20.60.4.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CDA00 /* 20.60.218.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965100 /* 20.150.81.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966200 /* 20.150.98.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2900 /* 20.157.41.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A17010 /* 52.161.112.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A17020 /* 52.161.112.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A1A810 /* 52.161.168.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A1A820 /* 52.161.168.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA400 /* 52.239.164.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA700 /* 52.239.167.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFF400 /* 52.239.244.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D452810 /* 13.69.40.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F60B0 /* 13.95.96.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5FF010 /* 13.95.240.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5FF020 /* 13.95.240.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5FF040 /* 13.95.240.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14266C00 /* 20.38.108.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0700 /* 20.47.7.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1200 /* 20.47.18.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1E00 /* 20.47.30.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1A00 /* 20.60.26.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C8200 /* 20.60.130.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C9600 /* 20.60.150.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CC400 /* 20.60.196.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CDE00 /* 20.60.222.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CFA00 /* 20.60.250.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14960800 /* 20.150.8.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962500 /* 20.150.37.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962A00 /* 20.150.42.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964A00 /* 20.150.74.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964C00 /* 20.150.76.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965300 /* 20.150.83.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967A00 /* 20.150.122.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2100 /* 20.157.33.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9200 /* 20.157.146.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9E00 /* 20.157.158.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DAA00 /* 20.157.170.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DBA00 /* 20.157.186.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DE600 /* 20.157.230.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DF500 /* 20.157.245.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D10A00 /* 20.209.10.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D13000 /* 20.209.48.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D14800 /* 20.209.72.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D14C00 /* 20.209.76.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D16C00 /* 20.209.108.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844B010 /* 40.68.176.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844B030 /* 40.68.176.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844E810 /* 40.68.232.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844E830 /* 40.68.232.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28729810 /* 40.114.152.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28729830 /* 40.114.152.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287648B0 /* 40.118.72.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28764930 /* 40.118.73.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287649B0 /* 40.118.73.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287649D0 /* 40.118.73.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A65020 /* 52.166.80.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A65050 /* 52.166.80.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A65060 /* 52.166.80.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE0820 /* 52.174.8.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEE010 /* 52.174.224.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEE020 /* 52.174.224.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEE040 /* 52.174.224.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEE070 /* 52.174.224.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEE080 /* 52.174.224.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECF030 /* 52.236.240.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECF040 /* 52.236.240.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF8C00 /* 52.239.140.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFD400 /* 52.239.212.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFF200 /* 52.239.242.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6F320 /* 104.214.243.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D3940 /* 168.61.57.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D3980 /* 168.61.57.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D3A00 /* 168.61.58.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D3A80 /* 168.61.58.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D3B40 /* 168.61.59.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D3D00 /* 168.61.61.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D3DC0 /* 168.61.61.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F0000 /* 168.63.0.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F0240 /* 168.63.2.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F0320 /* 168.63.3.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F0340 /* 168.63.3.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F7120 /* 168.63.113.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F7140 /* 168.63.113.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDE820 /* 191.237.232.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDE880 /* 191.237.232.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFCB00 /* 191.239.203.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3900 /* 20.47.57.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CD800 /* 20.60.216.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961280 /* 20.150.18.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962B00 /* 20.150.43.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966A00 /* 20.150.106.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8800 /* 20.157.136.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF87C0 /* 52.239.135.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFBB80 /* 52.239.187.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A810 /* 104.211.168.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D534810 /* 13.83.72.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D589070 /* 13.88.144.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5890F0 /* 13.88.144.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D589140 /* 13.88.145.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D589160 /* 13.88.145.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D589180 /* 13.88.145.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DA850 /* 13.93.168.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DA870 /* 13.93.168.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DA890 /* 13.93.168.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0200 /* 20.47.2.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1600 /* 20.47.22.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0100 /* 20.60.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C2200 /* 20.60.34.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C3400 /* 20.60.52.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C5000 /* 20.60.80.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CA800 /* 20.60.168.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CE600 /* 20.60.230.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CE800 /* 20.60.232.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962200 /* 20.150.34.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965B00 /* 20.150.91.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966600 /* 20.150.102.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2000 /* 20.157.32.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3900 /* 20.157.57.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8200 /* 20.157.130.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DEC00 /* 20.157.236.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D16600 /* 20.209.102.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17632040 /* 23.99.32.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176322E0 /* 23.99.34.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17632560 /* 23.99.37.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17632F20 /* 23.99.47.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E4810 /* 40.78.72.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E7040 /* 40.78.112.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2853E120 /* 40.83.225.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2853E310 /* 40.83.227.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28709810 /* 40.112.152.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870E010 /* 40.112.224.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870E030 /* 40.112.224.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B42810 /* 52.180.40.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B42820 /* 52.180.40.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BEF010 /* 52.190.240.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BEF020 /* 52.190.240.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BEF040 /* 52.190.240.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BEF070 /* 52.190.240.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BEF080 /* 52.190.240.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E12820 /* 52.225.40.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EE3810 /* 52.238.56.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EE3820 /* 52.238.56.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EE3840 /* 52.238.56.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EE3870 /* 52.238.56.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EE3880 /* 52.238.56.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EE38A0 /* 52.238.56.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF6810 /* 52.239.104.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF6820 /* 52.239.104.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA000 /* 52.239.160.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE400 /* 52.239.228.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFFE00 /* 52.239.254.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F15810 /* 52.241.88.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F15820 /* 52.241.88.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F15840 /* 52.241.88.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682AC810 /* 104.42.200.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B8080 /* 138.91.128.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B8100 /* 138.91.129.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E0000 /* 168.62.0.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E0180 /* 168.62.1.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F5940 /* 168.63.89.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F5980 /* 168.63.89.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42B010 /* 13.66.176.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42B030 /* 13.66.176.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E840 /* 13.66.232.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E8D0 /* 13.66.232.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E8E0 /* 13.66.232.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42EA00 /* 13.66.234.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4DB840 /* 13.77.184.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14266300 /* 20.38.99.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3E00 /* 20.47.62.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1400 /* 20.60.20.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C4400 /* 20.60.68.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C9800 /* 20.60.152.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CE400 /* 20.60.228.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964400 /* 20.150.68.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964E00 /* 20.150.78.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965700 /* 20.150.87.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966B00 /* 20.150.107.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3200 /* 20.157.50.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DB400 /* 20.157.180.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DF900 /* 20.157.249.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D16400 /* 20.209.100.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B73010 /* 52.183.48.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B76810 /* 52.183.104.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B76820 /* 52.183.104.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFB010 /* 52.191.176.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFB020 /* 52.191.176.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9480 /* 52.239.148.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB080 /* 52.239.176.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC100 /* 52.239.193.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFD200 /* 52.239.210.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFEC00 /* 52.239.236.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0E00 /* 20.60.14.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C2600 /* 20.60.38.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CA200 /* 20.60.162.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961E00 /* 20.150.30.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2800 /* 20.157.40.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9100 /* 20.157.145.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DBF00 /* 20.157.191.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D10400 /* 20.209.4.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D15C00 /* 20.209.92.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D43BF8F /* 13.67.191.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140CB2D7 /* 20.12.178.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140CEC96 /* 20.12.236.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140CECE4 /* 20.12.236.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1454FD98 /* 20.84.253.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146DD16C /* 20.109.209.108/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763B690 /* 23.99.182.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763DC7A /* 23.99.220.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D0094 /* 40.77.0.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D02A4 /* 40.77.2.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D0980 /* 40.77.9.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D0E85 /* 40.77.14.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A4ACB /* 40.122.74.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5A40F /* 52.165.164.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5A421 /* 52.165.164.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5A51A /* 52.165.165.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5B745 /* 52.165.183.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD248A /* 52.173.36.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EEF800 /* 52.238.248.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD7B83 /* 20.189.123.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB114 /* 52.139.177.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB127 /* 52.139.177.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB172 /* 52.139.177.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB186 /* 52.139.177.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB18D /* 52.139.177.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB19B /* 52.139.177.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB1A3 /* 52.139.177.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB1AA /* 52.139.177.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB1B0 /* 52.139.177.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB1B5 /* 52.139.177.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB1BC /* 52.139.177.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB1CE /* 52.139.177.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB1F7 /* 52.139.177.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB220 /* 52.139.178.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB235 /* 52.139.178.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143EBEB8 /* 20.62.190.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14072F87 /* 20.7.47.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140A9597 /* 20.10.149.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140C15FB /* 20.12.21.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140C1732 /* 20.12.23.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140C242E /* 20.12.36.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140EC74A /* 20.14.199.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140EC751 /* 20.14.199.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C4F6B /* 20.44.79.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146EB735 /* 20.110.183.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146EB781 /* 20.110.183.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F227AB /* 20.242.39.171/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841D133 /* 40.65.209.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2846AF31 /* 40.70.175.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2846E596 /* 40.70.229.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3493BB69 /* 52.147.187.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A71645 /* 52.167.22.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3D8EB /* 52.179.216.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3DB0E /* 52.179.219.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8D4B5 /* 52.184.212.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8D515 /* 52.184.213.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8D5BB /* 52.184.213.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8D635 /* 52.184.214.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8D67B /* 52.184.214.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8D68B /* 52.184.214.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8D8AE /* 52.184.216.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8D8E2 /* 52.184.216.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8D8F6 /* 52.184.216.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8D914 /* 52.184.217.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8D925 /* 52.184.217.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8D938 /* 52.184.217.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8D94E /* 52.184.217.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8D98A /* 52.184.217.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8DC0B /* 52.184.220.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8DC52 /* 52.184.220.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F26161 /* 52.242.97.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F26304 /* 52.242.99.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F263FE /* 52.242.99.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F264DA /* 52.242.100.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F2658C /* 52.242.101.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F265E0 /* 52.242.101.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F265E2 /* 52.242.101.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F26733 /* 52.242.103.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F26747 /* 52.242.103.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FE7240 /* 52.254.114.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14361845 /* 20.54.24.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436184F /* 20.54.24.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14361894 /* 20.54.24.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143618A9 /* 20.54.24.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143618E7 /* 20.54.24.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143618F6 /* 20.54.24.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14361904 /* 20.54.25.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14361910 /* 20.54.25.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14361922 /* 20.54.25.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14361940 /* 20.54.25.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436194A /* 20.54.25.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14361956 /* 20.54.25.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436195D /* 20.54.25.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436197B /* 20.54.25.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14365898 /* 20.54.88.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143658BD /* 20.54.88.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436590F /* 20.54.89.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14365924 /* 20.54.89.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14365941 /* 20.54.89.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436596A /* 20.54.89.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143669D5 /* 20.54.105.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14366E77 /* 20.54.110.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14367B04 /* 20.54.123.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14367BB0 /* 20.54.123.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147B002A /* 20.123.0.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A602BF /* 20.166.2.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A67E38 /* 20.166.126.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BF2E6D /* 20.191.46.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BF2ED3 /* 20.191.46.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DF852A /* 20.223.133.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DFB293 /* 20.223.178.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FA69D /* 40.127.166.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FA896 /* 40.127.168.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FA967 /* 40.127.169.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FA97B /* 40.127.169.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FC591 /* 40.127.197.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FCEA4 /* 40.127.206.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368A232 /* 51.104.162.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368A2A8 /* 51.104.162.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368A472 /* 51.104.164.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368A730 /* 51.104.167.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368A7BA /* 51.104.167.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368A7F5 /* 51.104.167.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368A7FF /* 51.104.167.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D551065 /* 13.85.16.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D551241 /* 13.85.18.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5512C1 /* 13.85.18.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D551615 /* 13.85.22.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D551706 /* 13.85.23.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D551756 /* 13.85.23.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5517CE /* 13.85.23.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E1880D /* 20.225.136.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E18862 /* 20.225.136.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766813C /* 23.102.129.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28772DF6 /* 40.119.45.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28772E09 /* 40.119.46.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28772E2E /* 40.119.46.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28772E8B /* 40.119.46.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287CA82C /* 40.124.168.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287CA9E1 /* 40.124.169.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34986C60 /* 52.152.108.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34986C79 /* 52.152.108.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34986D19 /* 52.152.109.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34986E0E /* 52.152.110.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F924C8 /* 52.249.36.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F1A04 /* 13.95.26.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F1ADE /* 13.95.26.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F1B69 /* 13.95.27.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F1F12 /* 13.95.31.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F1F5F /* 13.95.31.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F1F7F /* 13.95.31.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28447822 /* 40.68.120.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28447B9D /* 40.68.123.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284485D8 /* 40.68.133.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D408380 /* 13.64.131.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B1040 /* 13.91.16.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1403BBC6 /* 20.3.187.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1448EB52 /* 20.72.235.82/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145351A0 /* 20.83.81.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14723A59 /* 20.114.58.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14723A6E /* 20.114.58.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14723B2E /* 20.114.59.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14723B68 /* 20.114.59.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14723BB7 /* 20.114.59.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14723BEC /* 20.114.59.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14723BEF /* 20.114.59.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE0956 /* 20.190.9.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E6A932 /* 20.230.169.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E6A960 /* 20.230.169.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2840414C /* 40.64.65.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28404259 /* 40.64.66.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28404271 /* 40.64.66.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284042E9 /* 40.64.66.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B49A9 /* 40.91.73.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B5059 /* 40.91.80.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287D7835 /* 40.125.120.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287D7A91 /* 40.125.122.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287D7A97 /* 40.125.122.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287D7A9B /* 40.125.122.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287D7AA4 /* 40.125.122.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287D7AB0 /* 40.125.122.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34896669 /* 52.137.102.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34896760 /* 52.137.103.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34896782 /* 52.137.103.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34896EEB /* 52.137.110.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F50D1 /* 52.143.80.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F51DE /* 52.143.81.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F542D /* 52.143.84.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F56D6 /* 52.143.86.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F571C /* 52.143.87.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34949472 /* 52.148.148.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34949682 /* 52.148.150.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349512BE /* 52.149.18.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349515E8 /* 52.149.21.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349516B7 /* 52.149.22.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349C66ED /* 52.156.102.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349C9053 /* 52.156.144.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA2308 /* 52.250.35.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA234A /* 52.250.35.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA2389 /* 52.250.35.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA2496 /* 52.250.36.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14242816 /* 20.36.40.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14242FC5 /* 20.36.47.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246B80 /* 20.36.107.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E1A0 /* 20.37.225.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142479A0 /* 20.36.121.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464900 /* 13.70.73.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C480 /* 20.37.196.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA260 /* 40.79.162.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAAC0 /* 40.79.170.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D27334 /* 104.210.115.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEF408B /* 191.239.64.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEF4098 /* 191.239.64.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D497564 /* 13.73.117.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3480 /* 13.77.52.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE3E0 /* 20.42.227.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDD9FE /* 52.189.217.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFA0A1 /* 191.239.160.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFA0B9 /* 191.239.160.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761611D /* 23.97.97.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682902B6 /* 104.41.2.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8253C /* 191.232.37.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CC60 /* 191.233.204.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9360 /* 191.234.147.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9B60 /* 191.234.155.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE3C0 /* 191.235.227.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90A00 /* 191.233.10.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AC60 /* 13.71.172.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142692E0 /* 20.38.146.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855E2D5 /* 40.85.226.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855E325 /* 40.85.227.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E42CBB /* 52.228.44.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E453C0 /* 52.228.83.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E92822 /* 52.233.40.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED1EAF /* 52.237.30.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69AE0 /* 52.246.154.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456B80 /* 40.69.107.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E062 /* 40.86.224.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E068 /* 40.86.224.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285912C0 /* 40.89.18.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EB2942 /* 52.235.41.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F21681 /* 52.242.22.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22169 /* 52.242.33.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06360 /* 20.192.99.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285032E0 /* 40.80.50.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6A80 /* 52.140.106.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35260 /* 104.211.82.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3608E /* 104.211.96.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D36090 /* 104.211.96.144/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D43BE03 /* 13.67.190.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D43EDF9 /* 13.67.237.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D593793 /* 13.89.55.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59ABE0 /* 13.89.171.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428C820 /* 20.40.200.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763C3EC /* 23.99.195.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D1263 /* 40.77.18.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287AA6EA /* 40.122.166.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A52CE0 /* 52.165.44.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68B00 /* 52.182.139.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682B804E /* 104.43.128.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682B839C /* 104.43.131.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682B844B /* 104.43.132.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D01080 /* 104.208.16.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83DA19A /* 168.61.161.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83DD1E4 /* 168.61.209.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC3C0 /* 20.45.195.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECB00 /* 40.78.203.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B03A /* 52.180.176.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B16C /* 52.180.177.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B1CE /* 52.180.177.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B35E /* 52.180.179.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B500 /* 52.180.181.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B5EF /* 52.180.181.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2460 /* 13.75.36.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6D00 /* 20.189.109.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763623D /* 23.99.98.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17636BE5 /* 23.99.107.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8517 /* 168.63.133.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FD094 /* 168.63.208.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E954B /* 207.46.149.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5C7267 /* 13.92.114.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A06E0 /* 20.42.6.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17600C70 /* 23.96.12.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17606549 /* 23.96.101.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17606D8C /* 23.96.109.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470CC0 /* 40.71.12.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE300 /* 40.78.227.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9A20 /* 40.79.154.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28583024 /* 40.88.48.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BCDE73 /* 52.188.222.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68298163 /* 104.41.129.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89752DB0 /* 137.117.45.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89756D8F /* 137.117.109.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E2480 /* 168.62.36.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EA81B /* 168.62.168.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC25EF /* 191.236.37.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC268E /* 191.236.38.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D508A /* 13.77.80.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142905E0 /* 20.41.5.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284693E0 /* 40.70.147.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285431AA /* 40.84.49.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28543E52 /* 40.84.62.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76A80 /* 52.167.106.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D09080 /* 104.208.144.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D09C63 /* 104.208.156.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D09D12 /* 104.208.157.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D203FE /* 104.210.3.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89742105 /* 137.116.33.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974211D /* 137.116.33.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89742147 /* 137.116.33.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89742592 /* 137.116.37.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89742EB4 /* 137.116.46.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427017D /* 20.39.1.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142701EF /* 20.39.1.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427022C /* 20.39.2.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427027A /* 20.39.2.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427039D /* 20.39.3.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142703BA /* 20.39.3.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270C40 /* 20.39.12.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9530 /* 40.74.149.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2388 /* 40.75.35.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285941A1 /* 40.89.65.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285942EC /* 40.89.66.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859434D /* 40.89.67.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28594611 /* 40.89.70.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5A40 /* 52.138.90.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B926 /* 52.225.185.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1BF43 /* 52.225.191.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDE3F0 /* 52.253.227.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481140 /* 20.72.17.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315340 /* 20.49.83.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284331A0 /* 40.67.49.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433C00 /* 40.67.60.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142889BA /* 20.40.137.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142895A5 /* 20.40.149.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2A60 /* 20.43.42.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8360 /* 40.79.131.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8A60 /* 40.79.138.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9260 /* 40.79.146.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F8B79 /* 52.143.139.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F8C0C /* 52.143.140.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336959C0 /* 51.105.89.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34888FC0 /* 52.136.143.192/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337430E0 /* 51.116.48.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743BE0 /* 51.116.59.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337490E0 /* 51.116.144.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749A20 /* 51.116.154.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F300 /* 51.116.243.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FB00 /* 51.116.251.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92920 /* 20.217.41.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81940 /* 4.232.25.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D479087 /* 13.71.144.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6C80 /* 13.78.108.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4260 /* 20.43.66.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17646491 /* 23.100.100.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17646770 /* 23.100.103.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBA80 /* 40.79.186.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC220 /* 40.79.194.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B0172 /* 138.91.1.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6500 /* 40.74.101.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A8C8C /* 40.74.140.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503AA0 /* 40.80.58.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EE8D0 /* 104.46.232.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EEC1D /* 104.46.236.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B1124 /* 138.91.17.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E4A0 /* 20.192.228.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EBC0 /* 20.192.235.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A1E0 /* 20.192.161.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CB80 /* 20.193.203.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294280 /* 20.41.66.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1B40 /* 20.44.27.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71360 /* 52.231.19.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E72046 /* 52.231.32.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E72052 /* 52.231.32.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850AA80 /* 40.80.170.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79380 /* 52.231.147.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7C870 /* 52.231.200.112/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7C87E /* 52.231.200.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113120 /* 20.17.49.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176140 /* 158.23.97.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760E843 /* 23.96.232.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BEC0 /* 40.80.190.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26E20 /* 52.162.110.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134C79C /* 65.52.199.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134C7BC /* 65.52.199.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37A747 /* 157.55.167.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37D258 /* 157.55.210.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFECA123 /* 191.236.161.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFECA3F5 /* 191.236.163.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFECA42C /* 191.236.164.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E520 /* 13.69.229.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6B80 /* 13.74.107.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4FAC7D /* 13.79.172.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142655E0 /* 20.38.85.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE280 /* 52.138.226.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A4F4BD /* 52.164.244.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A4F551 /* 52.164.245.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A91B4F /* 52.169.27.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A91EAF /* 52.169.30.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9EB5A /* 52.169.235.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B295BC /* 52.178.149.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D52C9 /* 104.45.82.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D58B5 /* 104.45.88.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F247E /* 168.63.36.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337829C0 /* 51.120.41.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337863E0 /* 51.120.99.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786B60 /* 51.120.107.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D360 /* 51.120.211.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DC00 /* 51.120.220.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E1A0 /* 51.120.225.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70120 /* 20.215.1.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152120 /* 20.21.33.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857B40 /* 102.133.123.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859BC0 /* 102.133.155.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685D9E0 /* 102.133.217.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FAE0 /* 102.133.250.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851BC0 /* 102.133.27.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668538C0 /* 102.133.56.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41C0A1 /* 13.65.192.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D41D024 /* 13.65.208.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F940 /* 13.73.249.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7AE0 /* 20.45.122.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315B40 /* 20.49.91.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765B021 /* 23.101.176.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766B294 /* 23.102.178.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766B940 /* 23.102.185.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284AB1B1 /* 40.74.177.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F93C16 /* 52.249.60.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x462531A3 /* 70.37.49.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D613C0 /* 104.214.19.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D64199 /* 104.214.65.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0470 /* 20.44.4.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D71A0 /* 20.45.113.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C380 /* 20.41.195.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC380 /* 40.78.195.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E075 /* 104.211.224.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E077 /* 104.211.224.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E079 /* 104.211.224.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4309A0 /* 13.67.9.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D433A74 /* 13.67.58.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8440 /* 20.43.132.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176130BA /* 23.97.48.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761330C /* 23.97.51.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176252A0 /* 23.98.82.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEA60 /* 40.78.234.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6FDD6830 /* 111.221.104.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2EE148 /* 207.46.225.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5140 /* 68.221.81.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C29C0 /* 51.12.41.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6400 /* 51.12.100.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE360 /* 51.12.227.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEB60 /* 51.12.235.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC1C0 /* 51.12.193.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCC00 /* 51.12.204.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B31C0 /* 51.107.49.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3BE0 /* 51.107.59.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B91A0 /* 51.107.145.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9BE0 /* 51.107.155.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351920 /* 51.53.25.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335A920 /* 51.53.169.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142541A0 /* 20.37.65.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254BE0 /* 20.37.75.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142689C0 /* 20.38.137.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FBE0 /* 65.52.251.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577B60 /* 13.87.123.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336951A0 /* 51.105.81.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681C00 /* 51.104.28.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336942E0 /* 51.105.66.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694AE0 /* 51.105.74.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C94A0 /* 51.140.148.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CB83B /* 51.140.184.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CB83D /* 51.140.184.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CB83F /* 51.140.184.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5720B0 /* 13.87.32.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5720DA /* 13.87.32.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D572185 /* 13.87.33.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573960 /* 13.87.57.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC1A0 /* 51.143.193.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A2C0 /* 51.137.162.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD380 /* 51.140.211.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D083D /* 51.141.8.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D083E /* 51.141.8.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D0840 /* 51.141.8.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C3A0 /* 13.71.195.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E9102 /* 13.78.145.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E9149 /* 13.78.145.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E9686 /* 13.78.150.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EBB12 /* 13.78.187.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968C80 /* 52.150.140.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A15F0C /* 52.161.95.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A16B30 /* 52.161.107.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454140 /* 13.69.65.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456A80 /* 13.69.106.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D457DAD /* 13.69.125.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4999E2 /* 13.73.153.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D499D86 /* 13.73.157.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D507558 /* 13.80.117.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D510185 /* 13.81.1.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D513BFE /* 13.81.59.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D513F06 /* 13.81.63.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D516889 /* 13.81.104.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5ED652 /* 13.94.214.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F091B /* 13.95.9.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14320140 /* 20.50.1.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761B44A /* 23.97.180.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28446499 /* 40.68.100.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844BF36 /* 40.68.191.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844DA5A /* 40.68.218.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28733209 /* 40.115.50.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A6132D /* 52.166.19.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE2171 /* 52.174.33.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE2245 /* 52.174.34.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE23DA /* 52.174.35.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE2663 /* 52.174.38.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEB0CB /* 52.174.176.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEB342 /* 52.174.179.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEB4A4 /* 52.174.180.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E99D09 /* 52.233.157.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E99D4E /* 52.233.157.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E9A1EE /* 52.233.161.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E9AC50 /* 52.233.172.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBA80 /* 52.236.186.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828B719 /* 104.40.183.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D0D08 /* 104.45.13.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682F9560 /* 104.47.149.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974C1E1 /* 137.116.193.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F0535 /* 168.63.5.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE94C55 /* 191.233.76.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348831C0 /* 52.136.49.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39360 /* 104.211.147.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A048 /* 104.211.160.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A04A /* 104.211.160.74/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DAC0 /* 13.86.218.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B37A7 /* 13.91.55.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B585D /* 13.91.88.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B6B9A /* 13.91.107.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DCE90 /* 13.93.206.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852FF40 /* 40.82.255.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870FEEB /* 40.112.254.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876D07F /* 40.118.208.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828459F /* 104.40.69.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E0472 /* 168.62.4.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEF1203 /* 191.239.18.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEF1549 /* 191.239.21.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEF28D9 /* 191.239.40.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428D20 /* 13.66.141.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E1F0 /* 13.66.225.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E375 /* 13.66.227.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E3C1 /* 13.66.227.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284080A0 /* 40.64.128.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF2E0 /* 40.78.242.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFAA0 /* 40.78.250.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3489692E /* 52.137.105.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3494942E /* 52.148.148.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AFDA96 /* 52.175.218.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BF8115 /* 52.191.129.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFA639 /* 52.191.166.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A1E0 /* 20.150.161.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AC00 /* 20.150.172.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B360 /* 20.150.179.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BB60 /* 20.150.187.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E410 /* 20.37.228.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E4C0 /* 20.37.228.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E500 /* 20.37.229.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14350030 /* 20.53.0.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142475D0 /* 20.36.117.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247C20 /* 20.36.124.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247C80 /* 20.36.124.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247D00 /* 20.36.125.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464A90 /* 13.70.74.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C100 /* 20.37.193.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C180 /* 20.37.193.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C6E0 /* 20.37.198.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352D00 /* 20.53.45.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352E00 /* 20.53.46.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5C290 /* 20.213.194.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA350 /* 40.79.163.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FABA0 /* 40.79.171.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D35A0 /* 13.77.53.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE100 /* 20.42.225.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE180 /* 20.42.225.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE688 /* 20.42.230.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C06C8 /* 20.92.6.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB340 /* 104.46.179.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB600 /* 104.46.182.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CEB390 /* 20.206.179.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CDA0 /* 191.233.205.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8920 /* 191.234.137.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8E40 /* 191.234.142.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8F00 /* 191.234.143.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9500 /* 191.234.149.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9D00 /* 191.234.157.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE080 /* 191.235.224.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE100 /* 191.235.225.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90C00 /* 191.233.12.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE936E0 /* 191.233.54.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AF50 /* 13.71.175.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142693E0 /* 20.38.147.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C900 /* 20.48.201.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14742F48 /* 20.116.47.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45080 /* 52.228.80.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45100 /* 52.228.81.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45690 /* 52.228.86.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69BE0 /* 52.246.155.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456CA0 /* 40.69.108.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456F30 /* 40.69.111.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591080 /* 40.89.16.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591100 /* 40.89.17.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285914E0 /* 40.89.20.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6F40 /* 52.139.111.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22D38 /* 52.242.45.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7930 /* 20.43.121.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02A00 /* 20.192.42.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02B00 /* 20.192.43.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06650 /* 20.192.102.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC170 /* 20.204.193.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285033A0 /* 40.80.51.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6880 /* 52.140.104.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6900 /* 52.140.105.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6CD0 /* 52.140.108.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AEC0 /* 13.89.174.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259A00 /* 20.37.154.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259C00 /* 20.37.156.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428CEE0 /* 20.40.206.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0A40 /* 20.44.10.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14629600 /* 20.98.150.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68D10 /* 52.182.141.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DD010 /* 20.45.208.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A0010 /* 40.122.0.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B0E810 /* 52.176.232.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2770 /* 13.75.39.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6880 /* 20.189.104.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6A00 /* 20.189.106.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6DE8 /* 20.189.109.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD3278 /* 20.205.50.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4000 /* 20.205.64.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4380 /* 20.205.67.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4DA0 /* 20.205.77.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4DE0 /* 20.205.77.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD53F0 /* 20.205.83.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A0200 /* 20.42.2.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A0400 /* 20.42.4.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4000 /* 20.42.64.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316F00 /* 20.49.111.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14771C39 /* 20.119.28.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E85968 /* 20.232.89.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470E20 /* 40.71.14.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE560 /* 40.78.229.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14290200 /* 20.41.2.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14290400 /* 20.41.4.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1150 /* 20.44.17.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316610 /* 20.49.102.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C3AC /* 20.98.195.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C6E0 /* 20.98.198.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284694A0 /* 40.70.148.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76BE0 /* 52.167.107.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270860 /* 20.39.8.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270880 /* 20.39.8.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270F00 /* 20.39.15.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DD8848 /* 20.221.136.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9540 /* 40.74.149.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2390 /* 40.75.35.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5C80 /* 52.138.92.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5270 /* 68.220.82.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481600 /* 20.72.22.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481C30 /* 20.72.28.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143153E0 /* 20.49.83.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14630C00 /* 20.99.12.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2880 /* 20.43.40.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2900 /* 20.43.41.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2CD0 /* 20.43.44.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F0430 /* 20.111.4.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8470 /* 40.79.132.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8B50 /* 40.79.139.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F92F0 /* 40.79.146.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD780 /* 51.138.215.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285060C8 /* 40.80.96.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695CB0 /* 51.105.92.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695D40 /* 51.105.93.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695D80 /* 51.105.93.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AA010 /* 51.138.160.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344000 /* 20.52.64.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345D80 /* 20.52.93.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144F6C70 /* 20.79.108.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749320 /* 51.116.147.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749340 /* 51.116.147.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749380 /* 51.116.147.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F570 /* 51.116.245.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F5B0 /* 51.116.245.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FD30 /* 51.116.253.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FD90 /* 51.116.253.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93000 /* 20.217.48.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93E40 /* 20.217.62.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94BD0 /* 20.217.75.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95BD0 /* 20.217.91.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86600 /* 4.232.102.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86F00 /* 4.232.111.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87BD0 /* 4.232.123.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C3D0 /* 4.232.195.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6DC0 /* 13.78.109.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4080 /* 20.43.64.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4100 /* 20.43.65.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4678 /* 20.43.70.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA400 /* 20.191.164.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA500 /* 20.191.165.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D24658 /* 20.210.70.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBBD0 /* 40.79.187.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC3E0 /* 40.79.195.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B3D0 /* 20.18.179.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC0C0 /* 20.189.192.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC728 /* 20.189.199.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D29600 /* 20.210.150.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503880 /* 40.80.56.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503900 /* 40.80.57.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503E18 /* 40.80.62.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B060 /* 40.80.176.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E200 /* 20.192.226.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EE60 /* 20.192.238.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68FCE0 /* 13.104.252.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A200 /* 20.192.162.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CD90 /* 20.193.205.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400BB0 /* 40.64.11.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294080 /* 20.41.64.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294100 /* 20.41.65.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294508 /* 20.41.69.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1BF0 /* 20.44.27.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C243C0 /* 20.194.67.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24E00 /* 20.194.78.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C300 /* 20.200.195.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C7C0 /* 20.200.199.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71440 /* 52.231.20.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8A130 /* 20.200.161.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A880 /* 40.80.168.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A900 /* 40.80.169.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850AC70 /* 40.80.172.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E794A0 /* 52.231.148.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79720 /* 52.231.151.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113800 /* 20.17.56.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114740 /* 20.17.71.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170F00 /* 158.23.15.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176E00 /* 158.23.110.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177BD0 /* 158.23.123.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C3D0 /* 158.23.195.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317218 /* 20.49.114.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317680 /* 20.49.118.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DA3D0 /* 20.125.163.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DABD0 /* 20.125.171.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCBD0 /* 20.125.203.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B900 /* 40.80.185.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BA00 /* 40.80.186.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26F30 /* 52.162.111.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E660 /* 13.69.230.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6CE0 /* 13.74.108.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142650C0 /* 20.38.80.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265200 /* 20.38.82.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324438 /* 20.50.68.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DF403C /* 20.223.64.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DF4190 /* 20.223.65.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE520 /* 52.138.229.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146400C0 /* 20.100.0.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640518 /* 20.100.5.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782CD0 /* 51.120.44.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782D40 /* 51.120.45.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782D80 /* 51.120.45.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337864E0 /* 51.120.100.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786D60 /* 51.120.109.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D520 /* 51.120.213.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378EE00 /* 51.120.238.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8000 /* 51.13.128.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E4E0 /* 51.120.228.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E540 /* 51.120.229.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E580 /* 51.120.229.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70800 /* 20.215.8.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D713D0 /* 20.215.19.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71BD0 /* 20.215.27.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79E40 /* 20.215.158.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152E40 /* 20.21.46.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14153000 /* 20.21.48.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141537D0 /* 20.21.55.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141543D0 /* 20.21.67.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154BD0 /* 20.21.75.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141553C0 /* 20.21.83.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14155400 /* 20.21.84.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575370 /* 20.87.83.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662548E0 /* 102.37.72.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A680 /* 102.37.166.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857C68 /* 102.133.124.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857FA0 /* 102.133.127.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859C88 /* 102.133.156.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685D880 /* 102.133.216.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685D900 /* 102.133.217.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DAF8 /* 102.133.218.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FBB8 /* 102.133.251.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FD30 /* 102.133.253.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287518A0 /* 40.117.24.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254060 /* 102.37.64.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853C30 /* 102.133.60.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853CC0 /* 102.133.60.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853D00 /* 102.133.61.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F420 /* 13.73.244.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FD60 /* 13.73.253.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68F840 /* 13.104.248.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68FCD0 /* 13.104.252.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7BA0 /* 20.45.123.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315F20 /* 20.49.95.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144182C0 /* 20.65.130.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418300 /* 20.65.131.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1461278D /* 20.97.39.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14764FC0 /* 20.118.79.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770900 /* 40.119.9.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770980 /* 40.119.9.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C080 /* 20.41.192.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C100 /* 20.41.193.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C570 /* 20.41.197.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C600 /* 20.41.198.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C680 /* 20.41.198.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09800 /* 20.192.152.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0B860 /* 20.192.184.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC480 /* 40.78.196.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC51F0 /* 52.172.81.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430AD0 /* 13.67.10.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141800D8 /* 20.24.0.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8080 /* 20.43.128.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8200 /* 20.43.130.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34000 /* 20.195.64.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625370 /* 23.98.83.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626A80 /* 23.98.106.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626D40 /* 23.98.109.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626D80 /* 23.98.109.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EECB0 /* 40.78.236.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5E00 /* 68.221.94.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6700 /* 68.221.103.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD93D0 /* 68.221.147.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B9280 /* 20.91.146.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B9300 /* 20.91.147.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1A00 /* 51.12.26.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C4BE8 /* 51.12.75.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C65B0 /* 51.12.101.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE540 /* 51.12.229.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CED40 /* 51.12.237.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68FE80 /* 13.104.254.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1200 /* 51.12.18.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCE10 /* 51.12.206.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00200 /* 20.208.2.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D013D0 /* 20.208.19.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D09010 /* 20.208.144.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CBD0 /* 51.103.203.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3328 /* 51.107.51.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3400 /* 51.107.52.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3480 /* 51.107.52.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8000 /* 51.107.128.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF6C0 /* 51.107.246.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9450 /* 51.107.148.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9500 /* 51.107.149.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9580 /* 51.107.149.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BC050 /* 51.107.192.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356000 /* 51.53.96.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356E40 /* 51.53.110.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B000 /* 51.53.176.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BF40 /* 51.53.191.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254490 /* 20.37.68.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254580 /* 20.37.69.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254600 /* 20.37.70.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28780838 /* 40.120.8.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287809C0 /* 40.120.9.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268D10 /* 20.38.141.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268D80 /* 20.38.141.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268E00 /* 20.38.142.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269800 /* 20.38.152.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC510 /* 20.74.197.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784070 /* 40.120.64.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784B70 /* 40.120.75.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28785640 /* 40.120.86.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8180 /* 20.90.129.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8200 /* 20.90.130.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1475C1B8 /* 20.117.193.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680920 /* 51.104.9.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681880 /* 51.104.24.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681900 /* 51.104.25.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681DD8 /* 51.104.29.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336943F0 /* 51.105.67.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694BF0 /* 51.105.75.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4700 /* 20.58.71.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A26F8 /* 20.90.38.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A080 /* 51.137.160.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A100 /* 51.137.161.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A4C0 /* 51.137.164.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD470 /* 51.140.212.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C700 /* 13.71.199.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450918 /* 20.69.9.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349688C0 /* 52.150.136.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968980 /* 52.150.137.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969A10 /* 52.150.154.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969B00 /* 52.150.155.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969DA0 /* 52.150.157.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969DC0 /* 52.150.157.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4543C0 /* 13.69.67.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456B70 /* 13.69.107.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D457080 /* 13.69.112.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D71C /* 20.105.215.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469F430 /* 20.105.244.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A18C0 /* 40.74.24.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1A00 /* 40.74.26.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871B0E8 /* 40.113.176.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBB70 /* 52.236.187.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DBD0 /* 13.86.219.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B54A8 /* 20.59.84.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A3D0 /* 20.168.163.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852F940 /* 40.82.249.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852FA00 /* 40.82.250.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FAE400 /* 52.250.228.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428F80 /* 13.66.143.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8140 /* 20.42.129.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8400 /* 20.42.132.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D04AA /* 20.125.4.170/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D05F8 /* 20.125.5.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284084E8 /* 40.64.132.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF510 /* 40.78.245.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFBC0 /* 40.78.251.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68FD30 /* 13.104.253.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14768BC8 /* 20.118.139.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D9C10 /* 20.125.156.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A200 /* 20.150.162.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AD10 /* 20.150.173.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B570 /* 20.150.181.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BE40 /* 20.150.190.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3300 /* 13.77.51.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CA00 /* 191.233.202.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AB00 /* 13.71.171.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35000 /* 104.211.80.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2300 /* 13.75.35.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8AC0 /* 40.79.138.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6B00 /* 13.78.107.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E280 /* 13.69.226.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6A80 /* 13.74.106.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FB60 /* 102.133.251.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8140 /* 51.107.129.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287840E0 /* 40.120.64.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FC80 /* 65.52.252.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9300 /* 51.140.147.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428A80 /* 13.66.138.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF200 /* 40.78.242.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246A48 /* 20.36.106.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14253542 /* 20.37.53.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425354C /* 20.37.53.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E048 /* 20.37.224.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353600 /* 20.53.54.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247218 /* 20.36.114.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247848 /* 20.36.120.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353DC0 /* 20.53.61.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4648D0 /* 13.70.72.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C048 /* 20.37.192.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DE80 /* 20.70.222.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3258 /* 13.77.50.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428AD93 /* 20.40.173.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE048 /* 20.42.224.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C04E0 /* 20.92.4.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34932C21 /* 52.147.44.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CBD0 /* 191.233.203.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9F54B /* 191.233.245.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9F576 /* 191.233.245.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE048 /* 191.235.224.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4E60 /* 191.238.78.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90840 /* 191.233.8.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AAF0 /* 13.71.170.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14742A80 /* 20.116.42.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45048 /* 52.228.80.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456A58 /* 40.69.106.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591048 /* 40.89.16.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B5781 /* 52.139.87.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B5796 /* 52.139.87.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22C00 /* 52.242.44.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02F00 /* 20.192.47.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C18E8D /* 20.193.142.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C18EB2 /* 20.193.142.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6848 /* 52.140.104.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D351D0 /* 104.211.81.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AB60 /* 13.89.171.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259848 /* 20.37.152.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1476C3A0 /* 20.118.195.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FFA89 /* 52.143.250.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FFB16 /* 52.143.251.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC048 /* 20.45.192.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0D80 /* 20.46.13.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECA70 /* 40.78.202.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B6D2 /* 52.180.182.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD9D02 /* 52.253.157.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD9FD1 /* 52.253.159.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDE8EB /* 52.253.232.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDEFA2 /* 52.253.239.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2408 /* 13.75.36.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6848 /* 20.189.104.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34E00 /* 20.195.78.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A0048 /* 20.42.0.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589F00 /* 20.88.159.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470B60 /* 40.71.11.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2858DEB3 /* 40.88.222.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2858DF35 /* 40.88.223.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14290048 /* 20.41.0.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C260 /* 20.98.194.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284692E0 /* 40.70.146.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8FF17 /* 52.184.255.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FB0CA1 /* 52.251.12.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270138 /* 20.39.1.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427013A /* 20.39.1.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270848 /* 20.39.8.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14271A8C /* 20.39.26.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14271AF6 /* 20.39.26.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FE9E0 /* 20.47.233.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5A28 /* 52.138.90.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481040 /* 20.72.16.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14630800 /* 20.99.8.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433048 /* 40.67.48.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433B40 /* 40.67.59.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2848 /* 20.43.40.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144A0073 /* 20.74.0.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144A007F /* 20.74.0.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F02E0 /* 20.111.2.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F82E0 /* 40.79.130.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB258 /* 40.79.178.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852EC02 /* 40.82.236.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852EC0D /* 40.82.236.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695848 /* 51.105.88.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BF60 /* 52.136.191.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743048 /* 51.116.48.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743B20 /* 51.116.59.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744D60 /* 51.116.77.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345F60 /* 20.52.95.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749048 /* 51.116.144.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749B60 /* 51.116.155.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92840 /* 20.217.40.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81840 /* 4.232.24.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6C10 /* 13.78.108.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4048 /* 20.43.64.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D244A0 /* 20.210.68.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC2C0 /* 20.189.194.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D291C0 /* 20.210.145.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A64A8 /* 40.74.100.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503848 /* 40.80.56.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851B453 /* 40.81.180.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851B652 /* 40.81.182.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851BD18 /* 40.81.189.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851BD2A /* 40.81.189.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E0C0 /* 20.192.224.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A040 /* 20.192.160.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294048 /* 20.41.64.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24B80 /* 20.194.75.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E712E0 /* 52.231.18.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8A020 /* 20.200.160.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A848 /* 40.80.168.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859D964 /* 40.89.217.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859D96D /* 40.89.217.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E792C8 /* 52.231.146.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113040 /* 20.17.48.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176040 /* 158.23.96.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330640 /* 20.51.6.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764E748 /* 23.100.231.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764E760 /* 23.100.231.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B848 /* 40.80.184.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26AA8 /* 52.162.106.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E3E0 /* 13.69.227.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265048 /* 20.38.80.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14366A56 /* 20.54.106.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14367985 /* 20.54.121.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146BEF60 /* 20.107.239.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782848 /* 51.120.40.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337862A8 /* 51.120.98.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378EB80 /* 51.120.235.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378B020 /* 51.120.176.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DB40 /* 51.120.219.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E048 /* 51.120.224.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70040 /* 20.215.0.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152040 /* 20.21.32.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575200 /* 20.87.82.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859B10 /* 102.133.155.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685D848 /* 102.133.216.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662556E0 /* 102.37.86.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851B10 /* 102.133.27.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853848 /* 102.133.56.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14612380 /* 20.97.35.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770840 /* 40.119.8.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C8B6B /* 40.124.139.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C8BAE /* 40.124.139.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D61340 /* 104.214.19.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0310 /* 20.44.3.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7048 /* 20.45.112.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764D920 /* 23.100.217.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C048 /* 20.41.192.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C099E0 /* 20.192.153.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC258 /* 40.78.194.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430980 /* 13.67.9.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8048 /* 20.43.128.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C32541 /* 20.195.37.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C32616 /* 20.195.38.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35660 /* 20.195.86.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285ABA15 /* 40.90.186.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285ABA5B /* 40.90.186.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5040 /* 68.221.80.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C28C0 /* 51.12.40.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC0C0 /* 51.12.192.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3048 /* 51.107.48.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3B20 /* 51.107.59.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF700 /* 51.107.247.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7C880 /* 20.199.200.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9048 /* 51.107.144.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9B20 /* 51.107.155.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351840 /* 51.53.24.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335A840 /* 51.53.168.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254048 /* 20.37.64.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254A58 /* 20.37.74.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5F80 /* 20.45.95.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268848 /* 20.38.136.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC380 /* 20.74.195.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FA18 /* 65.52.250.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577A68 /* 13.87.122.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695048 /* 51.105.80.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A84E0 /* 20.90.132.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681848 /* 51.104.24.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9410 /* 51.140.148.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573868 /* 13.87.56.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC048 /* 51.143.192.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A2440 /* 20.90.36.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A048 /* 51.137.160.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD2C8 /* 51.140.210.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E9872 /* 52.142.152.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E9A64 /* 52.142.154.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C2E8 /* 13.71.194.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144505E0 /* 20.69.5.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34941E06 /* 52.148.30.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968848 /* 52.150.136.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F1371 /* 52.159.19.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F1443 /* 52.159.20.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F157C /* 52.159.21.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4540E0 /* 13.69.64.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14474D75 /* 20.71.77.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14474DA0 /* 20.71.77.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D280 /* 20.105.210.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1848 /* 40.74.24.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C054E0 /* 20.192.84.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28515EAC /* 40.81.94.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28515EB6 /* 40.81.94.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883048 /* 52.136.48.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39258 /* 104.211.146.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B5020 /* 20.59.80.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDB4E1 /* 20.189.180.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDB508 /* 20.189.181.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852F8F0 /* 40.82.248.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F2A8 /* 40.112.242.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428C90 /* 13.66.140.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8048 /* 20.42.128.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453DEE0 /* 20.83.222.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B5924 /* 40.91.89.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B5B33 /* 40.91.91.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34951864 /* 52.149.24.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34951A0E /* 52.149.26.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A040 /* 20.150.160.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A100 /* 20.150.161.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AB40 /* 20.150.171.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14242421 /* 20.36.36.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142424C4 /* 20.36.36.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E400 /* 20.37.228.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247B58 /* 20.36.123.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464960 /* 13.70.73.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B98C3 /* 13.75.152.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352878 /* 20.53.40.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D25473 /* 104.210.84.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D0238 /* 13.77.2.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D025E /* 13.77.2.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3408 /* 13.77.52.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB0A8 /* 104.46.176.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CCF0 /* 191.233.204.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8A80 /* 191.234.138.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB5468 /* 191.235.84.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB5771 /* 191.235.87.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90AB8 /* 191.233.10.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93398 /* 191.233.51.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47ACF0 /* 13.71.172.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C018 /* 20.48.192.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E42542 /* 52.228.37.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E42DDE /* 52.228.45.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456B08 /* 40.69.107.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591658 /* 40.89.22.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E57BAC /* 52.229.123.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E57F60 /* 52.229.127.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7808 /* 20.43.120.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6CF8 /* 52.140.108.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC9831 /* 52.172.152.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC99D1 /* 52.172.153.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AB78 /* 13.89.171.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428CF90 /* 20.40.207.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC650 /* 20.45.198.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECA88 /* 40.78.202.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B731 /* 52.180.183.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B73A /* 52.180.183.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2670 /* 13.75.38.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6FC0 /* 20.189.111.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766EB7A /* 23.102.235.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF2686 /* 52.175.38.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D52E1E9 /* 13.82.225.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470DA0 /* 40.71.13.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847AF63 /* 40.71.175.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34924F88 /* 52.146.79.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D3083 /* 168.61.48.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D3163 /* 168.61.49.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1008 /* 20.44.16.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316630 /* 20.49.102.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270F30 /* 20.39.15.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9258 /* 40.74.146.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285941DC /* 40.89.65.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28594486 /* 40.89.68.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481428 /* 20.72.20.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284332F8 /* 40.67.50.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433C40 /* 40.67.60.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2DE0 /* 20.43.45.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC2740 /* 20.188.39.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F82F8 /* 40.79.130.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28599D87 /* 40.89.157.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB410 /* 40.79.180.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695C38 /* 51.105.92.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337431A8 /* 51.116.49.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743C30 /* 51.116.60.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337491A8 /* 51.116.145.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749C30 /* 51.116.156.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92E88 /* 20.217.46.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81ED0 /* 4.232.30.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E593C /* 13.78.89.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E7D5A /* 13.78.125.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA000 /* 20.191.160.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBB00 /* 40.79.187.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A65C0 /* 40.74.101.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A7D45 /* 40.74.125.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503F90 /* 40.80.63.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B1D96 /* 138.91.29.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C030D8 /* 20.192.48.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EBF8 /* 20.192.235.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C210 /* 20.193.194.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CBC8 /* 20.193.203.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294520 /* 20.41.69.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1AF0 /* 20.44.26.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E724D1 /* 52.231.36.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7278E /* 52.231.39.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850AC78 /* 40.80.172.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79318 /* 52.231.147.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7CB10 /* 52.231.203.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7CDD6 /* 52.231.205.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141136B8 /* 20.17.54.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176768 /* 158.23.103.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317238 /* 20.49.114.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26EA0 /* 52.162.110.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37D563 /* 157.55.213.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D380826 /* 157.56.8.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E548 /* 13.69.229.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A9984 /* 13.74.153.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349282B8 /* 52.146.130.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A4D260 /* 52.164.210.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782B58 /* 51.120.43.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786430 /* 51.120.100.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DC30 /* 51.120.220.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E428 /* 51.120.228.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70688 /* 20.215.6.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152538 /* 20.21.37.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857C00 /* 102.133.124.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DBB0 /* 102.133.219.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851C50 /* 102.133.28.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853C20 /* 102.133.60.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F008 /* 13.73.240.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FEC0 /* 13.73.254.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0440 /* 20.44.4.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7380 /* 20.45.115.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C578 /* 20.41.197.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC308 /* 40.78.195.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3D8D2 /* 104.211.216.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3DF43 /* 104.211.223.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430998 /* 13.67.9.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4C88F9 /* 13.76.136.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4CF5A0 /* 13.76.245.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626BC0 /* 23.98.107.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5768 /* 68.221.87.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1930 /* 51.12.25.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1130 /* 51.12.17.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B34D0 /* 51.107.52.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3C30 /* 51.107.60.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9418 /* 51.107.148.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9C38 /* 51.107.156.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351EA8 /* 51.53.30.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335AE98 /* 51.53.174.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254428 /* 20.37.68.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254C60 /* 20.37.76.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268B58 /* 20.38.139.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FC60 /* 65.52.252.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577C20 /* 13.87.124.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680860 /* 51.104.8.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681F38 /* 51.104.31.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C2F27 /* 51.140.47.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C3410 /* 51.140.52.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573A20 /* 13.87.58.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A620 /* 51.137.166.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD318 /* 51.140.211.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D0714 /* 51.141.7.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D0D6E /* 51.141.13.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C430 /* 13.71.196.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969AC0 /* 52.150.154.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A10AA7 /* 52.161.10.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A1170F /* 52.161.23.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454108 /* 13.69.65.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D60A0 /* 20.61.96.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A6F35A /* 52.166.243.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE24F4 /* 52.174.36.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883428 /* 52.136.52.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D40FE62 /* 13.64.254.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DAF0 /* 13.86.218.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317E80 /* 20.49.126.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176305EF /* 23.99.5.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765C413 /* 23.101.196.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B8DA2 /* 138.91.141.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428D90 /* 13.66.141.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284086A0 /* 40.64.134.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AFD3D2 /* 52.175.211.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AFDEDE /* 52.175.222.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A7B0 /* 20.150.167.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496ACE8 /* 20.150.172.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246CC0 /* 20.36.108.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246CE0 /* 20.36.108.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247560 /* 20.36.117.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247580 /* 20.36.117.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464EC0 /* 13.70.78.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B9504 /* 13.75.149.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B9942 /* 13.75.153.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143548AA /* 20.53.72.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14355DBC /* 20.53.93.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14355E67 /* 20.53.94.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14356AB6 /* 20.53.106.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14356BD0 /* 20.53.107.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14356BD7 /* 20.53.107.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DF10 /* 20.70.223.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DF20 /* 20.70.223.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FABF0 /* 40.79.171.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EE3C7 /* 40.126.227.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EF00E /* 40.126.240.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EF949 /* 40.126.249.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EFC21 /* 40.126.252.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EFC55 /* 40.126.252.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EFC6B /* 40.126.252.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BBE260 /* 52.187.226.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BBE28B /* 52.187.226.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BBE3F5 /* 52.187.227.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BBE582 /* 52.187.229.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BBE7A1 /* 52.187.231.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BBE7B8 /* 52.187.231.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D259DE /* 104.210.89.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D259F4 /* 104.210.89.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D25AF1 /* 104.210.90.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D25B37 /* 104.210.91.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEF4384 /* 191.239.67.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEF523E /* 191.239.82.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D469FCD /* 13.70.159.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4972CF /* 13.73.114.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D497399 /* 13.73.115.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D038B /* 13.77.3.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D35E0 /* 13.77.53.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3780 /* 13.77.55.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D38A7 /* 13.77.56.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3A88 /* 13.77.58.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446720A /* 20.70.114.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14467240 /* 20.70.114.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446727D /* 20.70.114.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C0520 /* 20.92.5.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28734E46 /* 40.115.78.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28734EED /* 40.115.78.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F50E7 /* 40.127.80.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F53AA /* 40.127.83.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F5426 /* 40.127.84.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F560C /* 40.127.86.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F5B12 /* 40.127.91.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F5D5C /* 40.127.93.92/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349E8539 /* 52.158.133.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDD62A /* 52.189.214.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDD81C /* 52.189.216.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDDC4B /* 52.189.220.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDDE4D /* 52.189.222.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF24B9 /* 52.255.36.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF2A6E /* 52.255.42.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFA14A /* 191.239.161.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFB156 /* 191.239.177.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C918D4 /* 20.201.24.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C91948 /* 20.201.25.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C94087 /* 20.201.64.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C9422C /* 20.201.66.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C94293 /* 20.201.66.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CEB200 /* 20.206.178.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CEB210 /* 20.206.178.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68290073 /* 104.41.0.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68292167 /* 104.41.33.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE82013 /* 191.232.32.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE82064 /* 191.232.32.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8224E /* 191.232.34.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE822F9 /* 191.232.34.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE823B1 /* 191.232.35.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE824D5 /* 191.232.36.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CF00 /* 191.233.207.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CF20 /* 191.233.207.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEAA11C /* 191.234.161.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEAA1A8 /* 191.234.161.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEAA283 /* 191.234.162.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEAA2B2 /* 191.234.162.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEAA6C6 /* 191.234.166.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEAB61A /* 191.234.182.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB52DD /* 191.235.82.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB56C7 /* 191.235.86.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB5B07 /* 191.235.91.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB5EDC /* 191.235.94.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB5FE5 /* 191.235.95.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDCF15 /* 191.237.207.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDFF74 /* 191.237.255.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4EF8 /* 191.238.78.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14282013 /* 20.40.32.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14282031 /* 20.40.32.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428203B /* 20.40.32.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428203C /* 20.40.32.60/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14282050 /* 20.40.32.80/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14282055 /* 20.40.32.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14282057 /* 20.40.32.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14282071 /* 20.40.32.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14282074 /* 20.40.32.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142820A2 /* 20.40.32.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE00D0 /* 20.206.0.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE00E0 /* 20.206.0.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE936F0 /* 191.233.54.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47B896 /* 13.71.184.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47BA01 /* 13.71.186.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58F9D1 /* 13.88.249.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269590 /* 20.38.149.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142695A0 /* 20.38.149.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143084DE /* 20.48.132.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14308585 /* 20.48.133.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143085B6 /* 20.48.133.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146809DD /* 20.104.9.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14680DF9 /* 20.104.13.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14680E09 /* 20.104.14.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14742B18 /* 20.116.43.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14742B20 /* 20.116.43.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14742B30 /* 20.116.43.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855F169 /* 40.85.241.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855FA87 /* 40.85.250.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855FAD4 /* 40.85.250.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855FC2F /* 40.85.252.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E427F4 /* 52.228.39.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E91D4F /* 52.233.29.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E91D5C /* 52.233.29.92/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E91EDA /* 52.233.30.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456EC0 /* 40.69.110.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456EE0 /* 40.69.110.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856CA2A /* 40.86.202.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856CBE4 /* 40.86.203.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856D8F1 /* 40.86.216.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856D9F1 /* 40.86.217.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E295 /* 40.86.226.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E45D /* 40.86.228.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E5782D /* 52.229.120.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E57D39 /* 52.229.125.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E57E19 /* 52.229.126.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8809B /* 52.232.128.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8818F /* 52.232.129.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8856D /* 52.232.133.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22C30 /* 52.242.44.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22CA0 /* 52.242.44.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B79C0 /* 20.43.121.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B79E0 /* 20.43.121.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC090 /* 20.204.192.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC0A0 /* 20.204.192.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCCA48 /* 20.204.202.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCCB6E /* 20.204.203.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCCC4A /* 20.204.204.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCD408 /* 20.204.212.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCD43C /* 20.204.212.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCD44D /* 20.204.212.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC9AA8 /* 52.172.154.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC9DC2 /* 52.172.157.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACB8C0 /* 52.172.184.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACB94F /* 52.172.185.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACBA9F /* 52.172.186.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACBFC2 /* 52.172.191.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D349C3 /* 104.211.73.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D34A91 /* 104.211.74.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35AA2 /* 104.211.90.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35AA9 /* 104.211.90.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3656C /* 104.211.101.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3663E /* 104.211.102.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D43EC4C /* 13.67.236.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D43EC7D /* 13.67.236.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56627E /* 13.86.98.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59B230 /* 13.89.178.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146DCA1D /* 20.109.202.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146DCA24 /* 20.109.202.36/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1476C3E0 /* 20.118.195.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17645210 /* 23.100.82.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764568B /* 23.100.86.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17645718 /* 23.100.87.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17645738 /* 23.100.87.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D1F57 /* 40.77.31.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D6FFE /* 40.77.111.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871DAE6 /* 40.113.218.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A29EC /* 40.122.41.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A2EC5 /* 40.122.46.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287AAAC6 /* 40.122.170.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348DDA37 /* 52.141.218.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348DDD06 /* 52.141.221.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68DA0 /* 52.182.141.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BA687 /* 104.43.166.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BF327 /* 104.43.243.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D0191B /* 104.208.25.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D98C9 /* 168.61.152.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83DAC53 /* 168.61.172.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83DACE1 /* 168.61.172.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83DADAC /* 168.61.173.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83DD9B1 /* 168.61.217.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF598 /* 20.45.245.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF5A0 /* 20.45.245.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DF5B0 /* 20.45.245.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECCD0 /* 40.78.204.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECCE0 /* 40.78.204.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B599F /* 13.75.89.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B5EAD /* 13.75.94.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBBC88 /* 20.187.188.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBBD2F /* 20.187.189.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBBDF6 /* 20.187.189.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBFADD /* 20.187.250.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBFE6E /* 20.187.254.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBFE81 /* 20.187.254.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD3100 /* 20.205.49.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176144AC /* 23.97.68.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17637D63 /* 23.99.125.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28534927 /* 40.83.73.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28534BA5 /* 40.83.75.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28534DD0 /* 40.83.77.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285362C2 /* 40.83.98.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28536445 /* 40.83.100.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28537F13 /* 40.83.127.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF21FE /* 52.175.33.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134AF22 /* 65.52.175.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134B960 /* 65.52.185.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134B9DA /* 65.52.185.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134BA99 /* 65.52.186.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134BABE /* 65.52.186.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134BAE1 /* 65.52.186.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A140 /* 104.214.161.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A160 /* 104.214.161.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8825 /* 168.63.136.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FC8AD /* 168.63.200.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E94B0 /* 207.46.148.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5C626F /* 13.92.98.111/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4030 /* 20.42.64.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A48A0 /* 20.42.72.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14541D12 /* 20.84.29.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14541D1D /* 20.84.29.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14541D96 /* 20.84.29.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589F90 /* 20.88.159.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589FA0 /* 20.88.159.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17641DBE /* 23.100.29.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176584D0 /* 23.101.132.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176588C9 /* 23.101.136.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17658B99 /* 23.101.139.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C9432 /* 40.76.148.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C9719 /* 40.76.151.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C977C /* 40.76.151.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CAE27 /* 40.76.174.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CAE53 /* 40.76.174.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CAE94 /* 40.76.174.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28720815 /* 40.114.8.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28720C1F /* 40.114.12.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28720DD8 /* 40.114.13.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28720E8F /* 40.114.14.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287228BA /* 40.114.40.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28723305 /* 40.114.51.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287252BF /* 40.114.82.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2875634F /* 40.117.99.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287564E4 /* 40.117.100.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28795B29 /* 40.121.91.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E2D8BB /* 52.226.216.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E2D8C5 /* 52.226.216.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E2D8D1 /* 52.226.216.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D9951 /* 104.45.153.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89747EA5 /* 137.116.126.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89754820 /* 137.117.72.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89876A36 /* 137.135.106.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE296B /* 191.238.41.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C11E0 /* 20.44.17.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14603A1C /* 20.96.58.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14603A8B /* 20.96.58.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14603A8C /* 20.96.58.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14605930 /* 20.96.89.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14605936 /* 20.96.89.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14605962 /* 20.96.89.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146059EA /* 20.96.89.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146059FE /* 20.96.89.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14605A1C /* 20.96.90.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C300 /* 20.98.195.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C320 /* 20.98.195.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28461A9A /* 40.70.26.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28461BEC /* 40.70.27.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28461BFD /* 40.70.27.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28461DD6 /* 40.70.29.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28468397 /* 40.70.131.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F2C07 /* 40.79.44.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285419EA /* 40.84.25.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28541E93 /* 40.84.30.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28543B88 /* 40.84.59.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76D50 /* 52.167.109.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E62D0 /* 104.46.98.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E6A9E /* 104.46.106.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D08C28 /* 104.208.140.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D09BC8 /* 104.208.155.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D09EAE /* 104.208.158.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D1834D /* 104.209.131.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D185FE /* 104.209.133.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D18685 /* 104.209.134.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89742C52 /* 137.116.44.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89745046 /* 137.116.80.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x897455F5 /* 137.116.85.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FEC60 /* 20.47.236.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9560 /* 40.74.149.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B23F0 /* 40.75.35.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481EA0 /* 20.72.30.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481EC0 /* 20.72.30.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433CB0 /* 40.67.60.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433CC0 /* 40.67.60.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14288A70 /* 20.40.138.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14288BD1 /* 20.40.139.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14288C95 /* 20.40.140.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F0378 /* 20.111.3.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F0380 /* 20.111.3.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F0390 /* 20.111.3.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC21A9 /* 20.188.33.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC2769 /* 20.188.39.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8B90 /* 40.79.139.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8BA0 /* 40.79.139.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859BA1C /* 40.89.186.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859BA1E /* 40.89.186.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859BCA9 /* 40.89.188.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859BE68 /* 40.89.190.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859BFA1 /* 40.89.191.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BEDD8 /* 51.11.237.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BEDDB /* 51.11.237.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BEDEF /* 51.11.237.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F9C37 /* 52.143.156.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F9ECB /* 52.143.158.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FA253 /* 52.143.162.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FA40F /* 52.143.164.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FA450 /* 52.143.164.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB4A0 /* 40.79.180.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB4C0 /* 40.79.180.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BF58 /* 52.136.191.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BFE0 /* 52.136.191.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BFF0 /* 52.136.191.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743C90 /* 51.116.60.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743CA0 /* 51.116.60.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744D58 /* 51.116.77.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744DE0 /* 51.116.77.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744DF0 /* 51.116.77.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D025 /* 51.116.208.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D033 /* 51.116.208.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D040 /* 51.116.208.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D084 /* 51.116.208.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D0A5 /* 51.116.208.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D0AF /* 51.116.208.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D0C0 /* 51.116.208.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D0C8 /* 51.116.208.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D0D9 /* 51.116.208.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D0DE /* 51.116.208.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D31D /* 51.116.211.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D3A8 /* 51.116.211.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345FB8 /* 20.52.95.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345FC0 /* 20.52.95.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345FD0 /* 20.52.95.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14710840 /* 20.113.8.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14710AA8 /* 20.113.10.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14710B08 /* 20.113.11.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14710B55 /* 20.113.11.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14710B88 /* 20.113.11.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14710C45 /* 20.113.12.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749E40 /* 51.116.158.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374A868 /* 51.116.168.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374A8DE /* 51.116.168.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374AB31 /* 51.116.171.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374ABD1 /* 51.116.171.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374AF00 /* 51.116.175.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374AF11 /* 51.116.175.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374AF33 /* 51.116.175.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374E916 /* 51.116.233.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374E921 /* 51.116.233.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374E923 /* 51.116.233.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374E928 /* 51.116.233.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374E957 /* 51.116.233.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F3E0 /* 51.116.243.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93E50 /* 20.217.62.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93E60 /* 20.217.62.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86F10 /* 4.232.111.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86F20 /* 4.232.111.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47928C /* 13.71.146.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D479E03 /* 13.71.158.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D479E78 /* 13.71.158.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4904CF /* 13.73.4.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E12A8 /* 13.78.18.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E14E8 /* 13.78.20.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E159B /* 13.78.21.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E23E5 /* 13.78.35.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E2ADF /* 13.78.42.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E2BA4 /* 13.78.43.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E3E82 /* 13.78.62.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E54BB /* 13.78.84.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6FA0 /* 13.78.111.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142EBBAE /* 20.46.187.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFACFF /* 20.191.172.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFAE34 /* 20.191.174.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C2CDBD /* 20.194.205.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C2CE62 /* 20.194.206.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C2CF32 /* 20.194.207.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D24520 /* 20.210.69.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176646AE /* 23.102.70.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC530 /* 40.79.197.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829A2F5 /* 104.41.162.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829A366 /* 104.41.163.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829A84C /* 104.41.168.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829AD84 /* 104.41.173.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829B3A5 /* 104.41.179.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829B53B /* 104.41.181.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829B6E8 /* 104.41.182.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC2B8 /* 20.189.194.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC640 /* 20.189.198.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC650 /* 20.189.198.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A40CF /* 40.74.64.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A42C8 /* 40.74.66.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A4455 /* 40.74.68.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A4A15 /* 40.74.74.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A4CD5 /* 40.74.76.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A4DCD /* 40.74.77.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A510D /* 40.74.81.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A55D7 /* 40.74.85.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A8397 /* 40.74.131.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A841D /* 40.74.132.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A8817 /* 40.74.136.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A8C04 /* 40.74.140.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A8CA2 /* 40.74.140.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A8CAD /* 40.74.140.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A8E85 /* 40.74.142.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A8FD7 /* 40.74.143.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B410 /* 40.80.180.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B420 /* 40.80.180.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D689F3 /* 104.214.137.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B112F /* 138.91.17.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B1963 /* 138.91.25.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B1A2D /* 138.91.26.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EE80 /* 20.192.238.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EEA0 /* 20.192.238.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CE30 /* 20.193.206.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CE80 /* 20.193.206.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400AD0 /* 40.64.10.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400B40 /* 40.64.11.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C6A8 /* 20.200.198.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C6B0 /* 20.200.198.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C6C0 /* 20.200.198.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8CA4B /* 20.200.202.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8CEAA /* 20.200.206.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8CF1D /* 20.200.207.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8E78B /* 20.200.231.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8E7DE /* 20.200.231.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8E7E5 /* 20.200.231.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71710 /* 52.231.23.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71720 /* 52.231.23.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8A0A0 /* 20.200.160.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34936110 /* 52.147.97.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34936120 /* 52.147.97.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114750 /* 20.17.71.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114760 /* 20.17.71.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170F10 /* 158.23.15.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170F20 /* 158.23.15.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143306B0 /* 20.51.6.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143306C0 /* 20.51.6.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760C84D /* 23.96.200.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760C8E3 /* 23.96.200.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760CB2E /* 23.96.203.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760D231 /* 23.96.210.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760D41C /* 23.96.212.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760FDDB /* 23.96.253.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26F90 /* 52.162.111.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26FA0 /* 52.162.111.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A2D0D8 /* 52.162.208.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A2D5E7 /* 52.162.213.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x413408E1 /* 65.52.8.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41340940 /* 65.52.9.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41340960 /* 65.52.9.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41340AB7 /* 65.52.10.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41343C05 /* 65.52.60.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134D3A4 /* 65.52.211.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37D23D /* 157.55.210.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37D4EE /* 157.55.212.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D380CCA /* 157.56.12.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E6D6E /* 168.62.109.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EF825 /* 168.62.248.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EF951 /* 168.62.249.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E7A0 /* 13.69.231.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E910 /* 13.69.233.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4FAD31 /* 13.79.173.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146BEFE0 /* 20.107.239.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28705A27 /* 40.112.90.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28705C68 /* 40.112.92.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28705FD8 /* 40.112.95.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287101B5 /* 40.113.1.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287103CA /* 40.113.3.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28710412 /* 40.113.4.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28710A5A /* 40.113.10.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28710B11 /* 40.113.11.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28710C5F /* 40.113.12.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287112D3 /* 40.113.18.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287114CA /* 40.113.20.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871160C /* 40.113.22.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28715E1F /* 40.113.94.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F9079 /* 40.127.144.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F90FB /* 40.127.144.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F9133 /* 40.127.145.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FF0B7 /* 40.127.240.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FF29F /* 40.127.242.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FF2CB /* 40.127.242.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AE213 /* 51.138.226.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AE35E /* 51.138.227.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AE3A0 /* 51.138.227.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928D80 /* 52.146.141.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9DAFD /* 52.169.218.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9DCAE /* 52.169.220.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2A5D7 /* 52.178.165.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2A615 /* 52.178.166.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D5678 /* 168.61.86.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBB4BC /* 191.235.180.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640468 /* 20.100.4.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640470 /* 20.100.4.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640480 /* 20.100.4.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14641A34 /* 20.100.26.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14641A94 /* 20.100.26.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14641B11 /* 20.100.27.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1464240A /* 20.100.36.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14642431 /* 20.100.36.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14642466 /* 20.100.36.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337864A0 /* 51.120.100.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786D20 /* 51.120.109.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378B010 /* 51.120.176.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378B0A0 /* 51.120.176.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DC80 /* 51.120.220.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DCA0 /* 51.120.220.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79E50 /* 20.215.158.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79E60 /* 20.215.158.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152E50 /* 20.21.46.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152E60 /* 20.21.46.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14155060 /* 20.21.80.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575078 /* 20.87.80.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575280 /* 20.87.82.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575290 /* 20.87.82.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1457582F /* 20.87.88.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575B7A /* 20.87.91.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575BA9 /* 20.87.91.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575BAB /* 20.87.91.171/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575C28 /* 20.87.92.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575C40 /* 20.87.92.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859CB0 /* 102.133.156.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E07D /* 102.133.224.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E2C7 /* 102.133.226.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E367 /* 102.133.227.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E404 /* 102.133.228.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E406 /* 102.133.228.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E409 /* 102.133.228.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E604 /* 102.133.230.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E652 /* 102.133.230.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E709 /* 102.133.231.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E733 /* 102.133.231.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E775 /* 102.133.231.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E7BC /* 102.133.231.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FBE0 /* 102.133.251.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255768 /* 102.37.87.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255770 /* 102.37.87.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255780 /* 102.37.87.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851CD0 /* 102.133.28.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851CE0 /* 102.133.28.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854825 /* 102.133.72.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854862 /* 102.133.72.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854871 /* 102.133.72.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854884 /* 102.133.72.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854891 /* 102.133.72.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668548AD /* 102.133.72.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668548B3 /* 102.133.72.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668548B7 /* 102.133.72.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668548B8 /* 102.133.72.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668548BE /* 102.133.72.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854BA9 /* 102.133.75.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854BBF /* 102.133.75.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4127F7 /* 13.65.39.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D415211 /* 13.65.82.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4152BE /* 13.65.82.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D415638 /* 13.65.86.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D416227 /* 13.65.98.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4234E8 /* 13.66.52.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F490 /* 13.73.244.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F4A0 /* 13.73.244.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54292E /* 13.84.41.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D542B2D /* 13.84.43.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D549FA8 /* 13.84.159.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D554F9B /* 13.85.79.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1458D158 /* 20.88.209.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1458D161 /* 20.88.209.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1458D171 /* 20.88.209.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145E95C7 /* 20.94.149.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145E96DC /* 20.94.150.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145E9729 /* 20.94.151.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14612730 /* 20.97.39.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14612740 /* 20.97.39.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17647C54 /* 23.100.124.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17647FAC /* 23.100.127.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765B7E1 /* 23.101.183.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765BF6A /* 23.101.191.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28548A84 /* 40.84.138.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x46253206 /* 70.37.50.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4625367A /* 70.37.54.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D29030 /* 104.210.144.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D29959 /* 104.210.153.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D7589C /* 104.215.88.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D75990 /* 104.215.89.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D75A56 /* 104.215.90.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D75ABD /* 104.215.90.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D75ACB /* 104.215.90.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D75D7D /* 104.215.93.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEEA13E /* 191.238.161.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEEA341 /* 191.238.163.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C04B0 /* 20.44.4.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C04C0 /* 20.44.4.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C099D8 /* 20.192.153.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09DE0 /* 20.192.157.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09DF0 /* 20.192.157.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0B800 /* 20.192.184.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC4B0 /* 40.78.196.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC092F /* 52.172.9.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC312B /* 52.172.49.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC3218 /* 52.172.50.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC338C /* 52.172.51.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC3400 /* 52.172.52.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC37E7 /* 52.172.55.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E198 /* 104.211.225.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E3E5 /* 104.211.227.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E573 /* 104.211.229.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E67E /* 104.211.230.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E681 /* 104.211.230.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E727 /* 104.211.231.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430DE0 /* 13.67.13.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D435B87 /* 13.67.91.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D436B80 /* 13.67.107.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D436E6D /* 13.67.110.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4C04C2 /* 13.76.4.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4C0560 /* 13.76.5.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4C859B /* 13.76.133.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C3311D /* 20.195.49.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C331F0 /* 20.195.49.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C331F6 /* 20.195.49.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C6807C /* 20.198.128.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C68298 /* 20.198.130.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C6829B /* 20.198.130.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D44FE0 /* 20.212.79.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEF10 /* 40.78.239.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A35DD6 /* 52.163.93.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A3E45D /* 52.163.228.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A3E6A6 /* 52.163.230.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB4151 /* 52.187.65.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB419B /* 52.187.65.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D7B01F /* 104.215.176.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D7B051 /* 104.215.176.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D7B105 /* 104.215.177.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D7B2CC /* 104.215.178.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D7B385 /* 104.215.179.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D7B4CB /* 104.215.180.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D7B506 /* 104.215.181.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6FDD5548 /* 111.221.85.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6FDD554A /* 111.221.85.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6710 /* 68.221.103.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6720 /* 68.221.103.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C4B78 /* 51.12.75.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C4B80 /* 51.12.75.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C4B90 /* 51.12.75.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6470 /* 51.12.100.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C66A0 /* 51.12.102.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE520 /* 51.12.229.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCC70 /* 51.12.204.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCCC0 /* 51.12.204.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CBE025 /* 20.203.224.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CBE1F2 /* 20.203.225.242/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CBE3E2 /* 20.203.227.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CBE57F /* 20.203.229.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CBE63A /* 20.203.230.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CBE6AA /* 20.203.230.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00758 /* 20.208.7.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00760 /* 20.208.7.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00770 /* 20.208.7.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33678034 /* 51.103.128.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336784EC /* 51.103.132.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33678645 /* 51.103.134.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367868A /* 51.103.134.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33678733 /* 51.103.135.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33678825 /* 51.103.136.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336788D1 /* 51.103.136.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336788D2 /* 51.103.136.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367894F /* 51.103.137.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33678A1C /* 51.103.138.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33678A60 /* 51.103.138.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33678B7A /* 51.103.139.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3CA0 /* 51.107.60.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3CC0 /* 51.107.60.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7C900 /* 20.199.201.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9CA0 /* 51.107.156.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9CC0 /* 51.107.156.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE197 /* 51.107.225.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE1A3 /* 51.107.225.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE1A7 /* 51.107.225.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE1B3 /* 51.107.225.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE1B4 /* 51.107.225.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE1BA /* 51.107.225.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE1BE /* 51.107.225.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE756 /* 51.107.231.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BEF42 /* 51.107.239.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BEF53 /* 51.107.239.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BEF70 /* 51.107.239.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BEF7B /* 51.107.239.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356E50 /* 51.53.110.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356E60 /* 51.53.110.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BF50 /* 51.53.191.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BF60 /* 51.53.191.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254CD0 /* 20.37.76.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254CE0 /* 20.37.76.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D401D /* 20.45.64.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4057 /* 20.45.64.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4386 /* 20.45.67.134/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D43AA /* 20.45.67.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D47D5 /* 20.45.71.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4836 /* 20.45.72.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4848 /* 20.45.72.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4BC1 /* 20.45.75.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4BC8 /* 20.45.75.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4BEC /* 20.45.75.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4FEF /* 20.45.79.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5800 /* 20.203.88.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E2ADC /* 20.46.42.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E2EAD /* 20.46.46.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC410 /* 20.74.196.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC420 /* 20.74.196.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AFAF7 /* 20.74.250.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AFB1E /* 20.74.251.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AFF1C /* 20.74.255.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AFF25 /* 20.74.255.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AFF93 /* 20.74.255.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D8104B /* 20.216.16.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877A698 /* 40.119.166.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784000 /* 40.120.64.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784020 /* 40.120.64.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BD468 /* 40.123.212.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BD849 /* 40.123.216.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BD9A5 /* 40.123.217.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BE08F /* 40.123.224.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BE0E3 /* 40.123.224.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BE4B6 /* 40.123.228.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BE62D /* 40.123.230.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BE7B3 /* 40.123.231.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BE7BA /* 40.123.231.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577C90 /* 13.87.124.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577CA0 /* 13.87.124.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145ACCBC /* 20.90.204.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145ACCE4 /* 20.90.204.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145ACCE8 /* 20.90.204.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146C667B /* 20.108.102.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146C668E /* 20.108.102.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146C66B4 /* 20.108.102.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1475C0A8 /* 20.117.192.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1475C0B0 /* 20.117.192.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1475C0C0 /* 20.117.192.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680970 /* 51.104.9.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694560 /* 51.105.69.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C1CE1 /* 51.140.28.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4955 /* 51.140.73.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4A0E /* 51.140.74.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4E2C /* 51.140.78.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4E47 /* 51.140.78.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4F6D /* 51.140.79.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C5427 /* 51.140.84.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C89BE /* 51.140.137.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C8E1C /* 51.140.142.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9987 /* 51.140.153.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9B51 /* 51.140.155.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9E18 /* 51.140.158.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573A90 /* 13.87.58.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573AA0 /* 13.87.58.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A25E0 /* 20.90.37.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B6110 /* 51.11.97.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B6120 /* 51.11.97.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336839A0 /* 51.104.57.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33683A28 /* 51.104.58.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33683EA6 /* 51.104.62.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D2DEE /* 51.141.45.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D2F88 /* 51.141.47.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D3062 /* 51.141.48.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D3391 /* 51.141.51.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D35A4 /* 51.141.53.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D36B9 /* 51.141.54.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D7070 /* 51.141.112.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D7124 /* 51.141.113.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D724D /* 51.141.114.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D7677 /* 51.141.118.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D773F /* 51.141.119.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D7796 /* 51.141.119.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D7948 /* 51.141.121.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D79DC /* 51.141.121.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D7BA1 /* 51.141.123.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C780 /* 13.71.199.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C7A0 /* 13.71.199.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4DDB80 /* 13.77.219.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4DDC86 /* 13.77.220.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E8114 /* 13.78.129.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E89B3 /* 13.78.137.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E89F7 /* 13.78.137.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E8D4B /* 13.78.141.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E948C /* 13.78.148.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E97A1 /* 13.78.151.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EC8E9 /* 13.78.200.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4ED4A3 /* 13.78.212.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450808 /* 20.69.8.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450810 /* 20.69.8.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450820 /* 20.69.8.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A10880 /* 52.161.8.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A1096C /* 52.161.9.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A112DA /* 52.161.18.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A11352 /* 52.161.19.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A11AAC /* 52.161.26.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A11BBE /* 52.161.27.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A140D9 /* 52.161.64.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A15BD7 /* 52.161.91.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4547A0 /* 13.69.71.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456D90 /* 13.69.109.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F9341 /* 13.95.147.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F9B35 /* 13.95.155.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144CA19C /* 20.76.161.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144CAA91 /* 20.76.170.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144CAB22 /* 20.76.171.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144CAE48 /* 20.76.174.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14525710 /* 20.82.87.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145257C0 /* 20.82.87.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145257E5 /* 20.82.87.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145DEB6B /* 20.93.235.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145DEC1A /* 20.93.236.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145DEC51 /* 20.93.236.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1465AE17 /* 20.101.174.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1465AE31 /* 20.101.174.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1465AE34 /* 20.101.174.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1467102F /* 20.103.16.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146711DF /* 20.103.17.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146711F7 /* 20.103.17.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14671254 /* 20.103.18.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14671551 /* 20.103.21.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14671571 /* 20.103.21.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1467391D /* 20.103.57.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146739D2 /* 20.103.57.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14673A74 /* 20.103.58.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14675429 /* 20.103.84.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1467543D /* 20.103.84.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14675B27 /* 20.103.91.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14675EFA /* 20.103.94.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14675EFF /* 20.103.94.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469F398 /* 20.105.243.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469F3A0 /* 20.105.243.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761D27E /* 23.97.210.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761D3B3 /* 23.97.211.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1761DA82 /* 23.97.218.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844D117 /* 40.68.209.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844DE41 /* 40.68.222.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3390B0B9 /* 51.144.176.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3390B6C9 /* 51.144.182.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE3106 /* 52.174.49.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE36DA /* 52.174.54.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828DA25 /* 104.40.218.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D0934 /* 104.45.9.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E2063 /* 104.46.32.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E225D /* 104.46.34.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E22D0 /* 104.46.34.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E273F /* 104.46.39.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E2AA7 /* 104.46.42.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682F8AD6 /* 104.47.138.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE94433 /* 191.233.68.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142680B0 /* 20.38.128.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142680C0 /* 20.38.128.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C054D8 /* 20.192.84.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CFA860 /* 20.207.168.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CFA870 /* 20.207.168.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39A07 /* 104.211.154.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39A3B /* 104.211.154.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39C99 /* 104.211.156.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39DED /* 104.211.157.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39E7B /* 104.211.158.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39E7F /* 104.211.158.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A2CD /* 104.211.162.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A419 /* 104.211.164.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A450 /* 104.211.164.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A470 /* 104.211.164.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A488 /* 104.211.164.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A551 /* 104.211.165.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D40E7C4 /* 13.64.231.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DDF0 /* 13.86.221.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DF00 /* 13.86.223.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57CCB6 /* 13.87.204.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57CCD2 /* 13.87.204.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57CF27 /* 13.87.207.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57CF4F /* 13.87.207.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58A89E /* 13.88.168.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B51DD /* 13.91.81.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5BFCB8 /* 13.91.252.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B50E0 /* 20.59.80.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B6780 /* 20.59.103.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E4170 /* 40.78.65.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E41C1 /* 40.78.65.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28538661 /* 40.83.134.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2853A450 /* 40.83.164.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876F1F3 /* 40.118.241.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876F4F1 /* 40.118.244.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A0441B /* 52.160.68.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A04669 /* 52.160.70.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A046DD /* 52.160.70.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A05AED /* 52.160.90.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A05C70 /* 52.160.92.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68282094 /* 104.40.32.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68282270 /* 104.40.34.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682822A9 /* 104.40.34.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828318C /* 104.40.49.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828364A /* 104.40.54.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68283BBC /* 104.40.59.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68283D96 /* 104.40.61.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68283EB2 /* 104.40.62.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A2620 /* 104.42.38.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A28A4 /* 104.42.40.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A2C1C /* 104.42.44.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A3191 /* 104.42.49.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682AE0E3 /* 104.42.224.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682AEC5D /* 104.42.236.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5BBC89 /* 138.91.188.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D38A0D4 /* 157.56.160.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D38A235 /* 157.56.162.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D38A793 /* 157.56.167.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E094A /* 168.62.9.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E0964 /* 168.62.9.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E1CBF /* 168.62.28.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EDB34 /* 168.62.219.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EDB53 /* 168.62.219.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428044 /* 13.66.128.68/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42C9A9 /* 13.66.201.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42D2A7 /* 13.66.210.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E0A9 /* 13.66.224.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42F6DB /* 13.66.246.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D959F /* 13.77.149.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D9815 /* 13.77.152.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1448F3E1 /* 20.72.243.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1448F43A /* 20.72.244.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1448F46C /* 20.72.244.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1463BD46 /* 20.99.189.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1463BD9E /* 20.99.189.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1463BE13 /* 20.99.190.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D0150 /* 20.125.1.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D0160 /* 20.125.1.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF590 /* 40.78.245.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF5A0 /* 40.78.245.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AFC684 /* 52.175.198.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B71D84 /* 52.183.29.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B71E0A /* 52.183.30.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B71EA9 /* 52.183.30.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B72743 /* 52.183.39.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A55E4 /* 20.106.85.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A74AC /* 20.106.116.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A74BA /* 20.106.116.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A74CF /* 20.106.116.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A74E1 /* 20.106.116.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14768B88 /* 20.118.139.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14768B90 /* 20.118.139.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14768BA0 /* 20.118.139.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14969FA3 /* 20.150.159.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496ACF0 /* 20.150.172.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496ADC0 /* 20.150.173.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B520 /* 20.150.181.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464AA0 /* 13.70.74.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3560 /* 13.77.53.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A0B8 /* 20.40.160.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A177 /* 20.40.161.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A183 /* 20.40.161.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A184 /* 20.40.161.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A187 /* 20.40.161.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A18C /* 20.40.161.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A1A0 /* 20.40.161.160/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A256 /* 20.40.162.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A2C8 /* 20.40.162.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A358 /* 20.40.163.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A360 /* 20.40.163.96/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A382 /* 20.40.163.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A385 /* 20.40.163.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A3B2 /* 20.40.163.178/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513850 /* 40.81.56.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851398A /* 40.81.57.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851398D /* 40.81.57.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513990 /* 40.81.57.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851399D /* 40.81.57.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285139A4 /* 40.81.57.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285139A9 /* 40.81.57.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513AB4 /* 40.81.58.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513AB8 /* 40.81.58.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513AC1 /* 40.81.58.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513B04 /* 40.81.59.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513B5A /* 40.81.59.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513B5D /* 40.81.59.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513EA2 /* 40.81.62.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513EB3 /* 40.81.62.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513EC1 /* 40.81.62.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513EC7 /* 40.81.62.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513ECE /* 40.81.62.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513ED1 /* 40.81.62.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513ED4 /* 40.81.62.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513EDC /* 40.81.62.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513EE0 /* 40.81.62.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513EFF /* 40.81.62.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513F01 /* 40.81.63.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513F02 /* 40.81.63.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513F04 /* 40.81.63.4/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513F07 /* 40.81.63.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513F08 /* 40.81.63.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513FEB /* 40.81.63.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513FF5 /* 40.81.63.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513FF8 /* 40.81.63.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873476F /* 40.115.71.111/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDD024 /* 52.189.208.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDD524 /* 52.189.213.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDD57C /* 52.189.213.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDDAFD /* 52.189.218.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AF00 /* 13.71.175.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58E026 /* 13.88.224.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58E0D3 /* 13.88.224.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58E0DE /* 13.88.224.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58E24A /* 13.88.226.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58E307 /* 13.88.227.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852B850 /* 40.82.184.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852B924 /* 40.82.185.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852B975 /* 40.82.185.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852B9E5 /* 40.82.185.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BAA6 /* 40.82.186.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BAA8 /* 40.82.186.168/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BAB0 /* 40.82.186.176/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BAB4 /* 40.82.186.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BAB6 /* 40.82.186.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BAB9 /* 40.82.186.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BAD6 /* 40.82.186.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BAE7 /* 40.82.186.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BBA1 /* 40.82.187.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BBA2 /* 40.82.187.162/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BBA4 /* 40.82.187.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BBB1 /* 40.82.187.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BBB2 /* 40.82.187.178/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BBC7 /* 40.82.187.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BBC8 /* 40.82.187.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BBCA /* 40.82.187.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BBCC /* 40.82.187.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BBD0 /* 40.82.187.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BBD4 /* 40.82.187.212/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BBDA /* 40.82.187.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BBDF /* 40.82.187.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BEA3 /* 40.82.190.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BF3A /* 40.82.191.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B0146 /* 52.139.1.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B019C /* 52.139.1.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B019E /* 52.139.1.158/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B01C8 /* 52.139.1.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B01DA /* 52.139.1.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B0200 /* 52.139.2.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B1069 /* 52.139.16.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B12EA /* 52.139.18.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B12EC /* 52.139.18.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B1347 /* 52.139.19.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B13BB /* 52.139.19.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B13D7 /* 52.139.19.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B13F7 /* 52.139.19.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B141F /* 52.139.20.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B1476 /* 52.139.20.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B1546 /* 52.139.21.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456C60 /* 40.69.108.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59B200 /* 13.89.178.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C08D0 /* 20.44.8.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68BD0 /* 52.182.139.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2780 /* 13.75.39.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A1DA2 /* 20.42.29.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A1F30 /* 20.42.31.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A1FFB /* 20.42.31.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470E10 /* 40.71.14.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C4ED9 /* 40.76.78.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE540 /* 40.78.229.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9C70 /* 40.79.156.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28727093 /* 40.114.112.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28798601 /* 40.121.134.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497EDF3 /* 52.151.237.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497EE05 /* 52.151.238.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497F441 /* 52.151.244.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497F71B /* 52.151.247.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BCD9EC /* 52.188.217.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BE1ADC /* 52.190.26.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BE1F3E /* 52.190.31.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFEDBC /* 52.191.237.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFEE41 /* 52.191.238.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0BC9D /* 52.224.188.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0BCA8 /* 52.224.188.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0BEE1 /* 52.224.190.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0BF3E /* 52.224.191.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0C9D8 /* 52.224.201.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0C9DF /* 52.224.201.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0CA56 /* 52.224.202.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0CA5B /* 52.224.202.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DA867 /* 104.45.168.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DA868 /* 104.45.168.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DA86A /* 104.45.168.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DA86C /* 104.45.168.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DA86F /* 104.45.168.111/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DA872 /* 104.45.168.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAA46 /* 104.45.170.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAA7F /* 104.45.170.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAAA1 /* 104.45.170.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAAAD /* 104.45.170.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAAAE /* 104.45.170.174/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAAB0 /* 104.45.170.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAAB2 /* 104.45.170.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAAB4 /* 104.45.170.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAAB6 /* 104.45.170.182/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAAB8 /* 104.45.170.184/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAABA /* 104.45.170.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAABC /* 104.45.170.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAABF /* 104.45.170.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAAC2 /* 104.45.170.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAAC4 /* 104.45.170.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D309E2 /* 104.211.9.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D501C /* 13.77.80.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424DC5D /* 20.36.220.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424DE3B /* 20.36.222.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424DE3C /* 20.36.222.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424F04C /* 20.36.240.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424F4D0 /* 20.36.244.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424F500 /* 20.36.245.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424F5B6 /* 20.36.245.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424F5EB /* 20.36.245.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424F6BC /* 20.36.246.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424F828 /* 20.36.248.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1140 /* 20.44.17.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C48AD /* 20.44.72.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C48D9 /* 20.44.72.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C49FD /* 20.44.73.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17644399 /* 23.100.67.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841E9FD /* 40.65.233.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841EB36 /* 40.65.235.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2843985B /* 40.67.152.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284398E3 /* 40.67.152.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28439AA0 /* 40.67.154.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28439B92 /* 40.67.155.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28439F37 /* 40.67.159.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284600FF /* 40.70.0.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28461D31 /* 40.70.29.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28461DC8 /* 40.70.29.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469470 /* 40.70.148.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2846B85A /* 40.70.184.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28540253 /* 40.84.2.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854045D /* 40.84.4.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28540477 /* 40.84.4.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2854051C /* 40.84.5.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28543110 /* 40.84.49.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76B60 /* 52.167.107.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B1552B /* 52.177.85.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B39BB1 /* 52.179.155.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3C249 /* 52.179.194.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B3C629 /* 52.179.198.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A552 /* 52.184.165.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1E1DA /* 52.225.225.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1E7E8 /* 52.225.231.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8E0E3 /* 52.232.224.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8E154 /* 52.232.225.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8E4D9 /* 52.232.228.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8F560 /* 52.232.245.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E74D3 /* 104.46.116.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E7948 /* 104.46.121.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E7ABD /* 104.46.122.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D0D8DD /* 104.208.216.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D1A8FB /* 104.209.168.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D20020 /* 104.210.0.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974341F /* 137.116.52.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142884C3 /* 20.40.132.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428864F /* 20.40.134.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428865E /* 20.40.134.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2842389E /* 40.66.56.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284239A4 /* 40.66.57.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284239CB /* 40.66.57.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423B29 /* 40.66.59.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423BC1 /* 40.66.59.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423BC3 /* 40.66.59.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423BC4 /* 40.66.59.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423BF6 /* 40.66.59.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423C65 /* 40.66.60.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423C76 /* 40.66.60.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423CB4 /* 40.66.60.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423CB9 /* 40.66.60.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423CC8 /* 40.66.60.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423CCE /* 40.66.60.206/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423CD0 /* 40.66.60.208/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423CD2 /* 40.66.60.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423CD7 /* 40.66.60.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423CD8 /* 40.66.60.216/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423CDB /* 40.66.60.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423CDC /* 40.66.60.220/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423CDE /* 40.66.60.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423CE0 /* 40.66.60.224/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423CE2 /* 40.66.60.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423CE8 /* 40.66.60.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423D3D /* 40.66.61.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423D9E /* 40.66.61.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423DC1 /* 40.66.61.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423DE2 /* 40.66.61.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423E07 /* 40.66.62.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423E09 /* 40.66.62.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423E4E /* 40.66.62.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423E82 /* 40.66.62.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423E9A /* 40.66.62.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423EE1 /* 40.66.62.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423F94 /* 40.66.63.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423FFF /* 40.66.63.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8460 /* 40.79.132.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8B10 /* 40.79.139.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F92E0 /* 40.79.146.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285988E3 /* 40.89.136.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28598965 /* 40.89.137.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28598EB8 /* 40.89.142.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28598F2B /* 40.89.143.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB440 /* 40.79.180.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45BE73 /* 13.69.190.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E630 /* 13.69.230.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6CB0 /* 13.74.108.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4AA898 /* 13.74.168.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2843FB00 /* 40.67.251.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2843FEE9 /* 40.67.254.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE3A0 /* 52.138.227.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E7091 /* 52.142.112.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E7092 /* 52.142.112.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E7487 /* 52.142.116.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E74AE /* 52.142.116.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E74FA /* 52.142.116.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E75B7 /* 52.142.117.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E7682 /* 52.142.118.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E7906 /* 52.142.121.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E794B /* 52.142.121.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E7C17 /* 52.142.124.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E7F7F /* 52.142.127.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BA158 /* 52.155.161.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BA15B /* 52.155.161.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BA483 /* 52.155.164.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BA632 /* 52.155.166.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BA7E7 /* 52.155.167.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BA82D /* 52.155.168.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BB10D /* 52.155.177.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BB2F7 /* 52.155.178.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BB354 /* 52.155.179.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BB4D0 /* 52.155.180.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BB5B4 /* 52.155.181.180/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BB630 /* 52.155.182.48/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BB632 /* 52.155.182.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BB68A /* 52.155.182.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BB68D /* 52.155.182.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CC5D0 /* 52.156.197.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CC5FE /* 52.156.197.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CC6C4 /* 52.156.198.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCA07 /* 52.156.202.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCB16 /* 52.156.203.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCBC6 /* 52.156.203.198/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCC18 /* 52.156.204.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCC33 /* 52.156.204.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCC63 /* 52.156.204.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCC8B /* 52.156.204.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCD89 /* 52.156.205.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCDB6 /* 52.156.205.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCDDE /* 52.156.205.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCDE2 /* 52.156.205.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCE2B /* 52.156.206.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCE2D /* 52.156.206.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCE2E /* 52.156.206.46/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349E1CEB /* 52.158.28.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9C0ED /* 52.169.192.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134E5C8 /* 65.52.229.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F2699 /* 168.63.38.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F2E0 /* 13.73.242.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D037F /* 20.45.3.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC48F8 /* 20.188.72.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850DB31 /* 40.80.219.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850DCD7 /* 40.80.220.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850DCF6 /* 40.80.220.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850DD4D /* 40.80.221.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850DE5B /* 40.80.222.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850DEC5 /* 40.80.222.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C3545 /* 40.124.53.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3499F06B /* 52.153.240.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F919A0 /* 52.249.25.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F919A5 /* 52.249.25.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430AC0 /* 13.67.10.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4330DD /* 13.67.48.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4C2B49 /* 13.76.43.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4C81FF /* 13.76.129.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B83904 /* 20.184.57.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B839DA /* 20.184.57.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B83A2E /* 20.184.58.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B83A6E /* 20.184.58.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B83C4D /* 20.184.60.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B83D43 /* 20.184.61.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B83DFD /* 20.184.61.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B83F9E /* 20.184.63.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B83FD8 /* 20.184.63.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B83FE8 /* 20.184.63.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176136A0 /* 23.97.54.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176137A5 /* 23.97.55.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625360 /* 23.98.83.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841A92E /* 40.65.169.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841A961 /* 40.65.169.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841A9C4 /* 40.65.169.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841A9EC /* 40.65.169.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841AA11 /* 40.65.170.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841AA1A /* 40.65.170.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841AA50 /* 40.65.170.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841AA70 /* 40.65.170.112/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841AA7B /* 40.65.170.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841AA7D /* 40.65.170.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841AA80 /* 40.65.170.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841AA85 /* 40.65.170.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841AA89 /* 40.65.170.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EECA0 /* 40.78.236.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285AB8C5 /* 40.90.184.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285AB940 /* 40.90.185.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285ABF99 /* 40.90.191.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877CB62 /* 40.119.203.98/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877CB9E /* 40.119.203.158/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877CBD0 /* 40.119.203.208/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877CF83 /* 40.119.207.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877CF90 /* 40.119.207.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877CFA4 /* 40.119.207.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877CFA6 /* 40.119.207.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877CFAE /* 40.119.207.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877CFB6 /* 40.119.207.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877CFC1 /* 40.119.207.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877CFC8 /* 40.119.207.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877D7A7 /* 40.119.215.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BF501 /* 52.139.245.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BF515 /* 52.139.245.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BF528 /* 52.139.245.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BF530 /* 52.139.245.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BFBDB /* 52.139.251.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BFC69 /* 52.139.252.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349473BC /* 52.148.115.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349473C2 /* 52.148.115.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349473EE /* 52.148.115.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34947425 /* 52.148.116.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851987E /* 40.81.152.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285198AB /* 40.81.152.171/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285198AC /* 40.81.152.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28519C99 /* 40.81.156.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28519C9A /* 40.81.156.154/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28519C9C /* 40.81.156.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28519F23 /* 40.81.159.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28519F4D /* 40.81.159.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B1A5C /* 51.11.26.92/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B1A5F /* 51.11.26.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680910 /* 51.104.9.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336925F4 /* 51.105.37.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336943E0 /* 51.105.67.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694BB0 /* 51.105.75.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C010A /* 51.140.1.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C086C /* 51.140.8.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C08B4 /* 51.140.8.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C235F /* 51.140.35.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C346A /* 51.140.52.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4ED5 /* 51.140.78.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C697C /* 51.140.105.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C7DE3 /* 51.140.125.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CA4B3 /* 51.140.164.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CBF92 /* 51.140.191.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33916CE3 /* 51.145.108.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33916CFA /* 51.145.108.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14286A32 /* 20.40.106.50/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14286B54 /* 20.40.107.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851780D /* 40.81.120.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517818 /* 40.81.120.24/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517861 /* 40.81.120.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285178BB /* 40.81.120.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285178BF /* 40.81.120.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285178C0 /* 40.81.120.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517942 /* 40.81.121.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851794C /* 40.81.121.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851794E /* 40.81.121.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851796B /* 40.81.121.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851796C /* 40.81.121.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851796F /* 40.81.121.111/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851797F /* 40.81.121.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517987 /* 40.81.121.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851798C /* 40.81.121.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285179AF /* 40.81.121.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517A04 /* 40.81.122.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517A3E /* 40.81.122.62/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517A4C /* 40.81.122.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517ACB /* 40.81.122.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517B7C /* 40.81.123.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517B9D /* 40.81.123.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517CB9 /* 40.81.124.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517CDB /* 40.81.124.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517F19 /* 40.81.127.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517F8B /* 40.81.127.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517F8C /* 40.81.127.140/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517FE5 /* 40.81.127.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517FE6 /* 40.81.127.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517FEF /* 40.81.127.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389880D /* 51.137.136.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389880E /* 51.137.136.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33898822 /* 51.137.136.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33898945 /* 51.137.137.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33898976 /* 51.137.137.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33898979 /* 51.137.137.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338989C8 /* 51.137.137.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338989ED /* 51.137.137.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD480 /* 51.140.212.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CE6F6 /* 51.140.230.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CE78A /* 51.140.231.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D02BD /* 51.141.2.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D070B /* 51.141.7.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C4C0 /* 13.71.196.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454360 /* 13.69.67.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456B60 /* 13.69.107.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D50075E /* 13.80.7.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D501647 /* 13.80.22.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D507D16 /* 13.80.125.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D517B31 /* 13.81.123.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D51CCBD /* 13.81.204.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D51D447 /* 13.81.212.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5D2072 /* 13.93.32.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5D71C0 /* 13.93.113.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F0121 /* 13.95.1.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F1DB1 /* 13.95.29.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F1E2E /* 13.95.30.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2843D8FD /* 40.67.216.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2843DB85 /* 40.67.219.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844F5B8 /* 40.68.245.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A01EB /* 40.74.1.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A06CC /* 40.74.6.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285BC613 /* 40.91.198.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287179B0 /* 40.113.121.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872D908 /* 40.114.217.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28731841 /* 40.115.24.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28731932 /* 40.115.25.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28763F89 /* 40.118.63.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287661E8 /* 40.118.97.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28779182 /* 40.119.145.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28779366 /* 40.119.147.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28779A48 /* 40.119.154.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33697C40 /* 51.105.124.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33697C50 /* 51.105.124.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369A105 /* 51.105.161.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369A308 /* 51.105.163.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369A32B /* 51.105.163.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369A408 /* 51.105.164.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369A4EA /* 51.105.164.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369A4F1 /* 51.105.164.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369A51F /* 51.105.165.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369A525 /* 51.105.165.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369A53F /* 51.105.165.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369A574 /* 51.105.165.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369A666 /* 51.105.166.102/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369A66A /* 51.105.166.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369B39D /* 51.105.179.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3390383C /* 51.144.56.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3391B5C3 /* 51.145.181.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3391B5D6 /* 51.145.181.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348938C8 /* 52.137.56.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348EDCB3 /* 52.142.220.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348EE878 /* 52.142.232.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DDADB /* 52.157.218.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DDAE8 /* 52.157.218.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DE86E /* 52.157.232.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DE893 /* 52.157.232.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DE931 /* 52.157.233.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DE95C /* 52.157.233.92/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DE985 /* 52.157.233.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DE9CD /* 52.157.233.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DEAA0 /* 52.157.234.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DEADE /* 52.157.234.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DEB1B /* 52.157.235.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DEB90 /* 52.157.235.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DECC3 /* 52.157.236.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DED6B /* 52.157.237.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DEDD5 /* 52.157.237.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DEDFF /* 52.157.237.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DEE3A /* 52.157.238.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DEF6E /* 52.157.239.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DEF84 /* 52.157.239.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE38B4 /* 52.174.56.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B22CF8 /* 52.178.44.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B2592C /* 52.178.89.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBB50 /* 52.236.187.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41348A7B /* 65.52.138.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68288178 /* 104.40.129.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D075F /* 104.45.7.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D41A9 /* 104.45.65.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6E121 /* 104.214.225.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D401A58 /* 13.64.26.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D401C57 /* 13.64.28.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D401D20 /* 13.64.29.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D401DA1 /* 13.64.29.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D401E4C /* 13.64.30.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D401E75 /* 13.64.30.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D401E76 /* 13.64.30.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D401F74 /* 13.64.31.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D40C41B /* 13.64.196.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D40C613 /* 13.64.198.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D40C661 /* 13.64.198.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D40C729 /* 13.64.199.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D40FC73 /* 13.64.252.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56B0BD /* 13.86.176.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56B0D3 /* 13.86.176.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DBE0 /* 13.86.219.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56EBCA /* 13.86.235.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56EFEC /* 13.86.239.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B3DF9 /* 13.91.61.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B5BF3 /* 13.91.91.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B62B9 /* 13.91.98.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DC434 /* 13.93.196.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DD844 /* 13.93.216.68/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5DE92A /* 13.93.233.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E17CC /* 40.78.23.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E3881 /* 40.78.56.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876D3AC /* 40.118.211.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349D13E4 /* 52.157.19.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349D148E /* 52.157.20.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68281CCA /* 104.40.28.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A0F29 /* 104.42.15.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A223A /* 104.42.34.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A26FE /* 104.42.38.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A3618 /* 104.42.54.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A4B78 /* 104.42.75.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682AD3D7 /* 104.42.211.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D123B1 /* 104.209.35.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B9347 /* 138.91.147.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428612 /* 13.66.134.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428E50 /* 13.66.142.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D429E08 /* 13.66.158.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42A8D1 /* 13.66.168.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42ADC0 /* 13.66.173.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42D2CD /* 13.66.210.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D8850 /* 13.77.136.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D94E5 /* 13.77.148.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4DA0A2 /* 13.77.160.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4DA394 /* 13.77.163.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4DA53D /* 13.77.165.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF500 /* 40.78.245.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFB80 /* 40.78.251.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285ADAC4 /* 40.90.218.196/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285ADAC6 /* 40.90.218.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285ADACB /* 40.90.218.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285ADB79 /* 40.90.219.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285ADBB8 /* 40.90.219.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285ADC25 /* 40.90.220.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285ADCBE /* 40.90.220.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285ADCC4 /* 40.90.220.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285ADE40 /* 40.90.222.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B4A25 /* 40.91.74.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B4E69 /* 40.91.78.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B7228 /* 40.91.114.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B7230 /* 40.91.114.48/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B7A19 /* 40.91.122.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B7A26 /* 40.91.122.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B7E9D /* 40.91.126.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B7F2C /* 40.91.127.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F3ACF /* 51.143.58.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F6F3A /* 51.143.111.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F78EC /* 51.143.120.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F78F2 /* 51.143.120.242/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F7A3B /* 51.143.122.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F7A3C /* 51.143.122.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34895993 /* 52.137.89.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F4958 /* 52.143.73.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F4A1F /* 52.143.74.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3494A12D /* 52.148.161.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3494A135 /* 52.148.161.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B718FE /* 52.183.24.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B71ECC /* 52.183.30.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B74B3E /* 52.183.75.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BF8141 /* 52.191.129.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464880 /* 13.70.72.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA218 /* 40.79.162.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAA08 /* 40.79.170.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3248 /* 13.77.50.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CB80 /* 191.233.203.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9288 /* 191.234.146.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9A88 /* 191.234.154.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93208 /* 191.233.50.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AA30 /* 13.71.170.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269288 /* 20.38.146.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69A88 /* 52.246.154.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456A48 /* 40.69.106.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06288 /* 20.192.98.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503288 /* 40.80.50.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D35180 /* 104.211.81.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AAD0 /* 13.89.170.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68AC8 /* 52.182.138.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D01048 /* 104.208.16.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECA40 /* 40.78.202.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2298 /* 13.75.34.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4A40 /* 20.205.74.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5240 /* 20.205.82.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470AD0 /* 40.71.10.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE2C8 /* 40.78.226.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9A60 /* 40.79.154.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28469250 /* 40.70.146.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76A48 /* 52.167.106.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D09048 /* 104.208.144.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9228 /* 40.74.146.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2218 /* 40.75.34.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5A18 /* 52.138.90.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5240 /* 68.220.82.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481A08 /* 20.72.26.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315208 /* 20.49.82.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433A10 /* 40.67.58.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8230 /* 40.79.130.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8A18 /* 40.79.138.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9218 /* 40.79.146.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB248 /* 40.79.178.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743A10 /* 51.116.58.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749A50 /* 51.116.154.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F288 /* 51.116.242.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FA88 /* 51.116.250.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93A40 /* 20.217.58.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94A40 /* 20.217.74.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95A40 /* 20.217.90.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86A40 /* 4.232.106.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87A40 /* 4.232.122.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C240 /* 4.232.194.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6AC0 /* 13.78.106.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBA00 /* 40.79.186.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC258 /* 40.79.194.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B240 /* 20.18.178.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6438 /* 40.74.100.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EA10 /* 20.192.234.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CA08 /* 20.193.202.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1A88 /* 20.44.26.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24208 /* 20.194.66.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71230 /* 52.231.18.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79258 /* 52.231.146.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114240 /* 20.17.66.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170A40 /* 158.23.10.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177A40 /* 158.23.122.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C240 /* 158.23.194.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DAA40 /* 20.125.170.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCA40 /* 20.125.202.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26A98 /* 52.162.106.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E350 /* 13.69.227.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6B48 /* 13.74.107.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE248 /* 52.138.226.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786218 /* 51.120.98.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786A88 /* 51.120.106.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D288 /* 51.120.210.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DA10 /* 51.120.218.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71240 /* 20.215.18.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71A40 /* 20.215.26.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79A40 /* 20.215.154.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152A40 /* 20.21.42.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154240 /* 20.21.66.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154A40 /* 20.21.74.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857A88 /* 102.133.122.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859A10 /* 102.133.154.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FA88 /* 102.133.250.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851A10 /* 102.133.26.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7A88 /* 20.45.122.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315A08 /* 20.49.90.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D612B0 /* 104.214.18.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0210 /* 20.44.2.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC248 /* 40.78.194.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430870 /* 13.67.8.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625268 /* 23.98.82.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEA28 /* 40.78.234.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6240 /* 68.221.98.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD9240 /* 68.221.146.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6210 /* 51.12.98.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE288 /* 51.12.226.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEA88 /* 51.12.234.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCA10 /* 51.12.202.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D01240 /* 20.208.18.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CA40 /* 51.103.202.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3A10 /* 51.107.58.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9A10 /* 51.107.154.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356A40 /* 51.53.106.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BA40 /* 51.53.186.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254A40 /* 20.37.74.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269848 /* 20.38.152.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784A08 /* 40.120.74.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FA08 /* 65.52.250.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577A58 /* 13.87.122.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694288 /* 51.105.66.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694A88 /* 51.105.74.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C92C0 /* 51.140.146.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573858 /* 13.87.56.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD258 /* 51.140.210.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C278 /* 13.71.194.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D454050 /* 13.69.64.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456A48 /* 13.69.106.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBA48 /* 52.236.186.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39248 /* 104.211.146.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A240 /* 20.168.162.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F298 /* 40.112.242.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428C40 /* 13.66.140.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF298 /* 40.78.242.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFA58 /* 40.78.250.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AA10 /* 20.150.170.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B288 /* 20.150.178.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BA88 /* 20.150.186.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C780 /* 20.37.199.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428B174 /* 20.40.177.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428B6B4 /* 20.40.182.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428BA76 /* 20.40.186.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428BBB7 /* 20.40.187.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428BC54 /* 20.40.188.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352800 /* 20.53.40.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352840 /* 20.53.40.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352860 /* 20.53.40.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352870 /* 20.53.40.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352880 /* 20.53.40.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352CE0 /* 20.53.44.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14354AE0 /* 20.53.74.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14354DAB /* 20.53.77.171/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14354F14 /* 20.53.79.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14354F90 /* 20.53.79.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143551D1 /* 20.53.81.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14356807 /* 20.53.104.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14356884 /* 20.53.104.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14356D6A /* 20.53.109.106/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14356D90 /* 20.53.109.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14357362 /* 20.53.115.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14357365 /* 20.53.115.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14357366 /* 20.53.115.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DD20 /* 20.70.221.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DD40 /* 20.70.221.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DDC8 /* 20.70.221.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446F96B /* 20.70.249.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BCDA6F /* 20.188.218.111/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BCDAA5 /* 20.188.218.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BCDB96 /* 20.188.219.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BCDD37 /* 20.188.221.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D54153 /* 20.213.65.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A000 /* 20.40.160.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A239 /* 20.40.162.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A431 /* 20.40.164.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A4D7 /* 20.40.164.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A507 /* 20.40.165.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A51F /* 20.40.165.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A543 /* 20.40.165.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE6EC /* 20.42.230.236/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE6F0 /* 20.42.230.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE7C0 /* 20.42.231.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E6C75 /* 20.46.108.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C0380 /* 20.92.3.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C03C0 /* 20.92.3.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C0480 /* 20.92.4.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285138BE /* 40.81.56.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513CCE /* 40.81.60.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28734BEB /* 40.115.75.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F54D2 /* 40.127.84.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDFC22 /* 52.189.252.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F36A5D /* 52.243.106.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F36C19 /* 52.243.108.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F36D04 /* 52.243.109.4/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F36D7E /* 52.243.109.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F36E43 /* 52.243.110.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F36E9C /* 52.243.110.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F36EB5 /* 52.243.110.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F37158 /* 52.243.113.88/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F37166 /* 52.243.113.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB000 /* 104.46.176.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB080 /* 104.46.176.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB0A0 /* 104.46.176.160/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB0C0 /* 104.46.176.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB100 /* 104.46.177.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB320 /* 104.46.179.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C90269 /* 20.201.2.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C93A75 /* 20.201.58.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C94985 /* 20.201.73.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90095 /* 191.233.0.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE900FE /* 191.233.0.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE901AF /* 191.233.1.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE912FE /* 191.233.18.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9142B /* 191.233.20.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9199C /* 191.233.25.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE91BE2 /* 191.233.27.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE91C91 /* 191.233.28.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE91D48 /* 191.233.29.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE91E14 /* 191.233.30.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE91F00 /* 191.233.31.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE91F3F /* 191.233.31.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE91FE0 /* 191.233.31.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9F2B1 /* 191.233.242.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9F2B4 /* 191.233.242.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8940 /* 191.234.137.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8980 /* 191.234.137.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8A00 /* 191.234.138.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8BB0 /* 191.234.139.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB7FB5 /* 191.235.127.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4CC0 /* 191.238.76.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4D00 /* 191.238.77.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4D38 /* 191.238.77.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0318 /* 20.206.3.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0320 /* 20.206.3.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0340 /* 20.206.3.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0380 /* 20.206.3.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0400 /* 20.206.4.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14278609 /* 20.39.134.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14278643 /* 20.39.134.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427865D /* 20.39.134.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14278BF5 /* 20.39.139.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14278C17 /* 20.39.140.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14278D32 /* 20.39.141.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C000 /* 20.48.192.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C010 /* 20.48.192.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C1A8 /* 20.48.193.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C960 /* 20.48.201.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C980 /* 20.48.201.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430CA08 /* 20.48.202.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143F34AF /* 20.63.52.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14682550 /* 20.104.37.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14972A0F /* 20.151.42.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1497498D /* 20.151.73.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1497BCAE /* 20.151.188.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1497BCBB /* 20.151.188.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1497BCBE /* 20.151.188.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1497BCC7 /* 20.151.188.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1497BCD4 /* 20.151.188.212/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1497BCFC /* 20.151.188.252/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C849FD /* 20.200.73.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852AD67 /* 40.82.173.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852BB8D /* 40.82.187.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B116C /* 52.139.17.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B11FC /* 52.139.17.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B12F3 /* 52.139.18.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B16E3 /* 52.139.22.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349C18E8 /* 52.156.24.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E456B2 /* 52.228.86.178/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E456B4 /* 52.228.86.180/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E456B8 /* 52.228.86.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E456C0 /* 52.228.86.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45700 /* 52.228.87.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E47DE5 /* 52.228.125.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850F0B9 /* 40.80.240.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850F0BF /* 40.80.240.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850F0D6 /* 40.80.240.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850F12B /* 40.80.241.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850F143 /* 40.80.241.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850F84F /* 40.80.248.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850F934 /* 40.80.249.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850F9D2 /* 40.80.249.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850F9DB /* 40.80.249.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856FE7D /* 40.86.254.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285914E8 /* 40.89.20.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285914F0 /* 40.89.20.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591580 /* 40.89.21.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591600 /* 40.89.22.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591640 /* 40.89.22.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591650 /* 40.89.22.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591660 /* 40.89.22.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591680 /* 40.89.22.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285916C0 /* 40.89.22.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285917F0 /* 40.89.23.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B50E5 /* 52.139.80.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B53B8 /* 52.139.83.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B5634 /* 52.139.86.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6F88 /* 52.139.111.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6FA0 /* 52.139.111.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6FC0 /* 52.139.111.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B1984 /* 52.155.25.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B1991 /* 52.155.25.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B199D /* 52.155.25.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E54FE1 /* 52.229.79.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E5589E /* 52.229.88.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E577F9 /* 52.229.119.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EB1146 /* 52.235.17.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EB3944 /* 52.235.57.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EB398C /* 52.235.57.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EB39CB /* 52.235.57.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EB39FC /* 52.235.57.252/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EB3F00 /* 52.235.63.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4730C0 /* 13.71.48.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D473151 /* 13.71.49.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4731F4 /* 13.71.49.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4732AF /* 13.71.50.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D473484 /* 13.71.52.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02B40 /* 20.192.43.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A900 /* 20.192.169.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A940 /* 20.192.169.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A970 /* 20.192.169.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C18928 /* 20.193.137.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C18985 /* 20.193.137.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1992B /* 20.193.153.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C199A2 /* 20.193.153.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C19A26 /* 20.193.154.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCEAEB /* 20.204.234.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6CF2 /* 52.140.108.242/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6D80 /* 52.140.109.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6E00 /* 52.140.110.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBA1AC /* 20.187.161.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBBB9B /* 20.187.187.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC380 /* 20.187.195.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC390 /* 20.187.195.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC3A0 /* 20.187.195.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC3C0 /* 20.187.195.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC518 /* 20.187.197.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD4A50 /* 20.189.74.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD4C64 /* 20.189.76.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD4D7E /* 20.189.77.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6F1C /* 20.189.111.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6F20 /* 20.189.111.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6F40 /* 20.189.111.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6F80 /* 20.189.111.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD70AF /* 20.189.112.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD7A29 /* 20.189.122.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4400 /* 20.205.68.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4440 /* 20.205.68.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4470 /* 20.205.68.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28511925 /* 40.81.25.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28511941 /* 40.81.25.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B9C6E /* 52.139.156.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BAA04 /* 52.139.170.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BAA34 /* 52.139.170.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB0D8 /* 52.139.176.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB108 /* 52.139.177.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB10E /* 52.139.177.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BB374 /* 52.139.179.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF78C9 /* 52.175.120.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B83025 /* 52.184.48.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B85097 /* 52.184.80.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B854D2 /* 52.184.84.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E5E1B6 /* 52.229.225.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A189F /* 20.42.24.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A27BC /* 20.42.39.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316E54 /* 20.49.110.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316F30 /* 20.49.111.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316F40 /* 20.49.111.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316F80 /* 20.49.111.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8188 /* 20.62.129.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E9DDF /* 20.62.157.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143EB40D /* 20.62.180.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143ED472 /* 20.62.212.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143EEBF7 /* 20.62.235.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14488204 /* 20.72.130.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1448841A /* 20.72.132.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14510092 /* 20.81.0.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14517192 /* 20.81.113.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145383AE /* 20.83.131.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1454196B /* 20.84.25.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1455ADA5 /* 20.85.173.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1455B343 /* 20.85.179.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589A20 /* 20.88.154.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589A40 /* 20.88.154.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589B80 /* 20.88.155.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589C00 /* 20.88.156.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589C80 /* 20.88.156.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589D40 /* 20.88.157.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B9084A /* 20.185.8.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B94835 /* 20.185.72.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B94949 /* 20.185.73.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B9D35E /* 20.185.211.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B9D73E /* 20.185.215.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B9D75B /* 20.185.215.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847E908 /* 40.71.233.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847E9BD /* 40.71.233.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847EAC9 /* 40.71.234.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847EC0F /* 40.71.236.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C85EC /* 40.76.133.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C95F6 /* 40.76.149.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CA190 /* 40.76.161.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CA1A5 /* 40.76.161.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CA1A8 /* 40.76.161.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2858102C /* 40.88.16.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285812D0 /* 40.88.18.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285812F8 /* 40.88.18.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2858170F /* 40.88.23.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285817CA /* 40.88.23.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285830ED /* 40.88.48.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2858E7F9 /* 40.88.231.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2858FB9D /* 40.88.251.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E10A2 /* 52.142.16.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E1C56 /* 52.142.28.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34921860 /* 52.146.24.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3492186A /* 52.146.24.106/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34921872 /* 52.146.24.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34921A7D /* 52.146.26.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34921ADA /* 52.146.26.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34921AF4 /* 52.146.26.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34923264 /* 52.146.50.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34923C95 /* 52.146.60.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34924800 /* 52.146.72.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34924C00 /* 52.146.76.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34924E00 /* 52.146.78.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34924F00 /* 52.146.79.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34924F80 /* 52.146.79.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3493DEE4 /* 52.147.222.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3495A9EC /* 52.149.169.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3495EE39 /* 52.149.238.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3495F04B /* 52.149.240.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3495F3B1 /* 52.149.243.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34962384 /* 52.150.35.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349625CF /* 52.150.37.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497E768 /* 52.151.231.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497EE13 /* 52.151.238.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497F3C2 /* 52.151.243.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3497F66B /* 52.151.246.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3498C20A /* 52.152.194.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3498CC56 /* 52.152.204.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3498CD41 /* 52.152.205.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3498CD89 /* 52.152.205.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BC2BF7 /* 52.188.43.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BC4D9A /* 52.188.77.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BC4F3C /* 52.188.79.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BCB17C /* 52.188.177.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BCB561 /* 52.188.181.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BCB79F /* 52.188.183.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BCD841 /* 52.188.216.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BCDDED /* 52.188.221.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BCDEA8 /* 52.188.222.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BCDECE /* 52.188.222.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BE183D /* 52.190.24.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BE1B94 /* 52.190.27.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BE1E88 /* 52.190.30.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BE1E91 /* 52.190.30.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BE2741 /* 52.190.39.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BF27B5 /* 52.191.39.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFD92B /* 52.191.217.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFE885 /* 52.191.232.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFEDBA /* 52.191.237.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFEE4F /* 52.191.238.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFEE9D /* 52.191.238.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFEFD0 /* 52.191.239.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFEFF6 /* 52.191.239.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E01130 /* 52.224.17.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E01162 /* 52.224.17.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E089A0 /* 52.224.137.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E08E98 /* 52.224.142.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E09559 /* 52.224.149.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0963F /* 52.224.150.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0B8CD /* 52.224.184.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0B8DD /* 52.224.184.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0B9D8 /* 52.224.185.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0C377 /* 52.224.195.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0C81A /* 52.224.200.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0C972 /* 52.224.201.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0C979 /* 52.224.201.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0CBC0 /* 52.224.203.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E0CC6E /* 52.224.204.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E229CA /* 52.226.41.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E229EB /* 52.226.41.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E23168 /* 52.226.49.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E2319C /* 52.226.49.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E2338A /* 52.226.51.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E28BCC /* 52.226.139.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E28DC8 /* 52.226.141.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E28F00 /* 52.226.143.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E29405 /* 52.226.148.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E294E1 /* 52.226.148.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E2AF3A /* 52.226.175.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E2FE76 /* 52.226.254.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F9C957 /* 52.249.201.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F9CC72 /* 52.249.204.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FFD4A4 /* 52.255.212.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FFD5D3 /* 52.255.213.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FFDDE7 /* 52.255.221.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAE1A /* 104.45.174.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DAF2D /* 104.45.175.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DBCF0 /* 104.45.188.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DBF59 /* 104.45.191.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2CF0 /* 20.43.44.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2D80 /* 20.43.45.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2DC0 /* 20.43.45.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2F50 /* 20.43.47.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F0000 /* 20.111.0.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F0038 /* 20.111.0.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423D7B /* 40.66.61.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28423EAC /* 40.66.62.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BE977 /* 51.11.233.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BE9B0 /* 51.11.233.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BEB53 /* 51.11.235.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367037F /* 51.103.3.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336703F0 /* 51.103.3.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AD7C0 /* 51.138.215.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852E009 /* 40.82.224.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852E031 /* 40.82.224.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852E034 /* 40.82.224.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852E03C /* 40.82.224.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852E041 /* 40.82.224.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852EC09 /* 40.82.236.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852EC23 /* 40.82.236.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695C40 /* 51.105.92.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695C80 /* 51.105.92.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695CA0 /* 51.105.92.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488B858 /* 52.136.184.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BD60 /* 52.136.189.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BD80 /* 52.136.189.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BEB0 /* 52.136.190.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337401ED /* 51.116.1.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33740265 /* 51.116.2.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337402EF /* 51.116.2.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33740310 /* 51.116.3.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33740349 /* 51.116.3.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33740357 /* 51.116.3.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33740366 /* 51.116.3.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743280 /* 51.116.50.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337432C0 /* 51.116.50.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337433B8 /* 51.116.51.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744A60 /* 51.116.74.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744A80 /* 51.116.74.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744B40 /* 51.116.75.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345DE0 /* 20.52.93.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345E00 /* 20.52.94.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345E78 /* 20.52.94.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337463C8 /* 51.116.99.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33748455 /* 51.116.132.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33748463 /* 51.116.132.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33748597 /* 51.116.133.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33748684 /* 51.116.134.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33748688 /* 51.116.134.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33748ACA /* 51.116.138.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337491F0 /* 51.116.145.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749280 /* 51.116.146.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337492C0 /* 51.116.146.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337494E0 /* 51.116.148.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B46CE /* 20.43.70.206/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B46D0 /* 20.43.70.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B46E8 /* 20.43.70.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B46F0 /* 20.43.70.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4780 /* 20.43.71.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C8239 /* 20.44.130.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C82DE /* 20.44.130.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C83A2 /* 20.44.131.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142CA7CF /* 20.44.167.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14300FE3 /* 20.48.15.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590B80 /* 20.89.11.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590BC0 /* 20.89.11.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590BF0 /* 20.89.11.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA1C8 /* 20.191.161.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C29009 /* 20.194.144.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C29019 /* 20.194.144.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C2901B /* 20.194.144.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C2901F /* 20.194.144.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D2031B /* 20.210.3.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC120 /* 20.189.193.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC140 /* 20.189.193.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC1A8 /* 20.189.193.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE148 /* 20.189.225.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503E60 /* 40.80.62.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503F00 /* 40.80.63.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503F80 /* 40.80.63.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851B5BE /* 40.81.181.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851B5D4 /* 40.81.181.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851B5D6 /* 40.81.181.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851B675 /* 40.81.182.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851B67C /* 40.81.182.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851BA80 /* 40.81.186.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851BC6B /* 40.81.188.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851BD34 /* 40.81.189.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851BE61 /* 40.81.190.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF96FA /* 52.175.150.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142962FC /* 20.41.98.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C23BE6 /* 20.194.59.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C000 /* 20.200.192.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C230 /* 20.200.194.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C240 /* 20.200.194.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C280 /* 20.200.194.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C340 /* 20.200.195.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C380 /* 20.200.195.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C3A8 /* 20.200.195.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C9A7 /* 20.200.201.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D0185 /* 52.141.1.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D0711 /* 52.141.7.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D0715 /* 52.141.7.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D0718 /* 52.141.7.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D0724 /* 52.141.7.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937158 /* 52.147.113.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349374C0 /* 52.147.116.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937500 /* 52.147.117.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937580 /* 52.147.117.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349375C0 /* 52.147.117.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937700 /* 52.147.119.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3493795F /* 52.147.121.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E788D4 /* 52.231.136.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E789ED /* 52.231.137.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E78CE0 /* 52.231.140.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E78FAB /* 52.231.143.171/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7A44F /* 52.231.164.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7B900 /* 52.231.185.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324488 /* 20.50.68.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324490 /* 20.50.68.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143244A0 /* 20.50.68.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143244C0 /* 20.50.68.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324500 /* 20.50.69.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324600 /* 20.50.70.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436038F /* 20.54.3.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143603D2 /* 20.54.3.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143604D4 /* 20.54.4.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436254B /* 20.54.37.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436288B /* 20.54.40.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143642B2 /* 20.54.66.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143642BA /* 20.54.66.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143642C6 /* 20.54.66.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14366077 /* 20.54.96.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14366941 /* 20.54.105.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14366948 /* 20.54.105.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436694E /* 20.54.105.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436697A /* 20.54.105.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143669F3 /* 20.54.105.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14366A0C /* 20.54.106.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14366AD3 /* 20.54.106.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1443D39B /* 20.67.211.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1443D39D /* 20.67.211.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14529B10 /* 20.82.155.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452AB9E /* 20.82.171.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452CD05 /* 20.82.205.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452E3AA /* 20.82.227.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452E7A2 /* 20.82.231.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452F692 /* 20.82.246.146/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452F694 /* 20.82.246.148/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452F6A0 /* 20.82.246.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452F6C0 /* 20.82.246.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1452FB42 /* 20.82.251.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145D1A6D /* 20.93.26.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145D3064 /* 20.93.48.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145D3589 /* 20.93.53.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14690133 /* 20.105.1.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146911FB /* 20.105.17.251/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F91BF /* 40.127.145.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F93D5 /* 40.127.147.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F9469 /* 40.127.148.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F947F /* 40.127.148.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F9655 /* 40.127.150.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FE098 /* 40.127.224.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FE317 /* 40.127.227.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FE525 /* 40.127.229.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FEAFC /* 40.127.234.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FEB14 /* 40.127.235.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FEBF7 /* 40.127.235.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FF124 /* 40.127.241.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368967F /* 51.104.150.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33689699 /* 51.104.150.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336898A2 /* 51.104.152.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33689B0F /* 51.104.155.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33689BE9 /* 51.104.155.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33689C1A /* 51.104.156.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33689F08 /* 51.104.159.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33689F0A /* 51.104.159.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33689F15 /* 51.104.159.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368B0DB /* 51.104.176.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368B135 /* 51.104.177.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368B200 /* 51.104.178.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AB25C /* 51.138.178.92/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AB2FD /* 51.138.178.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E50A2 /* 52.142.80.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E5173 /* 52.142.81.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E52A1 /* 52.142.82.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E5654 /* 52.142.86.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E57B7 /* 52.142.87.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E7031 /* 52.142.112.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E7054 /* 52.142.112.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E7082 /* 52.142.112.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E71CB /* 52.142.113.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E798E /* 52.142.121.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E799B /* 52.142.121.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E7FFE /* 52.142.127.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928000 /* 52.146.128.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928200 /* 52.146.130.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928280 /* 52.146.130.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349282A0 /* 52.146.130.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349282B0 /* 52.146.130.176/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349282C0 /* 52.146.130.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349284E8 /* 52.146.132.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928A60 /* 52.146.138.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928A80 /* 52.146.138.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928B00 /* 52.146.139.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928BC8 /* 52.146.139.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B5816 /* 52.155.88.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B5B81 /* 52.155.91.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B5B92 /* 52.155.91.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B5E8B /* 52.155.94.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B5E9D /* 52.155.94.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B5FD4 /* 52.155.95.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BA289 /* 52.155.162.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BACB8 /* 52.155.172.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BAD07 /* 52.155.173.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BB0C5 /* 52.155.176.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BB203 /* 52.155.178.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BB49C /* 52.155.180.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BB54E /* 52.155.181.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BDC14 /* 52.155.220.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BDED9 /* 52.155.222.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BDF50 /* 52.155.223.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BE084 /* 52.155.224.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BE80F /* 52.155.232.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BE8A9 /* 52.155.232.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BE8DA /* 52.155.232.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BE908 /* 52.155.233.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BE96E /* 52.155.233.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BE9E3 /* 52.155.233.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BEA1C /* 52.155.234.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BEA6B /* 52.155.234.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BEA7E /* 52.155.234.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BEAB8 /* 52.155.234.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BEB97 /* 52.155.235.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BEB99 /* 52.155.235.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BEC08 /* 52.155.236.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349BEC10 /* 52.155.236.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CC192 /* 52.156.193.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CC219 /* 52.156.194.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CC4DD /* 52.156.196.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CCCBE /* 52.156.204.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349E188C /* 52.158.24.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349E18B2 /* 52.158.24.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349E1B42 /* 52.158.27.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349E70AB /* 52.158.112.171/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349E79BE /* 52.158.121.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146400A0 /* 20.100.0.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640100 /* 20.100.1.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146401A0 /* 20.100.1.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D1000 /* 51.13.16.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D19FD /* 51.13.25.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782C20 /* 51.120.44.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782C40 /* 51.120.44.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E830 /* 51.120.232.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D88A8 /* 51.13.136.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8BE0 /* 51.13.139.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8D80 /* 51.13.141.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8DF8 /* 51.13.141.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D94FF /* 51.13.148.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D9546 /* 51.13.149.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E430 /* 51.120.228.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E440 /* 51.120.228.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E480 /* 51.120.228.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575000 /* 20.87.80.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F0ABB /* 40.127.10.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F0B0B /* 40.127.11.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F0E62 /* 40.127.14.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F0E68 /* 40.127.14.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F170C /* 40.127.23.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A6E0 /* 102.37.166.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A700 /* 102.37.167.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66858497 /* 102.133.132.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DB90 /* 102.133.219.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DBA0 /* 102.133.219.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DBC0 /* 102.133.219.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DD18 /* 102.133.221.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255028 /* 102.37.80.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255520 /* 102.37.85.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255540 /* 102.37.85.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662555C8 /* 102.37.85.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668500C7 /* 102.133.0.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668500D4 /* 102.133.0.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66850118 /* 102.133.1.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853BC0 /* 102.133.59.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853C00 /* 102.133.60.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D425083 /* 13.66.80.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FD80 /* 13.73.253.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FE00 /* 13.73.254.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FE80 /* 13.73.254.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D55BF59 /* 13.85.191.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418250 /* 20.65.130.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14612180 /* 20.97.33.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146121C0 /* 20.97.33.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146121F0 /* 20.97.33.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC4D9B /* 20.188.77.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284AB752 /* 40.74.183.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284AB779 /* 40.74.183.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284AC89C /* 40.74.200.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284AC9E6 /* 40.74.201.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ACA16 /* 40.74.202.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770116 /* 40.119.1.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28772A55 /* 40.119.42.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28772A56 /* 40.119.42.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C8802 /* 40.124.136.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C884B /* 40.124.136.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C888A /* 40.124.136.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B9E2F7 /* 52.185.226.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B9E614 /* 52.185.230.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F93B9D /* 52.249.59.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F93C50 /* 52.249.60.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F93F2D /* 52.249.63.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14280161 /* 20.40.1.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14280165 /* 20.40.1.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142801BF /* 20.40.1.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14280403 /* 20.40.4.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14280418 /* 20.40.4.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C51C /* 20.41.197.28/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C6C0 /* 20.41.198.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C700 /* 20.41.199.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C2044 /* 20.44.32.68/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C20FD /* 20.44.32.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C2232 /* 20.44.34.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C229A /* 20.44.34.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C238A /* 20.44.35.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C098A0 /* 20.192.152.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C098C0 /* 20.192.152.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09950 /* 20.192.153.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC07E1 /* 52.172.7.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC70B0 /* 52.172.112.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142BA174 /* 20.43.161.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142BA195 /* 20.43.161.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142BA1D7 /* 20.43.161.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142BAFBA /* 20.43.175.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142BAFD2 /* 20.43.175.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142BAFED /* 20.43.175.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142BB627 /* 20.43.182.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142CC57E /* 20.44.197.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142CC668 /* 20.44.198.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142CF0DE /* 20.44.240.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35340 /* 20.195.83.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35480 /* 20.195.84.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35508 /* 20.195.85.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C355C0 /* 20.195.85.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35600 /* 20.195.86.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C54085 /* 20.197.64.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C569AC /* 20.197.105.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C569E6 /* 20.197.105.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C577CC /* 20.197.119.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C68103 /* 20.198.129.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626AA0 /* 23.98.106.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626AC0 /* 23.98.106.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626B00 /* 23.98.107.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626B10 /* 23.98.107.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626B18 /* 23.98.107.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626B20 /* 23.98.107.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626B40 /* 23.98.107.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626B80 /* 23.98.107.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626D28 /* 23.98.109.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285AB83F /* 40.90.184.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877D784 /* 40.119.215.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BE853 /* 52.139.232.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BE920 /* 52.139.233.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BEA8C /* 52.139.234.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BEAD9 /* 52.139.234.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BEB55 /* 52.139.235.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349470D8 /* 52.148.112.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682B4C65 /* 104.43.76.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682B4C66 /* 104.43.76.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682B4C7C /* 104.43.76.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00400 /* 20.208.4.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00440 /* 20.208.4.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00468 /* 20.208.4.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B089F /* 51.107.8.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B08EE /* 51.107.8.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B0952 /* 51.107.9.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B0B44 /* 51.107.11.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B0B50 /* 51.107.11.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B2978 /* 51.107.41.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B2D42 /* 51.107.45.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BC92D /* 51.107.201.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BCA45 /* 51.107.202.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF168 /* 51.107.241.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF1A0 /* 51.107.241.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF1C0 /* 51.107.241.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B6024 /* 51.107.96.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B6030 /* 51.107.96.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B6068 /* 51.107.96.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B60CE /* 51.107.96.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B62C2 /* 51.107.98.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B64DA /* 51.107.100.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B6538 /* 51.107.101.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B65B5 /* 51.107.101.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF958 /* 51.107.249.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF9A0 /* 51.107.249.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF9C0 /* 51.107.249.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFE60 /* 51.107.254.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFE80 /* 51.107.254.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFEF8 /* 51.107.254.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254430 /* 20.37.68.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254440 /* 20.37.68.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254480 /* 20.37.68.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254678 /* 20.37.70.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14255038 /* 20.37.80.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142552D7 /* 20.37.82.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5DA0 /* 20.45.93.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5DC0 /* 20.45.93.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D5E48 /* 20.45.94.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878015B /* 40.120.1.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878015E /* 40.120.1.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28780160 /* 40.120.1.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287802D0 /* 40.120.2.208/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268C20 /* 20.38.140.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268C40 /* 20.38.140.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268E78 /* 20.38.142.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E9898 /* 20.46.152.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E9F2F /* 20.46.159.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877A9F1 /* 40.119.169.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877AA34 /* 40.119.170.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877AA3C /* 40.119.170.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877AAB2 /* 40.119.170.178/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877AAB4 /* 40.119.170.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287856A0 /* 40.120.86.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287856C0 /* 40.120.86.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28785738 /* 40.120.87.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143191F9 /* 20.49.145.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431A628 /* 20.49.166.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431A676 /* 20.49.166.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431A681 /* 20.49.166.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431F4EE /* 20.49.244.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8300 /* 20.90.131.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8340 /* 20.90.131.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8378 /* 20.90.131.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145AA970 /* 20.90.169.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146C516B /* 20.108.81.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B18C6 /* 51.11.24.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B1944 /* 51.11.25.68/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B19AC /* 51.11.25.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BAC1E /* 51.11.172.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BAC38 /* 51.11.172.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BACA0 /* 51.11.172.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681EAC /* 51.104.30.172/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681EC0 /* 51.104.30.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681F00 /* 51.104.31.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681F20 /* 51.104.31.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681F30 /* 51.104.31.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681F40 /* 51.104.31.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368F80B /* 51.104.248.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384A1E1 /* 51.132.161.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384D7A2 /* 51.132.215.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384D7B6 /* 51.132.215.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD0D8 /* 51.143.208.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3391681D /* 51.145.104.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4780 /* 20.58.71.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A47C0 /* 20.58.71.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14447D4F /* 20.68.125.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A2080 /* 20.90.32.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517183 /* 40.81.113.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851748D /* 40.81.116.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851748F /* 40.81.116.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285174DF /* 40.81.116.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517517 /* 40.81.117.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336824D4 /* 51.104.36.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384447E /* 51.132.68.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33844832 /* 51.132.72.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338448B5 /* 51.132.72.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384495F /* 51.132.73.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33898862 /* 51.137.136.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389899E /* 51.137.137.158/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338989E0 /* 51.137.137.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338989EB /* 51.137.137.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A4E0 /* 51.137.164.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A5C0 /* 51.137.165.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A600 /* 51.137.166.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A610 /* 51.137.166.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A618 /* 51.137.166.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A640 /* 51.137.166.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A7B0 /* 51.137.167.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389B456 /* 51.137.180.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348EA868 /* 52.142.168.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969A30 /* 52.150.154.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969A80 /* 52.150.154.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143210EB /* 20.50.16.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143210FD /* 20.50.16.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432185F /* 20.50.24.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143219BB /* 20.50.25.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432863B /* 20.50.134.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432E4F8 /* 20.50.228.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432E7B0 /* 20.50.231.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1432EE57 /* 20.50.238.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436B89A /* 20.54.184.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436D178 /* 20.54.209.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436D1A7 /* 20.54.209.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436D1AF /* 20.54.209.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436D1EC /* 20.54.209.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436D1EE /* 20.54.209.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1436D1F0 /* 20.54.209.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6000 /* 20.61.96.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6080 /* 20.61.96.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D60C0 /* 20.61.96.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6298 /* 20.61.98.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143DF9D0 /* 20.61.249.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14475167 /* 20.71.81.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144CB5D2 /* 20.76.181.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144CDEF4 /* 20.76.222.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144CE667 /* 20.76.230.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144CFE83 /* 20.76.254.131/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145239EA /* 20.82.57.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14524002 /* 20.82.64.2/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14565DE0 /* 20.86.93.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14565F00 /* 20.86.95.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1456E785 /* 20.86.231.133/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1456ECC4 /* 20.86.236.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145DB065 /* 20.93.176.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145DED27 /* 20.93.237.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14651CBB /* 20.101.28.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146755E3 /* 20.103.85.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1467A2A8 /* 20.103.162.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1467CCCC /* 20.103.204.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D000 /* 20.105.208.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D040 /* 20.105.208.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D0C0 /* 20.105.208.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A0562 /* 40.74.5.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A0AC1 /* 40.74.10.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1218 /* 40.74.18.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A2011 /* 40.74.32.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A2018 /* 40.74.32.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A2126 /* 40.74.33.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A2A54 /* 40.74.42.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A2A56 /* 40.74.42.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871B234 /* 40.113.178.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871B238 /* 40.113.178.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871B280 /* 40.113.178.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871B300 /* 40.113.179.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871B400 /* 40.113.180.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28779F4E /* 40.119.159.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28779F7E /* 40.119.159.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28779FB5 /* 40.119.159.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28779FDA /* 40.119.159.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369602C /* 51.105.96.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33696198 /* 51.105.97.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369634F /* 51.105.99.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33696501 /* 51.105.101.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33698215 /* 51.105.130.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369908C /* 51.105.144.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369916B /* 51.105.145.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33699808 /* 51.105.152.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369985F /* 51.105.152.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336998EE /* 51.105.152.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369A00A /* 51.105.160.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369A436 /* 51.105.164.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369A5EB /* 51.105.165.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369B707 /* 51.105.183.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369C14E /* 51.105.193.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369C3A6 /* 51.105.195.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369CE40 /* 51.105.206.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369D4EF /* 51.105.212.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369F95E /* 51.105.249.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369FA3E /* 51.105.250.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369FAC4 /* 51.105.250.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369FAC8 /* 51.105.250.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337C016C /* 51.124.1.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337C38D1 /* 51.124.56.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337C471A /* 51.124.71.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337C48A8 /* 51.124.72.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337C537F /* 51.124.83.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33890A52 /* 51.137.10.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33890AAD /* 51.137.10.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33890C89 /* 51.137.12.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33890CC3 /* 51.137.12.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33890DB8 /* 51.137.13.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338A1AA1 /* 51.138.26.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338A1AC9 /* 51.138.26.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338A1B06 /* 51.138.27.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338A1B94 /* 51.138.27.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338A1CFA /* 51.138.28.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338A1E20 /* 51.138.30.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338A1FC3 /* 51.138.31.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338A26C5 /* 51.138.38.197/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33903840 /* 51.144.56.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3390BE93 /* 51.144.190.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3391BA9C /* 51.145.186.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3391BD95 /* 51.145.189.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348918CE /* 52.137.24.206/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348EE992 /* 52.142.233.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348EE995 /* 52.142.233.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348EE9A1 /* 52.142.233.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348EEAE6 /* 52.142.234.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348EED61 /* 52.142.237.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F16D1 /* 52.143.22.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34956C9B /* 52.149.108.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DDD4B /* 52.157.221.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DDDA3 /* 52.157.221.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DDEAD /* 52.157.222.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DE1E0 /* 52.157.225.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349DEDAF /* 52.157.237.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EC9858 /* 52.236.152.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EC9995 /* 52.236.153.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D4143 /* 104.45.65.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D430A /* 104.45.67.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D465B /* 104.45.70.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D469A /* 104.45.70.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D4D39 /* 104.45.77.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D401B2C /* 13.64.27.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D402318 /* 13.64.35.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4026A7 /* 13.64.38.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4027AA /* 13.64.39.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D408077 /* 13.64.128.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D40AED7 /* 13.64.174.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D40B1E0 /* 13.64.177.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5311BC /* 13.83.17.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5317C2 /* 13.83.23.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D533825 /* 13.83.56.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5340A6 /* 13.83.64.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D534259 /* 13.83.66.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D53427C /* 13.83.66.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D53443C /* 13.83.68.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D534669 /* 13.83.70.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5361B4 /* 13.83.97.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5361BC /* 13.83.97.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D536626 /* 13.83.102.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5391DE /* 13.83.145.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5393C0 /* 13.83.147.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5397D4 /* 13.83.151.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D53F8F8 /* 13.83.248.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D53F922 /* 13.83.249.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D53F93A /* 13.83.249.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5688DE /* 13.86.136.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D568914 /* 13.86.137.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D568BE5 /* 13.86.139.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D569BD8 /* 13.86.155.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56B120 /* 13.86.177.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56B905 /* 13.86.185.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56B906 /* 13.86.185.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56B923 /* 13.86.185.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56B951 /* 13.86.185.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56B95B /* 13.86.185.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56C014 /* 13.86.192.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56C141 /* 13.86.193.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56C2BE /* 13.86.194.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56F962 /* 13.86.249.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56FA3E /* 13.86.250.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56FAF4 /* 13.86.250.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56FC74 /* 13.86.252.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56FE76 /* 13.86.254.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56FEBF /* 13.86.254.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57877A /* 13.87.135.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D579932 /* 13.87.153.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D579A18 /* 13.87.154.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D579A64 /* 13.87.154.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D579AA4 /* 13.87.154.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D579DBC /* 13.87.157.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A068 /* 13.87.160.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A08F /* 13.87.160.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A0D4 /* 13.87.160.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A112 /* 13.87.161.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A1EB /* 13.87.161.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A1F1 /* 13.87.161.241/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A25B /* 13.87.162.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A3E6 /* 13.87.163.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A414 /* 13.87.164.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A41E /* 13.87.164.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A4BA /* 13.87.164.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A4CD /* 13.87.164.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A72E /* 13.87.167.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A73F /* 13.87.167.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A7AC /* 13.87.167.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A7AE /* 13.87.167.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57A7C6 /* 13.87.167.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57CF51 /* 13.87.207.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57D815 /* 13.87.216.21/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57D882 /* 13.87.216.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57D90B /* 13.87.217.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57D94B /* 13.87.217.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57D950 /* 13.87.217.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57DA46 /* 13.87.218.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57DAA9 /* 13.87.218.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58386B /* 13.88.56.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58418C /* 13.88.65.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5841CC /* 13.88.65.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5880DA /* 13.88.128.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D588174 /* 13.88.129.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5881A0 /* 13.88.129.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58847B /* 13.88.132.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5885A0 /* 13.88.133.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58872A /* 13.88.135.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D588743 /* 13.88.135.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D588748 /* 13.88.135.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B16F3 /* 13.91.22.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B7E4E /* 13.91.126.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B8890 /* 13.91.136.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B8AAC /* 13.91.138.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143179C0 /* 20.49.121.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317A00 /* 20.49.122.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317C00 /* 20.49.124.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317D00 /* 20.49.125.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317D80 /* 20.49.125.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317DA0 /* 20.49.125.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317DB0 /* 20.49.125.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317DB8 /* 20.49.125.184/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317DC0 /* 20.49.125.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317E00 /* 20.49.126.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317FF8 /* 20.49.127.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B4D80 /* 20.59.77.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B4E00 /* 20.59.78.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B4F50 /* 20.59.79.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B8FB8F /* 20.184.251.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD8E3A /* 20.189.142.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1763599C /* 23.99.89.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28413167 /* 40.65.49.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841318C /* 40.65.49.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28413197 /* 40.65.49.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2853B852 /* 40.83.184.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856A109 /* 40.86.161.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856A459 /* 40.86.164.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870FC4E /* 40.112.252.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876B950 /* 40.118.185.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876C812 /* 40.118.200.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876D541 /* 40.118.213.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876EDD3 /* 40.118.237.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A06CE1 /* 52.160.108.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B460C4 /* 52.180.96.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B46637 /* 52.180.102.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EA6831 /* 52.234.104.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F18A97 /* 52.241.138.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F18CD9 /* 52.241.140.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F678BE /* 52.246.120.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FAE424 /* 52.250.228.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FAE428 /* 52.250.228.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FAE430 /* 52.250.228.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FAE480 /* 52.250.228.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FAE500 /* 52.250.229.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FAE600 /* 52.250.230.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68281BA8 /* 104.40.27.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68282286 /* 104.40.34.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68284895 /* 104.40.72.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A20E4 /* 104.42.32.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A2310 /* 104.42.35.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682AD63E /* 104.42.214.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DE7FC /* 104.45.231.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D23927 /* 104.210.57.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x898735C4 /* 137.135.53.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D0349 /* 168.61.3.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408690 /* 40.64.134.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284086C0 /* 40.64.134.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B5792 /* 40.91.87.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DF18 /* 20.70.223.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DF50 /* 20.70.223.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DF58 /* 20.70.223.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DFA8 /* 20.70.223.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5C280 /* 20.213.194.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5C288 /* 20.213.194.136/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C04DC /* 20.92.4.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C0550 /* 20.92.5.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C057C /* 20.92.5.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C0608 /* 20.92.6.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C06C0 /* 20.92.6.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CEB238 /* 20.206.178.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CEB260 /* 20.206.178.96/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CEB2A4 /* 20.206.178.164/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CEB380 /* 20.206.179.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CEB388 /* 20.206.179.136/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4E54 /* 191.238.78.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0314 /* 20.206.3.20/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0440 /* 20.206.4.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE04E0 /* 20.206.4.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE04E8 /* 20.206.4.232/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14742B38 /* 20.116.43.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14742B50 /* 20.116.43.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14742B58 /* 20.116.43.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14742BD0 /* 20.116.43.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14742F40 /* 20.116.47.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22CC0 /* 52.242.44.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22CD0 /* 52.242.44.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22CEC /* 52.242.44.236/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22CF8 /* 52.242.44.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22D30 /* 52.242.45.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC06C /* 20.204.192.108/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC0C0 /* 20.204.192.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC164 /* 20.204.193.100/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC168 /* 20.204.193.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD3150 /* 20.205.49.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD3158 /* 20.205.49.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD317C /* 20.205.49.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD31C8 /* 20.205.49.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD3270 /* 20.205.50.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD459C /* 20.205.69.156/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589F8C /* 20.88.159.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589F98 /* 20.88.159.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589FD0 /* 20.88.159.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589FE0 /* 20.88.159.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14771C00 /* 20.119.28.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14771C20 /* 20.119.28.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E858C8 /* 20.232.88.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E85910 /* 20.232.89.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E85920 /* 20.232.89.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E85940 /* 20.232.89.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E85960 /* 20.232.89.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F0398 /* 20.111.3.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F03CC /* 20.111.3.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F03D8 /* 20.111.3.216/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28506024 /* 40.80.96.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285060C0 /* 40.80.96.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488BFF8 /* 52.136.191.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744D54 /* 51.116.77.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744DF8 /* 51.116.77.248/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744E24 /* 51.116.78.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744EC0 /* 51.116.78.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345F54 /* 20.52.95.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345FD8 /* 20.52.95.216/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144F6C64 /* 20.79.108.100/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144F6C68 /* 20.79.108.104/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D2449C /* 20.210.68.156/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D24550 /* 20.210.69.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D24648 /* 20.210.70.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D24650 /* 20.210.70.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC2B4 /* 20.189.194.180/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC658 /* 20.189.198.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC688 /* 20.189.198.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC720 /* 20.189.199.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C6C8 /* 20.200.198.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C758 /* 20.200.199.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8A01C /* 20.200.160.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8A0D0 /* 20.200.160.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8A0EC /* 20.200.160.236/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8A0F8 /* 20.200.160.248/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146BEFDC /* 20.107.239.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DF4144 /* 20.223.65.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DF4148 /* 20.223.65.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DF4150 /* 20.223.65.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DF4160 /* 20.223.65.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DF4180 /* 20.223.65.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928D88 /* 52.146.141.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928DA0 /* 52.146.141.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928DC0 /* 52.146.141.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640488 /* 20.100.4.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146404B4 /* 20.100.4.180/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640510 /* 20.100.5.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378B0C0 /* 51.120.176.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378B0DC /* 51.120.176.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378B0E8 /* 51.120.176.232/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575298 /* 20.87.82.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575368 /* 20.87.83.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255764 /* 102.37.87.100/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255788 /* 102.37.87.136/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662557B8 /* 102.37.87.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14612334 /* 20.97.35.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14612738 /* 20.97.39.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14612770 /* 20.97.39.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C09DF8 /* 20.192.157.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC5110 /* 52.172.81.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC51E0 /* 52.172.81.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC51E8 /* 52.172.81.232/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141800C0 /* 20.24.0.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141800D0 /* 20.24.0.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C3565C /* 20.195.86.92/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35710 /* 20.195.87.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35720 /* 20.195.87.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C3577C /* 20.195.87.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00554 /* 20.208.5.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00778 /* 20.208.7.120/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D007AC /* 20.208.7.172/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D007B8 /* 20.208.7.184/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7C87C /* 20.199.200.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7C930 /* 20.199.201.48/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7C94C /* 20.199.201.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7C990 /* 20.199.201.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5830 /* 20.203.88.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5858 /* 20.203.88.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC40C /* 20.74.196.12/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC440 /* 20.74.196.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC468 /* 20.74.196.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1475C0CC /* 20.117.192.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1475C0E0 /* 20.117.192.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1475C13C /* 20.117.193.60/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1475C1B0 /* 20.117.193.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A2610 /* 20.90.38.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A2618 /* 20.90.38.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A2634 /* 20.90.38.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A26F0 /* 20.90.38.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D340 /* 20.105.211.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D350 /* 20.105.211.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D358 /* 20.105.211.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D7E4 /* 20.105.215.228/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D7E8 /* 20.105.215.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D7F0 /* 20.105.215.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469F3D0 /* 20.105.243.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469F3E0 /* 20.105.243.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469F400 /* 20.105.244.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469F420 /* 20.105.244.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B5418 /* 20.59.84.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B5450 /* 20.59.84.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B5460 /* 20.59.84.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B5480 /* 20.59.84.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B54A0 /* 20.59.84.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B6774 /* 20.59.103.116/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B6788 /* 20.59.103.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B67A0 /* 20.59.103.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B67C0 /* 20.59.103.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B67E0 /* 20.59.103.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B67F0 /* 20.59.103.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E078 /* 20.37.224.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143536A8 /* 20.53.54.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143536B0 /* 20.53.54.176/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247878 /* 20.36.120.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353E6C /* 20.53.62.108/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353E70 /* 20.53.62.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C046 /* 20.37.192.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1446DFA0 /* 20.70.223.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE078 /* 20.42.224.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C0600 /* 20.92.6.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CEB2A8 /* 20.206.178.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE046 /* 191.235.224.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0448 /* 20.206.4.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90814 /* 191.233.8.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14742B78 /* 20.116.43.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45046 /* 52.228.80.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591078 /* 40.89.16.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22CF0 /* 52.242.44.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC100 /* 20.204.193.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6846 /* 52.140.104.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259846 /* 20.37.152.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14629508 /* 20.98.149.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC078 /* 20.45.192.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E4002E /* 20.228.0.46/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E40140 /* 20.228.1.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6844 /* 20.189.104.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD31C0 /* 20.205.49.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A04C8 /* 20.42.4.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E85800 /* 20.232.88.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14290044 /* 20.41.0.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C3B0 /* 20.98.195.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270B18 /* 20.39.11.24/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FED62 /* 20.47.237.98/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FED68 /* 20.47.237.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481014 /* 20.72.16.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1458426E /* 20.88.66.110/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14584340 /* 20.88.67.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1463199E /* 20.99.25.158/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146319A0 /* 20.99.25.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433078 /* 40.67.48.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2846 /* 20.43.40.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F03D0 /* 20.111.3.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28506028 /* 40.80.96.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695878 /* 51.105.88.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743046 /* 51.116.48.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744E28 /* 51.116.78.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144F6B90 /* 20.79.107.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749046 /* 51.116.144.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92814 /* 20.217.40.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92F3C /* 20.217.47.60/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92FE8 /* 20.217.47.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E81828 /* 4.232.24.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4046 /* 20.43.64.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D245A8 /* 20.210.69.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC680 /* 20.189.198.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503878 /* 40.80.56.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E120 /* 20.192.225.32/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF02A6 /* 20.207.2.166/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF02A8 /* 20.207.2.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A014 /* 20.192.160.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400B74 /* 40.64.11.116/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400B78 /* 40.64.11.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294046 /* 20.41.64.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294190 /* 20.41.65.144/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C6F8 /* 20.200.198.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8A0F0 /* 20.200.160.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A878 /* 40.80.168.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113014 /* 20.17.48.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113F08 /* 20.17.63.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176028 /* 158.23.96.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DA292 /* 20.125.162.146/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DA298 /* 20.125.162.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B844 /* 40.80.184.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265046 /* 20.38.80.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DF4080 /* 20.223.64.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146404B8 /* 20.100.4.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782846 /* 51.120.40.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378B0E0 /* 51.120.176.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E078 /* 51.120.224.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70014 /* 20.215.0.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D7073C /* 20.215.7.60/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D707E8 /* 20.215.7.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152014 /* 20.21.32.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141537A0 /* 20.21.55.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14155014 /* 20.21.80.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145752C8 /* 20.87.82.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685D846 /* 102.133.216.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662557B0 /* 102.37.87.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853860 /* 102.133.56.96/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14764E60 /* 20.118.78.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877084A /* 40.119.8.74/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7078 /* 20.45.112.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764D914 /* 23.100.217.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764D918 /* 23.100.217.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C078 /* 20.41.192.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC5148 /* 52.172.81.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8046 /* 20.43.128.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35770 /* 20.195.87.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5028 /* 68.221.80.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2EE4 /* 51.12.46.228/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C4BE0 /* 51.12.75.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B0938 /* 20.91.9.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC6D0 /* 51.12.198.208/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D007B0 /* 20.208.7.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3046 /* 51.107.48.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7C958 /* 20.199.201.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9078 /* 51.107.144.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351814 /* 51.53.24.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351F9C /* 51.53.31.156/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356508 /* 51.53.101.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335A814 /* 51.53.168.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254078 /* 20.37.64.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5850 /* 20.203.88.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268844 /* 20.38.136.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC460 /* 20.74.196.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695078 /* 51.105.80.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1475C130 /* 20.117.193.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681846 /* 51.104.24.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC078 /* 51.143.192.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A2638 /* 20.90.38.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A044 /* 51.137.160.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450878 /* 20.69.8.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968B48 /* 52.150.139.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D728 /* 20.105.215.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1E68 /* 40.74.30.104/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CFA8B4 /* 20.207.168.180/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CFA8B8 /* 20.207.168.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B51F0 /* 20.59.81.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852FD48 /* 40.82.253.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8046 /* 20.42.128.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A81B8 /* 20.42.129.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D04B0 /* 20.125.4.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D04C0 /* 20.125.4.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14768BD4 /* 20.118.139.212/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14768BD8 /* 20.118.139.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A06C /* 20.150.160.108/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14350028 /* 20.53.0.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142475C8 /* 20.36.117.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464F48 /* 13.70.79.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EA208 /* 104.46.162.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CFC0 /* 191.233.207.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDE0A0 /* 191.237.224.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AFC0 /* 13.71.175.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456F60 /* 40.69.111.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7BB0 /* 20.43.123.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0AD0 /* 20.44.10.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E95A6 /* 40.78.149.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BD2C8 /* 104.43.210.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8C60 /* 168.61.140.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A438 /* 104.214.164.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D48496E /* 13.72.73.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5A5601 /* 13.90.86.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5C61F3 /* 13.92.97.243/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5CBCD1 /* 13.92.188.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5CBEB9 /* 13.92.190.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2847566B /* 40.71.86.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28752363 /* 40.117.35.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2879D63A /* 40.121.214.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A858F7 /* 52.168.88.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A8591E /* 52.168.89.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A85CEA /* 52.168.92.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87400 /* 52.168.116.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A888BA /* 52.168.136.186/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A88B60 /* 52.168.139.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A88D5A /* 52.168.141.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A88F55 /* 52.168.143.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A8A8A5 /* 52.168.168.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A8B24D /* 52.168.178.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A8B375 /* 52.168.179.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A8B4A8 /* 52.168.180.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AA1CB8 /* 52.170.28.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AA22D9 /* 52.170.34.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AA25EC /* 52.170.37.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AAD116 /* 52.170.209.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B317C8 /* 52.179.23.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x897560B8 /* 137.117.96.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89756133 /* 137.117.97.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1330 /* 20.44.19.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285979A0 /* 40.89.121.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433CA8 /* 40.67.60.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8BC8 /* 40.79.139.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AA008 /* 51.138.160.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743CF8 /* 51.116.60.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F600 /* 51.116.246.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6FC8 /* 13.78.111.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B470 /* 40.80.180.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EEB0 /* 20.192.238.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CE28 /* 20.193.206.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71760 /* 52.231.23.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79730 /* 52.231.151.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F0F158 /* 52.240.241.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E930 /* 13.69.233.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786D70 /* 51.120.109.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8010 /* 51.13.128.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857C90 /* 102.133.124.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254038 /* 102.37.64.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F4C8 /* 13.73.244.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C04F0 /* 20.44.4.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0B858 /* 20.192.184.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEF68 /* 40.78.239.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C65A0 /* 51.12.101.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCCE8 /* 51.12.204.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8028 /* 51.107.128.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BC088 /* 51.107.192.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287808A0 /* 40.120.8.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784068 /* 40.120.64.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9518 /* 51.140.149.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD7A0 /* 51.140.215.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28437990 /* 40.67.121.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A38CD /* 40.74.56.205/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B21110 /* 52.178.17.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E20BF /* 104.46.32.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268410 /* 20.38.132.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DF60 /* 13.86.223.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E67AC /* 40.78.103.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E6A5F /* 40.78.106.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2853BBF5 /* 40.83.187.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2876E331 /* 40.118.227.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A02139 /* 52.160.33.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A06405 /* 52.160.100.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A9572 /* 104.42.149.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D429148 /* 13.66.145.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AC20 /* 20.150.172.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14242846 /* 20.36.40.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246B10 /* 20.36.107.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424484F /* 20.36.72.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142472C0 /* 20.36.114.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4648D8 /* 13.70.72.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464EAC /* 13.70.78.172/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA550 /* 40.79.165.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FABE4 /* 40.79.171.228/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAD00 /* 40.79.173.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D26B45 /* 104.210.107.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3400 /* 13.77.52.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2873407B /* 40.115.64.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68290935 /* 104.41.9.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CBD8 /* 191.233.203.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9520 /* 191.234.149.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9D80 /* 191.234.157.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93218 /* 191.233.50.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AAE0 /* 13.71.170.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AAF8 /* 13.71.170.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142695C0 /* 20.38.149.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855E076 /* 40.85.224.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69D08 /* 52.246.157.8/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456B00 /* 40.69.107.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856E6AE /* 40.86.230.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0651C /* 20.192.101.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503504 /* 40.80.53.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D351D8 /* 104.211.81.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D367C9 /* 104.211.103.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AB68 /* 13.89.171.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0A7C /* 20.44.10.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2845A606 /* 40.69.166.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A525BC /* 52.165.37.188/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68D38 /* 52.182.141.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B6ACE8 /* 52.182.172.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BD554 /* 104.43.213.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECA78 /* 40.78.202.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B054 /* 52.180.176.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8E30 /* 168.61.142.48/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2450 /* 13.75.36.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B29A6 /* 13.75.41.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2A23 /* 13.75.42.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4A48 /* 20.205.74.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5248 /* 20.205.82.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A544 /* 104.214.165.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5C7C7C /* 13.92.124.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4028 /* 20.42.64.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4884 /* 20.42.72.132/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470B68 /* 40.71.11.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CCB94 /* 40.76.203.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CCDB5 /* 40.76.205.181/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1300 /* 20.44.19.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284692E8 /* 40.70.146.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28543EBD /* 40.84.62.189/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A7001B /* 52.167.0.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76D44 /* 52.167.109.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A7E3DC /* 52.167.227.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9238 /* 40.74.146.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B23DC /* 40.75.35.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F7266 /* 40.79.114.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A4652 /* 52.138.70.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5CA8 /* 52.138.92.168/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B85E /* 52.225.184.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B99F /* 52.225.185.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5248 /* 68.220.82.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481A04 /* 20.72.26.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315204 /* 20.49.82.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433B48 /* 40.67.59.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F82E8 /* 40.79.130.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8BC0 /* 40.79.139.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9450 /* 40.79.148.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859A80F /* 40.89.168.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F880F /* 52.143.136.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FB80F /* 52.143.184.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB300 /* 40.79.179.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488881B /* 52.136.136.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743B28 /* 51.116.59.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D01A /* 51.116.208.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749B68 /* 51.116.155.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374E81B /* 51.116.232.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F5A0 /* 51.116.245.160/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FD80 /* 51.116.253.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93A4C /* 20.217.58.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94A48 /* 20.217.74.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95A48 /* 20.217.90.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86A4C /* 4.232.106.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87A48 /* 4.232.122.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C248 /* 4.232.194.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6C18 /* 13.78.108.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBD3C /* 40.79.189.60/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC524 /* 40.79.197.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829BB1D /* 104.41.187.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B248 /* 20.18.178.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A64F0 /* 40.74.100.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EE139 /* 104.46.225.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C020E0 /* 20.192.32.224/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EB00 /* 20.192.235.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CA18 /* 20.193.202.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CC64 /* 20.193.204.100/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1D34 /* 20.44.29.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24204 /* 20.194.66.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E712E8 /* 52.231.18.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E72051 /* 52.231.32.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79310 /* 52.231.147.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7C87C /* 52.231.200.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1411424C /* 20.17.66.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170A4C /* 158.23.10.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177A48 /* 158.23.122.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C248 /* 158.23.194.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DAA48 /* 20.125.170.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCA48 /* 20.125.202.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760C8E4 /* 23.96.200.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760D206 /* 23.96.210.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1760D664 /* 23.96.214.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26BB0 /* 52.162.107.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E3E8 /* 13.69.227.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A504A /* 13.74.80.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6F90 /* 13.74.111.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871179D /* 40.113.23.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28715825 /* 40.113.88.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287371E4 /* 40.115.113.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A8F37 /* 52.138.143.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE544 /* 52.138.229.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974FC09 /* 137.116.252.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33784417 /* 51.120.68.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337862F0 /* 51.120.98.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786D1C /* 51.120.109.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D51C /* 51.120.213.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378A417 /* 51.120.164.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DB48 /* 51.120.219.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71248 /* 20.215.18.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71A48 /* 20.215.26.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79A4C /* 20.215.154.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152A4C /* 20.21.42.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154248 /* 20.21.66.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154A48 /* 20.21.74.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625300C /* 102.37.48.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857E90 /* 102.133.126.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859B18 /* 102.133.155.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685A01C /* 102.133.160.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685EBA9 /* 102.133.235.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FBD8 /* 102.133.251.216/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851B18 /* 102.133.27.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685481F /* 102.133.72.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7BF4 /* 20.45.123.244/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315A04 /* 20.49.90.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28548540 /* 40.84.133.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D61348 /* 104.214.19.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D74E92 /* 104.215.78.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0318 /* 20.44.3.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764C7E6 /* 23.100.199.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC300 /* 40.78.195.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E444 /* 104.211.228.68/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430988 /* 13.67.9.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B80254 /* 20.184.2.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1762563C /* 23.98.86.60/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEE3C /* 40.78.238.60/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A35AA5 /* 52.163.90.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A35E71 /* 52.163.94.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E6083D /* 52.230.8.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2EEA3E /* 207.46.234.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD624C /* 68.221.98.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD9248 /* 68.221.146.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6340 /* 51.12.99.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C65A8 /* 51.12.101.168/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE51C /* 51.12.229.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CED1C /* 51.12.237.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCB40 /* 51.12.203.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCCF0 /* 51.12.204.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D01248 /* 20.208.18.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CA48 /* 51.103.202.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3B28 /* 51.107.59.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B4C14 /* 51.107.76.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9B28 /* 51.107.155.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BEFFA /* 51.107.239.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356A4C /* 51.53.106.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BA4C /* 51.53.186.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254A50 /* 20.37.74.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4FF0 /* 20.45.79.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269844 /* 20.38.152.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784A04 /* 40.120.74.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BCC1A /* 40.123.204.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FAE0 /* 65.52.250.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577AF0 /* 13.87.122.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694554 /* 51.105.69.84/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694D34 /* 51.105.77.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9418 /* 51.140.148.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CB81B /* 51.140.184.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5720CC /* 13.87.32.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5738F0 /* 13.87.56.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD310 /* 51.140.211.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D081E /* 51.141.8.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C330 /* 13.71.195.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E937D /* 13.78.147.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4540E8 /* 13.69.64.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456D88 /* 13.69.109.136/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5075EC /* 13.80.117.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEA3CC /* 52.174.163.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEA4FE /* 52.174.164.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B21EC1 /* 52.178.30.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECA14B /* 52.236.161.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBD4C /* 52.236.189.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D13FA /* 104.45.19.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D392F0 /* 104.211.146.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A4A3 /* 104.211.164.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B07D3 /* 13.91.7.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5BFC3A /* 13.91.252.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A248 /* 20.168.162.72/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17630BDB /* 23.99.11.219/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2870F3B0 /* 40.112.243.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682AB579 /* 104.42.181.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89872131 /* 137.135.33.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428C98 /* 13.66.140.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42A7C2 /* 13.66.167.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E297 /* 13.66.226.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF5C0 /* 40.78.245.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFD40 /* 40.78.253.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34972690 /* 52.151.38.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349EECF7 /* 52.158.236.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AB48 /* 20.150.171.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B5A0 /* 20.150.181.160/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BD1C /* 20.150.189.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496E104 /* 20.150.225.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E0D8 /* 20.37.224.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142478D8 /* 20.36.120.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B99F0 /* 13.75.153.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C360 /* 20.37.195.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D46B0C4 /* 13.70.176.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE380 /* 20.42.227.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE1D8 /* 191.235.225.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDFD73 /* 191.237.253.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90960 /* 191.233.9.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E42A29 /* 52.228.42.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E451F8 /* 52.228.81.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456FC8 /* 40.69.111.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285911E8 /* 40.89.17.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EB2477 /* 52.235.36.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C69B8 /* 52.140.105.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D34938 /* 104.211.73.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259D50 /* 20.37.157.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B095B3 /* 52.176.149.179/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC0F8 /* 20.45.192.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DD000 /* 20.45.208.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E40220 /* 20.228.2.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D03DDF /* 104.208.61.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6C38 /* 20.189.108.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD32E8 /* 20.205.50.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766E136 /* 23.102.225.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A558 /* 104.214.165.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A04F8 /* 20.42.4.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682994EE /* 104.41.148.238/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14290590 /* 20.41.5.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B2F6E /* 40.123.47.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270B60 /* 20.39.11.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1AB55 /* 52.225.171.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481BB8 /* 20.72.27.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284330D0 /* 40.67.48.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2A08 /* 20.43.42.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FA636 /* 52.143.166.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336958F8 /* 51.105.88.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34888363 /* 52.136.131.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743CF4 /* 51.116.60.244/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744EC8 /* 51.116.78.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144F6C78 /* 20.79.108.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F5A8 /* 51.116.245.168/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93A78 /* 20.217.58.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86BB0 /* 4.232.107.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4200 /* 20.43.66.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829A171 /* 104.41.161.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17646A97 /* 23.100.106.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6320 /* 40.74.99.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285039C0 /* 40.80.57.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C020E8 /* 20.192.32.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1D7A0 /* 20.193.215.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF0468 /* 20.207.4.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1A84C /* 20.193.168.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CD80 /* 20.193.205.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400E00 /* 40.64.14.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142941B8 /* 20.41.65.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7434B /* 52.231.67.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A9B0 /* 40.80.169.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79F26 /* 52.231.159.38/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141143F0 /* 20.17.67.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170BB0 /* 158.23.11.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850BC18 /* 40.80.188.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41343EA7 /* 65.52.62.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265598 /* 20.38.85.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28715E43 /* 40.113.94.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337828E0 /* 51.120.40.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E0D8 /* 51.120.224.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79A78 /* 20.215.154.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152A78 /* 20.21.42.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575378 /* 20.87.83.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685AF48 /* 102.133.175.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853880 /* 102.133.56.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854BAD /* 102.133.75.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F870 /* 13.73.248.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D2DBFC /* 104.210.219.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D70D8 /* 20.45.112.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C1A0 /* 20.41.193.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E712 /* 104.211.231.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4C512E /* 13.76.81.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8328 /* 20.43.131.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD63B0 /* 68.221.99.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B9200 /* 20.91.146.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C65F0 /* 51.12.101.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B0B90 /* 20.91.11.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCCF8 /* 51.12.204.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B30E0 /* 51.107.48.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B90D8 /* 51.107.144.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356BF0 /* 51.53.107.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BBF0 /* 51.53.187.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142540D8 /* 20.37.64.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4797 /* 20.45.71.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142688E0 /* 20.38.136.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BD882 /* 40.123.216.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336950D0 /* 51.105.80.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336819E0 /* 51.104.25.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4348 /* 51.140.67.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC0D0 /* 51.143.192.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A1F0 /* 51.137.161.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CCA22 /* 51.140.202.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968B68 /* 52.150.139.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A119E9 /* 52.161.25.233/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14320100 /* 20.50.1.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6828BF08 /* 104.40.191.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348830D8 /* 52.136.48.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDAC98 /* 20.189.172.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852FDC0 /* 40.82.253.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28709643 /* 40.112.150.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A83E0 /* 20.42.131.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B71BCC /* 52.183.27.204/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D9D28 /* 20.125.157.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AC28 /* 20.150.172.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424211D /* 20.36.33.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142421AA /* 20.36.33.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142423BE /* 20.36.35.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142426C3 /* 20.36.38.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14242732 /* 20.36.39.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142427AB /* 20.36.39.171/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1424294A /* 20.36.41.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4678D7 /* 13.70.120.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4BAB3D /* 13.75.171.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4BC6A9 /* 13.75.198.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765DC87 /* 23.101.220.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3493035D /* 52.147.3.93/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CAB7F /* 52.156.171.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EDC9F6 /* 52.237.201.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EDFDF5 /* 52.237.253.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D2DD5 /* 13.77.45.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDC20E /* 52.189.194.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDD797 /* 52.189.215.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDE99E /* 52.189.233.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F3416B /* 52.243.65.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F34AD5 /* 52.243.74.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF2869 /* 52.255.40.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF3D91 /* 52.255.61.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17616CAA /* 23.97.108.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682905A2 /* 104.41.5.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68292DB6 /* 104.41.45.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8314A /* 191.232.49.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8A695 /* 191.232.166.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8EB46 /* 191.232.235.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8EE49 /* 191.232.238.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEABF3F /* 191.234.191.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB417F /* 191.235.65.127/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB48AF /* 191.235.72.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB49D3 /* 191.235.73.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB4E7E /* 191.235.78.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFF810 /* 191.239.248.16/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58FE62 /* 13.88.254.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1468464B /* 20.104.70.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14976F81 /* 20.151.111.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855F19F /* 40.85.241.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A0999 /* 52.138.9.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A1473 /* 52.138.20.115/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A1C17 /* 52.138.28.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E41DA4 /* 52.228.29.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E910C6 /* 52.233.16.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED140E /* 52.237.20.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2845662E /* 40.69.102.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856CCF5 /* 40.86.204.245/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856CDD8 /* 40.86.205.216/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856D076 /* 40.86.208.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856DEB7 /* 40.86.222.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E575FE /* 52.229.117.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E57D2D /* 52.229.125.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D470514 /* 13.71.5.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C64389 /* 20.198.67.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CC5420 /* 20.204.84.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CC8854 /* 20.204.136.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CC8868 /* 20.204.136.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C7122 /* 52.140.113.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC8505 /* 52.172.133.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACC26D /* 52.172.194.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACD2EB /* 52.172.210.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACD922 /* 52.172.217.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACDF2E /* 52.172.223.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D34E11 /* 104.211.78.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3723D /* 104.211.114.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17638D8A /* 23.99.141.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28459597 /* 40.69.149.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871C78A /* 40.113.199.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871C83A /* 40.113.200.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A1CC4 /* 40.122.28.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287AD414 /* 40.122.212.20/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A5DA0F /* 52.165.218.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD59A8 /* 52.173.89.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BA904 /* 104.43.169.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D01C52 /* 104.208.28.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83DA7C1 /* 168.61.167.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4628C9 /* 13.70.40.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B728F /* 13.75.114.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58DD1C /* 13.88.221.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17650536 /* 23.101.5.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766E571 /* 23.102.229.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28534F27 /* 40.83.79.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E5CFB4 /* 52.229.207.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134A0DA /* 65.52.160.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974A020 /* 137.116.160.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974A89C /* 137.116.168.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F89D5 /* 168.63.137.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147F898F /* 20.127.137.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B9FFE1 /* 20.185.255.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E48479 /* 20.228.132.121/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E4F8DF /* 20.228.248.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E76D4B /* 20.231.109.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E76E54 /* 20.231.110.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E87B9B /* 20.232.123.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E87F45 /* 20.232.127.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4418AD /* 13.68.24.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D444C68 /* 13.68.76.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14600C7B /* 20.96.12.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2846BD57 /* 40.70.189.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B1E75 /* 40.75.30.117/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3493A09E /* 52.147.160.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A7A387 /* 52.167.163.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A7AB35 /* 52.167.171.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B17BA2 /* 52.177.123.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B1ACF7 /* 52.177.172.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F25665 /* 52.242.86.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F77AE1 /* 52.247.122.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F77B00 /* 52.247.123.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D1E9DE /* 104.209.233.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974310C /* 137.116.49.12/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F2A93 /* 20.111.42.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC276C /* 20.188.39.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC29F0 /* 20.188.41.240/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC2D52 /* 20.188.45.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D8B6B0 /* 20.216.182.176/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28598192 /* 40.89.129.146/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28599A4C /* 40.89.154.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BF18E /* 51.11.241.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FB6D0 /* 52.143.182.208/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AA0012 /* 20.170.0.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AA0758 /* 20.170.7.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374AB66 /* 51.116.171.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374B6F8 /* 51.116.182.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374E12B /* 51.116.225.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374E12C /* 51.116.225.44/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374E137 /* 51.116.225.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374EC4A /* 51.116.236.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374EC54 /* 51.116.236.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC0301 /* 20.188.3.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17646224 /* 23.100.98.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287388AF /* 40.115.136.175/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B6F7C /* 52.155.111.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F6A58C /* 52.246.165.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F6B1DD /* 52.246.177.221/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F6BF62 /* 52.246.191.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829A69F /* 104.41.166.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49ED9A /* 13.73.237.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A54FD /* 40.74.84.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A71CA /* 40.74.113.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A76A3 /* 40.74.118.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A8822 /* 40.74.136.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF9078 /* 52.175.144.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EEDD1 /* 104.46.237.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D73303 /* 104.215.51.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294DFC /* 20.41.77.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D25C9 /* 52.141.37.201/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D3865 /* 52.141.56.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E70DC1 /* 52.231.13.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E726D3 /* 52.231.38.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E75DE0 /* 52.231.93.224/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7623A /* 52.231.98.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79B82 /* 52.231.155.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79C13 /* 52.231.156.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7A4A3 /* 52.231.164.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7A6C7 /* 52.231.166.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7C307 /* 52.231.195.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7C5C3 /* 52.231.197.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E7CEA2 /* 52.231.206.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1419DEB6 /* 20.25.222.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EC557E /* 20.236.85.126/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F55A8 /* 52.159.85.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F5780 /* 52.159.87.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F7361 /* 52.159.115.97/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F7456 /* 52.159.116.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F7495 /* 52.159.116.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D459C55 /* 13.69.156.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4FF3C2 /* 13.79.243.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764329A /* 23.100.50.154/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28451F49 /* 40.69.31.73/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28455AA6 /* 40.69.90.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A47E7C /* 52.164.126.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A90574 /* 52.169.5.116/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41344778 /* 65.52.71.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974F894 /* 137.116.248.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8987F341 /* 137.135.243.65/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F4777 /* 168.63.71.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378459E /* 51.120.69.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33784687 /* 51.120.70.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378468D /* 51.120.70.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33784D9B /* 51.120.77.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33784E8E /* 51.120.78.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33784FD4 /* 51.120.79.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33785878 /* 51.120.88.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F03CF /* 40.127.3.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66252A9F /* 102.37.42.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685A1DC /* 102.133.161.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685A687 /* 102.133.166.135/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685ACBF /* 102.133.172.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685AFC8 /* 102.133.175.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E051 /* 102.133.224.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685EA8B /* 102.133.234.139/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854024 /* 102.133.64.36/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854044 /* 102.133.64.68/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685405B /* 102.133.64.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685406F /* 102.133.64.111/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668548FA /* 102.133.72.250/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854B08 /* 102.133.75.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854B20 /* 102.133.75.32/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854B23 /* 102.133.75.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146170F6 /* 20.97.112.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14617E76 /* 20.97.126.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14617F40 /* 20.97.127.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14617F66 /* 20.97.127.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14617FB6 /* 20.97.127.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E14FC1 /* 20.225.79.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E151DE /* 20.225.81.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E1541D /* 20.225.84.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E1AABF /* 20.225.170.191/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E1D18F /* 20.225.209.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E1D2D3 /* 20.225.210.211/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E1D591 /* 20.225.213.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E1D79B /* 20.225.215.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176285BB /* 23.98.133.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AB2421 /* 52.171.36.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B9CA98 /* 52.185.202.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x46255343 /* 70.37.83.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4625567E /* 70.37.86.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x46256318 /* 70.37.99.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D296A0 /* 104.210.150.160/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D29DD1 /* 104.210.157.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D63C90 /* 104.214.60.144/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D76733 /* 104.215.103.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D77055 /* 104.215.112.85/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D474357 /* 13.71.67.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4746D7 /* 13.71.70.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47477A /* 13.71.71.122/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4751A1 /* 13.71.81.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47596C /* 13.71.89.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D475EB6 /* 13.71.94.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D475F1F /* 13.71.95.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D477106 /* 13.71.113.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC224A /* 52.172.34.74/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC28D7 /* 52.172.40.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3D3D5 /* 104.211.211.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3D8E6 /* 104.211.216.230/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3DE32 /* 104.211.222.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3F268 /* 104.211.242.104/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D43444E /* 13.67.68.78/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4C5859 /* 13.76.88.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4CC313 /* 13.76.195.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4CE694 /* 13.76.230.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D4C004 /* 20.212.192.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D4C093 /* 20.212.192.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D4C448 /* 20.212.196.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176242AE /* 23.98.66.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A3D1FF /* 52.163.209.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB7F98 /* 52.187.127.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B2C0D /* 138.91.44.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B44AC /* 51.107.68.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B4523 /* 51.107.69.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B4EA8 /* 51.107.78.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B5543 /* 51.107.85.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B556E /* 51.107.85.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B5607 /* 51.107.86.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B5663 /* 51.107.86.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4056 /* 20.45.64.86/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4370 /* 20.45.67.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D43B9 /* 20.45.67.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4F03 /* 20.45.79.3/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4F18 /* 20.45.79.24/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4F5B /* 20.45.79.91/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4F60 /* 20.45.79.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4FA8 /* 20.45.79.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E2EFC /* 20.46.46.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144A949E /* 20.74.148.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144A980D /* 20.74.152.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144A9AF6 /* 20.74.154.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144A9CB7 /* 20.74.156.183/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AB266 /* 20.74.178.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AB663 /* 20.74.182.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB00F7 /* 20.203.0.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB0733 /* 20.203.7.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB1270 /* 20.203.18.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB1AA3 /* 20.203.26.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BE43A /* 40.123.228.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1431CCC4 /* 20.49.204.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145AFE65 /* 20.90.254.101/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145AFF2A /* 20.90.255.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1475480F /* 20.117.72.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147548EB /* 20.117.72.235/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878277C /* 40.120.39.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B0DF8 /* 51.11.13.248/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3369367B /* 51.105.54.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33841D6B /* 51.132.29.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C399F /* 51.140.57.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FA4C0 /* 51.143.164.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FA96B /* 51.143.169.107/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3391114B /* 51.145.17.75/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x339157E8 /* 51.145.87.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144DF18C /* 20.77.241.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144DF200 /* 20.77.242.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144DF2CF /* 20.77.242.207/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144DF360 /* 20.77.243.96/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33683158 /* 51.104.49.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CCE6E /* 51.140.206.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CE7DF /* 51.140.231.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CFF37 /* 51.140.255.55/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D1E1F /* 51.141.30.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D7A59 /* 51.141.122.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348EA100 /* 52.142.161.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348EA2E2 /* 52.142.162.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E8C3F /* 13.78.140.63/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4ED116 /* 13.78.209.22/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A1213B /* 52.161.33.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A121BB /* 52.161.33.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A12612 /* 52.161.38.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A126DA /* 52.161.38.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A1403E /* 52.161.64.62/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A151E7 /* 52.161.81.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45528A /* 13.69.82.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5167A4 /* 13.81.103.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28441278 /* 40.68.18.120/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2872F15A /* 40.114.241.90/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33881CC8 /* 51.136.28.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389594F /* 51.137.89.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34890232 /* 52.137.2.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE4105 /* 52.174.65.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41349EB1 /* 65.52.158.177/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68289CC2 /* 104.40.156.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6ED17 /* 104.214.237.23/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8975AB1A /* 137.117.171.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F1F36 /* 168.63.31.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B78289 /* 52.183.130.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D38A58 /* 104.211.138.88/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D38CBE /* 104.211.140.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39811 /* 104.211.152.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39A0E /* 104.211.154.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39B72 /* 104.211.155.114/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A57B /* 104.211.165.123/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3B896 /* 104.211.184.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3BC97 /* 104.211.188.151/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58632D /* 13.88.99.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5864D2 /* 13.88.100.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2853EA6D /* 40.83.234.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68281523 /* 104.40.21.35/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D1213C /* 104.209.33.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89872B1E /* 137.135.43.30/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B9E86 /* 138.91.158.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D38A059 /* 157.56.160.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42FB31 /* 13.66.251.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D8C3A /* 13.77.140.58/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE2B63 /* 20.190.43.99/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28417ADE /* 40.65.122.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338DADEC /* 51.141.173.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F274F /* 51.143.39.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F6057 /* 52.143.96.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349735C4 /* 52.151.53.196/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AFFD9C /* 52.175.253.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B71340 /* 52.183.19.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BF81E7 /* 52.191.129.231/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A48C6 /* 20.106.72.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A498D /* 20.106.73.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A6005 /* 20.106.96.5/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A630A /* 20.106.99.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A65D6 /* 20.106.101.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1476A74D /* 20.118.167.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1476A7D2 /* 20.118.167.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14968A93 /* 20.150.138.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86270 /* 4.232.98.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F808 /* 13.73.248.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6BD000 /* 13.107.208.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6BD500 /* 13.107.213.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6BDB00 /* 13.107.219.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6BE000 /* 13.107.224.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6BE200 /* 13.107.226.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6BE400 /* 13.107.228.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6BE700 /* 13.107.231.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6BEA00 /* 13.107.234.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6BED00 /* 13.107.237.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6BEE00 /* 13.107.238.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6BF600 /* 13.107.246.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6BFD00 /* 13.107.253.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152520 /* 20.21.37.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247860 /* 20.36.120.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254060 /* 20.37.64.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259C70 /* 20.37.156.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C058 /* 20.37.192.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E060 /* 20.37.224.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265440 /* 20.38.84.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268860 /* 20.38.136.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270B00 /* 20.39.11.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14290450 /* 20.41.4.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294070 /* 20.41.64.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C060 /* 20.41.192.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A0470 /* 20.42.4.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8190 /* 20.42.129.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE060 /* 20.42.224.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2980 /* 20.43.41.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4058 /* 20.43.64.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8068 /* 20.43.128.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7060 /* 20.45.112.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC060 /* 20.45.192.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330720 /* 20.51.7.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345FF0 /* 20.52.95.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B52B4 /* 20.59.82.180/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144812F0 /* 20.72.18.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14612778 /* 20.97.39.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14771C28 /* 20.119.28.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A048 /* 20.150.160.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6A48 /* 20.189.106.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A160 /* 20.192.161.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E128 /* 20.192.225.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D24644 /* 20.210.70.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D704C8 /* 20.215.4.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92CC8 /* 20.217.44.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433060 /* 40.67.48.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1E40 /* 40.74.30.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503860 /* 40.80.56.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A860 /* 40.80.168.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B870 /* 40.80.184.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852F848 /* 40.82.248.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591060 /* 40.89.16.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A4000 /* 40.90.64.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A4400 /* 40.90.68.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A4600 /* 40.90.70.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2900 /* 51.12.41.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC100 /* 51.12.193.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351CD8 /* 51.53.28.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681858 /* 51.104.24.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695060 /* 51.105.80.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695860 /* 51.105.88.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3060 /* 51.107.48.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9060 /* 51.107.144.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782860 /* 51.120.40.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E060 /* 51.120.224.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A058 /* 51.137.160.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC060 /* 51.143.192.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883060 /* 52.136.48.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6860 /* 52.140.104.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968870 /* 52.150.136.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45070 /* 52.228.80.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5C18 /* 68.221.92.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853850 /* 102.133.56.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685D850 /* 102.133.216.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D44300 /* 104.212.67.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D44400 /* 104.212.68.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176C30 /* 158.23.108.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90970 /* 191.233.9.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE058 /* 191.235.224.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6B0300 /* 13.107.3.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6B0400 /* 13.107.4.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6B0900 /* 13.107.9.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6B0C00 /* 13.107.12.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6B0F00 /* 13.107.15.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6B1000 /* 13.107.16.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6B1200 /* 13.107.18.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6B1500 /* 13.107.21.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6B1600 /* 13.107.22.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6B2500 /* 13.107.37.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6B2600 /* 13.107.38.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6B2800 /* 13.107.40.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6B2A00 /* 13.107.42.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6B3000 /* 13.107.48.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6B3200 /* 13.107.50.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6B3400 /* 13.107.52.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6B3600 /* 13.107.54.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6B3800 /* 13.107.56.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6B4000 /* 13.107.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6B8000 /* 13.107.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6BF500 /* 13.107.245.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6BFE00 /* 13.107.254.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0300 /* 131.253.3.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD1500 /* 131.253.21.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD2100 /* 131.253.33.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x96AB2000 /* 150.171.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCA59E960 /* 202.89.233.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCC4FC500 /* 204.79.197.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86278 /* 4.232.98.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F810 /* 13.73.248.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152528 /* 20.21.37.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247868 /* 20.36.120.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254068 /* 20.37.64.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14259C78 /* 20.37.156.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C300 /* 20.37.195.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E068 /* 20.37.224.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14265448 /* 20.38.84.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268868 /* 20.38.136.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270B08 /* 20.39.11.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14290458 /* 20.41.4.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294078 /* 20.41.64.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C068 /* 20.41.192.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A0478 /* 20.42.4.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8198 /* 20.42.129.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE068 /* 20.42.224.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2988 /* 20.43.41.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4180 /* 20.43.65.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8250 /* 20.43.130.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7068 /* 20.45.112.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC068 /* 20.45.192.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B6740 /* 20.59.103.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144812F8 /* 20.72.18.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144F6B98 /* 20.79.107.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14589DB0 /* 20.88.157.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8498 /* 20.90.132.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1473F740 /* 20.115.247.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1476C380 /* 20.118.195.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14779B80 /* 20.119.155.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496A060 /* 20.150.160.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6A70 /* 20.189.106.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A168 /* 20.192.161.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E130 /* 20.192.225.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D24640 /* 20.210.70.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D704F0 /* 20.215.4.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92CF0 /* 20.217.44.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433068 /* 40.67.48.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A1E48 /* 40.74.30.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503868 /* 40.80.56.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A868 /* 40.80.168.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B878 /* 40.80.184.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852F8F8 /* 40.82.248.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28591068 /* 40.89.16.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2908 /* 51.12.41.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC108 /* 51.12.193.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351E90 /* 51.53.30.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681980 /* 51.104.25.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695068 /* 51.105.80.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695868 /* 51.105.88.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3068 /* 51.107.48.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9068 /* 51.107.144.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782868 /* 51.120.40.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E068 /* 51.120.224.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A070 /* 51.137.160.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC068 /* 51.143.192.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883068 /* 52.136.48.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6868 /* 52.140.104.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968878 /* 52.150.136.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F47A0 /* 52.159.71.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45078 /* 52.228.80.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD5D80 /* 68.221.93.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853858 /* 102.133.56.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685D858 /* 102.133.216.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x93F30000 /* 147.243.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E176C38 /* 158.23.108.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90978 /* 191.233.9.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE180 /* 191.235.225.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4097A1 /* 13.64.151.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428D40 /* 13.66.141.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4309E0 /* 13.67.9.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4542A0 /* 13.69.66.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E560 /* 13.69.229.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464920 /* 13.70.73.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47ACA0 /* 13.71.172.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C3E0 /* 13.71.195.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F020 /* 13.73.240.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4AF99C /* 13.74.249.156/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2620 /* 13.75.38.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B69A8 /* 13.75.105.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D34A0 /* 13.77.52.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6CC0 /* 13.78.108.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4EACF6 /* 13.78.172.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4F25F7 /* 13.79.37.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DB00 /* 13.86.219.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5739A0 /* 13.87.57.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577BA0 /* 13.87.123.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AE00 /* 13.89.174.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246BC0 /* 20.36.107.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247340 /* 20.36.115.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254B60 /* 20.37.75.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7820 /* 20.43.120.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C03A0 /* 20.44.3.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1020 /* 20.44.16.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0A40 /* 20.46.10.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331080 /* 20.51.16.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D62A0 /* 20.61.98.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8100 /* 20.62.129.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420220 /* 20.66.2.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481540 /* 20.72.21.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC520 /* 20.187.197.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA530 /* 20.190.165.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA630 /* 20.190.166.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA670 /* 20.190.166.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA6B0 /* 20.190.166.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C33866 /* 20.195.56.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C33976 /* 20.195.57.118/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C340C0 /* 20.195.64.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17650046 /* 23.101.0.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176506BE /* 23.101.6.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2844A08E /* 40.68.160.142/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456BA0 /* 40.69.107.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470D00 /* 40.71.13.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6540 /* 40.74.101.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A92C0 /* 40.74.146.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC3A0 /* 40.78.195.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECB40 /* 40.78.203.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8380 /* 40.79.131.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB380 /* 40.79.179.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28539038 /* 40.83.144.56/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2530 /* 40.126.37.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2630 /* 40.126.38.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2670 /* 40.126.38.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E26B0 /* 40.126.38.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C94C0 /* 51.140.148.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD3C0 /* 51.140.211.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A419D /* 52.138.65.157/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A4429 /* 52.138.68.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928460 /* 52.146.132.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969D00 /* 52.150.157.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A10D47 /* 52.161.13.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A10D5F /* 52.161.13.95/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A16EA9 /* 52.161.110.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26E60 /* 52.162.110.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A97D77 /* 52.169.125.119/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9DA00 /* 52.169.218.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AEBD95 /* 52.174.189.149/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF1286 /* 52.175.18.134/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B21B70 /* 52.178.27.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B37ADA /* 52.179.122.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B37EDF /* 52.179.126.223/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B157 /* 52.180.177.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B36C /* 52.180.179.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B53D /* 52.180.181.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B708 /* 52.180.183.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB1301 /* 52.187.19.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB7130 /* 52.187.113.48/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB7553 /* 52.187.117.83/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB78ED /* 52.187.120.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1B8C6 /* 52.225.184.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1BC59 /* 52.225.188.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71380 /* 52.231.19.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E793C0 /* 52.231.147.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134FB60 /* 65.52.251.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68285413 /* 104.40.84.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682857D1 /* 104.40.87.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68289C12 /* 104.40.156.18/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68299FD4 /* 104.41.159.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D8AA1 /* 104.45.138.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB280 /* 104.46.178.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D393A0 /* 104.211.147.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CCA0 /* 191.233.204.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14142000 /* 20.20.32.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481560 /* 20.72.21.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8000 /* 20.190.128.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8040 /* 20.190.128.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8080 /* 20.190.128.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE80A0 /* 20.190.128.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8100 /* 20.190.129.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8140 /* 20.190.129.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8180 /* 20.190.129.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE81A0 /* 20.190.129.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8200 /* 20.190.130.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8220 /* 20.190.130.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8300 /* 20.190.131.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8320 /* 20.190.131.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8340 /* 20.190.131.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8360 /* 20.190.131.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8400 /* 20.190.132.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8420 /* 20.190.132.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8440 /* 20.190.132.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8460 /* 20.190.132.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8500 /* 20.190.133.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8520 /* 20.190.133.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8540 /* 20.190.133.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8560 /* 20.190.133.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8600 /* 20.190.134.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8620 /* 20.190.134.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8640 /* 20.190.134.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8660 /* 20.190.134.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8700 /* 20.190.135.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8720 /* 20.190.135.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8740 /* 20.190.135.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8760 /* 20.190.135.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8800 /* 20.190.136.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8820 /* 20.190.136.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8900 /* 20.190.137.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8920 /* 20.190.137.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8940 /* 20.190.137.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8960 /* 20.190.137.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8A00 /* 20.190.138.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8A20 /* 20.190.138.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8A40 /* 20.190.138.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8A60 /* 20.190.138.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8A80 /* 20.190.138.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8AA0 /* 20.190.138.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8B00 /* 20.190.139.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8B20 /* 20.190.139.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8B40 /* 20.190.139.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8B60 /* 20.190.139.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8B80 /* 20.190.139.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8BA0 /* 20.190.139.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8C00 /* 20.190.140.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8C20 /* 20.190.140.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8C40 /* 20.190.140.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8C60 /* 20.190.140.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8C80 /* 20.190.140.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8CA0 /* 20.190.140.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8CC0 /* 20.190.140.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8CE0 /* 20.190.140.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8D00 /* 20.190.141.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8D20 /* 20.190.141.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8D80 /* 20.190.141.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8DA0 /* 20.190.141.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8DC0 /* 20.190.141.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8DE0 /* 20.190.141.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8E00 /* 20.190.142.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8E20 /* 20.190.142.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8E40 /* 20.190.142.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8E60 /* 20.190.142.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8E80 /* 20.190.142.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8EA0 /* 20.190.142.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8F00 /* 20.190.143.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8F20 /* 20.190.143.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8F40 /* 20.190.143.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8F60 /* 20.190.143.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8F80 /* 20.190.143.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8FA0 /* 20.190.143.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9000 /* 20.190.144.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9020 /* 20.190.144.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9080 /* 20.190.144.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE90A0 /* 20.190.144.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE90C0 /* 20.190.144.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE90E0 /* 20.190.144.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9100 /* 20.190.145.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9120 /* 20.190.145.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9140 /* 20.190.145.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9160 /* 20.190.145.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9180 /* 20.190.145.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE91A0 /* 20.190.145.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9200 /* 20.190.146.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9220 /* 20.190.146.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9240 /* 20.190.146.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9260 /* 20.190.146.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9280 /* 20.190.146.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE92A0 /* 20.190.146.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9300 /* 20.190.147.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9320 /* 20.190.147.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9340 /* 20.190.147.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9360 /* 20.190.147.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9380 /* 20.190.147.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE93A0 /* 20.190.147.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9400 /* 20.190.148.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9420 /* 20.190.148.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9480 /* 20.190.148.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE94A0 /* 20.190.148.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE94C0 /* 20.190.148.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE94E0 /* 20.190.148.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9500 /* 20.190.149.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9510 /* 20.190.149.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9540 /* 20.190.149.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9550 /* 20.190.149.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9580 /* 20.190.149.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9590 /* 20.190.149.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9600 /* 20.190.150.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9610 /* 20.190.150.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9640 /* 20.190.150.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9660 /* 20.190.150.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9700 /* 20.190.151.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9710 /* 20.190.151.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9740 /* 20.190.151.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9750 /* 20.190.151.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9780 /* 20.190.151.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9790 /* 20.190.151.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9800 /* 20.190.152.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9810 /* 20.190.152.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9840 /* 20.190.152.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9850 /* 20.190.152.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9880 /* 20.190.152.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9890 /* 20.190.152.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9900 /* 20.190.153.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9910 /* 20.190.153.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9940 /* 20.190.153.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9960 /* 20.190.153.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9A00 /* 20.190.154.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9A10 /* 20.190.154.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9A40 /* 20.190.154.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9A50 /* 20.190.154.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9A80 /* 20.190.154.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9A90 /* 20.190.154.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9B00 /* 20.190.155.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9B10 /* 20.190.155.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9B40 /* 20.190.155.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9B50 /* 20.190.155.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9B80 /* 20.190.155.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9B90 /* 20.190.155.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9C00 /* 20.190.156.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9C10 /* 20.190.156.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9C40 /* 20.190.156.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9C60 /* 20.190.156.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9D00 /* 20.190.157.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9D10 /* 20.190.157.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9D40 /* 20.190.157.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9D50 /* 20.190.157.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9D80 /* 20.190.157.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9D90 /* 20.190.157.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9E00 /* 20.190.158.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9E10 /* 20.190.158.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9E40 /* 20.190.158.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9E60 /* 20.190.158.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9F00 /* 20.190.159.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9F10 /* 20.190.159.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9F40 /* 20.190.159.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9F50 /* 20.190.159.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9F80 /* 20.190.159.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9F90 /* 20.190.159.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA000 /* 20.190.160.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA010 /* 20.190.160.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA040 /* 20.190.160.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA050 /* 20.190.160.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA080 /* 20.190.160.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA090 /* 20.190.160.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA100 /* 20.190.161.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA110 /* 20.190.161.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA140 /* 20.190.161.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA150 /* 20.190.161.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA180 /* 20.190.161.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA190 /* 20.190.161.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA200 /* 20.190.162.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA210 /* 20.190.162.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA240 /* 20.190.162.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA260 /* 20.190.162.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA300 /* 20.190.163.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA310 /* 20.190.163.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA340 /* 20.190.163.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA350 /* 20.190.163.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA380 /* 20.190.163.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA390 /* 20.190.163.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA400 /* 20.190.164.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA410 /* 20.190.164.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA440 /* 20.190.164.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA460 /* 20.190.164.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA500 /* 20.190.165.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA510 /* 20.190.165.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA540 /* 20.190.165.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA560 /* 20.190.165.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA600 /* 20.190.166.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA610 /* 20.190.166.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA640 /* 20.190.166.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA650 /* 20.190.166.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA680 /* 20.190.166.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA690 /* 20.190.166.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA700 /* 20.190.167.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA710 /* 20.190.167.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA740 /* 20.190.167.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA750 /* 20.190.167.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA780 /* 20.190.167.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA790 /* 20.190.167.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA800 /* 20.190.168.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA810 /* 20.190.168.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA840 /* 20.190.168.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA860 /* 20.190.168.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA900 /* 20.190.169.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA910 /* 20.190.169.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA940 /* 20.190.169.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA950 /* 20.190.169.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA980 /* 20.190.169.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA990 /* 20.190.169.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAA00 /* 20.190.170.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAA10 /* 20.190.170.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAA40 /* 20.190.170.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAA60 /* 20.190.170.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAB00 /* 20.190.171.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAB10 /* 20.190.171.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAB40 /* 20.190.171.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAB60 /* 20.190.171.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAC00 /* 20.190.172.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAC10 /* 20.190.172.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAC40 /* 20.190.172.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAC60 /* 20.190.172.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAD00 /* 20.190.173.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAD10 /* 20.190.173.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAD40 /* 20.190.173.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAD50 /* 20.190.173.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAD80 /* 20.190.173.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAD90 /* 20.190.173.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAE00 /* 20.190.174.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAE10 /* 20.190.174.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAE40 /* 20.190.174.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAE60 /* 20.190.174.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAF00 /* 20.190.175.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAF10 /* 20.190.175.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAF40 /* 20.190.175.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAF50 /* 20.190.175.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAF80 /* 20.190.175.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAF90 /* 20.190.175.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB000 /* 20.190.176.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB010 /* 20.190.176.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB040 /* 20.190.176.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB060 /* 20.190.176.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB100 /* 20.190.177.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB110 /* 20.190.177.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB140 /* 20.190.177.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB150 /* 20.190.177.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB180 /* 20.190.177.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB190 /* 20.190.177.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB200 /* 20.190.178.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB210 /* 20.190.178.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB240 /* 20.190.178.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB260 /* 20.190.178.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB300 /* 20.190.179.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB310 /* 20.190.179.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB340 /* 20.190.179.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB360 /* 20.190.179.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB400 /* 20.190.180.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB410 /* 20.190.180.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB440 /* 20.190.180.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB450 /* 20.190.180.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB480 /* 20.190.180.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB490 /* 20.190.180.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB500 /* 20.190.181.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB510 /* 20.190.181.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB540 /* 20.190.181.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB560 /* 20.190.181.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB600 /* 20.190.182.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB610 /* 20.190.182.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB640 /* 20.190.182.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB660 /* 20.190.182.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB700 /* 20.190.183.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB710 /* 20.190.183.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB740 /* 20.190.183.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB760 /* 20.190.183.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB800 /* 20.190.184.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB810 /* 20.190.184.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB840 /* 20.190.184.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB860 /* 20.190.184.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBA00 /* 20.190.186.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBA10 /* 20.190.186.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBA40 /* 20.190.186.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBA60 /* 20.190.186.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBB00 /* 20.190.187.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBB10 /* 20.190.187.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBB40 /* 20.190.187.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBB60 /* 20.190.187.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBC00 /* 20.190.188.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBC10 /* 20.190.188.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBC40 /* 20.190.188.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBC60 /* 20.190.188.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBD00 /* 20.190.189.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBD40 /* 20.190.189.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBD80 /* 20.190.189.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBDC0 /* 20.190.189.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBE00 /* 20.190.190.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBE40 /* 20.190.190.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBE80 /* 20.190.190.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBEC0 /* 20.190.190.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBF00 /* 20.190.191.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBF40 /* 20.190.191.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBF80 /* 20.190.191.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBFC0 /* 20.190.191.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E78000 /* 20.231.128.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0000 /* 40.126.0.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0040 /* 40.126.0.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0080 /* 40.126.0.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E00A0 /* 40.126.0.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0100 /* 40.126.1.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0140 /* 40.126.1.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0180 /* 40.126.1.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E01A0 /* 40.126.1.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0200 /* 40.126.2.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0220 /* 40.126.2.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0300 /* 40.126.3.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0320 /* 40.126.3.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0340 /* 40.126.3.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0360 /* 40.126.3.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0400 /* 40.126.4.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0420 /* 40.126.4.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0440 /* 40.126.4.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0460 /* 40.126.4.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0500 /* 40.126.5.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0520 /* 40.126.5.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0540 /* 40.126.5.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0560 /* 40.126.5.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0600 /* 40.126.6.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0620 /* 40.126.6.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0640 /* 40.126.6.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0660 /* 40.126.6.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0700 /* 40.126.7.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0720 /* 40.126.7.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0740 /* 40.126.7.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0760 /* 40.126.7.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0800 /* 40.126.8.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0820 /* 40.126.8.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0900 /* 40.126.9.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0920 /* 40.126.9.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0940 /* 40.126.9.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0960 /* 40.126.9.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0A00 /* 40.126.10.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0A20 /* 40.126.10.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0A40 /* 40.126.10.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0A60 /* 40.126.10.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0A80 /* 40.126.10.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0AA0 /* 40.126.10.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0B00 /* 40.126.11.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0B20 /* 40.126.11.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0B40 /* 40.126.11.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0B60 /* 40.126.11.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0B80 /* 40.126.11.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0BA0 /* 40.126.11.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0C00 /* 40.126.12.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0C20 /* 40.126.12.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0C40 /* 40.126.12.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0C60 /* 40.126.12.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0C80 /* 40.126.12.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0CA0 /* 40.126.12.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0CC0 /* 40.126.12.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0CE0 /* 40.126.12.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0D00 /* 40.126.13.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0D20 /* 40.126.13.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0D80 /* 40.126.13.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0DA0 /* 40.126.13.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0DC0 /* 40.126.13.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0DE0 /* 40.126.13.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0E00 /* 40.126.14.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0E20 /* 40.126.14.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0E40 /* 40.126.14.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0E60 /* 40.126.14.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0E80 /* 40.126.14.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0EA0 /* 40.126.14.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0F00 /* 40.126.15.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0F20 /* 40.126.15.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0F40 /* 40.126.15.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0F60 /* 40.126.15.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0F80 /* 40.126.15.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0FA0 /* 40.126.15.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1000 /* 40.126.16.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1020 /* 40.126.16.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1080 /* 40.126.16.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E10A0 /* 40.126.16.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E10C0 /* 40.126.16.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E10E0 /* 40.126.16.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1100 /* 40.126.17.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1120 /* 40.126.17.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1140 /* 40.126.17.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1160 /* 40.126.17.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1180 /* 40.126.17.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E11A0 /* 40.126.17.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1200 /* 40.126.18.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1220 /* 40.126.18.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1240 /* 40.126.18.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1260 /* 40.126.18.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1280 /* 40.126.18.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E12A0 /* 40.126.18.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1300 /* 40.126.19.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1320 /* 40.126.19.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1340 /* 40.126.19.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1360 /* 40.126.19.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1380 /* 40.126.19.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E13A0 /* 40.126.19.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1400 /* 40.126.20.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1420 /* 40.126.20.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1480 /* 40.126.20.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E14A0 /* 40.126.20.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E14C0 /* 40.126.20.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E14E0 /* 40.126.20.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1500 /* 40.126.21.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1510 /* 40.126.21.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1540 /* 40.126.21.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1550 /* 40.126.21.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1580 /* 40.126.21.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1590 /* 40.126.21.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1600 /* 40.126.22.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1610 /* 40.126.22.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1640 /* 40.126.22.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1660 /* 40.126.22.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1700 /* 40.126.23.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1710 /* 40.126.23.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1740 /* 40.126.23.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1750 /* 40.126.23.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1780 /* 40.126.23.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1790 /* 40.126.23.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1800 /* 40.126.24.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1810 /* 40.126.24.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1840 /* 40.126.24.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1850 /* 40.126.24.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1880 /* 40.126.24.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1890 /* 40.126.24.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1900 /* 40.126.25.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1910 /* 40.126.25.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1940 /* 40.126.25.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1960 /* 40.126.25.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1A00 /* 40.126.26.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1A10 /* 40.126.26.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1A40 /* 40.126.26.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1A50 /* 40.126.26.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1A80 /* 40.126.26.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1A90 /* 40.126.26.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1B00 /* 40.126.27.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1B10 /* 40.126.27.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1B40 /* 40.126.27.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1B50 /* 40.126.27.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1B80 /* 40.126.27.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1B90 /* 40.126.27.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1C00 /* 40.126.28.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1C10 /* 40.126.28.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1C40 /* 40.126.28.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1C60 /* 40.126.28.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1D00 /* 40.126.29.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1D10 /* 40.126.29.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1D40 /* 40.126.29.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1D50 /* 40.126.29.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1D80 /* 40.126.29.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1D90 /* 40.126.29.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1E00 /* 40.126.30.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1E10 /* 40.126.30.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1E40 /* 40.126.30.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1E60 /* 40.126.30.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1F00 /* 40.126.31.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1F10 /* 40.126.31.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1F40 /* 40.126.31.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1F50 /* 40.126.31.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1F80 /* 40.126.31.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1F90 /* 40.126.31.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2000 /* 40.126.32.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2010 /* 40.126.32.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2040 /* 40.126.32.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2050 /* 40.126.32.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2080 /* 40.126.32.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2090 /* 40.126.32.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2100 /* 40.126.33.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2110 /* 40.126.33.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2140 /* 40.126.33.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2150 /* 40.126.33.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2180 /* 40.126.33.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2190 /* 40.126.33.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2200 /* 40.126.34.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2210 /* 40.126.34.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2240 /* 40.126.34.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2260 /* 40.126.34.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2300 /* 40.126.35.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2310 /* 40.126.35.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2340 /* 40.126.35.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2350 /* 40.126.35.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2380 /* 40.126.35.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2390 /* 40.126.35.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2400 /* 40.126.36.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2410 /* 40.126.36.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2440 /* 40.126.36.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2460 /* 40.126.36.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2500 /* 40.126.37.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2510 /* 40.126.37.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2540 /* 40.126.37.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2560 /* 40.126.37.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2600 /* 40.126.38.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2610 /* 40.126.38.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2640 /* 40.126.38.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2650 /* 40.126.38.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2680 /* 40.126.38.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2690 /* 40.126.38.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2700 /* 40.126.39.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2710 /* 40.126.39.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2740 /* 40.126.39.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2750 /* 40.126.39.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2780 /* 40.126.39.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2790 /* 40.126.39.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2800 /* 40.126.40.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2810 /* 40.126.40.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2840 /* 40.126.40.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2860 /* 40.126.40.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2900 /* 40.126.41.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2910 /* 40.126.41.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2940 /* 40.126.41.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2950 /* 40.126.41.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2980 /* 40.126.41.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2990 /* 40.126.41.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2A00 /* 40.126.42.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2A10 /* 40.126.42.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2A40 /* 40.126.42.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2A60 /* 40.126.42.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2B00 /* 40.126.43.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2B10 /* 40.126.43.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2B40 /* 40.126.43.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2B60 /* 40.126.43.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2C00 /* 40.126.44.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2C10 /* 40.126.44.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2C40 /* 40.126.44.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2C60 /* 40.126.44.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2D00 /* 40.126.45.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2D10 /* 40.126.45.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2D40 /* 40.126.45.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2D50 /* 40.126.45.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2D80 /* 40.126.45.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2D90 /* 40.126.45.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2E00 /* 40.126.46.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2E10 /* 40.126.46.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2E40 /* 40.126.46.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2E60 /* 40.126.46.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2F00 /* 40.126.47.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2F10 /* 40.126.47.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2F40 /* 40.126.47.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2F50 /* 40.126.47.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2F80 /* 40.126.47.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2F90 /* 40.126.47.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3000 /* 40.126.48.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3010 /* 40.126.48.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3040 /* 40.126.48.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3060 /* 40.126.48.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3100 /* 40.126.49.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3110 /* 40.126.49.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3140 /* 40.126.49.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3150 /* 40.126.49.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3180 /* 40.126.49.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3190 /* 40.126.49.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3200 /* 40.126.50.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3210 /* 40.126.50.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3240 /* 40.126.50.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3260 /* 40.126.50.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3300 /* 40.126.51.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3310 /* 40.126.51.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3340 /* 40.126.51.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3360 /* 40.126.51.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3400 /* 40.126.52.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3410 /* 40.126.52.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3440 /* 40.126.52.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3450 /* 40.126.52.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3480 /* 40.126.52.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3490 /* 40.126.52.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3500 /* 40.126.53.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3510 /* 40.126.53.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3540 /* 40.126.53.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3560 /* 40.126.53.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3600 /* 40.126.54.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3610 /* 40.126.54.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3640 /* 40.126.54.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3660 /* 40.126.54.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3700 /* 40.126.55.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3710 /* 40.126.55.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3740 /* 40.126.55.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3760 /* 40.126.55.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3800 /* 40.126.56.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3810 /* 40.126.56.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3840 /* 40.126.56.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3860 /* 40.126.56.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3A00 /* 40.126.58.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3A10 /* 40.126.58.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3A40 /* 40.126.58.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3A60 /* 40.126.58.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3B00 /* 40.126.59.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3B10 /* 40.126.59.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3B40 /* 40.126.59.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3B60 /* 40.126.59.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3C00 /* 40.126.60.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3C10 /* 40.126.60.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3C40 /* 40.126.60.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3C60 /* 40.126.60.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3D00 /* 40.126.61.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3D40 /* 40.126.61.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3D80 /* 40.126.61.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3DC0 /* 40.126.61.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3E00 /* 40.126.62.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3E40 /* 40.126.62.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3E80 /* 40.126.62.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3F00 /* 40.126.63.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3F40 /* 40.126.63.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3F80 /* 40.126.63.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3FC0 /* 40.126.63.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86560 /* 4.232.101.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86F40 /* 4.232.111.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87BC8 /* 4.232.123.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C3C8 /* 4.232.195.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4291E8 /* 13.66.145.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430F70 /* 13.67.15.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456DE0 /* 13.69.109.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456FC8 /* 13.69.111.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E960 /* 13.69.233.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45EF60 /* 13.69.239.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464F58 /* 13.70.79.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464F60 /* 13.70.79.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AFD8 /* 13.71.175.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47B120 /* 13.71.177.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6F98 /* 13.74.111.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DF80 /* 13.86.223.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59B300 /* 13.89.179.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14113B40 /* 20.17.59.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114780 /* 20.17.71.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B3C8 /* 20.18.179.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152E80 /* 20.21.46.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14153500 /* 20.21.53.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141543C8 /* 20.21.67.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154BC8 /* 20.21.75.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247DE0 /* 20.36.125.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254700 /* 20.37.71.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268440 /* 20.38.132.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268F00 /* 20.38.143.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142695C8 /* 20.38.149.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269820 /* 20.38.152.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269D88 /* 20.38.157.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428E400 /* 20.40.228.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429D020 /* 20.41.208.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4148 /* 20.42.65.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4180 /* 20.42.65.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4910 /* 20.42.73.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7BC8 /* 20.43.123.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0BC0 /* 20.44.11.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0DE8 /* 20.44.13.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1D78 /* 20.44.29.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7F40 /* 20.45.127.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DD020 /* 20.45.208.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0AE0 /* 20.46.10.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142FD900 /* 20.47.217.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C1E0 /* 20.48.193.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315420 /* 20.49.84.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315DC0 /* 20.49.93.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315F30 /* 20.49.95.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143250C8 /* 20.50.80.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330700 /* 20.51.7.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330900 /* 20.51.9.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331140 /* 20.51.17.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344018 /* 20.52.64.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344020 /* 20.52.64.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344840 /* 20.52.72.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14350080 /* 20.53.0.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352E40 /* 20.53.46.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353040 /* 20.53.48.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4260 /* 20.58.66.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D6340 /* 20.61.99.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8400 /* 20.62.132.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418400 /* 20.65.132.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144202C0 /* 20.66.2.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481520 /* 20.72.21.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481CC0 /* 20.72.28.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453C0C0 /* 20.83.192.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590120 /* 20.89.1.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C000 /* 20.98.192.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F02C0 /* 20.111.2.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DABC8 /* 20.125.171.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCBC8 /* 20.125.203.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B5A8 /* 20.150.181.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B620 /* 20.150.182.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BD28 /* 20.150.189.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496E108 /* 20.150.225.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496F160 /* 20.150.241.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A3C8 /* 20.168.163.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC5C0 /* 20.187.197.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD510B /* 20.189.81.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD510E /* 20.189.81.14/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD5118 /* 20.189.81.24/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD511A /* 20.189.81.26/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD511C /* 20.189.81.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD511F /* 20.189.81.31/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD5120 /* 20.189.81.32/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD5122 /* 20.189.81.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDE180 /* 20.189.225.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA540 /* 20.191.165.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C020C0 /* 20.192.32.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02B60 /* 20.192.43.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03000 /* 20.192.48.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06520 /* 20.192.101.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06648 /* 20.192.102.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A7A0 /* 20.192.167.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C16020 /* 20.193.96.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1A028 /* 20.193.160.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CC40 /* 20.193.204.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C243D8 /* 20.194.67.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C243E0 /* 20.194.67.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C248E0 /* 20.194.72.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C352A0 /* 20.195.82.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4DB8 /* 20.205.77.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD53E8 /* 20.205.83.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CDC048 /* 20.205.192.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D013C8 /* 20.208.19.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D707C0 /* 20.215.7.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D713C8 /* 20.215.19.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71BC8 /* 20.215.27.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79E80 /* 20.215.158.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92FC0 /* 20.217.47.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93E80 /* 20.217.62.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94BC8 /* 20.217.75.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95BC8 /* 20.217.91.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17627160 /* 23.98.113.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284334E0 /* 40.67.52.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28437A60 /* 40.67.122.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456F80 /* 40.69.111.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28457470 /* 40.69.116.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A6340 /* 40.74.99.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9620 /* 40.74.150.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9648 /* 40.74.150.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF740 /* 40.78.247.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFD48 /* 40.78.253.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8D90 /* 40.79.141.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9660 /* 40.79.150.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA558 /* 40.79.165.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FAD08 /* 40.79.173.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBEA0 /* 40.79.190.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBFC8 /* 40.79.191.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC578 /* 40.79.197.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503620 /* 40.80.54.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B4A0 /* 40.80.180.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285979B0 /* 40.89.121.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287808C0 /* 40.120.8.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28780958 /* 40.120.9.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287840C8 /* 40.120.64.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784DA0 /* 40.120.77.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C4090 /* 40.124.64.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B6160 /* 51.11.97.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BC028 /* 51.11.192.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2E00 /* 51.12.46.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C66C0 /* 51.12.102.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C66E0 /* 51.12.102.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CA840 /* 51.12.168.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC3E0 /* 51.12.195.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCD60 /* 51.12.205.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE5E0 /* 51.12.229.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CED20 /* 51.12.237.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CEDC0 /* 51.12.237.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D0108 /* 51.13.1.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8020 /* 51.13.128.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D88C0 /* 51.13.136.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33351FE0 /* 51.53.31.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356E80 /* 51.53.110.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335B2E0 /* 51.53.178.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BF80 /* 51.53.191.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CBC8 /* 51.103.203.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694680 /* 51.105.70.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336947A8 /* 51.105.71.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8038 /* 51.107.128.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8060 /* 51.107.128.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BC0A0 /* 51.107.192.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF200 /* 51.107.242.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BFA00 /* 51.107.250.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743620 /* 51.116.54.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749500 /* 51.116.149.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F660 /* 51.116.246.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FD88 /* 51.116.253.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786EC8 /* 51.120.110.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D540 /* 51.120.213.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D688 /* 51.120.214.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E8A0 /* 51.120.232.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3384C160 /* 51.132.193.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AA050 /* 51.138.160.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C97A0 /* 51.140.151.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD160 /* 51.143.209.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34883560 /* 52.136.53.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B6AA0 /* 52.139.106.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928520 /* 52.146.133.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34936140 /* 52.147.97.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34937060 /* 52.147.112.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76D48 /* 52.167.109.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A791A0 /* 52.167.145.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A87448 /* 52.168.116.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC7140 /* 52.172.113.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B211E0 /* 52.178.17.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68FC8 /* 52.182.143.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71778 /* 52.231.23.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBD58 /* 52.236.189.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F0F490 /* 52.240.244.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69EA0 /* 52.246.158.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5540 /* 68.220.85.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD2840 /* 68.221.40.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6740 /* 68.221.103.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD93C8 /* 68.221.147.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254080 /* 102.37.64.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662548F0 /* 102.37.72.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255040 /* 102.37.80.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857E40 /* 102.133.126.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857E98 /* 102.133.126.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DDA0 /* 102.133.221.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FEE0 /* 102.133.254.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EA240 /* 104.46.162.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EB380 /* 104.46.179.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D09058 /* 104.208.144.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A480 /* 104.214.164.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A660 /* 104.214.166.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170F40 /* 158.23.15.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177040 /* 158.23.112.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177BC8 /* 158.23.123.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C3C8 /* 158.23.195.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8E00 /* 168.61.142.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90F80 /* 191.233.15.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CFD8 /* 191.233.207.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9528 /* 191.234.149.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9DA0 /* 191.234.157.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDE0C0 /* 191.237.224.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86F00 /* 4.232.111.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E87BD0 /* 4.232.123.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C3D0 /* 4.232.195.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428F80 /* 13.66.143.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430AD0 /* 13.67.10.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4543C0 /* 13.69.67.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456B70 /* 13.69.107.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D457080 /* 13.69.112.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E660 /* 13.69.230.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464A90 /* 13.70.74.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47AF50 /* 13.71.175.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C700 /* 13.71.199.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F420 /* 13.73.244.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49FD60 /* 13.73.253.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A6CE0 /* 13.74.108.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B2770 /* 13.75.39.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D35A0 /* 13.77.53.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E6DC0 /* 13.78.109.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DBD0 /* 13.86.219.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59AEC0 /* 13.89.174.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68F840 /* 13.104.248.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68FCD0 /* 13.104.252.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68FCE0 /* 13.104.252.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68FD30 /* 13.104.253.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68FE80 /* 13.104.254.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114740 /* 20.17.71.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B3D0 /* 20.18.179.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152E40 /* 20.21.46.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141537D0 /* 20.21.55.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141543D0 /* 20.21.67.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14154BD0 /* 20.21.75.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141800D8 /* 20.24.0.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142475D0 /* 20.36.117.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247C20 /* 20.36.124.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254490 /* 20.37.68.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C6E0 /* 20.37.198.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E410 /* 20.37.228.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268D10 /* 20.38.141.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142693E0 /* 20.38.147.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269800 /* 20.38.152.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270F00 /* 20.39.15.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428CEE0 /* 20.40.206.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294508 /* 20.41.69.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C570 /* 20.41.197.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4000 /* 20.42.64.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE688 /* 20.42.230.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2CD0 /* 20.43.44.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4678 /* 20.43.70.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7930 /* 20.43.121.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0A40 /* 20.44.10.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1150 /* 20.44.17.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1BF0 /* 20.44.27.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7BA0 /* 20.45.123.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DD010 /* 20.45.208.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143153E0 /* 20.49.83.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315F20 /* 20.49.95.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316610 /* 20.49.102.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316F00 /* 20.49.111.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317218 /* 20.49.114.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324438 /* 20.50.68.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344000 /* 20.52.64.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14350030 /* 20.53.0.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B54A8 /* 20.59.84.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450918 /* 20.69.9.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481C30 /* 20.72.28.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AC510 /* 20.74.197.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144F6C70 /* 20.79.108.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575370 /* 20.87.83.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A26F8 /* 20.90.38.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C06C8 /* 20.92.6.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1461278D /* 20.97.39.141/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14629600 /* 20.98.150.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C3AC /* 20.98.195.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C6E0 /* 20.98.198.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640518 /* 20.100.5.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469D71C /* 20.105.215.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1469F430 /* 20.105.244.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F0430 /* 20.111.4.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14742F48 /* 20.116.47.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1475C1B8 /* 20.117.193.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14764FC0 /* 20.118.79.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14768BC8 /* 20.118.139.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14771C39 /* 20.119.28.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D04AA /* 20.125.4.170/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D05F8 /* 20.125.5.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D9C10 /* 20.125.156.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DA3D0 /* 20.125.163.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DABD0 /* 20.125.171.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DCBD0 /* 20.125.203.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496AD10 /* 20.150.173.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496B570 /* 20.150.181.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496BE40 /* 20.150.190.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A3D0 /* 20.168.163.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD6DE8 /* 20.189.109.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC728 /* 20.189.199.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06650 /* 20.192.102.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0B860 /* 20.192.184.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EE60 /* 20.192.238.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CD90 /* 20.193.205.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C243C0 /* 20.194.67.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8A130 /* 20.200.161.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C7C0 /* 20.200.199.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCC170 /* 20.204.193.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD3278 /* 20.205.50.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4DA0 /* 20.205.77.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4DE0 /* 20.205.77.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD53F0 /* 20.205.83.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CEB390 /* 20.206.179.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D013D0 /* 20.208.19.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D09010 /* 20.208.144.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D24658 /* 20.210.70.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5C290 /* 20.213.194.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D713D0 /* 20.215.19.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D71BD0 /* 20.215.27.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79E40 /* 20.215.158.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93E40 /* 20.217.62.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94BD0 /* 20.217.75.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D95BD0 /* 20.217.91.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DD8848 /* 20.221.136.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DF403C /* 20.223.64.60/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DF4190 /* 20.223.65.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E85968 /* 20.232.89.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17625370 /* 23.98.83.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17626A80 /* 23.98.106.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400BB0 /* 40.64.11.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284084E8 /* 40.64.132.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456CA0 /* 40.69.108.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456F30 /* 40.69.111.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284694A0 /* 40.70.148.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470E20 /* 40.71.14.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9540 /* 40.74.149.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2390 /* 40.75.35.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC480 /* 40.78.196.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE560 /* 40.78.229.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EECB0 /* 40.78.236.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF510 /* 40.78.245.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EFBC0 /* 40.78.251.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8470 /* 40.79.132.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8B50 /* 40.79.139.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F92F0 /* 40.79.146.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA350 /* 40.79.163.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FABA0 /* 40.79.171.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FBBD0 /* 40.79.187.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC3E0 /* 40.79.195.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285033A0 /* 40.80.51.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503E18 /* 40.80.62.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285060C8 /* 40.80.96.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850AC70 /* 40.80.172.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B060 /* 40.80.176.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285914E0 /* 40.89.20.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871B0E8 /* 40.113.176.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287518A0 /* 40.117.24.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28780838 /* 40.120.8.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287809C0 /* 40.120.9.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784070 /* 40.120.64.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784B70 /* 40.120.75.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A0010 /* 40.122.0.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C4BE8 /* 51.12.75.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C65B0 /* 51.12.101.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCE10 /* 51.12.206.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE540 /* 51.12.229.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CED40 /* 51.12.237.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8000 /* 51.13.128.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356E40 /* 51.53.110.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BF40 /* 51.53.191.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367CBD0 /* 51.103.203.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680920 /* 51.104.9.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33681DD8 /* 51.104.29.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336943F0 /* 51.105.67.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694BF0 /* 51.105.75.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695CB0 /* 51.105.92.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3328 /* 51.107.51.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8000 /* 51.107.128.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9450 /* 51.107.148.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BC050 /* 51.107.192.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749320 /* 51.116.147.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F570 /* 51.116.245.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374F5B0 /* 51.116.245.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FD30 /* 51.116.253.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374FD90 /* 51.116.253.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33782CD0 /* 51.120.44.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337864E0 /* 51.120.100.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786D60 /* 51.120.109.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D520 /* 51.120.213.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E4E0 /* 51.120.228.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389A4C0 /* 51.137.164.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AA010 /* 51.138.160.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CD470 /* 51.140.212.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5C80 /* 52.138.92.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348AE520 /* 52.138.229.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C6CD0 /* 52.140.108.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34969A10 /* 52.150.154.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26F30 /* 52.162.111.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76BE0 /* 52.167.107.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC51F0 /* 52.172.81.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B0E810 /* 52.176.232.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68D10 /* 52.182.141.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E45690 /* 52.228.86.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71440 /* 52.231.20.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E794A0 /* 52.231.148.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E79720 /* 52.231.151.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ECBB70 /* 52.236.187.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F22D38 /* 52.242.45.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69BE0 /* 52.246.155.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FAE400 /* 52.250.228.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5270 /* 68.220.82.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6700 /* 68.221.103.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD93D0 /* 68.221.147.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254060 /* 102.37.64.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x662548E0 /* 102.37.72.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66853C30 /* 102.133.60.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857C68 /* 102.133.124.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857FA0 /* 102.133.127.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859C88 /* 102.133.156.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685DAF8 /* 102.133.218.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FBB8 /* 102.133.251.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685FD30 /* 102.133.253.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170F00 /* 158.23.15.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E177BD0 /* 158.23.123.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E17C3D0 /* 158.23.195.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE936E0 /* 191.233.54.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CDA0 /* 191.233.205.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8920 /* 191.234.137.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9500 /* 191.234.149.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA9D00 /* 191.234.157.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E86F10 /* 4.232.111.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4127F7 /* 13.65.39.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D416227 /* 13.65.98.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428044 /* 13.66.128.68/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D42E0A9 /* 13.66.224.169/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D43EC4C /* 13.67.236.76/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D456D90 /* 13.69.109.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D45E910 /* 13.69.233.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47928C /* 13.71.146.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C7A0 /* 13.71.199.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D497399 /* 13.73.115.153/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F490 /* 13.73.244.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B599F /* 13.75.89.159/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B9942 /* 13.75.153.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D3780 /* 13.77.55.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E2BA4 /* 13.78.43.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E3E82 /* 13.78.62.130/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E54BB /* 13.78.84.187/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E89F7 /* 13.78.137.247/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4FAD31 /* 13.79.173.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D54292E /* 13.84.41.46/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D542B2D /* 13.84.43.45/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D554F9B /* 13.85.79.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56627E /* 13.86.98.126/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D56DDF0 /* 13.86.221.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D573A90 /* 13.87.58.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577C90 /* 13.87.124.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57CCD2 /* 13.87.204.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D57CF4F /* 13.87.207.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58A89E /* 13.88.168.158/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58F9D1 /* 13.88.249.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D59B230 /* 13.89.178.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5BFCB8 /* 13.91.252.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F9B35 /* 13.95.155.53/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114750 /* 20.17.71.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14152E50 /* 20.21.46.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246CE0 /* 20.36.108.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247580 /* 20.36.117.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254CD0 /* 20.37.76.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142680B0 /* 20.38.128.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269590 /* 20.38.149.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14282031 /* 20.40.32.49/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428203B /* 20.40.32.59/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14282050 /* 20.40.32.80/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142820A2 /* 20.40.32.162/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14288BD1 /* 20.40.139.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A4030 /* 20.42.64.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B79E0 /* 20.43.121.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C04B0 /* 20.44.4.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D401D /* 20.45.64.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4057 /* 20.45.64.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D47D5 /* 20.45.71.213/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4BC1 /* 20.45.75.193/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E2ADC /* 20.46.42.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E2EAD /* 20.46.46.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143085B6 /* 20.48.133.182/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14355E67 /* 20.53.94.103/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14356BD7 /* 20.53.107.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14467240 /* 20.70.114.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14481EA0 /* 20.72.30.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1448F46C /* 20.72.244.108/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AFF25 /* 20.74.255.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144AFF93 /* 20.74.255.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144CAB22 /* 20.76.171.34/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145257E5 /* 20.82.87.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14541D96 /* 20.84.29.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575BAB /* 20.87.91.171/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14575C40 /* 20.87.92.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1458D171 /* 20.88.209.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145ACCE8 /* 20.90.204.232/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145DEC51 /* 20.93.236.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145E9729 /* 20.94.151.41/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14603A1C /* 20.96.58.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14605962 /* 20.96.89.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14605A1C /* 20.96.90.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1463BE13 /* 20.99.190.19/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14641B11 /* 20.100.27.17/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14642466 /* 20.100.36.102/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1465AE34 /* 20.101.174.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14671254 /* 20.103.18.84/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14671571 /* 20.103.21.113/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146739D2 /* 20.103.57.210/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1467543D /* 20.103.84.61/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14675EFF /* 20.103.94.255/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14680E09 /* 20.104.14.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A74AC /* 20.106.116.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A74E1 /* 20.106.116.225/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146C66B4 /* 20.108.102.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146DCA25 /* 20.109.202.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14710B08 /* 20.113.11.8/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14710C45 /* 20.113.12.69/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1496ACF0 /* 20.150.172.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBBDF6 /* 20.187.189.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBFE81 /* 20.187.254.129/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFAE34 /* 20.191.174.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0EEA0 /* 20.192.238.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1CE30 /* 20.193.206.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C2CF32 /* 20.194.207.50/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C331F6 /* 20.195.49.246/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C6829B /* 20.198.130.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8CF1D /* 20.200.207.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8E7E5 /* 20.200.231.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C91948 /* 20.201.25.72/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C94293 /* 20.201.66.147/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CBE3E2 /* 20.203.227.226/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CBE6AA /* 20.203.230.170/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCCB6E /* 20.204.203.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CCD44D /* 20.204.212.77/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D79E50 /* 20.215.158.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93E50 /* 20.217.62.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176144AC /* 23.97.68.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433CB0 /* 40.67.60.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456EE0 /* 40.69.110.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28461BFD /* 40.70.27.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A42C8 /* 40.74.66.200/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A510D /* 40.74.81.13/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A55D7 /* 40.74.85.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A8CAD /* 40.74.140.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B23F0 /* 40.75.35.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C977C /* 40.76.151.124/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284CAE94 /* 40.76.174.148/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D1F57 /* 40.77.31.87/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D6FFE /* 40.77.111.254/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC4B0 /* 40.78.196.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ECCD0 /* 40.78.204.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EEF10 /* 40.78.239.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF590 /* 40.78.245.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F2C07 /* 40.79.44.7/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8B90 /* 40.79.139.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FABF0 /* 40.79.171.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB4C0 /* 40.79.180.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC530 /* 40.79.197.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B410 /* 40.80.180.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285362C2 /* 40.83.98.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285419EA /* 40.84.25.234/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28543B88 /* 40.84.59.136/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28548A84 /* 40.84.138.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855F169 /* 40.85.241.105/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856CA2A /* 40.86.202.42/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28705A27 /* 40.112.90.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28734E46 /* 40.115.78.70/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28734EED /* 40.115.78.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2875634F /* 40.117.99.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287564E4 /* 40.117.100.228/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784020 /* 40.120.64.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BE08F /* 40.123.224.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BE0E3 /* 40.123.224.227/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F9133 /* 40.127.145.51/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287FF2CB /* 40.127.242.203/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B6110 /* 51.11.97.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BEDEF /* 51.11.237.239/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6470 /* 51.12.100.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CCC70 /* 51.12.204.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356E50 /* 51.53.110.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335BF50 /* 51.53.191.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33678034 /* 51.103.128.52/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336784EC /* 51.103.132.236/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367868A /* 51.103.134.138/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336788D1 /* 51.103.136.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680970 /* 51.104.9.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33683EA6 /* 51.104.62.166/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B3CC0 /* 51.107.60.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9CC0 /* 51.107.156.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE1A3 /* 51.107.225.163/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE1A7 /* 51.107.225.167/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE1B4 /* 51.107.225.180/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BEF42 /* 51.107.239.66/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33743C90 /* 51.116.60.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33749E40 /* 51.116.158.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374A8DE /* 51.116.168.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374ABD1 /* 51.116.171.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374AF00 /* 51.116.175.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D025 /* 51.116.208.37/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D040 /* 51.116.208.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D084 /* 51.116.208.132/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D31D /* 51.116.211.29/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374E928 /* 51.116.233.40/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33786D20 /* 51.120.109.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378DCA0 /* 51.120.220.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AE35E /* 51.138.227.94/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4E47 /* 51.140.78.71/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C4F6D /* 51.140.79.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C5427 /* 51.140.84.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C9B51 /* 51.140.155.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D3062 /* 51.141.48.98/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D3391 /* 51.141.51.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D35A4 /* 51.141.53.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D7796 /* 51.141.119.150/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D7BA1 /* 51.141.123.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3390B0B9 /* 51.144.176.185/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34936110 /* 52.147.97.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A0441B /* 52.160.68.27/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A05AED /* 52.160.90.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A10880 /* 52.161.8.128/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A11352 /* 52.161.19.82/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A11AAC /* 52.161.26.172/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A140D9 /* 52.161.64.217/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A15BD7 /* 52.161.91.215/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A26F90 /* 52.162.111.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A35DD6 /* 52.163.93.214/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A76D50 /* 52.167.109.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9DAFD /* 52.169.218.253/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A9DCAE /* 52.169.220.174/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC092F /* 52.172.9.47/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC312B /* 52.172.49.43/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC338C /* 52.172.51.140/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC9DC2 /* 52.172.157.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACB8C0 /* 52.172.184.192/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ACBFC2 /* 52.172.191.194/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE3106 /* 52.174.49.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE36DA /* 52.174.54.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B71E0A /* 52.183.30.10/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B72743 /* 52.183.39.67/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB4151 /* 52.187.65.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB419B /* 52.187.65.155/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BBE7A1 /* 52.187.231.161/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDD81C /* 52.189.216.28/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E2D8D1 /* 52.226.216.209/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E57D39 /* 52.229.125.57/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E71710 /* 52.231.23.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8818F /* 52.232.129.143/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8856D /* 52.232.133.109/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E91D4F /* 52.233.29.79/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E91EDA /* 52.233.30.218/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF2A6E /* 52.255.42.110/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41340940 /* 65.52.9.64/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134D3A4 /* 65.52.211.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD6710 /* 68.221.103.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66851CD0 /* 102.133.28.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854891 /* 102.133.72.145/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668548AD /* 102.133.72.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668548B8 /* 102.133.72.184/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x668548BE /* 102.133.72.190/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66859CB0 /* 102.133.156.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E07D /* 102.133.224.125/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E2C7 /* 102.133.226.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E404 /* 102.133.228.4/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E409 /* 102.133.228.9/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68282270 /* 104.40.34.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A28A4 /* 104.42.40.164/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682BF327 /* 104.43.243.39/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D259DE /* 104.210.89.222/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D259F4 /* 104.210.89.244/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D29959 /* 104.210.153.89/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D349C3 /* 104.211.73.195/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D39DED /* 104.211.157.237/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A419 /* 104.211.164.25/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A470 /* 104.211.164.112/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3A551 /* 104.211.165.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3E198 /* 104.211.225.152/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A160 /* 104.214.161.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D7B506 /* 104.215.181.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89747EA5 /* 137.116.126.165/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89876A36 /* 137.135.106.54/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5BBC89 /* 138.91.188.137/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D380CCA /* 157.56.12.202/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D38A0D4 /* 157.56.160.212/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170F10 /* 158.23.15.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E0964 /* 168.62.9.100/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EF951 /* 168.62.249.81/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FC8AD /* 168.63.200.173/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE936F0 /* 191.233.54.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9CF00 /* 191.233.207.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEAA6C6 /* 191.234.166.198/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB56C7 /* 191.235.86.199/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB5EDC /* 191.235.94.220/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB5FE5 /* 191.235.95.229/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04C62000 /* 4.198.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04FE8000 /* 4.254.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689EE0 /* 13.104.158.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14244000 /* 20.36.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247000 /* 20.36.112.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14274800 /* 20.39.72.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14276000 /* 20.39.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2400 /* 20.47.36.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353800 /* 20.53.56.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14873600 /* 20.135.54.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966700 /* 20.150.103.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D0100 /* 20.157.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A78000 /* 20.167.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBD80 /* 20.190.189.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C16000 /* 20.193.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852F400 /* 40.82.244.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1F60 /* 40.90.31.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8220 /* 40.90.130.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8E40 /* 40.90.142.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9520 /* 40.90.149.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3D80 /* 40.126.61.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E8000 /* 40.126.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CB400 /* 52.108.180.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CC900 /* 52.108.201.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D6400 /* 52.109.100.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FF900 /* 52.111.249.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FDA00 /* 52.143.218.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFDA00 /* 52.239.218.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689B80 /* 13.104.155.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691BA0 /* 13.105.27.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141C0000 /* 20.28.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14242000 /* 20.36.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246800 /* 20.36.104.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14250000 /* 20.37.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E000 /* 20.37.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1426B800 /* 20.38.184.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14274000 /* 20.39.64.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2300 /* 20.47.35.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14350000 /* 20.53.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353000 /* 20.53.48.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CD600 /* 20.60.214.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14460000 /* 20.70.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14873400 /* 20.135.52.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967C00 /* 20.150.124.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D0000 /* 20.157.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8A00 /* 20.157.138.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBD40 /* 20.190.189.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5E000 /* 20.213.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E38000 /* 20.227.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F80000 /* 20.248.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852F000 /* 40.82.240.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8230 /* 40.90.130.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8E60 /* 40.90.142.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9540 /* 40.90.149.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3D40 /* 40.126.61.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C4A00 /* 52.108.74.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5F00 /* 52.108.95.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D8000 /* 52.109.128.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FF800 /* 52.111.248.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FDB00 /* 52.143.219.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFD800 /* 52.239.216.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04930000 /* 4.147.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04C30000 /* 4.195.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04C40000 /* 4.196.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04C60000 /* 4.198.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04ED0000 /* 4.237.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04FE0000 /* 4.254.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464000 /* 13.70.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D48E000 /* 13.72.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49C000 /* 13.73.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B8000 /* 13.75.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D380 /* 13.104.211.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6910C0 /* 13.105.16.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691480 /* 13.105.20.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6934C0 /* 13.105.52.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693580 /* 13.105.53.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14050000 /* 20.5.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140B0000 /* 20.11.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141C8000 /* 20.28.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C000 /* 20.37.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267000 /* 20.38.112.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14284000 /* 20.40.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14285000 /* 20.40.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14287800 /* 20.40.120.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428B000 /* 20.40.176.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AC000 /* 20.42.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B6000 /* 20.43.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2500 /* 20.47.37.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F7A00 /* 20.47.122.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352000 /* 20.53.32.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352800 /* 20.53.40.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14354000 /* 20.53.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14358000 /* 20.53.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A8000 /* 20.58.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C4800 /* 20.60.72.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CB600 /* 20.60.182.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14468000 /* 20.70.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C4000 /* 20.92.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C8000 /* 20.92.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145FC000 /* 20.95.192.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145FD000 /* 20.95.208.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14877800 /* 20.135.120.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964200 /* 20.150.66.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965C00 /* 20.150.92.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967500 /* 20.150.117.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2C00 /* 20.157.44.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9B00 /* 20.157.155.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DD600 /* 20.157.214.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DDC00 /* 20.157.220.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DE200 /* 20.157.226.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A70000 /* 20.167.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC8000 /* 20.188.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8E00 /* 20.190.142.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA700 /* 20.190.167.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFC000 /* 20.191.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C10000 /* 20.193.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C14000 /* 20.193.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA3E00 /* 20.202.62.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA4100 /* 20.202.65.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA4600 /* 20.202.70.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D30000 /* 20.211.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D38000 /* 20.211.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D50000 /* 20.213.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D58000 /* 20.213.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5C000 /* 20.213.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E30000 /* 20.227.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F88000 /* 20.248.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765D000 /* 23.101.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA000 /* 40.79.160.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FD300 /* 40.79.211.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28522000 /* 40.82.32.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852C000 /* 40.82.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857D000 /* 40.87.208.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1200 /* 40.90.18.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1E00 /* 40.90.30.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8250 /* 40.90.130.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A82D0 /* 40.90.130.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8C20 /* 40.90.140.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8EA0 /* 40.90.142.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9340 /* 40.90.147.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9600 /* 40.90.150.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28702580 /* 40.112.37.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0E00 /* 40.126.14.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2700 /* 40.126.39.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EE000 /* 40.126.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C2800 /* 52.108.40.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5300 /* 52.108.83.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D7000 /* 52.109.112.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FE000 /* 52.111.224.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34715800 /* 52.113.88.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34716700 /* 52.113.103.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34721000 /* 52.114.16.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34723A00 /* 52.114.58.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472C000 /* 52.114.192.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34736200 /* 52.115.98.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34789E00 /* 52.120.158.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34796C00 /* 52.121.108.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BA000 /* 52.123.160.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FC700 /* 52.143.199.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FC800 /* 52.143.200.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34930000 /* 52.147.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CA000 /* 52.156.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BBC000 /* 52.187.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E88800 /* 52.232.136.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89A00 /* 52.232.154.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EDC000 /* 52.237.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF8200 /* 52.239.130.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE200 /* 52.239.226.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F51000 /* 52.245.16.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DA0000 /* 68.218.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5A40 /* 104.44.90.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5D60 /* 104.44.93.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5F30 /* 104.44.95.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E1D00 /* 104.46.29.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E1E00 /* 104.46.30.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D15000 /* 104.209.80.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D24000 /* 104.210.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4200 /* 191.238.66.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEF4000 /* 191.239.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04C64000 /* 4.198.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04C68000 /* 4.198.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04C70000 /* 4.199.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04C80000 /* 4.200.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04ED8000 /* 4.237.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D468000 /* 13.70.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D496000 /* 13.73.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D0000 /* 13.77.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140B8000 /* 20.11.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A000 /* 20.40.160.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE000 /* 20.42.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D9000 /* 20.45.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E6000 /* 20.46.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2600 /* 20.47.38.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F4A00 /* 20.47.74.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143AC000 /* 20.58.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C2000 /* 20.60.32.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14464000 /* 20.70.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C0000 /* 20.92.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145FC800 /* 20.95.200.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14873200 /* 20.135.50.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14960C00 /* 20.150.12.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967700 /* 20.150.119.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2D00 /* 20.157.45.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE6000 /* 20.190.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8E80 /* 20.190.142.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA800 /* 20.190.168.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA3D00 /* 20.202.61.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA3F00 /* 20.202.63.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA4500 /* 20.202.69.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D3C000 /* 20.211.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5D000 /* 20.213.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765E000 /* 23.101.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FD400 /* 40.79.212.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513000 /* 40.81.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857D400 /* 40.87.212.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1800 /* 40.90.24.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1B00 /* 40.90.27.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8A80 /* 40.90.138.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9B40 /* 40.90.155.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287025C0 /* 40.112.37.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28734000 /* 40.115.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0E80 /* 40.126.14.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2800 /* 40.126.40.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F4000 /* 40.127.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CC200 /* 52.108.194.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CEA00 /* 52.108.234.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D7400 /* 52.109.116.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FFA00 /* 52.111.250.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34710D00 /* 52.113.13.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34714C00 /* 52.113.76.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34721400 /* 52.114.20.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34723C00 /* 52.114.60.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34736300 /* 52.115.99.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34796A00 /* 52.121.106.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BA200 /* 52.123.162.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881900 /* 52.136.25.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34932000 /* 52.147.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349E8000 /* 52.158.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDC000 /* 52.189.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF8400 /* 52.239.132.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE100 /* 52.239.225.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F34000 /* 52.243.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F51400 /* 52.245.20.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF2000 /* 52.255.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5A20 /* 104.44.90.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5D80 /* 104.44.93.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5F40 /* 104.44.95.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E1C00 /* 104.46.28.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EA000 /* 104.46.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D14000 /* 104.209.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFA000 /* 191.239.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFC000 /* 191.239.192.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DC500 /* 20.157.197.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA3C00 /* 20.202.60.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA4000 /* 20.202.64.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E34000 /* 20.227.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ED500 /* 40.78.213.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28501C00 /* 40.80.28.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C7300 /* 52.108.115.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDCB00 /* 52.253.203.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44D20000 /* 68.210.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C98900 /* 20.201.137.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C98A00 /* 20.201.138.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176170E0 /* 23.97.112.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04A00000 /* 4.160.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04A90000 /* 4.169.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04C90000 /* 4.201.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04CA0000 /* 4.202.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04CB0000 /* 4.203.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04CB4000 /* 4.203.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E40000 /* 4.228.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04EE8000 /* 4.238.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693450 /* 13.105.52.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693480 /* 13.105.52.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14281000 /* 20.40.16.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14287000 /* 20.40.112.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2700 /* 20.47.39.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F5600 /* 20.47.86.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C2400 /* 20.60.36.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145FF000 /* 20.95.240.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14878000 /* 20.135.128.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14878400 /* 20.135.132.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966F00 /* 20.150.111.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3700 /* 20.157.55.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DDE00 /* 20.157.222.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DE300 /* 20.157.227.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9100 /* 20.190.145.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAD00 /* 20.190.173.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C38800 /* 20.195.136.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C39800 /* 20.195.152.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C3A000 /* 20.195.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C3C000 /* 20.195.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C58000 /* 20.197.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C90000 /* 20.201.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA4B00 /* 20.202.75.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA4C00 /* 20.202.76.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA5000 /* 20.202.80.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE4000 /* 20.206.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE8000 /* 20.206.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D10C00 /* 20.209.12.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D15200 /* 20.209.82.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E20000 /* 20.226.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17616000 /* 23.97.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17617000 /* 23.97.112.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17617080 /* 23.97.112.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176170A0 /* 23.97.112.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1D40 /* 40.90.29.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1D80 /* 40.90.29.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8520 /* 40.90.133.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8590 /* 40.90.133.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8D40 /* 40.90.141.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A90E0 /* 40.90.144.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9160 /* 40.90.145.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9180 /* 40.90.145.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9D00 /* 40.90.157.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1100 /* 40.126.17.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2D00 /* 40.126.45.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C2400 /* 52.108.36.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5200 /* 52.108.82.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CAB00 /* 52.108.171.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CAC00 /* 52.108.172.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D6C00 /* 52.109.108.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FE100 /* 52.111.225.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707600 /* 52.112.118.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34718400 /* 52.113.132.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34719800 /* 52.113.152.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472C200 /* 52.114.194.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472C400 /* 52.114.196.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472C800 /* 52.114.200.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3473EE00 /* 52.115.238.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34792800 /* 52.121.40.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BB500 /* 52.123.181.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDB900 /* 52.253.185.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDBA00 /* 52.253.186.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68290000 /* 104.41.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE82000 /* 191.232.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE84000 /* 191.232.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8A000 /* 191.232.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8C000 /* 191.232.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90000 /* 191.233.0.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE91000 /* 191.233.16.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE98000 /* 191.233.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9C000 /* 191.233.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8000 /* 191.234.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEAC000 /* 191.234.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB2000 /* 191.235.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB4000 /* 191.235.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBC400 /* 191.235.196.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBC800 /* 191.235.200.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE000 /* 191.235.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBF000 /* 191.235.240.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBF800 /* 191.235.248.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBFA00 /* 191.235.250.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDC300 /* 191.237.195.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDC800 /* 191.237.200.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDF800 /* 191.237.248.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4800 /* 191.238.72.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE8000 /* 191.238.128.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEEC000 /* 191.238.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEF7000 /* 191.239.112.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFCC00 /* 191.239.204.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFF000 /* 191.239.240.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04EE0000 /* 4.238.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691B80 /* 13.105.27.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D692430 /* 13.105.36.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D692460 /* 13.105.36.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693400 /* 13.105.52.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14142000 /* 20.20.32.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14282000 /* 20.40.32.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14874C00 /* 20.135.76.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964900 /* 20.150.73.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965000 /* 20.150.80.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967B00 /* 20.150.123.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2A00 /* 20.157.42.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DBD00 /* 20.157.189.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DC600 /* 20.157.198.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C38000 /* 20.195.128.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C39000 /* 20.195.144.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0000 /* 20.206.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E78000 /* 20.231.128.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176170C0 /* 23.97.112.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17617400 /* 23.97.116.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17617800 /* 23.97.120.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCCC0 /* 40.79.204.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B8000 /* 40.123.128.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287ECF00 /* 40.126.207.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C6F00 /* 52.108.111.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C7000 /* 52.108.112.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346DA400 /* 52.109.164.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FCF00 /* 52.111.207.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470CE00 /* 52.112.206.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BB600 /* 52.123.182.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDC500 /* 52.253.197.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6C8C0000 /* 108.140.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE81000 /* 191.232.16.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90800 /* 191.233.8.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93000 /* 191.233.48.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9A000 /* 191.233.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEAE000 /* 191.234.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDE000 /* 191.237.224.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04AC0000 /* 4.172.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04AE0000 /* 4.174.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04CC0000 /* 4.204.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04CE0000 /* 4.206.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E58000 /* 4.229.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04EF8000 /* 4.239.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47A000 /* 13.71.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58E000 /* 13.88.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6897C0 /* 13.104.151.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689800 /* 13.104.152.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D0B0 /* 13.104.208.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D4C0 /* 13.104.212.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68DFC0 /* 13.104.223.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267200 /* 20.38.114.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269000 /* 20.38.144.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14278000 /* 20.39.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B0000 /* 20.43.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2800 /* 20.47.40.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F5700 /* 20.47.87.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14308000 /* 20.48.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C000 /* 20.48.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430E000 /* 20.48.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C2A00 /* 20.60.42.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CF200 /* 20.60.242.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143F0000 /* 20.63.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1400 /* 20.95.20.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1D00 /* 20.95.29.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F2800 /* 20.95.40.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14680000 /* 20.104.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1468C000 /* 20.104.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14740000 /* 20.116.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487B600 /* 20.135.182.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487B800 /* 20.135.184.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961000 /* 20.150.16.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961F00 /* 20.150.31.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964700 /* 20.150.71.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966400 /* 20.150.100.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14970000 /* 20.151.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1A00 /* 20.157.26.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3400 /* 20.157.52.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7100 /* 20.157.113.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7900 /* 20.157.121.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9400 /* 20.157.148.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AF8000 /* 20.175.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8B00 /* 20.190.139.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA100 /* 20.190.161.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C84000 /* 20.200.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D14600 /* 20.209.70.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DC0000 /* 20.220.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DC8000 /* 20.220.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FD800 /* 40.79.216.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28502C00 /* 40.80.44.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852A000 /* 40.82.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855C000 /* 40.85.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1190 /* 40.90.17.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8000 /* 40.90.128.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8A20 /* 40.90.138.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8FA0 /* 40.90.143.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9760 /* 40.90.151.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0B00 /* 40.126.11.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2100 /* 40.126.33.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C2A00 /* 52.108.42.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5400 /* 52.108.84.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D5C00 /* 52.109.92.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FFB00 /* 52.111.251.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472A000 /* 52.114.160.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BB700 /* 52.123.183.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881700 /* 52.136.23.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881B00 /* 52.136.27.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A0000 /* 52.138.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B0000 /* 52.139.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349C0000 /* 52.156.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E40000 /* 52.228.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E90000 /* 52.233.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED0000 /* 52.237.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9440 /* 52.239.148.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFBD00 /* 52.239.189.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F51C00 /* 52.245.28.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69800 /* 52.246.152.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDC400 /* 52.253.196.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5D20 /* 104.44.93.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5F10 /* 104.44.95.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E50000 /* 4.229.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04EF0000 /* 4.239.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F80000 /* 4.248.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689A80 /* 13.104.154.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267980 /* 20.38.121.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2900 /* 20.47.41.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F5800 /* 20.47.88.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430D000 /* 20.48.208.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C8E00 /* 20.60.142.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1100 /* 20.95.17.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F3100 /* 20.95.49.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14688000 /* 20.104.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14874200 /* 20.135.66.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14960100 /* 20.150.1.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962880 /* 20.150.40.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967100 /* 20.150.113.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D0400 /* 20.157.4.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D0800 /* 20.157.8.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DA100 /* 20.157.161.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AF0000 /* 20.175.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8B80 /* 20.190.139.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA200 /* 20.190.162.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C80000 /* 20.200.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D14000 /* 20.209.64.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DC4000 /* 20.220.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456000 /* 40.69.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FD900 /* 40.79.217.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28502800 /* 40.80.40.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850F000 /* 40.80.240.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856C000 /* 40.86.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28590000 /* 40.89.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1180 /* 40.90.17.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8A40 /* 40.90.138.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9C60 /* 40.90.156.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0B80 /* 40.126.11.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2200 /* 40.126.34.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CC100 /* 52.108.193.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CE800 /* 52.108.232.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D6000 /* 52.109.96.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FE200 /* 52.111.226.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472A400 /* 52.114.164.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BB800 /* 52.123.184.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881600 /* 52.136.22.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B4000 /* 52.139.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B0000 /* 52.155.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E54000 /* 52.229.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E88000 /* 52.232.128.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EB0000 /* 52.235.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA480 /* 52.239.164.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFBE00 /* 52.239.190.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F20000 /* 52.242.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52000 /* 52.245.32.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5D40 /* 104.44.93.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5F20 /* 104.44.95.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04BA0000 /* 4.186.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04BB8000 /* 4.187.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04BC0000 /* 4.188.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04D50000 /* 4.213.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E00000 /* 4.224.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F00000 /* 4.240.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F78000 /* 4.247.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D470000 /* 13.71.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689480 /* 13.104.148.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696200 /* 13.105.98.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696220 /* 13.105.98.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696240 /* 13.105.98.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267E00 /* 20.38.126.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14282800 /* 20.40.40.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14283000 /* 20.40.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7800 /* 20.43.120.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2A00 /* 20.47.42.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F5900 /* 20.47.89.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C5400 /* 20.60.84.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F8800 /* 20.95.136.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14875A00 /* 20.135.90.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14875C00 /* 20.135.92.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967200 /* 20.150.114.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D5500 /* 20.157.85.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D5C00 /* 20.157.92.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8B00 /* 20.157.139.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DB200 /* 20.157.178.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9200 /* 20.190.146.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAF00 /* 20.190.175.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C00000 /* 20.192.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02800 /* 20.192.40.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06000 /* 20.192.96.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A800 /* 20.192.168.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C18000 /* 20.193.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1E000 /* 20.193.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C50000 /* 20.197.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C60000 /* 20.198.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA2900 /* 20.202.41.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA3800 /* 20.202.56.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA4900 /* 20.202.73.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA4A00 /* 20.202.74.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CC0000 /* 20.204.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF4000 /* 20.207.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CFC000 /* 20.207.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D13800 /* 20.209.56.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DB0000 /* 20.219.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DB8000 /* 20.219.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EB4000 /* 20.235.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EBC000 /* 20.235.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F40000 /* 20.244.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCF20 /* 40.79.207.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCF40 /* 40.79.207.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCF60 /* 40.79.207.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FD600 /* 40.79.214.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503000 /* 40.80.48.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28504000 /* 40.80.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851E000 /* 40.81.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857E000 /* 40.87.224.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8980 /* 40.90.137.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28702700 /* 40.112.39.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28702780 /* 40.112.39.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1200 /* 40.126.18.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2F00 /* 40.126.47.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C2C00 /* 52.108.44.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5500 /* 52.108.85.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D3800 /* 52.109.56.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FFC00 /* 52.111.252.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34710A00 /* 52.113.10.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34714600 /* 52.113.70.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34715C00 /* 52.113.92.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34719E00 /* 52.113.158.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34722800 /* 52.114.40.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3473F000 /* 52.115.240.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34797A00 /* 52.121.122.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34797C00 /* 52.121.124.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BA400 /* 52.123.164.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881800 /* 52.136.24.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C4000 /* 52.140.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC8000 /* 52.172.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF8740 /* 52.239.135.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFCA00 /* 52.239.202.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F56000 /* 52.245.96.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDB500 /* 52.253.181.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDBF00 /* 52.253.191.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4AE18000 /* 74.225.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5C80 /* 104.44.92.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5EC0 /* 104.44.94.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682FD200 /* 104.47.210.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D34000 /* 104.211.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D439910 /* 13.67.153.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D439A00 /* 13.67.154.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D688100 /* 13.104.129.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689FC0 /* 13.104.159.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D000 /* 13.104.208.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6962D0 /* 13.105.98.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696300 /* 13.105.99.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC000 /* 20.45.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0000 /* 20.46.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0500 /* 20.47.5.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F6900 /* 20.47.105.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331800 /* 20.51.24.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1800 /* 20.60.24.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14708000 /* 20.112.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14874400 /* 20.135.68.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961700 /* 20.150.23.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962F00 /* 20.150.47.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D6000 /* 20.157.96.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DEB00 /* 20.157.235.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8A80 /* 20.190.138.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9600 /* 20.190.150.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E40000 /* 20.228.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28427800 /* 40.66.120.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC800 /* 40.78.200.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ED010 /* 40.78.208.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FE800 /* 40.79.232.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28520000 /* 40.82.0.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28531860 /* 40.83.24.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B406 /* 40.87.180.6/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B408 /* 40.87.180.8/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B40C /* 40.87.180.12/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B416 /* 40.87.180.22/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B418 /* 40.87.180.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B428 /* 40.87.180.40/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B444 /* 40.87.180.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B448 /* 40.87.180.72/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B4C4 /* 40.87.180.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B4C8 /* 40.87.180.200/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B4FC /* 40.87.180.252/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B500 /* 40.87.181.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B59A /* 40.87.181.154/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B59C /* 40.87.181.156/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B5A0 /* 40.87.181.160/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B600 /* 40.87.182.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B610 /* 40.87.182.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B63C /* 40.87.182.60/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B71C /* 40.87.183.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B720 /* 40.87.183.32/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B728 /* 40.87.183.40/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B730 /* 40.87.183.48/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B734 /* 40.87.183.52/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B780 /* 40.87.183.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B7EE /* 40.87.183.238/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B7F0 /* 40.87.183.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28592000 /* 40.89.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8450 /* 40.90.132.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8E20 /* 40.90.142.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9500 /* 40.90.149.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D1100 /* 40.93.17.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285DD000 /* 40.93.208.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285DD400 /* 40.93.212.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28603400 /* 40.96.52.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A0000 /* 40.122.0.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA904 /* 40.123.169.4/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA96A /* 40.123.169.106/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA980 /* 40.123.169.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA988 /* 40.123.169.136/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BAA0E /* 40.123.170.14/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BAA10 /* 40.123.170.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BAA14 /* 40.123.170.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0A80 /* 40.126.10.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1600 /* 40.126.22.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668F00 /* 52.102.143.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34671100 /* 52.103.17.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678F00 /* 52.103.143.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C7100 /* 52.108.113.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D8C00 /* 52.109.140.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BC000 /* 52.123.192.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348DE000 /* 52.141.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FC600 /* 52.143.198.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349EB000 /* 52.158.176.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A56880 /* 52.165.104.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B0E100 /* 52.176.225.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B0E800 /* 52.176.232.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B0F000 /* 52.176.240.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4A000 /* 52.180.160.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B000 /* 52.180.176.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B93870 /* 52.185.56.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B97040 /* 52.185.112.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB100 /* 52.239.177.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFEE00 /* 52.239.238.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F54500 /* 52.245.69.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD9C00 /* 52.253.156.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDE800 /* 52.253.232.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D03000 /* 104.208.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8800 /* 168.61.136.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83DE000 /* 168.61.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04968000 /* 4.150.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0496C000 /* 4.150.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F98000 /* 4.249.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D438000 /* 13.67.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D439000 /* 13.67.144.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D439800 /* 13.67.152.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D439900 /* 13.67.153.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D439920 /* 13.67.153.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D439940 /* 13.67.153.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D439980 /* 13.67.153.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D439B00 /* 13.67.155.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D439C00 /* 13.67.156.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D43A000 /* 13.67.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D43C000 /* 13.67.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D560000 /* 13.86.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D590000 /* 13.89.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689380 /* 13.104.147.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68DB80 /* 13.104.219.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6911C0 /* 13.105.17.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691800 /* 13.105.24.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D692500 /* 13.105.37.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6935C0 /* 13.105.53.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6962A0 /* 13.105.98.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6962C0 /* 13.105.98.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6962E0 /* 13.105.98.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696530 /* 13.105.101.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696540 /* 13.105.101.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14090000 /* 20.9.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140C8000 /* 20.12.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140F8000 /* 20.15.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141D0000 /* 20.29.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14258000 /* 20.37.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14266000 /* 20.38.96.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267A00 /* 20.38.122.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428C000 /* 20.40.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0800 /* 20.44.8.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142EE000 /* 20.46.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3A00 /* 20.47.58.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F4E00 /* 20.47.78.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1200 /* 20.60.18.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1E00 /* 20.60.30.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CB200 /* 20.60.178.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CC200 /* 20.60.194.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CF000 /* 20.60.240.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CF400 /* 20.60.244.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14504000 /* 20.80.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14530000 /* 20.83.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14548000 /* 20.84.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1000 /* 20.95.16.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1B00 /* 20.95.27.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14628000 /* 20.98.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A0000 /* 20.106.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146DC000 /* 20.109.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1470C000 /* 20.112.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14760000 /* 20.118.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1476C000 /* 20.118.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14870000 /* 20.135.0.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487BC00 /* 20.135.188.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487C000 /* 20.135.192.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14880380 /* 20.136.3.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14880500 /* 20.136.5.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F0400 /* 20.143.4.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962B80 /* 20.150.43.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963A00 /* 20.150.58.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963F00 /* 20.150.63.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964D00 /* 20.150.77.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965900 /* 20.150.89.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965F00 /* 20.150.95.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2200 /* 20.157.34.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D4900 /* 20.157.73.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D5800 /* 20.157.88.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D5B00 /* 20.157.91.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8E00 /* 20.157.142.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DA300 /* 20.157.163.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DB800 /* 20.157.184.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B84000 /* 20.184.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BAC000 /* 20.186.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8600 /* 20.190.134.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9B00 /* 20.190.155.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D11200 /* 20.209.18.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D12400 /* 20.209.36.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D16200 /* 20.209.98.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DD0000 /* 20.221.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14ECC000 /* 20.236.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17638000 /* 23.99.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17645000 /* 23.100.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764F000 /* 23.100.240.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17657000 /* 23.101.112.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766CA00 /* 23.102.202.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2843A000 /* 40.67.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28458000 /* 40.69.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D0000 /* 40.77.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8280 /* 40.77.130.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8900 /* 40.77.137.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8A00 /* 40.77.138.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA140 /* 40.77.161.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA6C0 /* 40.77.166.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DAB00 /* 40.77.171.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DAFC0 /* 40.77.175.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DAFF0 /* 40.77.175.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB610 /* 40.77.182.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB6C0 /* 40.77.182.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB880 /* 40.77.184.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DC500 /* 40.77.197.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DFF80 /* 40.77.255.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E8000 /* 40.78.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EDD00 /* 40.78.221.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28521000 /* 40.82.16.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28526000 /* 40.82.96.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28530000 /* 40.83.0.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28531000 /* 40.83.16.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28531800 /* 40.83.24.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28531840 /* 40.83.24.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28531880 /* 40.83.24.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28531900 /* 40.83.25.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28531A00 /* 40.83.26.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28531C00 /* 40.83.28.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28532000 /* 40.83.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28560000 /* 40.86.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B400 /* 40.87.180.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B404 /* 40.87.180.4/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B40E /* 40.87.180.14/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B410 /* 40.87.180.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B414 /* 40.87.180.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B41C /* 40.87.180.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B420 /* 40.87.180.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B42A /* 40.87.180.42/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B42C /* 40.87.180.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B430 /* 40.87.180.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B440 /* 40.87.180.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B44A /* 40.87.180.74/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B44C /* 40.87.180.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B450 /* 40.87.180.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B460 /* 40.87.180.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B480 /* 40.87.180.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B4C0 /* 40.87.180.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B4CA /* 40.87.180.202/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B4CC /* 40.87.180.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B4D0 /* 40.87.180.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B4E0 /* 40.87.180.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B4F0 /* 40.87.180.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B4F8 /* 40.87.180.248/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B504 /* 40.87.181.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B508 /* 40.87.181.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B510 /* 40.87.181.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B520 /* 40.87.181.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B540 /* 40.87.181.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B580 /* 40.87.181.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B590 /* 40.87.181.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B598 /* 40.87.181.152/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B5A2 /* 40.87.181.162/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B5A4 /* 40.87.181.164/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B5A8 /* 40.87.181.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B5B0 /* 40.87.181.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B5C0 /* 40.87.181.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B604 /* 40.87.182.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B608 /* 40.87.182.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B618 /* 40.87.182.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B620 /* 40.87.182.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B630 /* 40.87.182.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B638 /* 40.87.182.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B63E /* 40.87.182.62/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B640 /* 40.87.182.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B680 /* 40.87.182.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B700 /* 40.87.183.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B710 /* 40.87.183.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B718 /* 40.87.183.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B722 /* 40.87.183.34/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B724 /* 40.87.183.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B72A /* 40.87.183.42/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B72C /* 40.87.183.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B736 /* 40.87.183.54/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B738 /* 40.87.183.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B740 /* 40.87.183.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B790 /* 40.87.183.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B7A0 /* 40.87.183.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B7C0 /* 40.87.183.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B7E0 /* 40.87.183.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B7E8 /* 40.87.183.232/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B7EC /* 40.87.183.236/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B7F4 /* 40.87.183.244/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B7F8 /* 40.87.183.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859E000 /* 40.89.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1000 /* 40.90.16.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1580 /* 40.90.21.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1600 /* 40.90.22.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1A80 /* 40.90.26.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A81E0 /* 40.90.129.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8240 /* 40.90.130.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A82C0 /* 40.90.130.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A84C0 /* 40.90.132.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A89E0 /* 40.90.137.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8C60 /* 40.90.140.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8CE0 /* 40.90.140.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8D00 /* 40.90.141.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8E80 /* 40.90.142.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8EF0 /* 40.90.142.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9000 /* 40.90.144.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9080 /* 40.90.144.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A94B0 /* 40.90.148.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9560 /* 40.90.149.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9790 /* 40.90.151.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9A40 /* 40.90.154.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9CC0 /* 40.90.156.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9E40 /* 40.90.158.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0800 /* 40.93.8.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0D00 /* 40.93.13.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285DC000 /* 40.93.192.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28610700 /* 40.97.7.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28610C00 /* 40.97.12.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871C000 /* 40.113.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A1000 /* 40.122.16.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A2000 /* 40.122.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A4000 /* 40.122.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A8000 /* 40.122.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA800 /* 40.123.168.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA900 /* 40.123.169.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA906 /* 40.123.169.6/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA908 /* 40.123.169.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA910 /* 40.123.169.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA920 /* 40.123.169.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA940 /* 40.123.169.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA960 /* 40.123.169.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA968 /* 40.123.169.104/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA96C /* 40.123.169.108/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA970 /* 40.123.169.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA98C /* 40.123.169.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA990 /* 40.123.169.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA9A0 /* 40.123.169.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA9C0 /* 40.123.169.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BAA00 /* 40.123.170.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BAA08 /* 40.123.170.8/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BAA0C /* 40.123.170.12/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BAA16 /* 40.123.170.22/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BAA18 /* 40.123.170.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BAA20 /* 40.123.170.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0600 /* 40.126.6.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1B00 /* 40.126.27.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34650800 /* 52.101.8.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34652000 /* 52.101.32.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34653D00 /* 52.101.61.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34653E00 /* 52.101.62.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34654000 /* 52.101.64.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668200 /* 52.102.130.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668B00 /* 52.102.139.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670400 /* 52.103.4.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670D00 /* 52.103.13.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678200 /* 52.103.130.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678B00 /* 52.103.139.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CA500 /* 52.108.165.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CA600 /* 52.108.166.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CB900 /* 52.108.185.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CD000 /* 52.108.208.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D0800 /* 52.109.8.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FE300 /* 52.111.227.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34704800 /* 52.112.72.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707100 /* 52.112.113.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34718100 /* 52.113.129.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34728000 /* 52.114.128.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34734C00 /* 52.115.76.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34735800 /* 52.115.88.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34735C00 /* 52.115.92.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B0200 /* 52.123.2.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BB900 /* 52.123.185.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BBA00 /* 52.123.186.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347D8000 /* 52.125.128.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881E00 /* 52.136.30.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348DC000 /* 52.141.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348DF000 /* 52.141.240.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FC100 /* 52.143.193.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FE000 /* 52.143.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349A0000 /* 52.154.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349A8000 /* 52.154.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349EA000 /* 52.158.160.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349EC000 /* 52.158.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A50000 /* 52.165.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A52000 /* 52.165.32.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A53000 /* 52.165.48.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A53100 /* 52.165.49.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A53800 /* 52.165.56.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A54000 /* 52.165.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A56000 /* 52.165.96.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A56800 /* 52.165.104.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A58000 /* 52.165.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD0000 /* 52.173.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B00000 /* 52.176.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B08000 /* 52.176.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B0A000 /* 52.176.160.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B0B000 /* 52.176.176.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B0C000 /* 52.176.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B0E000 /* 52.176.224.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B48000 /* 52.180.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B800 /* 52.180.184.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B820 /* 52.180.184.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B900 /* 52.180.185.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68000 /* 52.182.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B90000 /* 52.185.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B92000 /* 52.185.32.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B93000 /* 52.185.48.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B93800 /* 52.185.56.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B93840 /* 52.185.56.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B93860 /* 52.185.56.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B93880 /* 52.185.56.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B938A0 /* 52.185.56.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B94000 /* 52.185.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B96000 /* 52.185.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B97000 /* 52.185.112.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B97060 /* 52.185.112.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B97800 /* 52.185.120.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BD0000 /* 52.189.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E48000 /* 52.228.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E68000 /* 52.230.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89D00 /* 52.232.157.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EEC000 /* 52.238.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9600 /* 52.239.150.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB120 /* 52.239.177.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB140 /* 52.239.177.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB180 /* 52.239.177.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC300 /* 52.239.195.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFEA00 /* 52.239.234.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F28000 /* 52.242.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F54400 /* 52.245.68.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F54520 /* 52.245.69.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F54540 /* 52.245.69.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F54560 /* 52.245.69.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F54590 /* 52.245.69.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F545A0 /* 52.245.69.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F545C0 /* 52.245.69.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F54600 /* 52.245.70.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF0000 /* 52.255.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41379000 /* 65.55.144.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41379200 /* 65.55.146.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682B8000 /* 104.43.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C58A0 /* 104.44.88.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5BA0 /* 104.44.91.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5CE0 /* 104.44.92.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5E50 /* 104.44.94.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D00000 /* 104.208.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D02000 /* 104.208.32.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD24E0 /* 131.253.36.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D376C00 /* 157.55.108.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8000 /* 168.61.128.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8080 /* 168.61.128.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D80A0 /* 168.61.128.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D80C0 /* 168.61.128.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8100 /* 168.61.129.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8180 /* 168.61.129.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D81D0 /* 168.61.129.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D81E0 /* 168.61.129.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8240 /* 168.61.130.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8280 /* 168.61.130.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8300 /* 168.61.131.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8380 /* 168.61.131.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8400 /* 168.61.132.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D9000 /* 168.61.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83DA000 /* 168.61.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83DD000 /* 168.61.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACA80000 /* 172.168.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACAA0000 /* 172.170.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACAB0000 /* 172.171.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC1954800 /* 193.149.72.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14142040 /* 20.20.32.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14142080 /* 20.20.32.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C98400 /* 20.201.132.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C98600 /* 20.201.134.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E78040 /* 20.231.128.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E78080 /* 20.231.128.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28610E40 /* 40.97.14.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28610E80 /* 40.97.14.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44D30000 /* 68.211.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04900000 /* 4.144.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04BF0000 /* 4.191.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04C00000 /* 4.192.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04FC0000 /* 4.252.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D460000 /* 13.70.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D48C000 /* 13.72.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B0000 /* 13.75.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58D000 /* 13.88.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5E0000 /* 13.94.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689B40 /* 13.104.155.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689BC0 /* 13.104.155.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D690EC0 /* 13.105.14.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691000 /* 13.105.16.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696410 /* 13.105.100.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696440 /* 13.105.100.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696480 /* 13.105.100.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6964A0 /* 13.105.100.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6964C0 /* 13.105.100.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14020000 /* 20.2.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14068000 /* 20.6.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14184000 /* 20.24.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1418C000 /* 20.24.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2B00 /* 20.47.43.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F7E00 /* 20.47.126.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C5600 /* 20.60.86.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C8300 /* 20.60.131.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CFE00 /* 20.60.254.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F8B00 /* 20.95.139.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14872800 /* 20.135.40.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487EA00 /* 20.135.234.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487EC00 /* 20.135.236.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14960180 /* 20.150.1.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961600 /* 20.150.22.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966000 /* 20.150.96.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3500 /* 20.157.53.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DB100 /* 20.157.177.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DD200 /* 20.157.210.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DD500 /* 20.157.213.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DDB00 /* 20.157.219.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BB4000 /* 20.187.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BB8000 /* 20.187.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC000 /* 20.187.192.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBE000 /* 20.187.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD4000 /* 20.189.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8C80 /* 20.190.140.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA400 /* 20.190.164.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34800 /* 20.195.72.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35800 /* 20.195.88.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD0000 /* 20.205.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4000 /* 20.205.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5000 /* 20.205.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD6000 /* 20.205.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD8000 /* 20.205.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EF0000 /* 20.239.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F70000 /* 20.247.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14FF0000 /* 20.255.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17614000 /* 23.97.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17622000 /* 23.98.32.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17622800 /* 23.98.40.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17622C00 /* 23.98.44.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17636000 /* 23.99.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17645800 /* 23.100.88.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17650000 /* 23.101.0.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766C800 /* 23.102.200.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766E000 /* 23.102.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8600 /* 40.77.134.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8810 /* 40.77.136.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA020 /* 40.77.160.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA040 /* 40.77.160.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA080 /* 40.77.160.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA100 /* 40.77.161.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA180 /* 40.77.161.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DAF80 /* 40.77.175.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DC000 /* 40.77.192.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DC900 /* 40.77.201.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE200 /* 40.77.226.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DEA80 /* 40.77.234.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DECC0 /* 40.77.236.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DED80 /* 40.77.237.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DFC00 /* 40.77.252.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FD200 /* 40.79.210.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28511000 /* 40.81.16.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28527400 /* 40.82.116.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28534000 /* 40.83.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857C000 /* 40.87.192.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9AC0 /* 40.90.154.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D8000 /* 40.93.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0C80 /* 40.126.12.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2400 /* 40.126.36.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34658000 /* 52.101.128.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34658400 /* 52.101.132.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3466C000 /* 52.102.192.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34674000 /* 52.103.64.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3467C000 /* 52.103.192.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C2000 /* 52.108.32.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5100 /* 52.108.81.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D7800 /* 52.109.120.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FE400 /* 52.111.228.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34716000 /* 52.113.96.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34716400 /* 52.113.100.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34716800 /* 52.113.104.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34716C00 /* 52.113.108.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34720000 /* 52.114.0.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34723400 /* 52.114.52.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34732E00 /* 52.115.46.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34736000 /* 52.115.96.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34789D00 /* 52.120.157.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34797000 /* 52.121.112.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BA500 /* 52.123.165.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BA600 /* 52.123.166.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B8000 /* 52.139.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF0000 /* 52.175.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B80000 /* 52.184.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E58000 /* 52.229.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89900 /* 52.232.153.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF8000 /* 52.239.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE000 /* 52.239.224.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F53800 /* 52.245.56.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F68000 /* 52.246.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDDE00 /* 52.253.222.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134A000 /* 65.52.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C58C0 /* 104.44.88.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5AE0 /* 104.44.90.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5BC0 /* 104.44.91.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5E60 /* 104.44.94.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E1800 /* 104.46.24.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D04000 /* 104.208.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A000 /* 104.214.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6FDD1D00 /* 111.221.29.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6FDD1E00 /* 111.221.30.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0D64 /* 131.253.13.100/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0D68 /* 131.253.13.104/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD23C0 /* 131.253.35.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x86AAC000 /* 134.170.192.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974A000 /* 137.116.160.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8000 /* 168.63.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8100 /* 168.63.129.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8120 /* 168.63.129.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8140 /* 168.63.129.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8180 /* 168.63.129.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8200 /* 168.63.130.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8400 /* 168.63.132.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8800 /* 168.63.136.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F9400 /* 168.63.148.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F9800 /* 168.63.152.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F9C00 /* 168.63.156.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FC000 /* 168.63.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA0200 /* 191.234.2.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA1000 /* 191.234.16.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDEE00 /* 191.237.238.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCCE7C500 /* 204.231.197.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E43A0 /* 207.46.67.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E43C0 /* 207.46.67.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E4800 /* 207.46.72.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E4DE0 /* 207.46.77.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E5700 /* 207.46.87.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E5910 /* 207.46.89.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E5F20 /* 207.46.95.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E7E00 /* 207.46.126.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E8000 /* 207.46.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF44AED0 /* 207.68.174.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x46250C00 /* 70.37.12.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D800 /* 13.104.216.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693420 /* 13.105.52.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693440 /* 13.105.52.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693460 /* 13.105.52.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693CA0 /* 13.105.60.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693D00 /* 13.105.61.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693D20 /* 13.105.61.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D697258 /* 13.105.114.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D697260 /* 13.105.114.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D697280 /* 13.105.114.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6972C0 /* 13.105.114.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6972D0 /* 13.105.114.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14010000 /* 20.1.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270000 /* 20.39.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0600 /* 20.47.6.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F6A00 /* 20.47.106.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F8000 /* 20.47.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331000 /* 20.51.16.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C9A00 /* 20.60.154.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CB800 /* 20.60.184.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CEE00 /* 20.60.238.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14668000 /* 20.102.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487D200 /* 20.135.210.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487D400 /* 20.135.212.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F2400 /* 20.143.36.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966C00 /* 20.150.108.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3A00 /* 20.157.58.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9500 /* 20.157.149.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A800 /* 20.168.168.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8A00 /* 20.190.138.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9500 /* 20.190.149.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C99700 /* 20.201.151.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DD8000 /* 20.221.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14FC8000 /* 20.252.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28465800 /* 40.70.88.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9000 /* 40.74.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2000 /* 40.75.32.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ED000 /* 40.78.208.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F5800 /* 40.79.88.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F5820 /* 40.79.88.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F5900 /* 40.79.89.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F6000 /* 40.79.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A804 /* 40.87.168.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A828 /* 40.87.168.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A844 /* 40.87.168.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A8D0 /* 40.87.168.208/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A928 /* 40.87.169.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A93A /* 40.87.169.58/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A962 /* 40.87.169.98/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A964 /* 40.87.169.100/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A98A /* 40.87.169.138/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A990 /* 40.87.169.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AA92 /* 40.87.170.146/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AA94 /* 40.87.170.148/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AABC /* 40.87.170.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAC0 /* 40.87.170.192/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAC8 /* 40.87.170.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAD0 /* 40.87.170.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAD4 /* 40.87.170.212/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AADC /* 40.87.170.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAE0 /* 40.87.170.224/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAFC /* 40.87.170.252/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB00 /* 40.87.171.0/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB20 /* 40.87.171.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB2A /* 40.87.171.42/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB2C /* 40.87.171.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB30 /* 40.87.171.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB40 /* 40.87.171.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857ABA2 /* 40.87.171.162/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857ABA4 /* 40.87.171.164/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857ABFA /* 40.87.171.250/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857ABFC /* 40.87.171.252/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28594000 /* 40.89.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8160 /* 40.90.129.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8920 /* 40.90.137.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A92C0 /* 40.90.146.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0C00 /* 40.91.12.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0C20 /* 40.91.12.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0D00 /* 40.91.13.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D1000 /* 40.93.16.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285DCB00 /* 40.93.203.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285DCC00 /* 40.93.204.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28602E00 /* 40.96.46.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28603700 /* 40.96.55.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28610F00 /* 40.97.15.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9048 /* 40.123.144.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9050 /* 40.123.144.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9060 /* 40.123.144.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9098 /* 40.123.144.152/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B90FE /* 40.123.144.254/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9100 /* 40.123.145.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9104 /* 40.123.145.4/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B910E /* 40.123.145.14/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9110 /* 40.123.145.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9114 /* 40.123.145.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B913C /* 40.123.145.60/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9140 /* 40.123.145.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B91A4 /* 40.123.145.164/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B91D6 /* 40.123.145.214/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B91D8 /* 40.123.145.216/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B91DC /* 40.123.145.220/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B921E /* 40.123.146.30/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9220 /* 40.123.146.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9228 /* 40.123.146.40/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9232 /* 40.123.146.50/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9234 /* 40.123.146.52/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92A6 /* 40.123.146.166/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92A8 /* 40.123.146.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92B0 /* 40.123.146.176/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92B4 /* 40.123.146.180/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92CE /* 40.123.146.206/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92D0 /* 40.123.146.208/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9322 /* 40.123.147.34/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9324 /* 40.123.147.36/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9356 /* 40.123.147.86/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9358 /* 40.123.147.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9360 /* 40.123.147.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9378 /* 40.123.147.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9380 /* 40.123.147.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9388 /* 40.123.147.136/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9392 /* 40.123.147.146/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B93B6 /* 40.123.147.182/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB85A /* 40.123.184.90/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB85C /* 40.123.184.92/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB860 /* 40.123.184.96/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB8A0 /* 40.123.184.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0A00 /* 40.126.10.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1500 /* 40.126.21.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668E00 /* 52.102.142.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34671000 /* 52.103.16.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678E00 /* 52.103.142.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C7400 /* 52.108.116.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346DA500 /* 52.109.165.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FD000 /* 52.111.208.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A4000 /* 52.138.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5800 /* 52.138.88.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FD400 /* 52.143.212.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34938000 /* 52.147.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A810 /* 52.184.168.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A820 /* 52.184.168.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E18830 /* 52.225.136.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E19000 /* 52.225.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1A000 /* 52.225.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89600 /* 52.232.150.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9DE0 /* 52.239.157.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA5C0 /* 52.239.165.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB8B0 /* 52.239.184.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB8E0 /* 52.239.184.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB900 /* 52.239.185.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC080 /* 52.239.192.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC680 /* 52.239.198.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE600 /* 52.239.230.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFEF00 /* 52.239.239.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52D90 /* 52.245.45.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52E20 /* 52.245.46.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52E50 /* 52.245.46.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52E60 /* 52.245.46.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD9600 /* 52.253.150.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD9800 /* 52.253.152.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDE000 /* 52.253.224.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FE7800 /* 52.254.120.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC4000 /* 68.220.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5000 /* 68.220.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5FD0 /* 104.44.95.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC6B46100 /* 198.180.97.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04964000 /* 4.150.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04980000 /* 4.152.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D440000 /* 13.68.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D4000 /* 13.77.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689300 /* 13.104.147.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D040 /* 13.104.208.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6912C0 /* 13.105.18.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691740 /* 13.105.23.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691C00 /* 13.105.28.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691C80 /* 13.105.28.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694380 /* 13.105.67.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694A80 /* 13.105.74.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694B00 /* 13.105.75.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694B20 /* 13.105.75.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694B40 /* 13.105.75.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696520 /* 13.105.101.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14018000 /* 20.1.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14070000 /* 20.7.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140A0000 /* 20.10.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140C0000 /* 20.12.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140E8000 /* 20.14.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140F0000 /* 20.15.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14160000 /* 20.22.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14248000 /* 20.36.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14266400 /* 20.38.100.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1426D000 /* 20.38.208.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14290000 /* 20.41.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1000 /* 20.44.16.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C4000 /* 20.44.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3C00 /* 20.47.60.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F4C00 /* 20.47.76.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14310000 /* 20.49.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316000 /* 20.49.96.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1437C000 /* 20.55.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14390000 /* 20.57.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C3800 /* 20.60.56.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C5800 /* 20.60.88.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C8400 /* 20.60.132.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CB400 /* 20.60.180.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CE000 /* 20.60.224.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CEC00 /* 20.60.236.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E0000 /* 20.62.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14410000 /* 20.65.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1445C000 /* 20.69.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14484000 /* 20.72.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144B0000 /* 20.75.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1450C000 /* 20.80.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14518000 /* 20.81.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14550000 /* 20.85.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14586000 /* 20.88.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145E0000 /* 20.94.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1600 /* 20.95.22.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1900 /* 20.95.25.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F3500 /* 20.95.53.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145FFF00 /* 20.95.255.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14600000 /* 20.96.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14618000 /* 20.97.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C000 /* 20.98.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146D0000 /* 20.109.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146E0000 /* 20.110.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14728000 /* 20.114.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14778000 /* 20.119.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147A0000 /* 20.122.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14871000 /* 20.135.16.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487C800 /* 20.135.200.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487CC00 /* 20.135.204.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14880000 /* 20.136.0.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14880100 /* 20.136.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F0200 /* 20.143.2.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F0500 /* 20.143.5.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961D00 /* 20.150.29.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962400 /* 20.150.36.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963200 /* 20.150.50.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964800 /* 20.150.72.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965200 /* 20.150.82.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965800 /* 20.150.88.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14980600 /* 20.152.6.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1100 /* 20.157.17.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1D00 /* 20.157.29.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2400 /* 20.157.36.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3000 /* 20.157.48.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3E00 /* 20.157.62.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D4000 /* 20.157.64.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D4C00 /* 20.157.76.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D5000 /* 20.157.80.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D5400 /* 20.157.84.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7200 /* 20.157.114.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7A00 /* 20.157.122.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DA700 /* 20.157.167.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DB900 /* 20.157.185.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DEF00 /* 20.157.239.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DF800 /* 20.157.248.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A10000 /* 20.161.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BA0000 /* 20.186.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BA8000 /* 20.186.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8300 /* 20.190.131.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9800 /* 20.190.152.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEC000 /* 20.190.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C9E000 /* 20.201.224.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA1500 /* 20.202.21.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA1F00 /* 20.202.31.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA2000 /* 20.202.32.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA2200 /* 20.202.34.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA5400 /* 20.202.84.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA5900 /* 20.202.89.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA5D00 /* 20.202.93.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA6100 /* 20.202.97.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA7D00 /* 20.202.125.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D14400 /* 20.209.68.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D15A00 /* 20.209.90.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D16E00 /* 20.209.110.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E60000 /* 20.230.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F20000 /* 20.242.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F60000 /* 20.246.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17644000 /* 23.100.64.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17652000 /* 23.101.32.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17655000 /* 23.101.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17659000 /* 23.101.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17666000 /* 23.102.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766CC00 /* 23.102.204.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766D000 /* 23.102.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841C000 /* 40.65.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28438000 /* 40.67.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28460000 /* 40.70.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28464000 /* 40.70.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28465000 /* 40.70.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28468000 /* 40.70.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B0000 /* 40.75.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B4000 /* 40.75.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8080 /* 40.77.128.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8100 /* 40.77.129.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8200 /* 40.77.130.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8400 /* 40.77.132.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8830 /* 40.77.136.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8980 /* 40.77.137.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8A80 /* 40.77.138.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA300 /* 40.77.163.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA6A0 /* 40.77.166.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA700 /* 40.77.167.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA800 /* 40.77.168.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DAA00 /* 40.77.170.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DAF60 /* 40.77.175.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB100 /* 40.77.177.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB200 /* 40.77.178.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB600 /* 40.77.182.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB620 /* 40.77.182.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB800 /* 40.77.184.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DC600 /* 40.77.198.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DC7C0 /* 40.77.199.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE080 /* 40.77.224.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE400 /* 40.77.228.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE900 /* 40.77.233.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DEAC0 /* 40.77.234.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DEC50 /* 40.77.236.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DED40 /* 40.77.237.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DF000 /* 40.77.240.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DF500 /* 40.77.245.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DF800 /* 40.77.248.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DFB00 /* 40.77.251.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ED030 /* 40.78.208.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EDC00 /* 40.78.220.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F0000 /* 40.79.0.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F0800 /* 40.79.8.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F0820 /* 40.79.8.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F0840 /* 40.79.8.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F0860 /* 40.79.8.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F0900 /* 40.79.9.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F1000 /* 40.79.16.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F2000 /* 40.79.32.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F3000 /* 40.79.48.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F3020 /* 40.79.48.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F3100 /* 40.79.49.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F3800 /* 40.79.56.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F4000 /* 40.79.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F5000 /* 40.79.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F5A00 /* 40.79.90.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F5B00 /* 40.79.91.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F5C00 /* 40.79.92.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F5D00 /* 40.79.93.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F5E00 /* 40.79.94.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F5F00 /* 40.79.95.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCE40 /* 40.79.206.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FF000 /* 40.79.240.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28520400 /* 40.82.4.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28522C00 /* 40.82.44.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28540000 /* 40.84.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A800 /* 40.87.168.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A808 /* 40.87.168.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A810 /* 40.87.168.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A820 /* 40.87.168.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A830 /* 40.87.168.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A840 /* 40.87.168.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A846 /* 40.87.168.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A848 /* 40.87.168.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A850 /* 40.87.168.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A860 /* 40.87.168.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A880 /* 40.87.168.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A8C0 /* 40.87.168.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A8D2 /* 40.87.168.210/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A8D4 /* 40.87.168.212/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A8D8 /* 40.87.168.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A8E0 /* 40.87.168.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A900 /* 40.87.169.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A920 /* 40.87.169.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A92C /* 40.87.169.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A930 /* 40.87.169.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A938 /* 40.87.169.56/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A93C /* 40.87.169.60/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A940 /* 40.87.169.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A960 /* 40.87.169.96/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A966 /* 40.87.169.102/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A968 /* 40.87.169.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A970 /* 40.87.169.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A980 /* 40.87.169.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A988 /* 40.87.169.136/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A98C /* 40.87.169.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A9A0 /* 40.87.169.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A9C0 /* 40.87.169.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AA00 /* 40.87.170.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AA80 /* 40.87.170.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AA90 /* 40.87.170.144/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AA98 /* 40.87.170.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAA0 /* 40.87.170.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAB0 /* 40.87.170.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAB8 /* 40.87.170.184/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAC2 /* 40.87.170.194/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAC4 /* 40.87.170.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAD6 /* 40.87.170.214/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAD8 /* 40.87.170.216/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAE4 /* 40.87.170.228/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAE8 /* 40.87.170.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAF0 /* 40.87.170.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAF8 /* 40.87.170.248/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB02 /* 40.87.171.2/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB04 /* 40.87.171.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB08 /* 40.87.171.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB10 /* 40.87.171.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB24 /* 40.87.171.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB28 /* 40.87.171.40/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB48 /* 40.87.171.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB50 /* 40.87.171.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB60 /* 40.87.171.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB80 /* 40.87.171.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857ABA0 /* 40.87.171.160/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857ABA6 /* 40.87.171.166/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857ABA8 /* 40.87.171.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857ABB0 /* 40.87.171.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857ABC0 /* 40.87.171.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857ABE0 /* 40.87.171.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857ABF0 /* 40.87.171.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857ABF8 /* 40.87.171.248/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1380 /* 40.90.19.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1400 /* 40.90.20.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A82A0 /* 40.90.130.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8480 /* 40.90.132.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8570 /* 40.90.133.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A86C0 /* 40.90.134.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8800 /* 40.90.136.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8AA0 /* 40.90.138.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8CA0 /* 40.90.140.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8CC0 /* 40.90.140.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8FC0 /* 40.90.143.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9040 /* 40.90.144.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9120 /* 40.90.145.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9140 /* 40.90.145.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9460 /* 40.90.148.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9B80 /* 40.90.155.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9D80 /* 40.90.157.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9E80 /* 40.90.158.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0C10 /* 40.91.12.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0C30 /* 40.91.12.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0C40 /* 40.91.12.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0C80 /* 40.91.12.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0CA0 /* 40.91.12.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0CD0 /* 40.91.12.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0CF0 /* 40.91.12.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0D40 /* 40.91.13.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0D60 /* 40.91.13.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0D80 /* 40.91.13.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0DF0 /* 40.91.13.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0E00 /* 40.91.14.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0300 /* 40.93.3.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0C00 /* 40.93.12.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B0000 /* 40.123.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9000 /* 40.123.144.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9040 /* 40.123.144.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9068 /* 40.123.144.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9070 /* 40.123.144.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9080 /* 40.123.144.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9090 /* 40.123.144.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B909C /* 40.123.144.156/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B90A0 /* 40.123.144.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B90C0 /* 40.123.144.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B90E0 /* 40.123.144.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B90F0 /* 40.123.144.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B90F8 /* 40.123.144.248/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B90FC /* 40.123.144.252/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9106 /* 40.123.145.6/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9108 /* 40.123.145.8/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B910C /* 40.123.145.12/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9116 /* 40.123.145.22/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9118 /* 40.123.145.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9120 /* 40.123.145.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9130 /* 40.123.145.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9138 /* 40.123.145.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9144 /* 40.123.145.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9148 /* 40.123.145.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9150 /* 40.123.145.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9160 /* 40.123.145.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9180 /* 40.123.145.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B91A0 /* 40.123.145.160/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B91A6 /* 40.123.145.166/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B91A8 /* 40.123.145.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B91B0 /* 40.123.145.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B91C0 /* 40.123.145.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B91D0 /* 40.123.145.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B91D4 /* 40.123.145.212/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B91DE /* 40.123.145.222/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B91E0 /* 40.123.145.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9200 /* 40.123.146.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9210 /* 40.123.146.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9218 /* 40.123.146.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B921C /* 40.123.146.28/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B922A /* 40.123.146.42/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B922C /* 40.123.146.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9230 /* 40.123.146.48/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9236 /* 40.123.146.54/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9238 /* 40.123.146.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9240 /* 40.123.146.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9280 /* 40.123.146.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92A0 /* 40.123.146.160/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92A4 /* 40.123.146.164/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92B6 /* 40.123.146.182/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92B8 /* 40.123.146.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92C0 /* 40.123.146.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92C8 /* 40.123.146.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92CC /* 40.123.146.204/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92D2 /* 40.123.146.210/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92D4 /* 40.123.146.212/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92D8 /* 40.123.146.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92E0 /* 40.123.146.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9300 /* 40.123.147.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9320 /* 40.123.147.32/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9326 /* 40.123.147.38/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9328 /* 40.123.147.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9330 /* 40.123.147.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9340 /* 40.123.147.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9350 /* 40.123.147.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9354 /* 40.123.147.84/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9368 /* 40.123.147.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9370 /* 40.123.147.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B938A /* 40.123.147.138/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B938C /* 40.123.147.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9390 /* 40.123.147.144/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9394 /* 40.123.147.148/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9398 /* 40.123.147.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B93A0 /* 40.123.147.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B93B0 /* 40.123.147.176/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B93B4 /* 40.123.147.180/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B93B8 /* 40.123.147.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B93C0 /* 40.123.147.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB800 /* 40.123.184.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB840 /* 40.123.184.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB850 /* 40.123.184.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB858 /* 40.123.184.88/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB862 /* 40.123.184.98/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB864 /* 40.123.184.100/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB868 /* 40.123.184.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB870 /* 40.123.184.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB880 /* 40.123.184.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB8A8 /* 40.123.184.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0300 /* 40.126.3.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1800 /* 40.126.24.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34650A00 /* 52.101.10.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34652400 /* 52.101.36.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34653800 /* 52.101.56.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34653C00 /* 52.101.60.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668300 /* 52.102.131.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668A00 /* 52.102.138.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670500 /* 52.103.5.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670C00 /* 52.103.12.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678300 /* 52.103.131.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678A00 /* 52.103.138.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CBA00 /* 52.108.186.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CD800 /* 52.108.216.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D0400 /* 52.109.4.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FE600 /* 52.111.230.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34702700 /* 52.112.39.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34704C00 /* 52.112.76.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34705F00 /* 52.112.95.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34706800 /* 52.112.104.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34706C00 /* 52.112.108.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707400 /* 52.112.116.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34728800 /* 52.114.136.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472B400 /* 52.114.180.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472BA00 /* 52.114.186.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472CE00 /* 52.114.206.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472D000 /* 52.114.208.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3473A000 /* 52.115.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3473E600 /* 52.115.230.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34784000 /* 52.120.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34792000 /* 52.121.32.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A0C00 /* 52.122.12.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B0400 /* 52.123.4.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BBD00 /* 52.123.189.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347D8800 /* 52.125.136.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881D00 /* 52.136.29.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5000 /* 52.138.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A6000 /* 52.138.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FC000 /* 52.143.192.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3493A000 /* 52.147.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A70000 /* 52.167.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B10000 /* 52.177.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B38000 /* 52.179.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B88000 /* 52.184.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A000 /* 52.184.160.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A800 /* 52.184.168.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A850 /* 52.184.168.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A860 /* 52.184.168.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A880 /* 52.184.168.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A900 /* 52.184.169.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8AA00 /* 52.184.170.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8B000 /* 52.184.176.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8C000 /* 52.184.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E18000 /* 52.225.128.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E18800 /* 52.225.136.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E18820 /* 52.225.136.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E18840 /* 52.225.136.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E18900 /* 52.225.137.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1C000 /* 52.225.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89700 /* 52.232.151.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8A000 /* 52.232.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8C000 /* 52.232.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9C00 /* 52.239.156.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9D00 /* 52.239.157.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9D80 /* 52.239.157.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9DC0 /* 52.239.157.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFAC00 /* 52.239.172.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB800 /* 52.239.184.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB8A0 /* 52.239.184.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB8C0 /* 52.239.184.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB920 /* 52.239.185.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC000 /* 52.239.192.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC040 /* 52.239.192.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC060 /* 52.239.192.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC0A0 /* 52.239.192.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC0C0 /* 52.239.192.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC600 /* 52.239.198.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC6C0 /* 52.239.198.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFCE00 /* 52.239.206.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFCF20 /* 52.239.207.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFCF40 /* 52.239.207.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFCF80 /* 52.239.207.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFDE00 /* 52.239.222.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F24000 /* 52.242.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52C00 /* 52.245.44.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52D00 /* 52.245.45.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52D80 /* 52.245.45.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52DA0 /* 52.245.45.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52DC0 /* 52.245.45.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52E00 /* 52.245.46.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52E30 /* 52.245.46.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52E40 /* 52.245.46.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52E70 /* 52.245.46.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52E80 /* 52.245.46.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52EA0 /* 52.245.46.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52EC0 /* 52.245.46.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F70000 /* 52.247.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA8000 /* 52.250.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FB0000 /* 52.251.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FC0000 /* 52.252.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD4000 /* 52.253.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD9400 /* 52.253.148.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD9A00 /* 52.253.154.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FE0000 /* 52.254.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FE4000 /* 52.254.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FE6000 /* 52.254.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FE7000 /* 52.254.112.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41346C00 /* 65.52.108.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41346E00 /* 65.52.110.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41372C10 /* 65.55.44.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41372C20 /* 65.55.44.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41372C40 /* 65.55.44.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41372C60 /* 65.55.44.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41372C80 /* 65.55.44.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41373CBC /* 65.55.60.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376900 /* 65.55.105.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376960 /* 65.55.105.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x413769E0 /* 65.55.105.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376A00 /* 65.55.106.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376A40 /* 65.55.106.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376A80 /* 65.55.106.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376B30 /* 65.55.107.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376B40 /* 65.55.107.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376C00 /* 65.55.108.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137D180 /* 65.55.209.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137D320 /* 65.55.211.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137D540 /* 65.55.213.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137D580 /* 65.55.213.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137D900 /* 65.55.217.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137DB20 /* 65.55.219.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137DB80 /* 65.55.219.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC0000 /* 68.220.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC8000 /* 68.220.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5820 /* 104.44.88.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5860 /* 104.44.88.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5B60 /* 104.44.91.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5DA0 /* 104.44.93.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5E30 /* 104.44.94.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E0000 /* 104.46.0.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E6000 /* 104.46.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EC000 /* 104.46.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682FC800 /* 104.47.200.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D08000 /* 104.208.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D18000 /* 104.209.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D20000 /* 104.210.0.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0CD0 /* 131.253.12.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0CE0 /* 131.253.12.224/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0D10 /* 131.253.13.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0D30 /* 131.253.13.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0D48 /* 131.253.13.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0D50 /* 131.253.13.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0D60 /* 131.253.13.96/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0E10 /* 131.253.14.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0ED0 /* 131.253.14.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0EE0 /* 131.253.14.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0F08 /* 131.253.15.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0F10 /* 131.253.15.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD1800 /* 131.253.24.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD18C0 /* 131.253.24.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD22E0 /* 131.253.34.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD2600 /* 131.253.38.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD2680 /* 131.253.38.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD2800 /* 131.253.40.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x86AADC00 /* 134.170.220.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89740000 /* 137.116.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89744000 /* 137.116.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89746000 /* 137.116.96.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D370780 /* 157.55.7.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D370AC0 /* 157.55.10.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D370B80 /* 157.55.11.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D372500 /* 157.55.37.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D372600 /* 157.55.38.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D373000 /* 157.55.48.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D373200 /* 157.55.50.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D373764 /* 157.55.55.100/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D373768 /* 157.55.55.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D373788 /* 157.55.55.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D373790 /* 157.55.55.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D3737A0 /* 157.55.55.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D380280 /* 157.56.2.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D380300 /* 157.56.3.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACAF0000 /* 172.175.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACB00000 /* 172.176.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFECC000 /* 191.236.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFED8000 /* 191.237.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFE000 /* 191.239.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC1954000 /* 193.149.64.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC71E1000 /* 199.30.16.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC71E1200 /* 199.30.18.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC71E1400 /* 199.30.20.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC71E1600 /* 199.30.22.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC71E1C40 /* 199.30.28.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC71E1C80 /* 199.30.28.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC71E1D00 /* 199.30.29.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D697400 /* 13.105.116.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C2C00 /* 20.60.44.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C2E00 /* 20.60.46.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C9E00 /* 20.60.158.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14480000 /* 20.72.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14584000 /* 20.88.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487F000 /* 20.135.240.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ED700 /* 40.78.215.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28776434 /* 40.119.100.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28776438 /* 40.119.100.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28776440 /* 40.119.100.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C7500 /* 52.108.117.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDC600 /* 52.253.198.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6966B0 /* 13.105.102.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6967B0 /* 13.105.103.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6967E0 /* 13.105.103.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696800 /* 13.105.104.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267700 /* 20.38.119.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0D00 /* 20.47.13.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14314000 /* 20.49.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315000 /* 20.49.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0500 /* 20.60.5.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CC600 /* 20.60.198.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14630000 /* 20.99.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487CE00 /* 20.135.206.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487D000 /* 20.135.208.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963900 /* 20.150.57.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBF80 /* 20.190.191.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28430000 /* 40.67.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28434000 /* 40.67.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28436000 /* 40.67.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28437000 /* 40.67.112.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28525000 /* 40.82.80.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1210 /* 40.90.18.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1F20 /* 40.90.31.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1F40 /* 40.90.31.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8100 /* 40.90.129.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8120 /* 40.90.129.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8140 /* 40.90.129.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28776400 /* 40.119.100.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28776420 /* 40.119.100.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28776430 /* 40.119.100.48/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877645C /* 40.119.100.92/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28776460 /* 40.119.100.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28776480 /* 40.119.100.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28776484 /* 40.119.100.132/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3F80 /* 40.126.63.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EC700 /* 40.126.199.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C7600 /* 52.108.118.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDA400 /* 52.253.164.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDC700 /* 52.253.199.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x049C0000 /* 4.156.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E38000 /* 4.227.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04EC8000 /* 4.236.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F68000 /* 4.246.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04FF0000 /* 4.255.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D448000 /* 13.68.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D484000 /* 13.72.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D520000 /* 13.82.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5A0000 /* 13.90.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5C0000 /* 13.92.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689080 /* 13.104.144.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689880 /* 13.104.152.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68C000 /* 13.104.192.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D300 /* 13.104.211.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D680 /* 13.104.214.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D700 /* 13.104.215.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691100 /* 13.105.17.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691300 /* 13.105.19.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6914C0 /* 13.105.20.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691B00 /* 13.105.27.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691BC0 /* 13.105.27.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6924C0 /* 13.105.36.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694A30 /* 13.105.74.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696230 /* 13.105.98.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696260 /* 13.105.98.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696280 /* 13.105.98.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696820 /* 13.105.104.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696840 /* 13.105.104.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696860 /* 13.105.104.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696A00 /* 13.105.106.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696A20 /* 13.105.106.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696A40 /* 13.105.106.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14190000 /* 20.25.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14266200 /* 20.38.98.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14272000 /* 20.39.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A0000 /* 20.42.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0100 /* 20.47.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1000 /* 20.47.16.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1F00 /* 20.47.31.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F6C00 /* 20.47.108.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F7100 /* 20.47.113.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316800 /* 20.49.104.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14338000 /* 20.51.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14370000 /* 20.55.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0000 /* 20.60.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0200 /* 20.60.2.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0600 /* 20.60.6.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C3C00 /* 20.60.60.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C8000 /* 20.60.128.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C8600 /* 20.60.134.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C9200 /* 20.60.146.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CDC00 /* 20.60.220.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8000 /* 20.62.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14488000 /* 20.72.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144B8000 /* 20.75.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14510000 /* 20.81.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14538000 /* 20.83.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14540000 /* 20.84.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14558000 /* 20.85.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14588000 /* 20.88.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F0000 /* 20.95.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F0200 /* 20.95.2.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F0400 /* 20.95.4.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F0600 /* 20.95.6.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1300 /* 20.95.19.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1500 /* 20.95.21.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1F00 /* 20.95.31.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F2100 /* 20.95.33.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14660000 /* 20.102.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A8000 /* 20.106.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14730000 /* 20.115.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14770000 /* 20.119.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14780000 /* 20.120.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14790000 /* 20.121.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147C0000 /* 20.124.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147F0000 /* 20.127.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14870400 /* 20.135.4.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487C200 /* 20.135.194.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487C400 /* 20.135.196.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14880300 /* 20.136.3.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14880400 /* 20.136.4.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F0C00 /* 20.143.12.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F2200 /* 20.143.34.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962000 /* 20.150.32.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965A00 /* 20.150.90.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14980000 /* 20.152.0.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D0600 /* 20.157.6.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1300 /* 20.157.19.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1800 /* 20.157.24.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2700 /* 20.157.39.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3B00 /* 20.157.59.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3D00 /* 20.157.61.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D5D00 /* 20.157.93.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D6200 /* 20.157.98.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D6400 /* 20.157.100.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D6600 /* 20.157.102.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D6800 /* 20.157.104.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D6D00 /* 20.157.109.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7400 /* 20.157.116.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7C00 /* 20.157.124.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8400 /* 20.157.132.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9300 /* 20.157.147.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DAB00 /* 20.157.171.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DD700 /* 20.157.215.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DD800 /* 20.157.216.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DE700 /* 20.157.231.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DF000 /* 20.157.240.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A38000 /* 20.163.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8C000 /* 20.168.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A98000 /* 20.169.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AC8000 /* 20.172.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B90000 /* 20.185.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8200 /* 20.190.130.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9700 /* 20.190.151.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA1400 /* 20.202.20.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA2700 /* 20.202.39.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA6A00 /* 20.202.106.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA6E00 /* 20.202.110.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA7200 /* 20.202.114.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA7600 /* 20.202.118.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA7800 /* 20.202.120.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA7C00 /* 20.202.124.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA8200 /* 20.202.130.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA8600 /* 20.202.134.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA8A00 /* 20.202.138.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D10000 /* 20.209.0.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D12800 /* 20.209.40.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D13400 /* 20.209.52.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D14A00 /* 20.209.74.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D15400 /* 20.209.84.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D16A00 /* 20.209.106.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E48000 /* 20.228.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E70000 /* 20.231.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E7C000 /* 20.231.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E80000 /* 20.232.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14ED0000 /* 20.237.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F18000 /* 20.241.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F28000 /* 20.242.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F68000 /* 20.246.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14FD0000 /* 20.253.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17600000 /* 23.96.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17622D00 /* 23.98.45.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17641000 /* 23.100.16.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17658000 /* 23.101.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470000 /* 40.71.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C0000 /* 40.76.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EDB00 /* 40.78.219.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE000 /* 40.78.224.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9800 /* 40.79.152.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28509000 /* 40.80.144.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28521800 /* 40.82.24.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28523C00 /* 40.82.60.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855A000 /* 40.85.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28570000 /* 40.87.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A400 /* 40.87.164.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28580000 /* 40.88.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1780 /* 40.90.23.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1880 /* 40.90.24.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1900 /* 40.90.25.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1EC0 /* 40.90.30.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8180 /* 40.90.129.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8260 /* 40.90.130.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A83E0 /* 40.90.131.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8810 /* 40.90.136.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8820 /* 40.90.136.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8960 /* 40.90.137.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8BE0 /* 40.90.139.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8F00 /* 40.90.143.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9240 /* 40.90.146.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9300 /* 40.90.147.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9440 /* 40.90.148.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9620 /* 40.90.150.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285AE000 /* 40.90.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0400 /* 40.91.4.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0200 /* 40.93.2.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0400 /* 40.93.4.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0B00 /* 40.93.11.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28610400 /* 40.97.4.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28703000 /* 40.112.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28720000 /* 40.114.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28752000 /* 40.117.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28754000 /* 40.117.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28758000 /* 40.117.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28790000 /* 40.121.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B8400 /* 40.123.132.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB000 /* 40.123.176.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0200 /* 40.126.2.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1700 /* 40.126.23.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34650400 /* 52.101.4.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34650900 /* 52.101.9.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34651400 /* 52.101.20.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34653300 /* 52.101.51.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34653400 /* 52.101.52.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668100 /* 52.102.129.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668900 /* 52.102.137.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34669F00 /* 52.102.159.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670100 /* 52.103.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670300 /* 52.103.3.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670B00 /* 52.103.11.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678100 /* 52.103.129.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678900 /* 52.103.137.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C1000 /* 52.108.16.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C4F00 /* 52.108.79.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C6900 /* 52.108.105.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C6A00 /* 52.108.106.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D0C00 /* 52.109.12.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FE500 /* 52.111.229.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34701700 /* 52.112.23.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707000 /* 52.112.112.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707B00 /* 52.112.123.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707F00 /* 52.112.127.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34711000 /* 52.113.16.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34728400 /* 52.114.132.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34733600 /* 52.115.54.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34733E00 /* 52.115.62.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3473C000 /* 52.115.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34782000 /* 52.120.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3478E000 /* 52.120.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A0000 /* 52.122.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A0200 /* 52.122.2.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A0400 /* 52.122.4.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A0600 /* 52.122.6.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B0000 /* 52.123.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BBB00 /* 52.123.187.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BBC00 /* 52.123.188.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347D8400 /* 52.125.132.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34884000 /* 52.136.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E0000 /* 52.142.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FCF00 /* 52.143.207.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34920000 /* 52.146.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3493C000 /* 52.147.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34958000 /* 52.149.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34960000 /* 52.150.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34978000 /* 52.151.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34988000 /* 52.152.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349A4000 /* 52.154.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A80000 /* 52.168.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AA0000 /* 52.170.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B30000 /* 52.179.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BA0000 /* 52.186.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BC0000 /* 52.188.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BE0000 /* 52.190.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BF0000 /* 52.191.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFC000 /* 52.191.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E00000 /* 52.224.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E20000 /* 52.226.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89200 /* 52.232.146.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EA8000 /* 52.234.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9800 /* 52.239.152.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA800 /* 52.239.168.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFCFC0 /* 52.239.207.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFD600 /* 52.239.214.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFDC00 /* 52.239.220.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFF600 /* 52.239.246.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFFC00 /* 52.239.252.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F00000 /* 52.240.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F50800 /* 52.245.8.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F56800 /* 52.245.104.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F98000 /* 52.249.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDA000 /* 52.253.160.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF8000 /* 52.255.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41361380 /* 65.54.19.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4AEB0000 /* 74.235.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68298000 /* 104.41.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5B20 /* 104.44.91.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5E10 /* 104.44.94.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5FA0 /* 104.44.95.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5FF0 /* 104.44.95.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D8000 /* 104.45.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DC000 /* 104.45.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D30000 /* 104.211.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89747000 /* 137.116.112.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89752000 /* 137.117.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89754000 /* 137.117.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89874000 /* 137.135.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B6000 /* 138.91.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D38B000 /* 157.56.176.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D2000 /* 168.61.32.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D3000 /* 168.61.48.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E2000 /* 168.62.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EA000 /* 168.62.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACAB2000 /* 172.171.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACAB4000 /* 172.171.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACAB8000 /* 172.171.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACAC0000 /* 172.172.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACAE0000 /* 172.174.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACB20000 /* 172.178.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA2000 /* 191.234.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC0000 /* 191.236.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFED0000 /* 191.237.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE0000 /* 191.238.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCC981200 /* 204.152.18.0/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCC981208 /* 204.152.18.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCC981220 /* 204.152.18.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCC981240 /* 204.152.18.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCC981300 /* 204.152.19.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C99800 /* 20.201.152.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C99B00 /* 20.201.155.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04B00000 /* 4.176.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04B20000 /* 4.178.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04D30000 /* 4.211.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04D40000 /* 4.212.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E90000 /* 4.233.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04FB0000 /* 4.251.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04FB8000 /* 4.251.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04FBC000 /* 4.251.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689C00 /* 13.104.156.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14130000 /* 20.19.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1426C400 /* 20.38.196.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427E800 /* 20.39.232.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427F000 /* 20.39.240.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14288000 /* 20.40.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2000 /* 20.43.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2C00 /* 20.47.44.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F5000 /* 20.47.80.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0D00 /* 20.60.13.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C9C00 /* 20.60.156.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144A0000 /* 20.74.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F5500 /* 20.95.85.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F0000 /* 20.111.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14879200 /* 20.135.146.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14879400 /* 20.135.148.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963D00 /* 20.150.61.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8100 /* 20.157.129.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC2000 /* 20.188.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9300 /* 20.190.147.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB100 /* 20.190.177.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C70000 /* 20.199.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA0000 /* 20.202.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA0500 /* 20.202.5.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA0600 /* 20.202.6.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA0800 /* 20.202.8.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA6800 /* 20.202.104.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA6C00 /* 20.202.108.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA7000 /* 20.202.112.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA7400 /* 20.202.116.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA8000 /* 20.202.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA8400 /* 20.202.132.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA8800 /* 20.202.136.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D10800 /* 20.209.8.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D88000 /* 20.216.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28422000 /* 40.66.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8000 /* 40.79.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9000 /* 40.79.144.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCD00 /* 40.79.205.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FDE00 /* 40.79.222.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28501800 /* 40.80.24.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28598000 /* 40.89.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A82F0 /* 40.90.130.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8400 /* 40.90.132.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8840 /* 40.90.136.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8880 /* 40.90.136.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9380 /* 40.90.147.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A93C0 /* 40.90.147.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1300 /* 40.126.19.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3100 /* 40.126.49.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BC000 /* 51.11.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33670000 /* 51.103.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AC000 /* 51.138.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C3400 /* 52.108.52.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5900 /* 52.108.89.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CA800 /* 52.108.168.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CAA00 /* 52.108.170.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D4400 /* 52.109.68.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FE700 /* 52.111.231.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34706700 /* 52.112.103.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707E00 /* 52.112.126.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470AC00 /* 52.112.172.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470BE00 /* 52.112.190.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470D500 /* 52.112.213.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470D600 /* 52.112.214.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34726800 /* 52.114.104.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34727200 /* 52.114.114.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34737000 /* 52.115.112.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34738000 /* 52.115.128.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34738800 /* 52.115.136.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34795800 /* 52.121.88.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34796000 /* 52.121.96.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3479B200 /* 52.121.178.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3479B400 /* 52.121.180.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A1C00 /* 52.122.28.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B9000 /* 52.123.144.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F8000 /* 52.143.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FD700 /* 52.143.215.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FD800 /* 52.143.216.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF8600 /* 52.239.134.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC200 /* 52.239.194.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFF100 /* 52.239.241.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F57400 /* 52.245.116.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04FBD000 /* 4.251.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04FBE000 /* 4.251.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6896C0 /* 13.104.150.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689700 /* 13.104.151.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1426BC00 /* 20.38.188.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14275000 /* 20.39.80.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1C00 /* 20.47.28.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F6600 /* 20.47.102.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0B00 /* 20.60.11.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CBC00 /* 20.60.188.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F4000 /* 20.111.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14871C00 /* 20.135.28.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961300 /* 20.150.19.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9C00 /* 20.157.156.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9380 /* 20.190.147.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB200 /* 20.190.178.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB000 /* 40.79.176.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FDF00 /* 40.79.223.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28501400 /* 40.80.20.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28506000 /* 40.80.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852E000 /* 40.82.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8420 /* 40.90.132.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A88C0 /* 40.90.136.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A93E0 /* 40.90.147.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1380 /* 40.126.19.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3200 /* 40.126.50.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695800 /* 51.105.88.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338A8000 /* 51.138.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AA000 /* 51.138.160.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CBC00 /* 52.108.188.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CDE00 /* 52.108.222.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D4800 /* 52.109.72.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FFD00 /* 52.111.253.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34726C00 /* 52.114.108.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B9200 /* 52.123.146.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34880800 /* 52.136.8.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881C00 /* 52.136.28.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34888000 /* 52.136.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF8700 /* 52.239.135.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC400 /* 52.239.196.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F57800 /* 52.245.120.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x62410000 /* 98.65.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x62420000 /* 98.66.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689060 /* 13.104.144.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D440 /* 13.104.212.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267300 /* 20.38.115.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2D00 /* 20.47.45.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F5400 /* 20.47.84.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344800 /* 20.52.72.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345020 /* 20.52.80.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1471C000 /* 20.113.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14873800 /* 20.135.56.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963C00 /* 20.150.60.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967000 /* 20.150.112.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DE500 /* 20.157.229.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AAA000 /* 20.170.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AAC000 /* 20.170.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBD00 /* 20.190.189.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DA0000 /* 20.218.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28524800 /* 40.82.72.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1F00 /* 40.90.31.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A80F0 /* 40.90.128.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28776000 /* 40.119.96.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3D00 /* 40.126.61.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EC600 /* 40.126.198.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33740000 /* 51.116.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744000 /* 51.116.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374C800 /* 51.116.200.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D000 /* 51.116.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C4C00 /* 52.108.76.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C6100 /* 52.108.97.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D6600 /* 52.109.102.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FFE00 /* 52.111.254.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472F000 /* 52.114.240.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDAC00 /* 52.253.172.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x62430000 /* 98.67.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04B40000 /* 4.180.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04B60000 /* 4.182.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04B83800 /* 4.184.56.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04B84000 /* 4.184.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04B88000 /* 4.184.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04B90000 /* 4.185.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6890E0 /* 13.104.144.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689180 /* 13.104.145.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D480 /* 13.104.212.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693D80 /* 13.105.61.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694200 /* 13.105.66.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694A60 /* 13.105.74.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694AC0 /* 13.105.74.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267600 /* 20.38.118.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1B00 /* 20.47.27.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F4100 /* 20.47.65.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F7000 /* 20.47.112.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14340000 /* 20.52.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344000 /* 20.52.64.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345000 /* 20.52.80.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345040 /* 20.52.80.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345800 /* 20.52.88.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14346000 /* 20.52.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14348000 /* 20.52.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1600 /* 20.60.22.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144F0000 /* 20.79.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F4600 /* 20.95.70.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F4E00 /* 20.95.78.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F5000 /* 20.95.80.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14710000 /* 20.113.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14718000 /* 20.113.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14879800 /* 20.135.152.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14879C00 /* 20.135.156.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963600 /* 20.150.54.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967D00 /* 20.150.125.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D4B00 /* 20.157.75.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D5900 /* 20.157.89.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D5E00 /* 20.157.94.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DA000 /* 20.157.160.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DB700 /* 20.157.183.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AA0000 /* 20.170.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AA8000 /* 20.170.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBE40 /* 20.190.190.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D12000 /* 20.209.32.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DA4000 /* 20.218.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DA8000 /* 20.218.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28524400 /* 40.82.68.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8130 /* 40.90.129.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8C00 /* 40.90.140.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9320 /* 40.90.147.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A97A0 /* 40.90.151.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28775C00 /* 40.119.92.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3E40 /* 40.126.62.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EC500 /* 40.126.197.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33746000 /* 51.116.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33748000 /* 51.116.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374C000 /* 51.116.192.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374E000 /* 51.116.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CB200 /* 52.108.178.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CC700 /* 52.108.199.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D6800 /* 52.109.104.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FFF00 /* 52.111.255.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472F400 /* 52.114.244.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDA900 /* 52.253.169.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDAA00 /* 52.253.170.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x62438000 /* 98.67.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C98F00 /* 20.201.143.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C99000 /* 20.201.144.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C99A00 /* 20.201.154.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C99C00 /* 20.201.156.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696A30 /* 13.105.106.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696A60 /* 13.105.106.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696A80 /* 13.105.106.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14261200 /* 20.38.18.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C5E00 /* 20.60.94.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487FA00 /* 20.135.250.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487FC00 /* 20.135.252.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F1A00 /* 20.143.26.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DA900 /* 20.157.169.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DC700 /* 20.157.199.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C98100 /* 20.201.129.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C98200 /* 20.201.130.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D90000 /* 20.217.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92000 /* 20.217.32.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92800 /* 20.217.40.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93000 /* 20.217.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94000 /* 20.217.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BAD00 /* 40.123.173.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C7900 /* 52.108.121.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D6A00 /* 52.109.106.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FC000 /* 52.111.192.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E80000 /* 4.232.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E88000 /* 4.232.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C000 /* 4.232.192.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696990 /* 13.105.105.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6969C0 /* 13.105.105.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14261600 /* 20.38.22.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F0E00 /* 20.143.14.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F1800 /* 20.143.24.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14980800 /* 20.152.8.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DC800 /* 20.157.200.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DED00 /* 20.157.237.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D15000 /* 20.209.80.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D15600 /* 20.209.86.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28788400 /* 40.120.132.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28788410 /* 40.120.132.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C7A00 /* 52.108.122.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D5000 /* 52.109.80.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FC100 /* 52.111.193.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDD800 /* 52.253.216.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDDA00 /* 52.253.218.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04BD0000 /* 4.189.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04BE0000 /* 4.190.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04D60000 /* 4.214.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04D80000 /* 4.216.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F10000 /* 4.241.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D478000 /* 13.71.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D490000 /* 13.73.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E0000 /* 13.78.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689540 /* 13.104.149.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689680 /* 13.104.150.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68DD00 /* 13.104.221.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691240 /* 13.105.18.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14120000 /* 20.18.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14129000 /* 20.18.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412C000 /* 20.18.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141B0000 /* 20.27.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141B8000 /* 20.27.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14256000 /* 20.37.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267400 /* 20.38.116.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14285800 /* 20.40.88.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14286000 /* 20.40.96.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4000 /* 20.43.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C8000 /* 20.44.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E7000 /* 20.46.112.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142EA000 /* 20.46.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0C00 /* 20.47.12.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F6500 /* 20.47.101.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14300000 /* 20.48.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CAC00 /* 20.60.172.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CF800 /* 20.60.248.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143F8000 /* 20.63.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144E0000 /* 20.78.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144EC000 /* 20.78.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590000 /* 20.89.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14598000 /* 20.89.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F8A00 /* 20.95.138.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14876600 /* 20.135.102.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14876800 /* 20.135.104.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965500 /* 20.150.85.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966900 /* 20.150.105.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D0C00 /* 20.157.12.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2600 /* 20.157.38.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9000 /* 20.157.144.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DE000 /* 20.157.224.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC0000 /* 20.188.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8D80 /* 20.190.141.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA600 /* 20.190.166.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA000 /* 20.191.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C28000 /* 20.194.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA3600 /* 20.202.54.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA3A00 /* 20.202.58.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA4200 /* 20.202.66.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA4E00 /* 20.202.78.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA5600 /* 20.202.86.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA5B00 /* 20.202.91.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA5F00 /* 20.202.95.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA7F00 /* 20.202.127.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D11600 /* 20.209.22.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D20000 /* 20.210.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D2C000 /* 20.210.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DE0000 /* 20.222.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F30000 /* 20.243.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17623940 /* 23.98.57.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17646000 /* 23.100.96.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17664000 /* 23.102.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB800 /* 40.79.184.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC000 /* 40.79.192.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCE60 /* 40.79.206.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FD000 /* 40.79.208.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851C000 /* 40.81.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28523000 /* 40.82.48.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857C800 /* 40.87.200.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A10A0 /* 40.90.16.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8050 /* 40.90.128.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8440 /* 40.90.132.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8E00 /* 40.90.142.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8EC0 /* 40.90.142.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A94E0 /* 40.90.148.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A98C0 /* 40.90.152.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9E00 /* 40.90.158.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28738000 /* 40.115.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0D80 /* 40.126.13.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2600 /* 40.126.38.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CBF00 /* 52.108.191.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CE400 /* 52.108.228.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D3400 /* 52.109.52.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FE800 /* 52.111.232.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34704A00 /* 52.112.74.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707D00 /* 52.112.125.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470B000 /* 52.112.176.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470B800 /* 52.112.184.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34714E00 /* 52.113.78.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34716600 /* 52.113.102.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34716B00 /* 52.113.107.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34718500 /* 52.113.133.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34719A00 /* 52.113.154.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34722000 /* 52.114.32.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34732F00 /* 52.115.47.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34797800 /* 52.121.120.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34799800 /* 52.121.152.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3479A000 /* 52.121.160.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3479A400 /* 52.121.164.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A2000 /* 52.122.32.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BA800 /* 52.123.168.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881F00 /* 52.136.31.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348CC000 /* 52.140.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B6000 /* 52.155.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349C2000 /* 52.156.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B98000 /* 52.185.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89B00 /* 52.232.155.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9000 /* 52.239.144.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F32000 /* 52.243.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52400 /* 52.245.36.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F6A000 /* 52.246.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD6000 /* 52.253.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDA100 /* 52.253.161.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829A000 /* 104.41.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C58E0 /* 104.44.88.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5BE0 /* 104.44.91.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5E70 /* 104.44.94.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682ED000 /* 104.46.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B0000 /* 138.91.0.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDF000 /* 191.237.240.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04BE8000 /* 4.190.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49E800 /* 13.73.232.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696AA0 /* 13.105.106.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696AC0 /* 13.105.106.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696AE0 /* 13.105.106.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14128000 /* 20.18.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412A000 /* 20.18.160.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B000 /* 20.18.176.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141B4000 /* 20.27.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141BC000 /* 20.27.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427B000 /* 20.39.176.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0A00 /* 20.47.10.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F4200 /* 20.47.66.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F6300 /* 20.47.99.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0C00 /* 20.60.12.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CBA00 /* 20.60.186.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143FC000 /* 20.63.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144E8000 /* 20.78.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1459C000 /* 20.89.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F8000 /* 20.95.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14873000 /* 20.135.48.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14960A00 /* 20.150.10.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14980A00 /* 20.152.10.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3800 /* 20.157.56.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DF200 /* 20.157.242.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC000 /* 20.189.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8D00 /* 20.190.141.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA500 /* 20.190.165.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C99500 /* 20.201.149.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C99600 /* 20.201.150.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA2A00 /* 20.202.42.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA3200 /* 20.202.50.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA3400 /* 20.202.52.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA4F00 /* 20.202.79.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA5700 /* 20.202.87.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA5800 /* 20.202.88.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA5C00 /* 20.202.92.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA6000 /* 20.202.96.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D11000 /* 20.209.16.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D28000 /* 20.210.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17623800 /* 23.98.56.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17646800 /* 23.100.104.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A4000 /* 40.74.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A8000 /* 40.74.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FD100 /* 40.79.209.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503800 /* 40.80.56.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B000 /* 40.80.176.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851B000 /* 40.81.176.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28526400 /* 40.82.100.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857CC00 /* 40.87.204.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1220 /* 40.90.18.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1BC0 /* 40.90.27.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1C00 /* 40.90.28.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8900 /* 40.90.137.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8ED0 /* 40.90.142.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9C00 /* 40.90.156.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0D00 /* 40.126.13.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2500 /* 40.126.37.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C2E00 /* 52.108.46.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5600 /* 52.108.86.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D8400 /* 52.109.132.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FE900 /* 52.111.233.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34704900 /* 52.112.73.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34705800 /* 52.112.88.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34710E00 /* 52.113.14.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34714800 /* 52.113.72.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34715700 /* 52.113.87.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34716A00 /* 52.113.106.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34719B00 /* 52.113.155.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34722400 /* 52.114.36.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472D100 /* 52.114.209.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34736400 /* 52.115.100.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34736800 /* 52.115.104.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34737200 /* 52.115.114.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3473EB00 /* 52.115.235.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3473EC00 /* 52.115.236.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34795000 /* 52.121.80.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34795400 /* 52.121.84.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34797400 /* 52.121.116.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3479A500 /* 52.121.165.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3479A800 /* 52.121.168.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A2800 /* 52.122.40.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BAA00 /* 52.123.170.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BAC00 /* 52.123.172.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34934000 /* 52.147.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF8000 /* 52.175.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89E00 /* 52.232.158.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9200 /* 52.239.146.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F55C00 /* 52.245.92.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4AE20000 /* 74.226.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5C00 /* 104.44.92.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5E80 /* 104.44.94.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EE000 /* 104.46.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D68000 /* 104.214.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D70000 /* 104.215.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B1000 /* 138.91.16.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE92000 /* 191.233.32.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDEC00 /* 191.237.236.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4400 /* 191.238.68.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE5000 /* 191.238.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE5800 /* 191.238.88.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE5C00 /* 191.238.92.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEF6000 /* 191.239.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F08000 /* 4.240.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CAA00 /* 20.60.170.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14872600 /* 20.135.38.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14872E00 /* 20.135.46.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964000 /* 20.150.64.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966D00 /* 20.150.109.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9800 /* 20.157.152.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DC900 /* 20.157.201.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DE900 /* 20.157.233.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBF00 /* 20.190.191.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02000 /* 20.192.32.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03000 /* 20.192.48.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06800 /* 20.192.104.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C07000 /* 20.192.112.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0B000 /* 20.192.176.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0C000 /* 20.192.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E000 /* 20.192.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1D000 /* 20.193.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF0000 /* 20.207.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCD50 /* 40.79.205.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCD80 /* 40.79.205.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28777800 /* 40.119.120.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3F00 /* 40.126.63.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287ECD00 /* 40.126.205.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C7B00 /* 52.108.123.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDC000 /* 52.253.192.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4AE14000 /* 74.225.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04BB0000 /* 4.187.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694B30 /* 13.105.75.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694B60 /* 13.105.75.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694B80 /* 13.105.75.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C3600 /* 20.60.54.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14876000 /* 20.135.96.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14876400 /* 20.135.100.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964100 /* 20.150.65.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966100 /* 20.150.97.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9900 /* 20.157.153.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DCA00 /* 20.157.202.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DEA00 /* 20.157.234.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBF40 /* 20.190.191.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03800 /* 20.192.56.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A000 /* 20.192.160.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0F000 /* 20.192.240.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1A000 /* 20.193.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C000 /* 20.193.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CFE000 /* 20.207.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F48000 /* 20.244.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400000 /* 40.64.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28777C00 /* 40.119.124.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3F40 /* 40.126.63.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287ECE00 /* 40.126.206.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F2000 /* 40.127.32.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C7C00 /* 52.108.124.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDC100 /* 52.253.193.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDC200 /* 52.253.194.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04B50000 /* 4.181.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04B70000 /* 4.183.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04D90000 /* 4.217.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04DA0000 /* 4.218.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E60000 /* 4.230.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6881C0 /* 13.104.129.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68DF80 /* 13.104.223.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691400 /* 13.105.20.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696070 /* 13.105.96.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696120 /* 13.105.97.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696140 /* 13.105.97.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427B800 /* 20.39.184.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427C000 /* 20.39.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294000 /* 20.41.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1800 /* 20.44.24.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2E00 /* 20.47.46.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F5A00 /* 20.47.90.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1000 /* 20.60.16.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CC800 /* 20.60.200.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F8C00 /* 20.95.140.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14876C00 /* 20.135.108.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14877000 /* 20.135.112.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14960400 /* 20.150.4.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8C00 /* 20.157.140.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9080 /* 20.190.144.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9480 /* 20.190.148.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB400 /* 20.190.180.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C20000 /* 20.194.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24000 /* 20.194.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C25000 /* 20.194.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C26000 /* 20.194.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C44000 /* 20.196.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C48000 /* 20.196.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C000 /* 20.200.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D12E00 /* 20.209.46.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D64000 /* 20.214.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D68000 /* 20.214.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F90000 /* 20.249.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FDD00 /* 40.79.221.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28502400 /* 40.80.36.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28528000 /* 40.82.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A11E0 /* 40.90.17.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A80B0 /* 40.90.128.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8380 /* 40.90.131.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8B80 /* 40.90.139.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9C40 /* 40.90.156.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1080 /* 40.126.16.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1480 /* 40.126.20.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3400 /* 40.126.52.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C3000 /* 52.108.48.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5700 /* 52.108.87.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D2C00 /* 52.109.44.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FC200 /* 52.111.194.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34719D00 /* 52.113.157.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34722C00 /* 52.114.44.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34736A00 /* 52.115.106.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34736C00 /* 52.115.108.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3479AC00 /* 52.121.172.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3479B000 /* 52.121.176.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A2400 /* 52.122.36.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BAD00 /* 52.123.173.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D0000 /* 52.141.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E70000 /* 52.231.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89100 /* 52.232.145.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9400 /* 52.239.148.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA4C0 /* 52.239.164.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFBE80 /* 52.239.190.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F57000 /* 52.245.112.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDAD00 /* 52.253.173.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDAE00 /* 52.253.174.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5AA0 /* 104.44.90.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F30000 /* 4.243.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689D00 /* 13.104.157.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427A800 /* 20.39.168.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2F00 /* 20.47.47.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F5B00 /* 20.47.91.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CCA00 /* 20.60.202.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14871A00 /* 20.135.26.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14871E00 /* 20.135.30.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14960E00 /* 20.150.14.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8900 /* 20.157.137.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9400 /* 20.190.148.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB300 /* 20.190.179.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C88000 /* 20.200.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA2800 /* 20.202.40.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D60000 /* 20.214.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FDC00 /* 40.79.220.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28502000 /* 40.80.32.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A800 /* 40.80.168.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850E000 /* 40.80.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859C000 /* 40.89.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A83A0 /* 40.90.131.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8BA0 /* 40.90.139.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9D20 /* 40.90.157.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1400 /* 40.126.20.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3300 /* 40.126.51.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CBE00 /* 52.108.190.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CE200 /* 52.108.226.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D3000 /* 52.109.48.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FEA00 /* 52.111.234.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34716E00 /* 52.113.110.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34719C00 /* 52.113.156.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34723000 /* 52.114.48.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BAE00 /* 52.123.174.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34936000 /* 52.147.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E78000 /* 52.231.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89000 /* 52.232.144.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA500 /* 52.239.165.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA5A0 /* 52.239.165.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFBEC0 /* 52.239.190.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F56400 /* 52.245.100.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4AE30000 /* 74.227.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5EE0 /* 104.44.94.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6968C0 /* 13.105.104.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6968E0 /* 13.105.104.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696900 /* 13.105.105.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14110000 /* 20.17.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114000 /* 20.17.64.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14261500 /* 20.38.21.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DEE00 /* 20.157.238.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C99200 /* 20.201.146.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D14200 /* 20.209.66.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D14E00 /* 20.209.78.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28788000 /* 40.120.128.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28788020 /* 40.120.128.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28788030 /* 40.120.128.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28788038 /* 40.120.128.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DCB00 /* 20.157.203.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C98C00 /* 20.201.140.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C98E00 /* 20.201.142.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C7D00 /* 52.108.125.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14261700 /* 20.38.23.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C6000 /* 20.60.96.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F1E00 /* 20.143.30.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14980C00 /* 20.152.12.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DCC00 /* 20.157.204.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DF100 /* 20.157.241.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C7E00 /* 52.108.126.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D5200 /* 52.109.82.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FC300 /* 52.111.195.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDCF00 /* 52.253.207.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDD000 /* 52.253.208.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170000 /* 158.23.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DCD00 /* 20.157.205.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C7F00 /* 52.108.127.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D5400 /* 52.109.84.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FC400 /* 52.111.196.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDD200 /* 52.253.210.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDD400 /* 52.253.212.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691A00 /* 13.105.26.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691C10 /* 13.105.28.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691D00 /* 13.105.29.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D692540 /* 13.105.37.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D692580 /* 13.105.37.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696610 /* 13.105.102.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696640 /* 13.105.102.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1419C000 /* 20.25.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14210000 /* 20.33.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246000 /* 20.36.96.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14298000 /* 20.41.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0300 /* 20.47.3.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0F00 /* 20.47.15.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F6B00 /* 20.47.107.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F7700 /* 20.47.119.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317000 /* 20.49.112.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330000 /* 20.51.0.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143BC000 /* 20.59.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1C00 /* 20.60.28.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C5200 /* 20.60.82.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14428000 /* 20.66.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14482000 /* 20.72.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14500000 /* 20.80.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14580000 /* 20.88.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F0700 /* 20.95.7.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F0800 /* 20.95.8.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1200 /* 20.95.18.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14620000 /* 20.98.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1466C000 /* 20.102.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1470A000 /* 20.112.160.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1470B000 /* 20.112.176.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DA000 /* 20.125.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DC000 /* 20.125.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DE000 /* 20.125.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14870C00 /* 20.135.12.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14874600 /* 20.135.70.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487FE00 /* 20.135.254.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F0800 /* 20.143.8.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961100 /* 20.150.17.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961900 /* 20.150.25.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963100 /* 20.150.49.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964300 /* 20.150.67.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967E00 /* 20.150.126.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2F00 /* 20.157.47.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D6500 /* 20.157.101.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DAC00 /* 20.157.172.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8700 /* 20.190.135.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9C00 /* 20.190.156.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C98700 /* 20.201.135.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C98800 /* 20.201.136.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D12600 /* 20.209.38.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DDC000 /* 20.221.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EC4000 /* 20.236.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F10000 /* 20.241.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17608000 /* 23.96.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17623000 /* 23.98.48.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17644800 /* 23.100.72.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764E000 /* 23.100.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765A000 /* 23.101.160.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D83E0 /* 40.77.131.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8860 /* 40.77.136.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D89C0 /* 40.77.137.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8B00 /* 40.77.139.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DAF00 /* 40.77.175.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB000 /* 40.77.176.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB680 /* 40.77.182.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB700 /* 40.77.183.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DBC00 /* 40.77.188.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DC400 /* 40.77.196.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DC640 /* 40.77.198.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DC880 /* 40.77.200.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE000 /* 40.77.224.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE020 /* 40.77.224.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE700 /* 40.77.231.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DEA00 /* 40.77.234.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DEC20 /* 40.77.236.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DECA0 /* 40.77.236.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DED00 /* 40.77.237.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DF880 /* 40.77.248.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DFE00 /* 40.77.254.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DFFC0 /* 40.77.255.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ED040 /* 40.78.208.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EDE00 /* 40.78.222.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B800 /* 40.80.184.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28512000 /* 40.81.32.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AC00 /* 40.87.172.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1340 /* 40.90.19.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8460 /* 40.90.132.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8580 /* 40.90.133.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8740 /* 40.90.135.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8C80 /* 40.90.140.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9020 /* 40.90.144.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9BC0 /* 40.90.155.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B1800 /* 40.91.24.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28740000 /* 40.116.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0700 /* 40.126.7.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1C00 /* 40.126.28.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CB600 /* 52.108.182.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CCB00 /* 52.108.203.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D1000 /* 52.109.16.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FEB00 /* 52.111.235.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34705E00 /* 52.112.94.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3471C600 /* 52.113.198.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472A800 /* 52.114.168.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BBE00 /* 52.123.190.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D8000 /* 52.141.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F4000 /* 52.159.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A20000 /* 52.162.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89C00 /* 52.232.156.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED8000 /* 52.237.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9500 /* 52.239.149.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFBA00 /* 52.239.186.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFFD00 /* 52.239.253.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F08000 /* 52.240.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F54800 /* 52.245.72.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FC8000 /* 52.252.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41340000 /* 65.52.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41343000 /* 65.52.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41346800 /* 65.52.104.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41346A00 /* 65.52.106.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134C000 /* 65.52.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134E800 /* 65.52.232.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134F000 /* 65.52.240.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41373CB0 /* 65.55.60.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x413769C0 /* 65.55.105.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376AD0 /* 65.55.106.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376AE0 /* 65.55.106.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376D00 /* 65.55.109.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137D300 /* 65.55.211.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137D400 /* 65.55.212.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137D480 /* 65.55.212.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137D500 /* 65.55.213.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137DA00 /* 65.55.218.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137DB00 /* 65.55.219.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5880 /* 104.44.88.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5B80 /* 104.44.91.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5E40 /* 104.44.94.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682FDC00 /* 104.47.220.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0C10 /* 131.253.12.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0C28 /* 131.253.12.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0C30 /* 131.253.12.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0CC0 /* 131.253.12.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0CF8 /* 131.253.12.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0D00 /* 131.253.13.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0D20 /* 131.253.13.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0E20 /* 131.253.14.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0EA0 /* 131.253.14.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0EF8 /* 131.253.14.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0F20 /* 131.253.15.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0FD0 /* 131.253.15.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0FE0 /* 131.253.15.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD1900 /* 131.253.25.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD1B00 /* 131.253.27.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD2480 /* 131.253.36.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD2620 /* 131.253.38.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD26E0 /* 131.253.38.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD2810 /* 131.253.40.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD2820 /* 131.253.40.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD2860 /* 131.253.40.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD28C0 /* 131.253.40.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D371800 /* 157.55.24.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D373700 /* 157.55.55.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D373720 /* 157.55.55.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D373798 /* 157.55.55.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D3737B0 /* 157.55.55.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D3737C8 /* 157.55.55.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D3737D8 /* 157.55.55.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D373CE0 /* 157.55.60.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D374000 /* 157.55.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D376A80 /* 157.55.106.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D376E00 /* 157.55.110.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D377300 /* 157.55.115.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D378800 /* 157.55.136.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D379700 /* 157.55.151.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37A000 /* 157.55.160.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37D000 /* 157.55.208.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37F800 /* 157.55.248.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D380800 /* 157.56.8.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D3818A0 /* 157.56.24.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D3818C0 /* 157.56.24.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D381C00 /* 157.56.28.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D38D800 /* 157.56.216.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E6000 /* 168.62.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EE000 /* 168.62.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACB70000 /* 172.183.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE99000 /* 191.233.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC8000 /* 191.236.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC71E1F00 /* 199.30.31.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCC4FB400 /* 204.79.180.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2EC1C0 /* 207.46.193.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2EC1E0 /* 207.46.193.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2EC680 /* 207.46.198.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2EC860 /* 207.46.200.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2EC8B0 /* 207.46.200.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2ECA80 /* 207.46.202.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2ECD00 /* 207.46.205.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF44AE28 /* 207.68.174.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF44AEB8 /* 207.68.174.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ED400 /* 40.78.212.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28500400 /* 40.80.4.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C8000 /* 52.108.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04CF0000 /* 4.207.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04D00000 /* 4.208.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04D20000 /* 4.210.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E78000 /* 4.231.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F58000 /* 4.245.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D458000 /* 13.69.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D46C000 /* 13.70.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A0000 /* 13.74.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4F0000 /* 13.79.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5E4000 /* 13.94.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689400 /* 13.104.148.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689580 /* 13.104.149.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689600 /* 13.104.150.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D0A0 /* 13.104.208.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D200 /* 13.104.210.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691200 /* 13.105.18.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691500 /* 13.105.21.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691C30 /* 13.105.28.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6925C0 /* 13.105.37.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693CC0 /* 13.105.60.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694300 /* 13.105.67.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696080 /* 13.105.96.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140D8000 /* 20.13.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14264000 /* 20.38.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14266600 /* 20.38.102.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0800 /* 20.47.8.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1400 /* 20.47.20.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2000 /* 20.47.32.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F6F00 /* 20.47.111.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F7500 /* 20.47.117.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324000 /* 20.50.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14325000 /* 20.50.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14360000 /* 20.54.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1300 /* 20.60.19.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C2800 /* 20.60.40.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C9000 /* 20.60.144.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CCC00 /* 20.60.204.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CF600 /* 20.60.246.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14438000 /* 20.67.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14528000 /* 20.82.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145D0000 /* 20.93.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F5800 /* 20.95.88.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14690000 /* 20.105.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146B8000 /* 20.107.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147B0000 /* 20.123.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14871400 /* 20.135.20.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14878600 /* 20.135.134.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14878800 /* 20.135.136.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F0300 /* 20.143.3.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F0D00 /* 20.143.13.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961A00 /* 20.150.26.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962F80 /* 20.150.47.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963000 /* 20.150.48.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964B00 /* 20.150.75.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965400 /* 20.150.84.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966800 /* 20.150.104.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1B00 /* 20.157.27.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3C00 /* 20.157.60.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D6F00 /* 20.157.111.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7700 /* 20.157.119.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7F00 /* 20.157.127.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9F00 /* 20.157.159.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DB300 /* 20.157.179.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DD900 /* 20.157.217.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DF400 /* 20.157.244.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DF700 /* 20.157.247.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A60000 /* 20.166.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8100 /* 20.190.129.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9F00 /* 20.190.159.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BF0000 /* 20.191.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA0100 /* 20.202.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA7700 /* 20.202.119.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA8D00 /* 20.202.141.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA8E00 /* 20.202.142.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA9000 /* 20.202.144.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA9400 /* 20.202.148.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA9700 /* 20.202.151.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA9900 /* 20.202.153.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA9B00 /* 20.202.155.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA9D00 /* 20.202.157.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA9F00 /* 20.202.159.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CAA100 /* 20.202.161.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CAA300 /* 20.202.163.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CAA500 /* 20.202.165.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D10E00 /* 20.209.14.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D13A00 /* 20.209.58.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D16000 /* 20.209.96.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D16800 /* 20.209.104.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DF0000 /* 20.223.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EA0000 /* 20.234.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EE0000 /* 20.238.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17643000 /* 23.100.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17648000 /* 23.100.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17653000 /* 23.101.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17660000 /* 23.102.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2843E000 /* 40.67.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28450000 /* 40.69.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28454000 /* 40.69.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2845C000 /* 40.69.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8500 /* 40.77.133.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8820 /* 40.77.136.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8850 /* 40.77.136.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA500 /* 40.77.165.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DAE00 /* 40.77.174.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DAFA0 /* 40.77.175.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB660 /* 40.77.182.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE280 /* 40.77.226.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE500 /* 40.77.229.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DEAA0 /* 40.77.234.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DEC00 /* 40.77.236.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DECB0 /* 40.77.236.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DFF00 /* 40.77.255.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ED300 /* 40.78.211.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCC00 /* 40.79.204.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCC20 /* 40.79.204.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCC40 /* 40.79.204.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28550000 /* 40.85.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28558000 /* 40.85.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28578000 /* 40.87.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857BC00 /* 40.87.188.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A11C0 /* 40.90.17.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1940 /* 40.90.25.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1980 /* 40.90.25.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1F80 /* 40.90.31.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8010 /* 40.90.128.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A81C0 /* 40.90.129.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A82E0 /* 40.90.130.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8540 /* 40.90.133.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A88B0 /* 40.90.136.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A89C0 /* 40.90.137.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8C40 /* 40.90.140.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8D60 /* 40.90.141.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8D80 /* 40.90.141.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9100 /* 40.90.145.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A91E0 /* 40.90.145.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9360 /* 40.90.147.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A94A0 /* 40.90.148.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9580 /* 40.90.149.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9980 /* 40.90.153.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B1400 /* 40.91.20.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B2000 /* 40.91.32.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D4000 /* 40.93.64.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28702400 /* 40.112.36.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28702540 /* 40.112.37.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28704000 /* 40.112.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28710000 /* 40.113.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28714000 /* 40.113.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28736000 /* 40.115.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9C00 /* 40.123.156.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0100 /* 40.126.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1F00 /* 40.126.31.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F6000 /* 40.127.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F8000 /* 40.127.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33684000 /* 51.104.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33688000 /* 51.104.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AB000 /* 51.138.176.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AE000 /* 51.138.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34654100 /* 52.101.65.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34654200 /* 52.101.66.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34654400 /* 52.101.68.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34655400 /* 52.101.84.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3466A000 /* 52.102.160.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34672000 /* 52.103.32.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3467A000 /* 52.103.160.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CAE00 /* 52.108.174.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CB000 /* 52.108.176.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CC400 /* 52.108.196.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CF000 /* 52.108.240.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D4C00 /* 52.109.76.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FEC00 /* 52.111.236.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34706500 /* 52.112.101.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470BF00 /* 52.112.191.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470E500 /* 52.112.229.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470E800 /* 52.112.232.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470EC00 /* 52.112.236.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34712800 /* 52.113.40.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34713000 /* 52.113.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34717000 /* 52.113.112.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34718800 /* 52.113.136.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3471CD00 /* 52.113.205.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34724C00 /* 52.114.76.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34726000 /* 52.114.96.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34727800 /* 52.114.120.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472E700 /* 52.114.231.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472E900 /* 52.114.233.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472F800 /* 52.114.248.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34731000 /* 52.115.16.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34788800 /* 52.120.136.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3478C000 /* 52.120.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34791000 /* 52.121.16.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34793000 /* 52.121.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A1800 /* 52.122.24.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B0600 /* 52.123.6.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B8800 /* 52.123.136.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B8C00 /* 52.123.140.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347D8A00 /* 52.125.138.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A8000 /* 52.138.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E4000 /* 52.142.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FC300 /* 52.143.195.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FD100 /* 52.143.209.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928000 /* 52.146.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B4000 /* 52.155.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B8000 /* 52.155.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CC000 /* 52.156.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349E0000 /* 52.158.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A40000 /* 52.164.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A90000 /* 52.169.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B28000 /* 52.178.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89400 /* 52.232.148.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EC0000 /* 52.236.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF8800 /* 52.239.136.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFCD00 /* 52.239.205.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFF800 /* 52.239.248.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52800 /* 52.245.40.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F55800 /* 52.245.88.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41344000 /* 65.52.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134E000 /* 65.52.224.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DB0000 /* 68.219.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DB8000 /* 68.219.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DBC000 /* 68.219.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4AEA0000 /* 74.234.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x5EF55800 /* 94.245.88.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x5EF56800 /* 94.245.104.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x5EF57560 /* 94.245.117.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x5EF57600 /* 94.245.118.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x5EF57880 /* 94.245.120.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x5EF57A00 /* 94.245.122.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x5EF57B90 /* 94.245.123.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x5EF57BB0 /* 94.245.123.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68294000 /* 104.41.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829C000 /* 104.41.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5840 /* 104.44.88.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5B40 /* 104.44.91.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5CC0 /* 104.44.92.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5E20 /* 104.44.94.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D5000 /* 104.45.80.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D6000 /* 104.45.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E0800 /* 104.46.8.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E4000 /* 104.46.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682FDA00 /* 104.47.218.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD2850 /* 131.253.40.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x86AA5040 /* 134.170.80.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974E000 /* 137.116.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89878000 /* 137.135.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B3000 /* 138.91.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D370300 /* 157.55.3.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D370AA0 /* 157.55.10.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D370AB0 /* 157.55.10.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D370D80 /* 157.55.13.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D376B00 /* 157.55.107.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37CC80 /* 157.55.204.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D5000 /* 168.61.80.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D6000 /* 168.61.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F2000 /* 168.63.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F4000 /* 168.63.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F5000 /* 168.63.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F5C00 /* 168.63.92.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB8000 /* 191.235.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBC000 /* 191.235.192.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBD000 /* 191.235.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBFF00 /* 191.235.255.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDC000 /* 191.237.192.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDC200 /* 191.237.194.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDC400 /* 191.237.196.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDD000 /* 191.237.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE6000 /* 191.238.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFD000 /* 191.239.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC1955800 /* 193.149.88.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04B10000 /* 4.177.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04B30000 /* 4.179.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04DB0000 /* 4.219.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04DC0000 /* 4.220.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04EB0000 /* 4.235.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689B20 /* 13.104.155.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689E00 /* 13.104.158.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689E20 /* 13.104.158.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68DA00 /* 13.104.218.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696160 /* 13.105.97.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696180 /* 13.105.97.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267800 /* 20.38.120.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3000 /* 20.47.48.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CCE00 /* 20.60.206.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F4100 /* 20.95.65.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640000 /* 20.100.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14648000 /* 20.100.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14879E00 /* 20.135.158.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487A000 /* 20.135.160.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963500 /* 20.150.53.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967900 /* 20.150.121.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D0200 /* 20.157.2.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DA500 /* 20.157.165.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB900 /* 20.190.185.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D11800 /* 20.209.24.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14FB0000 /* 20.251.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28525400 /* 40.82.84.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28776800 /* 40.119.104.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3900 /* 40.126.57.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EC800 /* 40.126.200.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D0000 /* 51.13.0.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D1000 /* 51.13.16.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D2000 /* 51.13.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D4000 /* 51.13.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330DA000 /* 51.13.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BD000 /* 51.107.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33780000 /* 51.120.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D000 /* 51.120.208.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E800 /* 51.120.232.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378F000 /* 51.120.240.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C4D00 /* 52.108.77.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C6200 /* 52.108.98.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D5600 /* 52.109.86.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FC500 /* 52.111.197.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472EA00 /* 52.114.234.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B9300 /* 52.123.147.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDA800 /* 52.253.168.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDB100 /* 52.253.177.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDB200 /* 52.253.178.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04DC8000 /* 4.220.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689930 /* 13.104.153.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689960 /* 13.104.153.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689B00 /* 13.104.155.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D980 /* 13.104.217.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3100 /* 20.47.49.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0F00 /* 20.60.15.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14644000 /* 20.100.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14873A00 /* 20.135.58.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14960000 /* 20.150.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963800 /* 20.150.56.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D0300 /* 20.157.3.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBA00 /* 20.190.186.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28776C00 /* 40.119.108.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3A00 /* 40.126.58.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EC900 /* 40.126.201.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8000 /* 51.13.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33788000 /* 51.120.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378C000 /* 51.120.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D800 /* 51.120.216.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E000 /* 51.120.224.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CB100 /* 52.108.177.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CC600 /* 52.108.198.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D9000 /* 52.109.144.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FC600 /* 52.111.198.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472EE00 /* 52.114.238.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B9400 /* 52.123.148.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDA700 /* 52.253.167.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4AF00000 /* 74.240.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696850 /* 13.105.104.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696880 /* 13.105.104.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14261100 /* 20.38.17.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C5C00 /* 20.60.92.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487F800 /* 20.135.248.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F0600 /* 20.143.6.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F1400 /* 20.143.20.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DA800 /* 20.157.168.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DCE00 /* 20.157.206.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DE100 /* 20.157.225.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D13C00 /* 20.209.60.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D15E00 /* 20.209.94.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70000 /* 20.215.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D78000 /* 20.215.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BAC00 /* 40.123.172.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BAC80 /* 40.123.172.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C8100 /* 52.108.129.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D9200 /* 52.109.146.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FC700 /* 52.111.199.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34706400 /* 52.112.100.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDCC00 /* 52.253.204.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDCE00 /* 52.253.206.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04AA0000 /* 4.170.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F40000 /* 4.244.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696340 /* 13.105.99.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696360 /* 13.105.99.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696380 /* 13.105.99.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696580 /* 13.105.101.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6965A0 /* 13.105.101.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6965C0 /* 13.105.101.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696710 /* 13.105.103.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696740 /* 13.105.103.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14150000 /* 20.21.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14261000 /* 20.38.16.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CD000 /* 20.60.208.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F8100 /* 20.95.129.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487EE00 /* 20.135.238.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487F200 /* 20.135.242.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487F400 /* 20.135.244.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9A00 /* 20.157.154.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DBE00 /* 20.157.190.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AD0000 /* 20.173.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBFC0 /* 20.190.191.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D10200 /* 20.209.2.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D13600 /* 20.209.54.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9400 /* 40.123.148.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9480 /* 40.123.148.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3FC0 /* 40.126.63.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C8200 /* 52.108.130.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D9400 /* 52.109.148.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FC800 /* 52.111.200.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472CC00 /* 52.114.204.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B9500 /* 52.123.149.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B9600 /* 52.123.150.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDC800 /* 52.253.200.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDCA00 /* 52.253.202.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04A70000 /* 4.167.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04A80000 /* 4.168.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04DD0000 /* 4.221.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04DE0000 /* 4.222.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04FD0000 /* 4.253.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689E80 /* 13.104.158.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689EA0 /* 13.104.158.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689EC0 /* 13.104.158.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691BE0 /* 13.105.27.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267280 /* 20.38.114.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D8000 /* 20.45.128.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3200 /* 20.47.50.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F5C00 /* 20.47.92.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CBE00 /* 20.60.190.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14570000 /* 20.87.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1457C000 /* 20.87.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145FE000 /* 20.95.224.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14874E00 /* 20.135.78.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14875000 /* 20.135.80.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961500 /* 20.150.21.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963E00 /* 20.150.62.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966500 /* 20.150.101.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DA200 /* 20.157.162.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A40000 /* 20.164.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBE00 /* 20.190.190.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA4700 /* 20.202.71.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA6400 /* 20.202.100.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCB00 /* 40.79.203.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28521400 /* 40.82.20.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28527800 /* 40.82.120.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1300 /* 40.90.19.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8090 /* 40.90.128.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8290 /* 40.90.130.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A85A0 /* 40.90.133.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8F80 /* 40.90.143.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9740 /* 40.90.151.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9DE0 /* 40.90.157.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28774000 /* 40.119.64.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28781000 /* 40.120.16.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BF000 /* 40.123.240.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3E00 /* 40.126.62.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F0000 /* 40.127.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C3600 /* 52.108.54.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5A00 /* 52.108.90.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D9600 /* 52.109.150.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FED00 /* 52.111.237.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34727000 /* 52.114.112.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472D600 /* 52.114.214.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472E000 /* 52.114.224.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34795600 /* 52.121.86.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B9700 /* 52.123.151.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FCC00 /* 52.143.204.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FCE00 /* 52.143.206.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE800 /* 52.239.232.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66250000 /* 102.37.0.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66251000 /* 102.37.16.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66251800 /* 102.37.24.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66251A20 /* 102.37.26.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66252000 /* 102.37.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254800 /* 102.37.72.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66256000 /* 102.37.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66258000 /* 102.37.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A000 /* 102.37.160.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625B000 /* 102.37.176.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625C000 /* 102.37.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857800 /* 102.133.120.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66858000 /* 102.133.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685C000 /* 102.133.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E000 /* 102.133.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685F000 /* 102.133.240.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685F080 /* 102.133.240.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685F800 /* 102.133.248.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6890A0 /* 13.104.144.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267900 /* 20.38.121.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D8800 /* 20.45.136.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3300 /* 20.47.51.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F5D00 /* 20.47.93.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0800 /* 20.60.8.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CD200 /* 20.60.210.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14578000 /* 20.87.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14872000 /* 20.135.32.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961400 /* 20.150.20.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DE400 /* 20.157.228.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBDC0 /* 20.190.189.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ED100 /* 40.78.209.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28524000 /* 40.82.64.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1100 /* 40.90.17.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8060 /* 40.90.128.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A98E0 /* 40.90.152.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28750000 /* 40.117.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28774400 /* 40.119.68.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3DC0 /* 40.126.61.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CBB00 /* 52.108.187.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CDC00 /* 52.108.220.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D9800 /* 52.109.152.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FEE00 /* 52.111.238.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472E400 /* 52.114.228.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B9800 /* 52.123.152.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FCB00 /* 52.143.203.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE880 /* 52.239.232.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66251A00 /* 102.37.26.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254000 /* 102.37.64.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255000 /* 102.37.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66850000 /* 102.133.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854000 /* 102.133.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66856000 /* 102.133.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857000 /* 102.133.112.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691080 /* 13.105.16.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14266E00 /* 20.38.110.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7000 /* 20.43.112.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0000 /* 20.44.0.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D6000 /* 20.45.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7000 /* 20.45.112.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E4000 /* 20.46.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E8000 /* 20.46.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0E00 /* 20.47.14.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0900 /* 20.60.9.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14872200 /* 20.135.34.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764C000 /* 23.100.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28524C00 /* 40.82.76.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B0A8 /* 40.87.176.168/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B0AC /* 40.87.176.172/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B0B0 /* 40.87.176.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B0BC /* 40.87.176.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B0D0 /* 40.87.176.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B0EA /* 40.87.176.234/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B0EC /* 40.87.176.236/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B100 /* 40.87.177.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B17A /* 40.87.177.122/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B19A /* 40.87.177.154/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B1CC /* 40.87.177.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B1D0 /* 40.87.177.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B3C2 /* 40.87.179.194/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B3C4 /* 40.87.179.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B3C8 /* 40.87.179.200/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1020 /* 40.90.16.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8020 /* 40.90.128.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A97C0 /* 40.90.151.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA48A /* 40.123.164.138/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA48C /* 40.123.164.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA490 /* 40.123.164.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA494 /* 40.123.164.148/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EC400 /* 40.126.196.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C8400 /* 52.108.132.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FDC00 /* 52.143.220.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04956000 /* 4.149.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04960000 /* 4.150.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04970000 /* 4.151.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D410000 /* 13.65.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D420000 /* 13.66.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F000 /* 13.73.240.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D540000 /* 13.84.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689040 /* 13.104.144.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D080 /* 13.104.208.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D900 /* 13.104.217.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68DC80 /* 13.104.220.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691700 /* 13.105.23.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691900 /* 13.105.25.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693500 /* 13.105.53.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693C00 /* 13.105.60.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693C20 /* 13.105.60.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693C40 /* 13.105.60.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6942C0 /* 13.105.66.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696780 /* 13.105.103.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6967A0 /* 13.105.103.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6967C0 /* 13.105.103.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14266800 /* 20.38.104.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D0000 /* 20.45.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7800 /* 20.45.120.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0000 /* 20.47.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1800 /* 20.47.24.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1D00 /* 20.47.29.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F4500 /* 20.47.69.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F6400 /* 20.47.100.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315800 /* 20.49.88.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C3000 /* 20.60.48.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C4000 /* 20.60.64.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C8C00 /* 20.60.140.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C9400 /* 20.60.148.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CA000 /* 20.60.160.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14400000 /* 20.64.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418000 /* 20.65.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1458C000 /* 20.88.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145E8000 /* 20.94.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F0500 /* 20.95.5.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1A00 /* 20.95.26.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F3300 /* 20.95.51.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14610000 /* 20.97.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14724000 /* 20.114.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14764000 /* 20.118.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14870800 /* 20.135.8.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487D800 /* 20.135.216.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487DC00 /* 20.135.220.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14880080 /* 20.136.0.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14880200 /* 20.136.2.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961480 /* 20.150.20.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962600 /* 20.150.38.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964600 /* 20.150.70.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964F00 /* 20.150.79.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965D00 /* 20.150.93.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965E00 /* 20.150.94.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2B00 /* 20.157.43.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3600 /* 20.157.54.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D5600 /* 20.157.86.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8600 /* 20.157.134.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DA400 /* 20.157.164.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DA600 /* 20.157.166.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DB500 /* 20.157.181.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DD100 /* 20.157.209.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A50000 /* 20.165.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC4000 /* 20.188.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD0000 /* 20.189.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8000 /* 20.190.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9D00 /* 20.190.157.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA1800 /* 20.202.24.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA2300 /* 20.202.35.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA2400 /* 20.202.36.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA2600 /* 20.202.38.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA5500 /* 20.202.85.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA5A00 /* 20.202.90.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA5E00 /* 20.202.94.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA6200 /* 20.202.98.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA7E00 /* 20.202.126.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D11A00 /* 20.209.26.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D12200 /* 20.209.34.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D13E00 /* 20.209.62.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E10000 /* 20.225.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EC8000 /* 20.236.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17628000 /* 23.98.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17647800 /* 23.100.120.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765B000 /* 23.101.176.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17668000 /* 23.102.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284AA000 /* 40.74.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284AC000 /* 40.74.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D82C0 /* 40.77.130.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8300 /* 40.77.131.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8380 /* 40.77.131.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DAC00 /* 40.77.172.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DC700 /* 40.77.199.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE100 /* 40.77.225.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ED600 /* 40.78.214.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCEA0 /* 40.79.206.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCEC0 /* 40.79.206.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCF50 /* 40.79.207.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCF80 /* 40.79.207.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850C000 /* 40.80.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28548000 /* 40.84.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28568000 /* 40.86.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B000 /* 40.87.176.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B080 /* 40.87.176.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B0A0 /* 40.87.176.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B0AE /* 40.87.176.174/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B0B8 /* 40.87.176.184/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B0C0 /* 40.87.176.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B0D8 /* 40.87.176.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B0E0 /* 40.87.176.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B0E8 /* 40.87.176.232/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B0F0 /* 40.87.176.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B110 /* 40.87.177.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B120 /* 40.87.177.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B140 /* 40.87.177.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B160 /* 40.87.177.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B170 /* 40.87.177.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B178 /* 40.87.177.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B17C /* 40.87.177.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B180 /* 40.87.177.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B190 /* 40.87.177.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B198 /* 40.87.177.152/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B19C /* 40.87.177.156/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B1A0 /* 40.87.177.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B1C0 /* 40.87.177.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B1C8 /* 40.87.177.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B1D4 /* 40.87.177.212/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B1D8 /* 40.87.177.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B1E0 /* 40.87.177.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B200 /* 40.87.178.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B300 /* 40.87.179.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B380 /* 40.87.179.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B3C0 /* 40.87.179.192/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B3CA /* 40.87.179.202/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B3CC /* 40.87.179.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B3D0 /* 40.87.179.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B3E0 /* 40.87.179.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1080 /* 40.90.16.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1240 /* 40.90.18.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1B40 /* 40.90.27.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1B80 /* 40.90.27.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1C40 /* 40.90.28.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1C80 /* 40.90.28.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1EA0 /* 40.90.30.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A80E0 /* 40.90.128.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8560 /* 40.90.133.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8780 /* 40.90.135.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A88A0 /* 40.90.136.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A91A0 /* 40.90.145.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9400 /* 40.90.148.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A98A0 /* 40.90.152.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9B00 /* 40.90.155.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B1000 /* 40.91.16.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0500 /* 40.93.5.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0E00 /* 40.93.14.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285DC100 /* 40.93.193.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285DC200 /* 40.93.194.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285DC400 /* 40.93.196.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28610600 /* 40.97.6.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28610E00 /* 40.97.14.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770000 /* 40.119.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA400 /* 40.123.164.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA480 /* 40.123.164.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA488 /* 40.123.164.136/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA496 /* 40.123.164.150/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA498 /* 40.123.164.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA4A0 /* 40.123.164.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA4C0 /* 40.123.164.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA4E0 /* 40.123.164.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA4F0 /* 40.123.164.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C0000 /* 40.124.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0000 /* 40.126.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1D00 /* 40.126.29.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34650B00 /* 52.101.11.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34650C00 /* 52.101.12.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668400 /* 52.102.132.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668C00 /* 52.102.140.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670600 /* 52.103.6.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670E00 /* 52.103.14.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678400 /* 52.103.132.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678C00 /* 52.103.140.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C6600 /* 52.108.102.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C6800 /* 52.108.104.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CC500 /* 52.108.197.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CF800 /* 52.108.248.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D1400 /* 52.109.20.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FEF00 /* 52.111.239.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34701800 /* 52.112.24.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34705400 /* 52.112.84.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707500 /* 52.112.117.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3471A000 /* 52.113.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3471CE00 /* 52.113.206.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34729000 /* 52.114.144.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472D200 /* 52.114.210.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472D400 /* 52.114.212.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34734400 /* 52.115.68.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34735400 /* 52.115.84.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3473E000 /* 52.115.224.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3473E900 /* 52.115.233.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3473EA00 /* 52.115.234.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34780000 /* 52.120.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34789800 /* 52.120.152.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34790000 /* 52.121.0.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A1000 /* 52.122.16.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B0300 /* 52.123.3.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347D8900 /* 52.125.137.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D4000 /* 52.141.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34980000 /* 52.152.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34994000 /* 52.153.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3499C000 /* 52.153.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AB0000 /* 52.171.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B7C000 /* 52.183.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B9C000 /* 52.185.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BD8000 /* 52.189.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89F00 /* 52.232.159.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9E00 /* 52.239.158.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB200 /* 52.239.178.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB400 /* 52.239.180.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC700 /* 52.239.199.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC800 /* 52.239.200.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFCB00 /* 52.239.203.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFD000 /* 52.239.208.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F51800 /* 52.245.24.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F80000 /* 52.248.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F90000 /* 52.249.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD0000 /* 52.253.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDB300 /* 52.253.179.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDB400 /* 52.253.180.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF4000 /* 52.255.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41342000 /* 65.52.32.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x46253000 /* 70.37.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x46254000 /* 70.37.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4625A000 /* 70.37.160.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5900 /* 104.44.89.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5940 /* 104.44.89.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5C40 /* 104.44.92.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5EA0 /* 104.44.94.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C8000 /* 104.44.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682FD000 /* 104.47.208.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D28000 /* 104.210.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D2B000 /* 104.210.176.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D2C000 /* 104.210.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D60000 /* 104.214.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D74000 /* 104.215.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD2840 /* 131.253.40.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D3733E0 /* 157.55.51.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D375000 /* 157.55.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D376720 /* 157.55.103.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D3799E0 /* 157.55.153.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37B000 /* 157.55.176.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37C000 /* 157.55.192.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37C800 /* 157.55.200.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37CC01 /* 157.55.204.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37CC02 /* 157.55.204.2/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37CC21 /* 157.55.204.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37CC22 /* 157.55.204.34/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E8000 /* 168.62.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE9000 /* 191.238.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEEA000 /* 191.238.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEEE000 /* 191.238.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F70000 /* 4.247.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D474000 /* 13.71.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689980 /* 13.104.153.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14280000 /* 20.40.0.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C000 /* 20.41.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C2000 /* 20.44.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3400 /* 20.47.52.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F4800 /* 20.47.72.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0A00 /* 20.60.10.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CE200 /* 20.60.226.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F8D00 /* 20.95.141.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14872A00 /* 20.135.42.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961800 /* 20.150.24.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8700 /* 20.157.135.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9180 /* 20.190.145.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAE00 /* 20.190.174.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C08000 /* 20.192.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0B800 /* 20.192.184.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DB4000 /* 20.219.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EB0000 /* 20.235.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EB8000 /* 20.235.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC000 /* 40.78.192.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FD500 /* 40.79.213.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28514000 /* 40.81.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857D800 /* 40.87.216.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1A40 /* 40.90.26.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A89A0 /* 40.90.137.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1180 /* 40.126.17.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2E00 /* 40.126.46.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CC000 /* 52.108.192.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CE600 /* 52.108.230.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D3C00 /* 52.109.60.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FF100 /* 52.111.241.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34710F00 /* 52.113.15.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34721800 /* 52.114.24.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BAF00 /* 52.123.175.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BB000 /* 52.123.176.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881100 /* 52.136.17.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C0000 /* 52.140.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC0000 /* 52.172.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF8780 /* 52.239.135.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFBC00 /* 52.239.188.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F55400 /* 52.245.84.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4AE00000 /* 74.224.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4AE10000 /* 74.225.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5CA0 /* 104.44.92.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5ED0 /* 104.44.94.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682FD600 /* 104.47.214.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3C000 /* 104.211.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04908000 /* 4.144.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04910000 /* 4.145.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04920000 /* 4.146.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04C10000 /* 4.193.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04C20000 /* 4.194.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04FC8000 /* 4.252.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430000 /* 13.67.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4C0000 /* 13.76.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689500 /* 13.104.149.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689900 /* 13.104.153.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689920 /* 13.104.153.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689940 /* 13.104.153.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6899C0 /* 13.104.153.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689A00 /* 13.104.154.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D580 /* 13.104.213.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14060000 /* 20.6.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14180000 /* 20.24.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14188000 /* 20.24.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8000 /* 20.43.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142CC000 /* 20.44.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0900 /* 20.47.9.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2100 /* 20.47.33.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F4000 /* 20.47.64.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F6200 /* 20.47.98.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C8800 /* 20.60.136.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C8A00 /* 20.60.138.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F8900 /* 20.95.137.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14875400 /* 20.135.84.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14875800 /* 20.135.88.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14888000 /* 20.136.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14888100 /* 20.136.129.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961180 /* 20.150.17.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961C00 /* 20.150.28.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965600 /* 20.150.86.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967F00 /* 20.150.127.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1000 /* 20.157.16.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1700 /* 20.157.23.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1F00 /* 20.157.31.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7500 /* 20.157.117.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7E00 /* 20.157.126.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8000 /* 20.157.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DB000 /* 20.157.176.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DDA00 /* 20.157.218.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B80000 /* 20.184.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC6000 /* 20.188.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE4000 /* 20.190.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8C00 /* 20.190.140.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA300 /* 20.190.163.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BF8000 /* 20.191.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C30000 /* 20.195.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34000 /* 20.195.64.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35000 /* 20.195.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C36000 /* 20.195.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C54000 /* 20.197.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C68000 /* 20.198.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA2B00 /* 20.202.43.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA2C00 /* 20.202.44.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA3000 /* 20.202.48.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA3B00 /* 20.202.59.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA6300 /* 20.202.99.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA6B00 /* 20.202.107.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA6F00 /* 20.202.111.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA7300 /* 20.202.115.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA8300 /* 20.202.131.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA8700 /* 20.202.135.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA8B00 /* 20.202.139.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD9000 /* 20.205.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CDA000 /* 20.205.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CDC000 /* 20.205.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D11400 /* 20.209.20.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D40000 /* 20.212.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F78000 /* 20.247.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17613000 /* 23.97.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17624000 /* 23.98.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17647000 /* 23.100.112.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17651000 /* 23.101.16.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28418000 /* 40.65.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EDF00 /* 40.78.223.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE800 /* 40.78.232.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCE20 /* 40.79.206.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28521C00 /* 40.82.28.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857C400 /* 40.87.196.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A85C0 /* 40.90.133.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8600 /* 40.90.134.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8940 /* 40.90.137.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8A60 /* 40.90.138.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A92A0 /* 40.90.146.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A92E0 /* 40.90.146.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9A80 /* 40.90.154.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285AA000 /* 40.90.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D8100 /* 40.93.129.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28640400 /* 40.100.4.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877C000 /* 40.119.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BBC00 /* 40.123.188.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0C00 /* 40.126.12.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2300 /* 40.126.35.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34658500 /* 52.101.133.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34658600 /* 52.101.134.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34658800 /* 52.101.136.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3466C100 /* 52.102.193.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34674100 /* 52.103.65.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3467C100 /* 52.103.193.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C4400 /* 52.108.68.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5B00 /* 52.108.91.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CB800 /* 52.108.184.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CC300 /* 52.108.195.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CCE00 /* 52.108.206.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CEC00 /* 52.108.236.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D7C00 /* 52.109.124.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FF000 /* 52.111.240.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34702800 /* 52.112.40.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34703000 /* 52.112.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34716500 /* 52.113.101.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34716900 /* 52.113.105.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34716D00 /* 52.113.109.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34718300 /* 52.113.131.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34719900 /* 52.113.153.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34720800 /* 52.114.8.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34723600 /* 52.114.54.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34723800 /* 52.114.56.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34725000 /* 52.114.80.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472D800 /* 52.114.216.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34732000 /* 52.115.32.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34736100 /* 52.115.97.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34789000 /* 52.120.144.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34789C00 /* 52.120.156.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34798000 /* 52.121.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34799000 /* 52.121.144.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BB200 /* 52.123.178.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BB400 /* 52.123.180.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881A00 /* 52.136.26.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BC000 /* 52.139.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FC400 /* 52.143.196.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FD200 /* 52.143.210.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34944000 /* 52.148.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A30000 /* 52.163.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB0000 /* 52.187.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB8000 /* 52.187.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E60000 /* 52.230.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED4000 /* 52.237.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF8100 /* 52.239.129.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC500 /* 52.239.197.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE300 /* 52.239.227.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFF900 /* 52.239.249.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F55000 /* 52.245.80.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD5000 /* 52.253.80.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682B0000 /* 104.43.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5920 /* 104.44.89.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5A80 /* 104.44.90.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5C20 /* 104.44.92.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5E90 /* 104.44.94.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5FC0 /* 104.44.95.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5FE0 /* 104.44.95.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D78000 /* 104.215.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6FDD5000 /* 111.221.80.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6FDD6000 /* 111.221.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89748000 /* 137.116.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B2000 /* 138.91.32.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F5A00 /* 168.63.90.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F5B00 /* 168.63.91.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FA000 /* 168.63.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FE000 /* 168.63.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4000 /* 191.238.64.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E3280 /* 207.46.50.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E3B40 /* 207.46.59.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E3F40 /* 207.46.63.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E3F80 /* 207.46.63.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2EE000 /* 207.46.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14261800 /* 20.38.24.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C6200 /* 20.60.98.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F1000 /* 20.143.16.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F1C00 /* 20.143.28.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DD000 /* 20.157.208.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DF300 /* 20.157.243.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D4200 /* 40.93.66.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28789000 /* 40.120.144.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28789010 /* 40.120.144.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34655A00 /* 52.101.90.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34655C00 /* 52.101.92.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34655E00 /* 52.101.94.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3466A500 /* 52.102.165.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34672400 /* 52.103.36.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3467A400 /* 52.103.164.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C8500 /* 52.108.133.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D9A00 /* 52.109.154.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FC900 /* 52.111.201.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDD500 /* 52.253.213.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDD600 /* 52.253.214.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD0000 /* 68.221.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD8000 /* 68.221.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD9000 /* 68.221.144.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DDA000 /* 68.221.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04A50000 /* 4.165.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04A60000 /* 4.166.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04DF0000 /* 4.223.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E10000 /* 4.225.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694BD0 /* 13.105.75.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696000 /* 13.105.96.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696370 /* 13.105.99.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6963A0 /* 13.105.99.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6963C0 /* 13.105.99.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696400 /* 13.105.100.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696420 /* 13.105.100.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C4E00 /* 20.60.78.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CEA00 /* 20.60.234.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CFC00 /* 20.60.252.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B8000 /* 20.91.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F5700 /* 20.95.87.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487A400 /* 20.135.164.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487A800 /* 20.135.168.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962C00 /* 20.150.44.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967800 /* 20.150.120.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9700 /* 20.157.151.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DC300 /* 20.157.195.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DE800 /* 20.157.232.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB500 /* 20.190.181.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA4400 /* 20.202.68.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F00000 /* 20.240.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F04000 /* 20.240.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F08000 /* 20.240.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285DD600 /* 40.93.214.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28650100 /* 40.101.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28777000 /* 40.119.112.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3500 /* 40.126.53.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287ECB00 /* 40.126.203.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1800 /* 51.12.24.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2000 /* 51.12.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C4000 /* 51.12.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6000 /* 51.12.96.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6820 /* 51.12.104.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C8000 /* 51.12.128.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C9000 /* 51.12.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CD000 /* 51.12.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE000 /* 51.12.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BB000 /* 51.107.176.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34654B00 /* 52.101.75.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34655000 /* 52.101.80.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3466A300 /* 52.102.163.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34672300 /* 52.103.35.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3467A300 /* 52.103.163.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C8600 /* 52.108.134.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FD100 /* 52.111.209.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707800 /* 52.112.120.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707A00 /* 52.112.122.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34708B00 /* 52.112.139.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34708C00 /* 52.112.140.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470A400 /* 52.112.164.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470E000 /* 52.112.224.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470EA00 /* 52.112.234.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470EF00 /* 52.112.239.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472E100 /* 52.114.225.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472E300 /* 52.114.227.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472E500 /* 52.114.229.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472EB00 /* 52.114.235.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472ED00 /* 52.114.237.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472EF00 /* 52.114.239.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472F300 /* 52.114.243.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3479C000 /* 52.121.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A2C00 /* 52.122.44.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B9F00 /* 52.123.159.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDBB00 /* 52.253.187.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDBC00 /* 52.253.188.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x84F5E600 /* 132.245.230.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACA00000 /* 172.160.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694BA0 /* 13.105.75.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694BC0 /* 13.105.75.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694BE0 /* 13.105.75.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C4C00 /* 20.60.76.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CC000 /* 20.60.192.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B0000 /* 20.91.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14873C00 /* 20.135.60.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962D00 /* 20.150.45.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966300 /* 20.150.99.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9600 /* 20.157.150.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DC400 /* 20.157.196.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB600 /* 20.190.182.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285DD500 /* 40.93.213.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28650000 /* 40.101.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28777400 /* 40.119.116.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3600 /* 40.126.54.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287ECC00 /* 40.126.204.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C0000 /* 51.12.0.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1000 /* 51.12.16.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6800 /* 51.12.104.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C7000 /* 51.12.112.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C8800 /* 51.12.136.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CA000 /* 51.12.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC000 /* 51.12.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34654A00 /* 52.101.74.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34654C00 /* 52.101.76.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3466A200 /* 52.102.162.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34672200 /* 52.103.34.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3467A200 /* 52.103.162.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C8700 /* 52.108.135.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FD200 /* 52.111.210.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707700 /* 52.112.119.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707900 /* 52.112.121.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDBE00 /* 52.253.190.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4AF10000 /* 74.241.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04A30000 /* 4.163.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04A40000 /* 4.164.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E20000 /* 4.226.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689020 /* 13.104.144.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D3C0 /* 13.104.211.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6964B0 /* 13.105.100.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6964E0 /* 13.105.100.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696500 /* 13.105.101.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6965E0 /* 13.105.101.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696600 /* 13.105.102.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696620 /* 13.105.102.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3500 /* 20.47.53.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F4700 /* 20.47.71.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CAE00 /* 20.60.174.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487AA00 /* 20.135.170.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487AC00 /* 20.135.172.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963B00 /* 20.150.59.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967600 /* 20.150.118.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DAF00 /* 20.157.175.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB700 /* 20.190.183.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C78000 /* 20.199.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB8000 /* 20.203.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00000 /* 20.208.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D08000 /* 20.208.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D11C00 /* 20.209.28.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14FA0000 /* 20.250.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1E80 /* 40.90.30.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A80D0 /* 40.90.128.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28775000 /* 40.119.80.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3700 /* 40.126.55.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EC200 /* 40.126.194.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33678000 /* 51.103.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367C020 /* 51.103.192.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367C800 /* 51.103.200.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367D000 /* 51.103.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367E000 /* 51.103.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B0000 /* 51.107.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B4000 /* 51.107.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8000 /* 51.107.128.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BC800 /* 51.107.200.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF000 /* 51.107.240.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C4B00 /* 52.108.75.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C6000 /* 52.108.96.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D9C00 /* 52.109.156.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FCA00 /* 52.111.202.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472E200 /* 52.114.226.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B9900 /* 52.123.153.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFFB00 /* 52.239.251.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDA500 /* 52.253.165.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDAF00 /* 52.253.175.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDB000 /* 52.253.176.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACA10000 /* 172.161.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACA20000 /* 172.162.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E28000 /* 4.226.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689000 /* 13.104.144.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D400 /* 13.104.212.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1A00 /* 20.47.26.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F4300 /* 20.47.67.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F6700 /* 20.47.103.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CB000 /* 20.60.176.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14873E00 /* 20.135.62.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963700 /* 20.150.55.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967400 /* 20.150.116.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8500 /* 20.157.133.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB800 /* 20.190.184.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7C000 /* 20.199.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D0C000 /* 20.208.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1320 /* 40.90.19.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A80C0 /* 40.90.128.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28775400 /* 40.119.84.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3800 /* 40.126.56.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EC300 /* 40.126.195.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367C000 /* 51.103.192.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B6000 /* 51.107.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8800 /* 51.107.136.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9000 /* 51.107.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BA000 /* 51.107.160.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BC000 /* 51.107.192.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE000 /* 51.107.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF800 /* 51.107.248.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CB300 /* 52.108.179.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CC800 /* 52.108.200.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D9E00 /* 52.109.158.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FCB00 /* 52.111.203.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472E600 /* 52.114.230.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B9A00 /* 52.123.154.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFFA00 /* 52.239.250.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDA600 /* 52.253.166.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4AF20000 /* 74.242.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14261300 /* 20.38.19.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DAD00 /* 20.157.173.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DBB00 /* 20.157.187.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DC000 /* 20.157.192.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D12A00 /* 20.209.42.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BAE00 /* 40.123.174.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33350000 /* 51.53.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33354000 /* 51.53.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356000 /* 51.53.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33357000 /* 51.53.112.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335C000 /* 51.53.192.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C8800 /* 52.108.136.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDDB00 /* 52.253.219.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDDC00 /* 52.253.220.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA7690000 /* 167.105.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14261400 /* 20.38.20.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DAE00 /* 20.157.174.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DBC00 /* 20.157.188.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DC100 /* 20.157.193.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C98000 /* 20.201.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D12C00 /* 20.209.44.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BAF00 /* 40.123.175.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33357800 /* 51.53.120.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33358000 /* 51.53.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689F80 /* 13.104.159.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254000 /* 20.37.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4000 /* 20.45.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142EC800 /* 20.46.200.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142ED000 /* 20.46.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3600 /* 20.47.54.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F5E00 /* 20.47.94.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14872400 /* 20.135.36.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14960600 /* 20.150.6.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967300 /* 20.150.115.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8300 /* 20.157.131.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBC00 /* 20.190.188.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5800 /* 20.203.88.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D84000 /* 20.216.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1040 /* 40.90.16.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8030 /* 40.90.128.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A97E0 /* 40.90.151.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28774C00 /* 40.119.76.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28780000 /* 40.120.0.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287D0000 /* 40.125.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3C00 /* 40.126.60.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EC100 /* 40.126.193.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287ED000 /* 40.126.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CB700 /* 52.108.183.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CCC00 /* 52.108.204.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346DA000 /* 52.109.160.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FF700 /* 52.111.247.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472E800 /* 52.114.232.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B9D00 /* 52.123.157.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FDD00 /* 52.143.221.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE900 /* 52.239.233.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4AF30000 /* 74.243.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4AF38000 /* 74.243.128.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04A10000 /* 4.161.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04A20000 /* 4.162.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689740 /* 13.104.151.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689780 /* 13.104.151.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693D10 /* 13.105.61.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693D40 /* 13.105.61.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696680 /* 13.105.102.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6966A0 /* 13.105.102.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6966C0 /* 13.105.102.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267C00 /* 20.38.124.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268800 /* 20.38.136.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269800 /* 20.38.152.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E2000 /* 20.46.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E9000 /* 20.46.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142EC000 /* 20.46.192.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3700 /* 20.47.55.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F5F00 /* 20.47.95.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1500 /* 20.60.21.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CD400 /* 20.60.212.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144A8000 /* 20.74.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14877200 /* 20.135.114.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14877400 /* 20.135.116.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1400 /* 20.157.20.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D4A00 /* 20.157.74.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8D00 /* 20.157.141.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AE0000 /* 20.174.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBB00 /* 20.190.187.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C40000 /* 20.196.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA4800 /* 20.202.72.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA6600 /* 20.202.102.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB0000 /* 20.203.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB4000 /* 20.203.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5000 /* 20.203.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB6000 /* 20.203.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D13200 /* 20.209.50.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D80000 /* 20.216.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E90000 /* 20.233.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1060 /* 40.90.16.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8040 /* 40.90.128.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9880 /* 40.90.152.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28774800 /* 40.119.72.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877A000 /* 40.119.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784000 /* 40.120.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BC000 /* 40.123.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BE000 /* 40.123.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3B00 /* 40.126.59.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EC000 /* 40.126.192.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C4600 /* 52.108.70.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5C00 /* 52.108.92.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346DA200 /* 52.109.162.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FCC00 /* 52.111.204.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470C800 /* 52.112.200.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470CC00 /* 52.112.204.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470CF00 /* 52.112.207.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472EC00 /* 52.114.236.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34796400 /* 52.121.100.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34796800 /* 52.121.104.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B9E00 /* 52.123.158.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FCA00 /* 52.143.202.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FDE00 /* 52.143.222.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE980 /* 52.239.233.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134F800 /* 65.52.248.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACA30000 /* 172.163.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACA40000 /* 172.164.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577800 /* 13.87.120.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577C00 /* 13.87.124.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577C80 /* 13.87.124.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577C88 /* 13.87.124.136/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577C90 /* 13.87.124.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577CA0 /* 13.87.124.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577CC0 /* 13.87.124.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577D00 /* 13.87.125.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577E00 /* 13.87.126.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577FE0 /* 13.87.127.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14279000 /* 20.39.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DA000 /* 20.45.160.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962E00 /* 20.150.46.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8F80 /* 20.190.143.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAA00 /* 20.190.170.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCA00 /* 40.79.202.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28501000 /* 40.80.16.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28516000 /* 40.81.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8270 /* 40.90.130.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8F20 /* 40.90.143.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9640 /* 40.90.150.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0F80 /* 40.126.15.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2A00 /* 40.126.42.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B4000 /* 51.11.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695000 /* 51.105.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C8900 /* 52.108.137.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D2400 /* 52.109.36.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881300 /* 52.136.19.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D570000 /* 13.87.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961B00 /* 20.150.27.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAC00 /* 20.190.172.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC900 /* 40.79.201.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28500C00 /* 40.80.12.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851A000 /* 40.81.160.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8280 /* 40.90.130.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8F40 /* 40.90.143.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9660 /* 40.90.150.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2C00 /* 40.126.44.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D81C0 /* 51.141.129.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D9C00 /* 51.141.156.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338E280B /* 51.142.40.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338E2FF9 /* 51.142.47.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338E2FFC /* 51.142.47.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC000 /* 51.143.192.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC800 /* 51.143.200.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC900 /* 51.143.201.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C8A00 /* 52.108.138.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D2800 /* 52.109.40.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881200 /* 52.136.18.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x049E0000 /* 4.158.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04EA0000 /* 4.234.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04FA0000 /* 4.250.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D574000 /* 13.87.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D576000 /* 13.87.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D688180 /* 13.104.129.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6891A0 /* 13.104.145.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689240 /* 13.104.146.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689F00 /* 13.104.159.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14000000 /* 20.0.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141A0000 /* 20.26.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14266A00 /* 20.38.106.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427D000 /* 20.39.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427E000 /* 20.39.224.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0B00 /* 20.47.11.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2200 /* 20.47.34.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F4400 /* 20.47.68.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F7200 /* 20.47.114.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14318000 /* 20.49.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14326000 /* 20.50.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A0000 /* 20.58.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1100 /* 20.60.17.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CA600 /* 20.60.166.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14440000 /* 20.68.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14448000 /* 20.68.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144D0000 /* 20.77.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144D8000 /* 20.77.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A4000 /* 20.90.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8000 /* 20.90.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F4300 /* 20.95.67.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F4A00 /* 20.95.74.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F5200 /* 20.95.82.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F5400 /* 20.95.84.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146C0000 /* 20.108.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14754000 /* 20.117.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14758000 /* 20.117.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487B000 /* 20.135.176.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487B400 /* 20.135.180.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961200 /* 20.150.18.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962800 /* 20.150.40.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962900 /* 20.150.41.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964500 /* 20.150.69.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1C00 /* 20.157.28.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7000 /* 20.157.112.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7800 /* 20.157.120.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9D00 /* 20.157.157.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DB600 /* 20.157.182.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DF600 /* 20.157.246.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A28000 /* 20.162.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8F00 /* 20.190.143.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA900 /* 20.190.169.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA0400 /* 20.202.4.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D10600 /* 20.209.6.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D11E00 /* 20.209.30.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D15800 /* 20.209.88.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14FE0000 /* 20.254.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FD700 /* 40.79.215.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28500000 /* 40.80.0.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28518000 /* 40.81.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1120 /* 40.90.17.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A11A0 /* 40.90.17.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1DC0 /* 40.90.29.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8070 /* 40.90.128.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A80A0 /* 40.90.128.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8340 /* 40.90.131.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8B40 /* 40.90.139.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8DC0 /* 40.90.141.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9940 /* 40.90.153.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9A00 /* 40.90.154.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D4300 /* 40.93.67.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28782000 /* 40.120.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28788800 /* 40.120.136.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0F00 /* 40.126.15.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2900 /* 40.126.41.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B0000 /* 51.11.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B8000 /* 51.11.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680000 /* 51.104.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368C000 /* 51.104.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33690000 /* 51.105.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694000 /* 51.105.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33840000 /* 51.132.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33848000 /* 51.132.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C0000 /* 51.140.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C8000 /* 51.140.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D8020 /* 51.141.128.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D8140 /* 51.141.129.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D8200 /* 51.141.130.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D8700 /* 51.141.135.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338DC000 /* 51.141.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338E4000 /* 51.142.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338EC000 /* 51.142.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F8000 /* 51.143.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD000 /* 51.143.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FE000 /* 51.143.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33910000 /* 51.145.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34655800 /* 52.101.88.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34655F00 /* 52.101.95.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34656000 /* 52.101.96.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3466A400 /* 52.102.164.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34672500 /* 52.103.37.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3467A500 /* 52.103.165.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C3200 /* 52.108.50.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5800 /* 52.108.88.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C6300 /* 52.108.99.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C6400 /* 52.108.100.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D1C00 /* 52.109.28.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FF200 /* 52.111.242.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470E700 /* 52.112.231.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470F000 /* 52.112.240.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34718000 /* 52.113.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3471C800 /* 52.113.200.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3471CC00 /* 52.113.204.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3471E000 /* 52.113.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34725800 /* 52.114.88.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3478A000 /* 52.120.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3478F000 /* 52.120.240.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B8D00 /* 52.123.141.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B8E00 /* 52.123.142.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881500 /* 52.136.21.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34974000 /* 52.151.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFBB00 /* 52.239.187.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE700 /* 52.239.231.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F54000 /* 52.245.64.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDA200 /* 52.253.162.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C59E0 /* 104.44.89.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACA50000 /* 172.165.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACA60000 /* 172.166.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACBB8000 /* 172.187.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427A000 /* 20.39.160.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14286800 /* 20.40.104.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DB000 /* 20.45.176.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3800 /* 20.47.56.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F5200 /* 20.47.82.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4000 /* 20.58.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CA400 /* 20.60.164.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14444000 /* 20.68.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144DC000 /* 20.77.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A0000 /* 20.90.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F5600 /* 20.95.86.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14750000 /* 20.117.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14874000 /* 20.135.64.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14960200 /* 20.150.2.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963400 /* 20.150.52.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966E00 /* 20.150.110.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2E00 /* 20.157.46.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A20000 /* 20.162.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9000 /* 20.190.144.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAB00 /* 20.190.171.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA0300 /* 20.202.3.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14FE8000 /* 20.254.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FDA00 /* 40.79.218.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517000 /* 40.81.112.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857E400 /* 40.87.228.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1CC0 /* 40.90.28.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1D00 /* 40.90.29.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8360 /* 40.90.131.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8B60 /* 40.90.139.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9DC0 /* 40.90.157.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D4400 /* 40.93.68.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1000 /* 40.126.16.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2B00 /* 40.126.43.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B6000 /* 51.11.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33682000 /* 51.104.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33844000 /* 51.132.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33898000 /* 51.137.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CC000 /* 51.140.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D0000 /* 51.141.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D8000 /* 51.141.128.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D8040 /* 51.141.128.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D8080 /* 51.141.128.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D8180 /* 51.141.129.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D8600 /* 51.141.134.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D8800 /* 51.141.136.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338E8000 /* 51.142.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34656200 /* 52.101.98.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34656400 /* 52.101.100.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34656600 /* 52.101.102.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3466A600 /* 52.102.166.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34672600 /* 52.103.38.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3467A600 /* 52.103.166.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CBD00 /* 52.108.189.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CE000 /* 52.108.224.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D2000 /* 52.109.32.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FCD00 /* 52.111.205.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470A800 /* 52.112.168.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470D400 /* 52.112.212.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470E600 /* 52.112.230.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34725400 /* 52.114.84.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34725C00 /* 52.114.92.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B9B00 /* 52.123.155.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B9C00 /* 52.123.156.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881400 /* 52.136.20.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E8000 /* 52.142.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFF000 /* 52.239.240.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5A00 /* 104.44.90.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACBA0000 /* 172.186.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACBB0000 /* 172.187.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04FF8000 /* 4.255.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C000 /* 13.71.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4DC000 /* 13.77.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E8000 /* 13.78.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689140 /* 13.104.145.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D780 /* 13.104.215.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68DB00 /* 13.104.219.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0400 /* 20.47.4.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F4600 /* 20.47.70.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F6800 /* 20.47.104.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14332000 /* 20.51.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14378000 /* 20.55.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1439E000 /* 20.57.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B8000 /* 20.59.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0400 /* 20.60.4.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CDA00 /* 20.60.218.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450000 /* 20.69.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1700 /* 20.95.23.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1800 /* 20.95.24.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1C00 /* 20.95.28.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F3000 /* 20.95.48.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F3200 /* 20.95.50.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14871600 /* 20.135.22.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14874800 /* 20.135.72.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965100 /* 20.150.81.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966200 /* 20.150.98.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2900 /* 20.157.41.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A58000 /* 20.165.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8B000 /* 20.168.176.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8800 /* 20.190.136.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9E00 /* 20.190.158.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28437800 /* 40.67.120.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8000 /* 40.77.128.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D83C0 /* 40.77.131.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D83F0 /* 40.77.131.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8700 /* 40.77.135.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8880 /* 40.77.136.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA600 /* 40.77.166.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA680 /* 40.77.166.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DAD00 /* 40.77.173.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DAF20 /* 40.77.175.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB6A0 /* 40.77.182.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB900 /* 40.77.185.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE010 /* 40.77.224.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE040 /* 40.77.224.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE300 /* 40.77.227.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE800 /* 40.77.232.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DEB00 /* 40.77.235.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DEC60 /* 40.77.236.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DF600 /* 40.77.246.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EDA00 /* 40.78.218.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCDF0 /* 40.79.205.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCEE0 /* 40.79.206.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCF00 /* 40.79.207.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8300 /* 40.90.131.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8AC0 /* 40.90.138.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8B00 /* 40.90.139.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8F60 /* 40.90.143.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9700 /* 40.90.151.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9780 /* 40.90.151.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9800 /* 40.90.152.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0600 /* 40.93.6.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0F00 /* 40.93.15.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285DC600 /* 40.93.198.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285DC800 /* 40.93.200.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285DCA00 /* 40.93.202.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2860FF00 /* 40.96.255.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28610D00 /* 40.97.13.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B8800 /* 40.123.136.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0800 /* 40.126.8.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1E00 /* 40.126.30.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34651800 /* 52.101.24.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34652800 /* 52.101.40.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668500 /* 52.102.133.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668D00 /* 52.102.141.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670700 /* 52.103.7.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670F00 /* 52.103.15.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678500 /* 52.103.133.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678D00 /* 52.103.141.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CB500 /* 52.108.181.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CCA00 /* 52.108.202.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D8800 /* 52.109.136.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FCE00 /* 52.111.206.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34704B00 /* 52.112.75.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34705D00 /* 52.112.93.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3471CF00 /* 52.113.207.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34880400 /* 52.136.4.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FD600 /* 52.143.214.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34940000 /* 52.148.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968000 /* 52.150.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34998000 /* 52.153.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F0000 /* 52.159.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A10000 /* 52.161.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA400 /* 52.239.164.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA700 /* 52.239.167.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFF400 /* 52.239.244.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F53C00 /* 52.245.60.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD8000 /* 52.253.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x40040800 /* 64.4.8.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x40043600 /* 64.4.54.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137D1C0 /* 65.55.209.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5960 /* 104.44.89.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682FE000 /* 104.47.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD18A0 /* 131.253.24.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD28A0 /* 131.253.40.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D370C80 /* 157.55.12.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D376780 /* 157.55.103.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF44AE30 /* 207.68.174.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04AF0000 /* 4.175.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E70000 /* 4.231.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F50000 /* 4.245.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D450000 /* 13.69.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D498000 /* 13.73.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49E000 /* 13.73.224.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D500000 /* 13.80.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58C800 /* 13.88.200.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5D0000 /* 13.93.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5E8000 /* 13.94.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F0000 /* 13.95.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6891C0 /* 13.104.145.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689200 /* 13.104.146.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689280 /* 13.104.146.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689EB0 /* 13.104.158.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D100 /* 13.104.209.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D600 /* 13.104.214.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68DA80 /* 13.104.218.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691600 /* 13.105.22.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691780 /* 13.105.23.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691C20 /* 13.105.28.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691D80 /* 13.105.29.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693C30 /* 13.105.60.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693C60 /* 13.105.60.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693C80 /* 13.105.60.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694290 /* 13.105.66.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696960 /* 13.105.105.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696980 /* 13.105.105.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6969A0 /* 13.105.105.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14040000 /* 20.4.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14080000 /* 20.8.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140D0000 /* 20.13.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14100000 /* 20.16.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14170000 /* 20.23.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141F0000 /* 20.31.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14266C00 /* 20.38.108.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1426C800 /* 20.38.200.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0700 /* 20.47.7.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1200 /* 20.47.18.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1E00 /* 20.47.30.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F6000 /* 20.47.96.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F7300 /* 20.47.115.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F7600 /* 20.47.118.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14320000 /* 20.50.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14325800 /* 20.50.88.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14328000 /* 20.50.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14368000 /* 20.54.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14380000 /* 20.56.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1A00 /* 20.60.26.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C8200 /* 20.60.130.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C9600 /* 20.60.150.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CC400 /* 20.60.196.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CDE00 /* 20.60.222.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CFA00 /* 20.60.250.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D0000 /* 20.61.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14430000 /* 20.67.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14470000 /* 20.71.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14490000 /* 20.73.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144C0000 /* 20.76.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14520000 /* 20.82.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14560000 /* 20.86.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145D8000 /* 20.93.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F4000 /* 20.95.64.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F4200 /* 20.95.66.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F4400 /* 20.95.68.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F4900 /* 20.95.73.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F4C00 /* 20.95.76.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F5100 /* 20.95.81.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14650000 /* 20.101.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14670000 /* 20.103.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14698000 /* 20.105.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146B0000 /* 20.107.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147B8000 /* 20.123.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147E0000 /* 20.126.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14871800 /* 20.135.24.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14878C00 /* 20.135.140.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14879000 /* 20.135.144.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F0100 /* 20.143.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F2000 /* 20.143.32.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14960800 /* 20.150.8.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962500 /* 20.150.37.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962A00 /* 20.150.42.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964A00 /* 20.150.74.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964C00 /* 20.150.76.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965300 /* 20.150.83.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967A00 /* 20.150.122.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1200 /* 20.157.18.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1500 /* 20.157.21.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1600 /* 20.157.22.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1E00 /* 20.157.30.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2100 /* 20.157.33.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D6100 /* 20.157.97.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D6300 /* 20.157.99.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D6700 /* 20.157.103.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7300 /* 20.157.115.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7B00 /* 20.157.123.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9200 /* 20.157.146.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9E00 /* 20.157.158.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DAA00 /* 20.157.170.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DBA00 /* 20.157.186.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DD400 /* 20.157.212.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DDD00 /* 20.157.221.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DDF00 /* 20.157.223.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DE600 /* 20.157.230.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DF500 /* 20.157.245.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A00000 /* 20.160.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8900 /* 20.190.137.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA000 /* 20.190.160.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA0200 /* 20.202.2.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA0C00 /* 20.202.12.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA1000 /* 20.202.16.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA8C00 /* 20.202.140.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA9600 /* 20.202.150.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA9800 /* 20.202.152.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA9A00 /* 20.202.154.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA9C00 /* 20.202.156.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA9E00 /* 20.202.158.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CAA000 /* 20.202.160.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CAA200 /* 20.202.162.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CAA400 /* 20.202.164.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CAA600 /* 20.202.166.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D10A00 /* 20.209.10.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D13000 /* 20.209.48.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D14800 /* 20.209.72.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D14C00 /* 20.209.76.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D16C00 /* 20.209.108.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E00000 /* 20.224.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E50000 /* 20.229.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EA8000 /* 20.234.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EE8000 /* 20.238.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17618000 /* 23.97.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17622E00 /* 23.98.46.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17640000 /* 23.100.0.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17654000 /* 23.101.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2843C000 /* 40.67.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28440000 /* 40.68.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A0000 /* 40.74.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ED200 /* 40.78.210.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCDC0 /* 40.79.205.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCDE0 /* 40.79.205.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCE00 /* 40.79.206.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28525C00 /* 40.82.92.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B800 /* 40.87.184.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1140 /* 40.90.17.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A12C0 /* 40.90.18.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1480 /* 40.90.20.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1500 /* 40.90.21.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8200 /* 40.90.130.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8500 /* 40.90.133.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8640 /* 40.90.134.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8680 /* 40.90.134.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8A00 /* 40.90.138.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8D20 /* 40.90.141.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8DA0 /* 40.90.141.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8EE0 /* 40.90.142.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A90C0 /* 40.90.144.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A91C0 /* 40.90.145.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9210 /* 40.90.146.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9280 /* 40.90.146.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9680 /* 40.90.150.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9D40 /* 40.90.157.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9F00 /* 40.90.159.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B1C00 /* 40.91.28.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285BC000 /* 40.91.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D4100 /* 40.93.65.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28702480 /* 40.112.36.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28702500 /* 40.112.37.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287026C0 /* 40.112.38.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28706000 /* 40.112.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28716000 /* 40.113.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28718000 /* 40.113.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28728000 /* 40.114.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28730000 /* 40.115.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28760000 /* 40.118.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28778000 /* 40.119.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B8C00 /* 40.123.140.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB400 /* 40.123.180.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0900 /* 40.126.9.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2000 /* 40.126.32.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33696000 /* 51.105.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33698000 /* 51.105.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337C0000 /* 51.124.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33880000 /* 51.136.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33890000 /* 51.137.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389C000 /* 51.137.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338A0000 /* 51.138.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33900000 /* 51.144.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33918000 /* 51.145.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34654500 /* 52.101.69.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34654600 /* 52.101.70.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34654800 /* 52.101.72.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3466A100 /* 52.102.161.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34672100 /* 52.103.33.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3467A100 /* 52.103.161.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C1800 /* 52.108.24.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C3800 /* 52.108.56.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5000 /* 52.108.80.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C6C00 /* 52.108.108.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C6E00 /* 52.108.110.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D5800 /* 52.109.88.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FF300 /* 52.111.243.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34700E00 /* 52.112.14.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34701100 /* 52.112.17.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34701200 /* 52.112.18.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34701600 /* 52.112.22.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34704700 /* 52.112.71.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34705300 /* 52.112.83.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34706100 /* 52.112.97.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34706200 /* 52.112.98.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34706600 /* 52.112.102.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34706E00 /* 52.112.110.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707C00 /* 52.112.124.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34709000 /* 52.112.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470C500 /* 52.112.197.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470D800 /* 52.112.216.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470E900 /* 52.112.233.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470ED00 /* 52.112.237.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470EE00 /* 52.112.238.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34710900 /* 52.113.9.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34710C00 /* 52.113.12.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34712500 /* 52.113.37.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34712600 /* 52.113.38.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34714500 /* 52.113.69.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34715300 /* 52.113.83.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34715500 /* 52.113.85.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34715600 /* 52.113.86.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34718200 /* 52.113.130.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34719000 /* 52.113.144.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3471C700 /* 52.113.199.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34724000 /* 52.114.64.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34724800 /* 52.114.72.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34727400 /* 52.114.116.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472F100 /* 52.114.241.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472F200 /* 52.114.242.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472FC00 /* 52.114.252.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3473E200 /* 52.115.226.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3473E400 /* 52.115.228.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34788000 /* 52.120.128.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3478D000 /* 52.120.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34791800 /* 52.121.24.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34794000 /* 52.121.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A1400 /* 52.122.20.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B0700 /* 52.123.7.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B8500 /* 52.123.133.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B8600 /* 52.123.134.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347D8C00 /* 52.125.140.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488C000 /* 52.136.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34890000 /* 52.137.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348EC000 /* 52.142.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F0000 /* 52.143.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FC200 /* 52.143.194.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FD000 /* 52.143.208.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3494C000 /* 52.148.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34954000 /* 52.149.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349D4000 /* 52.157.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349D8000 /* 52.157.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A60000 /* 52.166.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE0000 /* 52.174.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B20000 /* 52.178.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E80000 /* 52.232.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89300 /* 52.232.147.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E98000 /* 52.233.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EC8000 /* 52.236.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF8C00 /* 52.239.140.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFD400 /* 52.239.212.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFF200 /* 52.239.242.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F53000 /* 52.245.48.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F57C00 /* 52.245.124.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41348000 /* 65.52.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4AEA8000 /* 74.234.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x62400000 /* 98.64.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68288000 /* 104.40.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C59A0 /* 104.44.89.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5AC0 /* 104.44.90.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5D00 /* 104.44.93.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5DC0 /* 104.44.93.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5F50 /* 104.44.95.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5F60 /* 104.44.95.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D0000 /* 104.45.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D4000 /* 104.45.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E2000 /* 104.46.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682F8000 /* 104.47.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682FD840 /* 104.47.216.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6C000 /* 104.214.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6C8D0000 /* 108.141.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6C8E0000 /* 108.142.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974C000 /* 137.116.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89758000 /* 137.117.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D370840 /* 157.55.8.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D370890 /* 157.55.8.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D387540 /* 157.56.117.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D3800 /* 168.61.56.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F0000 /* 168.63.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F6000 /* 168.63.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE94000 /* 191.233.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDE800 /* 191.237.232.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFC800 /* 191.239.200.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC1955000 /* 193.149.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xD5C78000 /* 213.199.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xD5C7B420 /* 213.199.180.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xD5C7B460 /* 213.199.180.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xD5C7B4C0 /* 213.199.180.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xD5C7B700 /* 213.199.183.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04BB4000 /* 4.187.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689D80 /* 13.104.157.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268000 /* 20.38.128.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14280800 /* 20.40.8.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3900 /* 20.47.57.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F7C00 /* 20.47.124.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CD800 /* 20.60.216.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14872C00 /* 20.135.44.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961280 /* 20.150.18.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962B00 /* 20.150.43.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966A00 /* 20.150.106.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8800 /* 20.157.136.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9280 /* 20.190.146.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB000 /* 20.190.176.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C04000 /* 20.192.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF8000 /* 20.207.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FDB00 /* 40.79.219.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28515000 /* 40.81.80.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857DC00 /* 40.87.220.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1A00 /* 40.90.26.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8AE0 /* 40.90.138.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1280 /* 40.126.18.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3000 /* 40.126.48.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C4900 /* 52.108.73.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5E00 /* 52.108.94.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D4000 /* 52.109.64.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FF400 /* 52.111.244.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34718600 /* 52.113.134.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34721C00 /* 52.114.28.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BB100 /* 52.123.177.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881000 /* 52.136.16.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34882000 /* 52.136.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C8000 /* 52.140.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B78000 /* 52.183.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF87C0 /* 52.239.135.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFBB80 /* 52.239.187.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F54C00 /* 52.245.76.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F94000 /* 52.249.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5DE0 /* 104.44.93.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5F70 /* 104.44.95.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682FD400 /* 104.47.212.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D38000 /* 104.211.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04954000 /* 4.149.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04958000 /* 4.149.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x049A0000 /* 4.154.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F20000 /* 4.242.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F60000 /* 4.246.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428000 /* 13.66.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D8000 /* 13.77.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D688140 /* 13.104.129.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689100 /* 13.104.145.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D0C0 /* 13.104.208.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D500 /* 13.104.213.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68DC00 /* 13.104.220.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D690E00 /* 13.105.14.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D690E80 /* 13.105.14.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6912A0 /* 13.105.18.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D692400 /* 13.105.36.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D692420 /* 13.105.36.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D692440 /* 13.105.36.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D692480 /* 13.105.36.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694240 /* 13.105.66.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6965B0 /* 13.105.101.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6968F0 /* 13.105.104.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696920 /* 13.105.105.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696940 /* 13.105.105.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14030000 /* 20.3.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14098000 /* 20.9.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141D8000 /* 20.29.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14240000 /* 20.36.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14266300 /* 20.38.99.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8000 /* 20.42.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AA000 /* 20.42.160.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AA800 /* 20.42.168.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AB000 /* 20.42.176.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3E00 /* 20.47.62.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F7800 /* 20.47.120.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330800 /* 20.51.8.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14334000 /* 20.51.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14398000 /* 20.57.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B0000 /* 20.59.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1400 /* 20.60.20.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C4400 /* 20.60.68.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C9800 /* 20.60.152.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CE400 /* 20.60.228.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14408000 /* 20.64.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14454000 /* 20.69.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14458000 /* 20.69.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1448C000 /* 20.72.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14508000 /* 20.80.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14534000 /* 20.83.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453C000 /* 20.83.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145EC000 /* 20.94.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F0300 /* 20.95.3.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14624000 /* 20.98.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14638000 /* 20.99.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146D8000 /* 20.109.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14700000 /* 20.112.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14720000 /* 20.114.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14738000 /* 20.115.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14788000 /* 20.120.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D0000 /* 20.125.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14871200 /* 20.135.18.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487E400 /* 20.135.228.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487E800 /* 20.135.232.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964400 /* 20.150.68.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964E00 /* 20.150.78.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965700 /* 20.150.87.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966B00 /* 20.150.107.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14980400 /* 20.152.4.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1900 /* 20.157.25.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3200 /* 20.157.50.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D6E00 /* 20.157.110.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7600 /* 20.157.118.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7D00 /* 20.157.125.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DB400 /* 20.157.180.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DF900 /* 20.157.249.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BB0000 /* 20.187.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE0000 /* 20.190.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8500 /* 20.190.133.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9A00 /* 20.190.154.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BF4000 /* 20.191.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C9DF00 /* 20.201.223.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C9E700 /* 20.201.231.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA1700 /* 20.202.23.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D16400 /* 20.209.100.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E68000 /* 20.230.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EC0000 /* 20.236.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14FC0000 /* 20.252.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17622F00 /* 23.98.47.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766C000 /* 23.102.192.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766CB00 /* 23.102.203.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17674020 /* 23.103.64.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17674040 /* 23.103.64.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28404000 /* 40.64.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408000 /* 40.64.128.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28414000 /* 40.65.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8800 /* 40.77.136.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8840 /* 40.77.136.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8B80 /* 40.77.139.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA000 /* 40.77.160.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA200 /* 40.77.162.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA400 /* 40.77.164.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA900 /* 40.77.169.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DAF40 /* 40.77.175.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB400 /* 40.77.180.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB640 /* 40.77.182.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB980 /* 40.77.185.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DBA00 /* 40.77.186.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DC680 /* 40.77.198.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DC780 /* 40.77.199.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DC800 /* 40.77.200.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DCA00 /* 40.77.202.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE060 /* 40.77.224.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE600 /* 40.77.230.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE880 /* 40.77.232.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DEAE0 /* 40.77.234.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DEC80 /* 40.77.236.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DF080 /* 40.77.240.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DF100 /* 40.77.241.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DF200 /* 40.77.242.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DF400 /* 40.77.244.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DF700 /* 40.77.247.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DF900 /* 40.77.249.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DFA00 /* 40.77.250.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DFE80 /* 40.77.254.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ED020 /* 40.78.208.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ED900 /* 40.78.217.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF000 /* 40.78.240.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCE80 /* 40.79.206.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A000 /* 40.80.160.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28522400 /* 40.82.36.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857E800 /* 40.87.232.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A10C0 /* 40.90.16.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8320 /* 40.90.131.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8430 /* 40.90.132.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A88E0 /* 40.90.136.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8AD0 /* 40.90.138.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8B20 /* 40.90.139.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9220 /* 40.90.146.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A94C0 /* 40.90.148.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9900 /* 40.90.153.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285AC000 /* 40.90.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0000 /* 40.91.0.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B4000 /* 40.91.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285BA000 /* 40.91.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0700 /* 40.93.7.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0A00 /* 40.93.10.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28603200 /* 40.96.50.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28603D00 /* 40.96.61.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28603F00 /* 40.96.63.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28610500 /* 40.97.5.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA000 /* 40.123.160.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287D4000 /* 40.125.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0500 /* 40.126.5.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1A00 /* 40.126.26.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338DA000 /* 51.141.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F0000 /* 51.143.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34600B00 /* 52.96.11.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34651C00 /* 52.101.28.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34652A00 /* 52.101.42.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34652E00 /* 52.101.46.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34653000 /* 52.101.48.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34653200 /* 52.101.50.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668600 /* 52.102.134.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668800 /* 52.102.136.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670800 /* 52.103.8.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670A00 /* 52.103.10.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678600 /* 52.103.134.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678800 /* 52.103.136.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C4800 /* 52.108.72.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5D00 /* 52.108.93.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D1800 /* 52.109.24.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FF600 /* 52.111.246.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34705C00 /* 52.112.92.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34706900 /* 52.112.105.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34706D00 /* 52.112.109.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707300 /* 52.112.115.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34729400 /* 52.114.148.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34733700 /* 52.115.55.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3479A600 /* 52.121.166.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B0500 /* 52.123.5.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34880000 /* 52.136.0.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34894000 /* 52.137.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F4000 /* 52.143.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FC500 /* 52.143.197.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FD300 /* 52.143.211.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34948000 /* 52.148.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34950000 /* 52.149.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34970000 /* 52.151.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349C4000 /* 52.156.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349C8000 /* 52.156.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349EE000 /* 52.158.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AFC000 /* 52.175.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B70000 /* 52.183.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BF8000 /* 52.191.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E50000 /* 52.229.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89800 /* 52.232.152.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E94000 /* 52.233.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EB4000 /* 52.235.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9480 /* 52.239.148.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB080 /* 52.239.176.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC100 /* 52.239.193.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFD200 /* 52.239.210.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFEC00 /* 52.239.236.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F53400 /* 52.245.52.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F6C000 /* 52.246.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F7C000 /* 52.247.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA0000 /* 52.250.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41346F00 /* 65.52.111.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41372080 /* 65.55.32.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x413720C0 /* 65.55.32.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x413720E0 /* 65.55.32.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x413721B0 /* 65.55.33.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x413721C0 /* 65.55.33.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x413723C0 /* 65.55.35.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41372C08 /* 65.55.44.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41372C70 /* 65.55.44.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41373300 /* 65.55.51.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x413769A0 /* 65.55.105.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376AC0 /* 65.55.106.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376AF0 /* 65.55.106.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376B00 /* 65.55.107.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376B60 /* 65.55.107.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376E00 /* 65.55.110.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41377800 /* 65.55.120.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137CF00 /* 65.55.207.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137D100 /* 65.55.209.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137D200 /* 65.55.210.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137DB40 /* 65.55.219.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137FA00 /* 65.55.250.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137FC00 /* 65.55.252.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x46250000 /* 70.37.0.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x46250800 /* 70.37.8.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x46251000 /* 70.37.16.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x46252000 /* 70.37.32.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5980 /* 104.44.89.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C59C0 /* 104.44.89.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5F00 /* 104.44.95.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0CA0 /* 131.253.12.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0CE4 /* 131.253.12.228/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0D18 /* 131.253.13.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0D58 /* 131.253.13.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0D80 /* 131.253.13.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0E04 /* 131.253.14.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0E08 /* 131.253.14.8/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0E60 /* 131.253.14.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0E80 /* 131.253.14.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0EC0 /* 131.253.14.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0FC0 /* 131.253.15.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD2380 /* 131.253.35.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD2880 /* 131.253.40.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD2900 /* 131.253.41.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x86AADE00 /* 134.170.222.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974B000 /* 137.116.176.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D370280 /* 157.55.2.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D370C40 /* 157.55.12.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D370D40 /* 157.55.13.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D372700 /* 157.55.39.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D3737E4 /* 157.55.55.228/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D3737E8 /* 157.55.55.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D3737F0 /* 157.55.55.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D376A00 /* 157.55.106.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D379A80 /* 157.55.154.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D380200 /* 157.56.2.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D380380 /* 157.56.3.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D3813E0 /* 157.56.19.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D3815A0 /* 157.56.21.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D3815C0 /* 157.56.21.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D385000 /* 157.56.80.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E4000 /* 168.62.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACAB6000 /* 172.171.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACB30000 /* 172.179.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC71E1800 /* 199.30.24.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC71E1B00 /* 199.30.27.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC71E1B90 /* 199.30.27.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC71E1BA0 /* 199.30.27.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC71E1FC0 /* 199.30.31.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E0D00 /* 207.46.13.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xD1F0D400 /* 209.240.212.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04940000 /* 4.148.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04950000 /* 4.149.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E30000 /* 4.227.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04EC0000 /* 4.236.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F28000 /* 4.242.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F90000 /* 4.249.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694220 /* 13.105.66.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694280 /* 13.105.66.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6942A0 /* 13.105.66.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694A00 /* 13.105.74.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694A20 /* 13.105.74.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694A40 /* 13.105.74.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6966E0 /* 13.105.102.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696700 /* 13.105.103.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696720 /* 13.105.103.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140E0000 /* 20.14.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14198000 /* 20.25.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14260000 /* 20.38.0.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14262000 /* 20.38.32.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1426A000 /* 20.38.160.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14281800 /* 20.40.24.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0E00 /* 20.60.14.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C2600 /* 20.60.38.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CA200 /* 20.60.162.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1E00 /* 20.95.30.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A4000 /* 20.106.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14768000 /* 20.118.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D4000 /* 20.125.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D8000 /* 20.125.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14870600 /* 20.135.6.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487DE00 /* 20.135.222.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487E000 /* 20.135.224.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F0000 /* 20.143.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961E00 /* 20.150.30.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14968000 /* 20.150.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2800 /* 20.157.40.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9100 /* 20.157.145.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DBF00 /* 20.157.191.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DC200 /* 20.157.194.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A30000 /* 20.163.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A80000 /* 20.168.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A90000 /* 20.169.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AB0000 /* 20.171.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AC0000 /* 20.172.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBE80 /* 20.190.190.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D10400 /* 20.209.4.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D15C00 /* 20.209.92.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCCA0 /* 40.79.204.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCD40 /* 40.79.205.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCD60 /* 40.79.205.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28775800 /* 40.119.88.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3E80 /* 40.126.62.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287ECA00 /* 40.126.202.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C8B00 /* 52.108.139.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDB600 /* 52.253.182.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDB800 /* 52.253.184.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACB40000 /* 172.180.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACB60000 /* 172.182.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0496E000 /* 4.150.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D400000 /* 13.64.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D492000 /* 13.73.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D530000 /* 13.83.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D568000 /* 13.86.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D578000 /* 13.87.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D580000 /* 13.88.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D588000 /* 13.88.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B0000 /* 13.91.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5D8000 /* 13.93.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6890C0 /* 13.104.144.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689E10 /* 13.104.158.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689E40 /* 13.104.158.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D060 /* 13.104.208.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68DE00 /* 13.104.222.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68DF00 /* 13.104.223.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691140 /* 13.105.17.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691180 /* 13.105.17.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691380 /* 13.105.19.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696040 /* 13.105.96.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696060 /* 13.105.96.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696100 /* 13.105.97.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142BC000 /* 20.43.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0200 /* 20.47.2.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1600 /* 20.47.22.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F6E00 /* 20.47.110.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F7400 /* 20.47.116.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317800 /* 20.49.120.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1439C000 /* 20.57.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B4000 /* 20.59.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0100 /* 20.60.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C2200 /* 20.60.34.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C3400 /* 20.60.52.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C5000 /* 20.60.80.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CA800 /* 20.60.168.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CE600 /* 20.60.230.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CE800 /* 20.60.232.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420000 /* 20.66.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F0100 /* 20.95.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F2000 /* 20.95.32.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F3400 /* 20.95.52.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1470B800 /* 20.112.184.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DF000 /* 20.125.240.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14874A00 /* 20.135.74.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F0A00 /* 20.143.10.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962200 /* 20.150.34.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965B00 /* 20.150.91.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966600 /* 20.150.102.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14980200 /* 20.152.2.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2000 /* 20.157.32.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3900 /* 20.157.57.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D4800 /* 20.157.72.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D5700 /* 20.157.87.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D5A00 /* 20.157.90.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D5F00 /* 20.157.95.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8200 /* 20.157.130.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DEC00 /* 20.157.236.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A88000 /* 20.168.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A000 /* 20.168.160.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B88000 /* 20.184.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD8000 /* 20.189.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8400 /* 20.190.132.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9900 /* 20.190.153.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C99300 /* 20.201.147.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C99400 /* 20.201.148.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA1600 /* 20.202.22.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA1900 /* 20.202.25.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA1A00 /* 20.202.26.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA1C00 /* 20.202.28.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA1E00 /* 20.202.30.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA6900 /* 20.202.105.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA6D00 /* 20.202.109.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA7100 /* 20.202.113.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA7500 /* 20.202.117.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA8100 /* 20.202.129.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA8500 /* 20.202.133.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA8900 /* 20.202.137.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D16600 /* 20.209.102.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E44000 /* 20.228.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14ED8000 /* 20.237.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F50000 /* 20.245.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14FD8000 /* 20.253.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17630000 /* 23.99.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17634000 /* 23.99.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17642000 /* 23.100.32.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765C000 /* 23.101.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28410000 /* 40.65.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B8000 /* 40.75.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E0000 /* 40.78.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ED800 /* 40.78.216.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCC30 /* 40.79.204.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCC60 /* 40.79.204.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCC80 /* 40.79.204.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28509800 /* 40.80.152.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28510000 /* 40.81.0.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852F800 /* 40.82.248.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28538000 /* 40.83.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28559000 /* 40.85.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856A000 /* 40.86.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A000 /* 40.87.160.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1160 /* 40.90.17.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1280 /* 40.90.18.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1680 /* 40.90.22.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1700 /* 40.90.23.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A19C0 /* 40.90.25.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8080 /* 40.90.128.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A83C0 /* 40.90.131.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8700 /* 40.90.135.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8BC0 /* 40.90.139.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9200 /* 40.90.146.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9480 /* 40.90.148.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9960 /* 40.90.153.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9C80 /* 40.90.156.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0000 /* 40.93.0.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0900 /* 40.93.9.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28708000 /* 40.112.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28768000 /* 40.118.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9800 /* 40.123.152.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287D2000 /* 40.125.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0400 /* 40.126.4.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1900 /* 40.126.25.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34650000 /* 52.101.0.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34651000 /* 52.101.16.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34652900 /* 52.101.41.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34652B00 /* 52.101.43.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34652C00 /* 52.101.44.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34655500 /* 52.101.85.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34655600 /* 52.101.86.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668000 /* 52.102.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668700 /* 52.102.135.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34669E00 /* 52.102.158.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670000 /* 52.103.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670200 /* 52.103.2.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670900 /* 52.103.9.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678000 /* 52.103.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C0000 /* 52.108.0.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C4E00 /* 52.108.78.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D0000 /* 52.109.0.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FF500 /* 52.111.245.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34702600 /* 52.112.38.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34705600 /* 52.112.86.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34706A00 /* 52.112.106.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707200 /* 52.112.114.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3471D000 /* 52.113.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34729800 /* 52.114.152.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472AC00 /* 52.114.172.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472B800 /* 52.114.184.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34735D00 /* 52.115.93.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34738C00 /* 52.115.140.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34739000 /* 52.115.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3473E700 /* 52.115.231.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3473E800 /* 52.115.232.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3473F200 /* 52.115.242.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34786000 /* 52.120.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34792400 /* 52.121.36.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A0100 /* 52.122.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A0700 /* 52.122.7.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A0800 /* 52.122.8.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B0100 /* 52.123.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34898000 /* 52.137.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34990000 /* 52.153.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B2000 /* 52.155.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349D0000 /* 52.157.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F8000 /* 52.159.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A00000 /* 52.160.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B40000 /* 52.180.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BE8000 /* 52.190.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E10000 /* 52.225.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89500 /* 52.232.149.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EA0000 /* 52.234.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EE0000 /* 52.238.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF0000 /* 52.239.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA000 /* 52.239.160.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE400 /* 52.239.228.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFFE00 /* 52.239.254.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F10000 /* 52.241.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F50C00 /* 52.245.12.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F56C00 /* 52.245.108.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F60000 /* 52.246.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F88000 /* 52.248.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FAC000 /* 52.250.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FE8000 /* 52.254.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41347000 /* 65.52.112.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC2000 /* 68.220.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68280000 /* 104.40.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A0000 /* 104.42.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5800 /* 104.44.88.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5B00 /* 104.44.91.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5C60 /* 104.44.92.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5E00 /* 104.44.94.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5F80 /* 104.44.95.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DD000 /* 104.45.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DE000 /* 104.45.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D10000 /* 104.209.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D22000 /* 104.210.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974B800 /* 137.116.184.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89750000 /* 137.117.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89870000 /* 137.135.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B4000 /* 138.91.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B8000 /* 138.91.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D38A000 /* 157.56.160.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D0000 /* 168.61.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D4000 /* 168.61.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E0000 /* 168.62.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EC000 /* 168.62.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F5800 /* 168.63.88.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACB28000 /* 172.178.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACB80000 /* 172.184.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC4000 /* 191.236.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4600 /* 191.238.70.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEF0000 /* 191.239.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04900000 /* 4.144.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04908000 /* 4.144.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04910000 /* 4.145.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04920000 /* 4.146.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04930000 /* 4.147.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04940000 /* 4.148.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04950000 /* 4.149.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04954000 /* 4.149.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04956000 /* 4.149.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04958000 /* 4.149.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04960000 /* 4.150.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04964000 /* 4.150.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04968000 /* 4.150.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0496C000 /* 4.150.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0496E000 /* 4.150.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04970000 /* 4.151.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04980000 /* 4.152.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x049A0000 /* 4.154.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x049C0000 /* 4.156.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x049E0000 /* 4.158.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04A00000 /* 4.160.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04A10000 /* 4.161.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04A20000 /* 4.162.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04A30000 /* 4.163.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04A40000 /* 4.164.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04A50000 /* 4.165.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04A60000 /* 4.166.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04A70000 /* 4.167.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04A80000 /* 4.168.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04A90000 /* 4.169.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04AA0000 /* 4.170.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04AC0000 /* 4.172.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04AE0000 /* 4.174.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04AF0000 /* 4.175.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04B00000 /* 4.176.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04B10000 /* 4.177.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04B20000 /* 4.178.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04B30000 /* 4.179.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04B40000 /* 4.180.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04B50000 /* 4.181.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04B60000 /* 4.182.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04B70000 /* 4.183.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04B83800 /* 4.184.56.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04B84000 /* 4.184.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04B88000 /* 4.184.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04B90000 /* 4.185.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04BA0000 /* 4.186.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04BB0000 /* 4.187.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04BB4000 /* 4.187.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04BB8000 /* 4.187.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04BC0000 /* 4.188.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04BD0000 /* 4.189.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04BE0000 /* 4.190.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04BE8000 /* 4.190.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04BF0000 /* 4.191.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04C00000 /* 4.192.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04C10000 /* 4.193.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04C20000 /* 4.194.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04C30000 /* 4.195.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04C40000 /* 4.196.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04C60000 /* 4.198.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04C62000 /* 4.198.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04C64000 /* 4.198.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04C68000 /* 4.198.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04C70000 /* 4.199.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04C80000 /* 4.200.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04C90000 /* 4.201.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04CA0000 /* 4.202.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04CB0000 /* 4.203.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04CB4000 /* 4.203.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04CC0000 /* 4.204.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04CE0000 /* 4.206.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04CF0000 /* 4.207.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04D00000 /* 4.208.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04D20000 /* 4.210.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04D30000 /* 4.211.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04D40000 /* 4.212.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04D50000 /* 4.213.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04D60000 /* 4.214.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04D80000 /* 4.216.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04D90000 /* 4.217.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04DA0000 /* 4.218.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04DB0000 /* 4.219.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04DC0000 /* 4.220.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04DC8000 /* 4.220.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04DD0000 /* 4.221.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04DE0000 /* 4.222.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04DF0000 /* 4.223.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E00000 /* 4.224.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E10000 /* 4.225.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E20000 /* 4.226.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E28000 /* 4.226.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E30000 /* 4.227.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E38000 /* 4.227.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E40000 /* 4.228.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E50000 /* 4.229.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E58000 /* 4.229.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E60000 /* 4.230.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E70000 /* 4.231.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E78000 /* 4.231.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E80000 /* 4.232.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E88000 /* 4.232.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E8C000 /* 4.232.192.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04E90000 /* 4.233.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04EA0000 /* 4.234.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04EB0000 /* 4.235.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04EC0000 /* 4.236.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04EC8000 /* 4.236.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04ED0000 /* 4.237.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04ED8000 /* 4.237.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04EE0000 /* 4.238.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04EE8000 /* 4.238.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04EF0000 /* 4.239.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04EF8000 /* 4.239.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F00000 /* 4.240.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F08000 /* 4.240.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F10000 /* 4.241.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F20000 /* 4.242.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F28000 /* 4.242.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F30000 /* 4.243.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F40000 /* 4.244.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F50000 /* 4.245.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F58000 /* 4.245.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F60000 /* 4.246.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F68000 /* 4.246.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F70000 /* 4.247.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F78000 /* 4.247.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F80000 /* 4.248.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F90000 /* 4.249.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04F98000 /* 4.249.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04FA0000 /* 4.250.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04FB0000 /* 4.251.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04FB8000 /* 4.251.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04FBC000 /* 4.251.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04FBD000 /* 4.251.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04FBE000 /* 4.251.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04FC0000 /* 4.252.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04FC8000 /* 4.252.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04FD0000 /* 4.253.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04FE0000 /* 4.254.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04FE8000 /* 4.254.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04FF0000 /* 4.255.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04FF8000 /* 4.255.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D400000 /* 13.64.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D410000 /* 13.65.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D420000 /* 13.66.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D428000 /* 13.66.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D430000 /* 13.67.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D438000 /* 13.67.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D439000 /* 13.67.144.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D439800 /* 13.67.152.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D439900 /* 13.67.153.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D439910 /* 13.67.153.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D439920 /* 13.67.153.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D439940 /* 13.67.153.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D439980 /* 13.67.153.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D439A00 /* 13.67.154.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D439B00 /* 13.67.155.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D439C00 /* 13.67.156.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D43A000 /* 13.67.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D43C000 /* 13.67.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D440000 /* 13.68.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D448000 /* 13.68.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D450000 /* 13.69.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D458000 /* 13.69.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D460000 /* 13.70.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D464000 /* 13.70.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D468000 /* 13.70.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D46C000 /* 13.70.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D470000 /* 13.71.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D474000 /* 13.71.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D478000 /* 13.71.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47A000 /* 13.71.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D47C000 /* 13.71.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D484000 /* 13.72.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D48C000 /* 13.72.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D48E000 /* 13.72.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D490000 /* 13.73.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D492000 /* 13.73.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D496000 /* 13.73.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D498000 /* 13.73.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49C000 /* 13.73.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49E000 /* 13.73.224.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49E800 /* 13.73.232.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D49F000 /* 13.73.240.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4A0000 /* 13.74.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B0000 /* 13.75.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4B8000 /* 13.75.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4C0000 /* 13.76.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D0000 /* 13.77.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D4000 /* 13.77.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4D8000 /* 13.77.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4DC000 /* 13.77.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E0000 /* 13.78.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4E8000 /* 13.78.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D4F0000 /* 13.79.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D500000 /* 13.80.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D520000 /* 13.82.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D530000 /* 13.83.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D540000 /* 13.84.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D560000 /* 13.86.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D568000 /* 13.86.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D570000 /* 13.87.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D574000 /* 13.87.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D576000 /* 13.87.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577800 /* 13.87.120.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577C00 /* 13.87.124.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577C80 /* 13.87.124.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577C88 /* 13.87.124.136/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577C90 /* 13.87.124.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577CA0 /* 13.87.124.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577CC0 /* 13.87.124.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577D00 /* 13.87.125.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577E00 /* 13.87.126.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D577FE0 /* 13.87.127.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D578000 /* 13.87.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D580000 /* 13.88.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D588000 /* 13.88.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58C800 /* 13.88.200.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58D000 /* 13.88.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D58E000 /* 13.88.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D590000 /* 13.89.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5A0000 /* 13.90.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5B0000 /* 13.91.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5C0000 /* 13.92.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5D0000 /* 13.93.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5D8000 /* 13.93.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5E0000 /* 13.94.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5E4000 /* 13.94.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5E8000 /* 13.94.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D5F0000 /* 13.95.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D688100 /* 13.104.129.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D688140 /* 13.104.129.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D688180 /* 13.104.129.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6881C0 /* 13.104.129.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689000 /* 13.104.144.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689020 /* 13.104.144.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689040 /* 13.104.144.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689060 /* 13.104.144.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689080 /* 13.104.144.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6890A0 /* 13.104.144.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6890C0 /* 13.104.144.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6890E0 /* 13.104.144.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689100 /* 13.104.145.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689140 /* 13.104.145.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689180 /* 13.104.145.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6891A0 /* 13.104.145.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6891C0 /* 13.104.145.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689200 /* 13.104.146.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689240 /* 13.104.146.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689280 /* 13.104.146.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689300 /* 13.104.147.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689380 /* 13.104.147.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689400 /* 13.104.148.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689480 /* 13.104.148.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689500 /* 13.104.149.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689540 /* 13.104.149.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689580 /* 13.104.149.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689600 /* 13.104.150.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689680 /* 13.104.150.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6896C0 /* 13.104.150.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689700 /* 13.104.151.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689740 /* 13.104.151.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689780 /* 13.104.151.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6897C0 /* 13.104.151.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689800 /* 13.104.152.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689880 /* 13.104.152.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689900 /* 13.104.153.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689920 /* 13.104.153.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689930 /* 13.104.153.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689940 /* 13.104.153.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689960 /* 13.104.153.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689980 /* 13.104.153.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6899C0 /* 13.104.153.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689A00 /* 13.104.154.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689A80 /* 13.104.154.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689B00 /* 13.104.155.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689B20 /* 13.104.155.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689B40 /* 13.104.155.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689B80 /* 13.104.155.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689BC0 /* 13.104.155.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689C00 /* 13.104.156.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689D00 /* 13.104.157.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689D80 /* 13.104.157.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689E00 /* 13.104.158.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689E10 /* 13.104.158.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689E20 /* 13.104.158.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689E40 /* 13.104.158.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689E80 /* 13.104.158.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689EA0 /* 13.104.158.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689EB0 /* 13.104.158.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689EC0 /* 13.104.158.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689EE0 /* 13.104.158.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689F00 /* 13.104.159.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689F80 /* 13.104.159.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D689FC0 /* 13.104.159.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68C000 /* 13.104.192.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D000 /* 13.104.208.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D040 /* 13.104.208.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D060 /* 13.104.208.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D080 /* 13.104.208.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D0A0 /* 13.104.208.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D0B0 /* 13.104.208.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D0C0 /* 13.104.208.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D100 /* 13.104.209.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D200 /* 13.104.210.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D300 /* 13.104.211.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D380 /* 13.104.211.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D3C0 /* 13.104.211.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D400 /* 13.104.212.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D440 /* 13.104.212.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D480 /* 13.104.212.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D4C0 /* 13.104.212.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D500 /* 13.104.213.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D580 /* 13.104.213.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D600 /* 13.104.214.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D680 /* 13.104.214.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D700 /* 13.104.215.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D780 /* 13.104.215.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D800 /* 13.104.216.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D900 /* 13.104.217.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68D980 /* 13.104.217.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68DA00 /* 13.104.218.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68DA80 /* 13.104.218.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68DB00 /* 13.104.219.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68DB80 /* 13.104.219.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68DC00 /* 13.104.220.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68DC80 /* 13.104.220.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68DD00 /* 13.104.221.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68DE00 /* 13.104.222.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68DF00 /* 13.104.223.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68DF80 /* 13.104.223.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D68DFC0 /* 13.104.223.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D690E00 /* 13.105.14.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D690E80 /* 13.105.14.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D690EC0 /* 13.105.14.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691000 /* 13.105.16.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691080 /* 13.105.16.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6910C0 /* 13.105.16.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691100 /* 13.105.17.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691140 /* 13.105.17.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691180 /* 13.105.17.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6911C0 /* 13.105.17.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691200 /* 13.105.18.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691240 /* 13.105.18.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6912A0 /* 13.105.18.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6912C0 /* 13.105.18.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691300 /* 13.105.19.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691380 /* 13.105.19.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691400 /* 13.105.20.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691480 /* 13.105.20.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6914C0 /* 13.105.20.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691500 /* 13.105.21.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691600 /* 13.105.22.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691700 /* 13.105.23.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691740 /* 13.105.23.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691780 /* 13.105.23.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691800 /* 13.105.24.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691900 /* 13.105.25.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691A00 /* 13.105.26.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691B00 /* 13.105.27.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691B80 /* 13.105.27.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691BA0 /* 13.105.27.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691BC0 /* 13.105.27.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691BE0 /* 13.105.27.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691C00 /* 13.105.28.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691C10 /* 13.105.28.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691C20 /* 13.105.28.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691C30 /* 13.105.28.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691C80 /* 13.105.28.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691D00 /* 13.105.29.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D691D80 /* 13.105.29.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D692400 /* 13.105.36.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D692420 /* 13.105.36.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D692430 /* 13.105.36.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D692440 /* 13.105.36.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D692460 /* 13.105.36.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D692480 /* 13.105.36.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6924C0 /* 13.105.36.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D692500 /* 13.105.37.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D692540 /* 13.105.37.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D692580 /* 13.105.37.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6925C0 /* 13.105.37.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693400 /* 13.105.52.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693420 /* 13.105.52.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693440 /* 13.105.52.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693450 /* 13.105.52.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693460 /* 13.105.52.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693480 /* 13.105.52.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6934C0 /* 13.105.52.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693500 /* 13.105.53.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693580 /* 13.105.53.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6935C0 /* 13.105.53.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693C00 /* 13.105.60.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693C20 /* 13.105.60.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693C30 /* 13.105.60.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693C40 /* 13.105.60.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693C60 /* 13.105.60.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693C80 /* 13.105.60.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693CA0 /* 13.105.60.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693CC0 /* 13.105.60.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693D00 /* 13.105.61.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693D10 /* 13.105.61.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693D20 /* 13.105.61.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693D40 /* 13.105.61.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D693D80 /* 13.105.61.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694200 /* 13.105.66.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694220 /* 13.105.66.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694240 /* 13.105.66.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694280 /* 13.105.66.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694290 /* 13.105.66.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6942A0 /* 13.105.66.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6942C0 /* 13.105.66.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694300 /* 13.105.67.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694380 /* 13.105.67.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694A00 /* 13.105.74.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694A20 /* 13.105.74.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694A30 /* 13.105.74.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694A40 /* 13.105.74.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694A60 /* 13.105.74.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694A80 /* 13.105.74.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694AC0 /* 13.105.74.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694B00 /* 13.105.75.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694B20 /* 13.105.75.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694B30 /* 13.105.75.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694B40 /* 13.105.75.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694B60 /* 13.105.75.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694B80 /* 13.105.75.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694BA0 /* 13.105.75.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694BC0 /* 13.105.75.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694BD0 /* 13.105.75.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D694BE0 /* 13.105.75.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696000 /* 13.105.96.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696040 /* 13.105.96.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696060 /* 13.105.96.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696070 /* 13.105.96.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696080 /* 13.105.96.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696100 /* 13.105.97.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696120 /* 13.105.97.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696140 /* 13.105.97.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696160 /* 13.105.97.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696180 /* 13.105.97.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696200 /* 13.105.98.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696220 /* 13.105.98.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696230 /* 13.105.98.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696240 /* 13.105.98.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696260 /* 13.105.98.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696280 /* 13.105.98.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6962A0 /* 13.105.98.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6962C0 /* 13.105.98.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6962D0 /* 13.105.98.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6962E0 /* 13.105.98.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696300 /* 13.105.99.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696340 /* 13.105.99.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696360 /* 13.105.99.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696370 /* 13.105.99.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696380 /* 13.105.99.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6963A0 /* 13.105.99.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6963C0 /* 13.105.99.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696400 /* 13.105.100.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696410 /* 13.105.100.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696420 /* 13.105.100.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696440 /* 13.105.100.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696480 /* 13.105.100.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6964A0 /* 13.105.100.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6964B0 /* 13.105.100.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6964C0 /* 13.105.100.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6964E0 /* 13.105.100.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696500 /* 13.105.101.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696520 /* 13.105.101.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696530 /* 13.105.101.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696540 /* 13.105.101.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696580 /* 13.105.101.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6965A0 /* 13.105.101.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6965B0 /* 13.105.101.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6965C0 /* 13.105.101.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6965E0 /* 13.105.101.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696600 /* 13.105.102.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696610 /* 13.105.102.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696620 /* 13.105.102.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696640 /* 13.105.102.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696680 /* 13.105.102.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6966A0 /* 13.105.102.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6966B0 /* 13.105.102.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6966C0 /* 13.105.102.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6966E0 /* 13.105.102.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696700 /* 13.105.103.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696710 /* 13.105.103.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696720 /* 13.105.103.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696740 /* 13.105.103.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696780 /* 13.105.103.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6967A0 /* 13.105.103.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6967B0 /* 13.105.103.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6967C0 /* 13.105.103.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6967E0 /* 13.105.103.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696800 /* 13.105.104.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696820 /* 13.105.104.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696840 /* 13.105.104.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696850 /* 13.105.104.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696860 /* 13.105.104.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696880 /* 13.105.104.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6968C0 /* 13.105.104.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6968E0 /* 13.105.104.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6968F0 /* 13.105.104.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696900 /* 13.105.105.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696920 /* 13.105.105.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696940 /* 13.105.105.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696960 /* 13.105.105.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696980 /* 13.105.105.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696990 /* 13.105.105.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6969A0 /* 13.105.105.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6969C0 /* 13.105.105.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696A00 /* 13.105.106.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696A20 /* 13.105.106.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696A30 /* 13.105.106.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696A40 /* 13.105.106.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696A60 /* 13.105.106.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696A80 /* 13.105.106.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696AA0 /* 13.105.106.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696AC0 /* 13.105.106.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D696AE0 /* 13.105.106.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D697258 /* 13.105.114.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D697260 /* 13.105.114.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D697280 /* 13.105.114.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6972C0 /* 13.105.114.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6972D0 /* 13.105.114.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D697400 /* 13.105.116.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14000000 /* 20.0.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14010000 /* 20.1.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14018000 /* 20.1.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14020000 /* 20.2.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14030000 /* 20.3.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14040000 /* 20.4.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14050000 /* 20.5.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14060000 /* 20.6.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14068000 /* 20.6.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14070000 /* 20.7.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14080000 /* 20.8.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14090000 /* 20.9.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14098000 /* 20.9.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140A0000 /* 20.10.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140B0000 /* 20.11.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140B8000 /* 20.11.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140C0000 /* 20.12.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140C8000 /* 20.12.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140D0000 /* 20.13.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140D8000 /* 20.13.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140E0000 /* 20.14.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140E8000 /* 20.14.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140F0000 /* 20.15.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x140F8000 /* 20.15.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14100000 /* 20.16.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14110000 /* 20.17.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14114000 /* 20.17.64.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14120000 /* 20.18.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14128000 /* 20.18.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14129000 /* 20.18.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412A000 /* 20.18.160.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412B000 /* 20.18.176.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1412C000 /* 20.18.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14130000 /* 20.19.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14142000 /* 20.20.32.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14142040 /* 20.20.32.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14142080 /* 20.20.32.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14150000 /* 20.21.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14160000 /* 20.22.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14170000 /* 20.23.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14180000 /* 20.24.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14184000 /* 20.24.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14188000 /* 20.24.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1418C000 /* 20.24.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14190000 /* 20.25.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14198000 /* 20.25.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1419C000 /* 20.25.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141A0000 /* 20.26.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141B0000 /* 20.27.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141B4000 /* 20.27.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141B8000 /* 20.27.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141BC000 /* 20.27.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141C0000 /* 20.28.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141C8000 /* 20.28.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141D0000 /* 20.29.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141D8000 /* 20.29.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141F0000 /* 20.31.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14210000 /* 20.33.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14240000 /* 20.36.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14242000 /* 20.36.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14244000 /* 20.36.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246000 /* 20.36.96.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14246800 /* 20.36.104.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14247000 /* 20.36.112.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14248000 /* 20.36.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14250000 /* 20.37.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14254000 /* 20.37.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14256000 /* 20.37.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14258000 /* 20.37.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425C000 /* 20.37.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1425E000 /* 20.37.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14260000 /* 20.38.0.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14261000 /* 20.38.16.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14261100 /* 20.38.17.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14261200 /* 20.38.18.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14261300 /* 20.38.19.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14261400 /* 20.38.20.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14261500 /* 20.38.21.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14261600 /* 20.38.22.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14261700 /* 20.38.23.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14261800 /* 20.38.24.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14262000 /* 20.38.32.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14264000 /* 20.38.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14266000 /* 20.38.96.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14266200 /* 20.38.98.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14266300 /* 20.38.99.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14266400 /* 20.38.100.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14266600 /* 20.38.102.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14266800 /* 20.38.104.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14266A00 /* 20.38.106.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14266C00 /* 20.38.108.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14266E00 /* 20.38.110.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267000 /* 20.38.112.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267200 /* 20.38.114.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267280 /* 20.38.114.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267300 /* 20.38.115.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267400 /* 20.38.116.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267600 /* 20.38.118.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267700 /* 20.38.119.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267800 /* 20.38.120.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267900 /* 20.38.121.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267980 /* 20.38.121.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267A00 /* 20.38.122.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267C00 /* 20.38.124.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14267E00 /* 20.38.126.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268000 /* 20.38.128.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14268800 /* 20.38.136.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269000 /* 20.38.144.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14269800 /* 20.38.152.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1426A000 /* 20.38.160.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1426B800 /* 20.38.184.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1426BC00 /* 20.38.188.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1426C400 /* 20.38.196.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1426C800 /* 20.38.200.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1426D000 /* 20.38.208.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14270000 /* 20.39.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14272000 /* 20.39.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14274000 /* 20.39.64.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14274800 /* 20.39.72.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14275000 /* 20.39.80.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14276000 /* 20.39.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14278000 /* 20.39.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14279000 /* 20.39.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427A000 /* 20.39.160.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427A800 /* 20.39.168.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427B000 /* 20.39.176.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427B800 /* 20.39.184.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427C000 /* 20.39.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427D000 /* 20.39.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427E000 /* 20.39.224.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427E800 /* 20.39.232.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1427F000 /* 20.39.240.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14280000 /* 20.40.0.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14280800 /* 20.40.8.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14281000 /* 20.40.16.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14281800 /* 20.40.24.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14282000 /* 20.40.32.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14282800 /* 20.40.40.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14283000 /* 20.40.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14284000 /* 20.40.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14285000 /* 20.40.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14285800 /* 20.40.88.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14286000 /* 20.40.96.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14286800 /* 20.40.104.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14287000 /* 20.40.112.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14287800 /* 20.40.120.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14288000 /* 20.40.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428A000 /* 20.40.160.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428B000 /* 20.40.176.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1428C000 /* 20.40.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14290000 /* 20.41.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14294000 /* 20.41.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14298000 /* 20.41.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1429C000 /* 20.41.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A0000 /* 20.42.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142A8000 /* 20.42.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AA000 /* 20.42.160.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AA800 /* 20.42.168.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AB000 /* 20.42.176.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AC000 /* 20.42.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142AE000 /* 20.42.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B0000 /* 20.43.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B2000 /* 20.43.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B4000 /* 20.43.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B6000 /* 20.43.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7000 /* 20.43.112.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B7800 /* 20.43.120.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142B8000 /* 20.43.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142BC000 /* 20.43.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0000 /* 20.44.0.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C0800 /* 20.44.8.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1000 /* 20.44.16.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C1800 /* 20.44.24.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C2000 /* 20.44.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C4000 /* 20.44.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142C8000 /* 20.44.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142CC000 /* 20.44.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D0000 /* 20.45.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D4000 /* 20.45.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D6000 /* 20.45.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7000 /* 20.45.112.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D7800 /* 20.45.120.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D8000 /* 20.45.128.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D8800 /* 20.45.136.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142D9000 /* 20.45.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DA000 /* 20.45.160.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DB000 /* 20.45.176.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142DC000 /* 20.45.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E0000 /* 20.46.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E2000 /* 20.46.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E4000 /* 20.46.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E6000 /* 20.46.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E7000 /* 20.46.112.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E8000 /* 20.46.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142E9000 /* 20.46.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142EA000 /* 20.46.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142EC000 /* 20.46.192.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142EC800 /* 20.46.200.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142ED000 /* 20.46.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142EE000 /* 20.46.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0000 /* 20.47.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0100 /* 20.47.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0200 /* 20.47.2.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0300 /* 20.47.3.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0400 /* 20.47.4.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0500 /* 20.47.5.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0600 /* 20.47.6.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0700 /* 20.47.7.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0800 /* 20.47.8.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0900 /* 20.47.9.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0A00 /* 20.47.10.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0B00 /* 20.47.11.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0C00 /* 20.47.12.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0D00 /* 20.47.13.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0E00 /* 20.47.14.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F0F00 /* 20.47.15.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1000 /* 20.47.16.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1200 /* 20.47.18.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1400 /* 20.47.20.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1600 /* 20.47.22.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1800 /* 20.47.24.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1A00 /* 20.47.26.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1B00 /* 20.47.27.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1C00 /* 20.47.28.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1D00 /* 20.47.29.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1E00 /* 20.47.30.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F1F00 /* 20.47.31.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2000 /* 20.47.32.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2100 /* 20.47.33.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2200 /* 20.47.34.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2300 /* 20.47.35.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2400 /* 20.47.36.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2500 /* 20.47.37.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2600 /* 20.47.38.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2700 /* 20.47.39.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2800 /* 20.47.40.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2900 /* 20.47.41.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2A00 /* 20.47.42.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2B00 /* 20.47.43.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2C00 /* 20.47.44.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2D00 /* 20.47.45.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2E00 /* 20.47.46.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F2F00 /* 20.47.47.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3000 /* 20.47.48.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3100 /* 20.47.49.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3200 /* 20.47.50.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3300 /* 20.47.51.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3400 /* 20.47.52.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3500 /* 20.47.53.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3600 /* 20.47.54.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3700 /* 20.47.55.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3800 /* 20.47.56.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3900 /* 20.47.57.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3A00 /* 20.47.58.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3C00 /* 20.47.60.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F3E00 /* 20.47.62.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F4000 /* 20.47.64.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F4100 /* 20.47.65.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F4200 /* 20.47.66.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F4300 /* 20.47.67.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F4400 /* 20.47.68.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F4500 /* 20.47.69.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F4600 /* 20.47.70.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F4700 /* 20.47.71.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F4800 /* 20.47.72.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F4A00 /* 20.47.74.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F4C00 /* 20.47.76.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F4E00 /* 20.47.78.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F5000 /* 20.47.80.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F5200 /* 20.47.82.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F5400 /* 20.47.84.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F5600 /* 20.47.86.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F5700 /* 20.47.87.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F5800 /* 20.47.88.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F5900 /* 20.47.89.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F5A00 /* 20.47.90.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F5B00 /* 20.47.91.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F5C00 /* 20.47.92.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F5D00 /* 20.47.93.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F5E00 /* 20.47.94.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F5F00 /* 20.47.95.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F6000 /* 20.47.96.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F6200 /* 20.47.98.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F6300 /* 20.47.99.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F6400 /* 20.47.100.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F6500 /* 20.47.101.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F6600 /* 20.47.102.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F6700 /* 20.47.103.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F6800 /* 20.47.104.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F6900 /* 20.47.105.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F6A00 /* 20.47.106.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F6B00 /* 20.47.107.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F6C00 /* 20.47.108.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F6E00 /* 20.47.110.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F6F00 /* 20.47.111.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F7000 /* 20.47.112.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F7100 /* 20.47.113.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F7200 /* 20.47.114.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F7300 /* 20.47.115.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F7400 /* 20.47.116.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F7500 /* 20.47.117.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F7600 /* 20.47.118.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F7700 /* 20.47.119.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F7800 /* 20.47.120.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F7A00 /* 20.47.122.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F7C00 /* 20.47.124.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F7E00 /* 20.47.126.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x142F8000 /* 20.47.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14300000 /* 20.48.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14308000 /* 20.48.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430C000 /* 20.48.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430D000 /* 20.48.208.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1430E000 /* 20.48.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14310000 /* 20.49.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14314000 /* 20.49.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315000 /* 20.49.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14315800 /* 20.49.88.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316000 /* 20.49.96.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14316800 /* 20.49.104.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317000 /* 20.49.112.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14317800 /* 20.49.120.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14318000 /* 20.49.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14320000 /* 20.50.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14324000 /* 20.50.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14325000 /* 20.50.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14325800 /* 20.50.88.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14326000 /* 20.50.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14328000 /* 20.50.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330000 /* 20.51.0.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14330800 /* 20.51.8.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331000 /* 20.51.16.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14331800 /* 20.51.24.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14332000 /* 20.51.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14334000 /* 20.51.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14338000 /* 20.51.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14340000 /* 20.52.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344000 /* 20.52.64.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14344800 /* 20.52.72.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345000 /* 20.52.80.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345020 /* 20.52.80.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345040 /* 20.52.80.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14345800 /* 20.52.88.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14346000 /* 20.52.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14348000 /* 20.52.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14350000 /* 20.53.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352000 /* 20.53.32.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14352800 /* 20.53.40.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353000 /* 20.53.48.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14353800 /* 20.53.56.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14354000 /* 20.53.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14358000 /* 20.53.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14360000 /* 20.54.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14368000 /* 20.54.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14370000 /* 20.55.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14378000 /* 20.55.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1437C000 /* 20.55.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14380000 /* 20.56.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14390000 /* 20.57.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14398000 /* 20.57.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1439C000 /* 20.57.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1439E000 /* 20.57.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A0000 /* 20.58.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A4000 /* 20.58.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143A8000 /* 20.58.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143AC000 /* 20.58.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B0000 /* 20.59.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B4000 /* 20.59.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143B8000 /* 20.59.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143BC000 /* 20.59.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0000 /* 20.60.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0100 /* 20.60.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0200 /* 20.60.2.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0400 /* 20.60.4.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0500 /* 20.60.5.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0600 /* 20.60.6.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0800 /* 20.60.8.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0900 /* 20.60.9.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0A00 /* 20.60.10.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0B00 /* 20.60.11.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0C00 /* 20.60.12.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0D00 /* 20.60.13.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0E00 /* 20.60.14.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C0F00 /* 20.60.15.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1000 /* 20.60.16.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1100 /* 20.60.17.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1200 /* 20.60.18.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1300 /* 20.60.19.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1400 /* 20.60.20.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1500 /* 20.60.21.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1600 /* 20.60.22.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1800 /* 20.60.24.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1A00 /* 20.60.26.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1C00 /* 20.60.28.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C1E00 /* 20.60.30.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C2000 /* 20.60.32.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C2200 /* 20.60.34.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C2400 /* 20.60.36.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C2600 /* 20.60.38.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C2800 /* 20.60.40.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C2A00 /* 20.60.42.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C2C00 /* 20.60.44.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C2E00 /* 20.60.46.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C3000 /* 20.60.48.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C3400 /* 20.60.52.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C3600 /* 20.60.54.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C3800 /* 20.60.56.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C3C00 /* 20.60.60.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C4000 /* 20.60.64.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C4400 /* 20.60.68.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C4800 /* 20.60.72.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C4C00 /* 20.60.76.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C4E00 /* 20.60.78.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C5000 /* 20.60.80.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C5200 /* 20.60.82.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C5400 /* 20.60.84.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C5600 /* 20.60.86.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C5800 /* 20.60.88.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C5C00 /* 20.60.92.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C5E00 /* 20.60.94.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C6000 /* 20.60.96.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C6200 /* 20.60.98.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C8000 /* 20.60.128.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C8200 /* 20.60.130.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C8300 /* 20.60.131.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C8400 /* 20.60.132.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C8600 /* 20.60.134.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C8800 /* 20.60.136.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C8A00 /* 20.60.138.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C8C00 /* 20.60.140.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C8E00 /* 20.60.142.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C9000 /* 20.60.144.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C9200 /* 20.60.146.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C9400 /* 20.60.148.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C9600 /* 20.60.150.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C9800 /* 20.60.152.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C9A00 /* 20.60.154.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C9C00 /* 20.60.156.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143C9E00 /* 20.60.158.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CA000 /* 20.60.160.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CA200 /* 20.60.162.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CA400 /* 20.60.164.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CA600 /* 20.60.166.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CA800 /* 20.60.168.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CAA00 /* 20.60.170.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CAC00 /* 20.60.172.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CAE00 /* 20.60.174.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CB000 /* 20.60.176.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CB200 /* 20.60.178.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CB400 /* 20.60.180.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CB600 /* 20.60.182.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CB800 /* 20.60.184.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CBA00 /* 20.60.186.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CBC00 /* 20.60.188.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CBE00 /* 20.60.190.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CC000 /* 20.60.192.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CC200 /* 20.60.194.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CC400 /* 20.60.196.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CC600 /* 20.60.198.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CC800 /* 20.60.200.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CCA00 /* 20.60.202.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CCC00 /* 20.60.204.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CCE00 /* 20.60.206.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CD000 /* 20.60.208.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CD200 /* 20.60.210.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CD400 /* 20.60.212.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CD600 /* 20.60.214.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CD800 /* 20.60.216.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CDA00 /* 20.60.218.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CDC00 /* 20.60.220.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CDE00 /* 20.60.222.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CE000 /* 20.60.224.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CE200 /* 20.60.226.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CE400 /* 20.60.228.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CE600 /* 20.60.230.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CE800 /* 20.60.232.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CEA00 /* 20.60.234.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CEC00 /* 20.60.236.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CEE00 /* 20.60.238.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CF000 /* 20.60.240.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CF200 /* 20.60.242.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CF400 /* 20.60.244.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CF600 /* 20.60.246.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CF800 /* 20.60.248.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CFA00 /* 20.60.250.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CFC00 /* 20.60.252.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143CFE00 /* 20.60.254.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143D0000 /* 20.61.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E0000 /* 20.62.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143E8000 /* 20.62.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143F0000 /* 20.63.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143F8000 /* 20.63.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x143FC000 /* 20.63.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14400000 /* 20.64.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14408000 /* 20.64.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14410000 /* 20.65.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14418000 /* 20.65.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14420000 /* 20.66.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14428000 /* 20.66.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14430000 /* 20.67.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14438000 /* 20.67.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14440000 /* 20.68.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14444000 /* 20.68.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14448000 /* 20.68.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14450000 /* 20.69.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14454000 /* 20.69.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14458000 /* 20.69.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1445C000 /* 20.69.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14460000 /* 20.70.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14464000 /* 20.70.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14468000 /* 20.70.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14470000 /* 20.71.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14480000 /* 20.72.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14482000 /* 20.72.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14484000 /* 20.72.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14488000 /* 20.72.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1448C000 /* 20.72.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14490000 /* 20.73.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144A0000 /* 20.74.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144A8000 /* 20.74.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144B0000 /* 20.75.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144B8000 /* 20.75.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144C0000 /* 20.76.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144D0000 /* 20.77.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144D8000 /* 20.77.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144DC000 /* 20.77.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144E0000 /* 20.78.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144E8000 /* 20.78.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144EC000 /* 20.78.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x144F0000 /* 20.79.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14500000 /* 20.80.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14504000 /* 20.80.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14508000 /* 20.80.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1450C000 /* 20.80.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14510000 /* 20.81.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14518000 /* 20.81.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14520000 /* 20.82.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14528000 /* 20.82.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14530000 /* 20.83.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14534000 /* 20.83.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14538000 /* 20.83.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1453C000 /* 20.83.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14540000 /* 20.84.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14548000 /* 20.84.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14550000 /* 20.85.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14558000 /* 20.85.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14560000 /* 20.86.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14570000 /* 20.87.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14578000 /* 20.87.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1457C000 /* 20.87.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14580000 /* 20.88.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14584000 /* 20.88.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14586000 /* 20.88.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14588000 /* 20.88.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1458C000 /* 20.88.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14590000 /* 20.89.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14598000 /* 20.89.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1459C000 /* 20.89.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A0000 /* 20.90.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A4000 /* 20.90.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145A8000 /* 20.90.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B0000 /* 20.91.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145B8000 /* 20.91.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C0000 /* 20.92.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C4000 /* 20.92.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145C8000 /* 20.92.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145D0000 /* 20.93.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145D8000 /* 20.93.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145E0000 /* 20.94.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145E8000 /* 20.94.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145EC000 /* 20.94.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F0000 /* 20.95.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F0100 /* 20.95.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F0200 /* 20.95.2.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F0300 /* 20.95.3.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F0400 /* 20.95.4.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F0500 /* 20.95.5.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F0600 /* 20.95.6.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F0700 /* 20.95.7.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F0800 /* 20.95.8.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1000 /* 20.95.16.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1100 /* 20.95.17.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1200 /* 20.95.18.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1300 /* 20.95.19.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1400 /* 20.95.20.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1500 /* 20.95.21.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1600 /* 20.95.22.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1700 /* 20.95.23.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1800 /* 20.95.24.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1900 /* 20.95.25.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1A00 /* 20.95.26.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1B00 /* 20.95.27.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1C00 /* 20.95.28.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1D00 /* 20.95.29.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1E00 /* 20.95.30.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F1F00 /* 20.95.31.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F2000 /* 20.95.32.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F2100 /* 20.95.33.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F2800 /* 20.95.40.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F3000 /* 20.95.48.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F3100 /* 20.95.49.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F3200 /* 20.95.50.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F3300 /* 20.95.51.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F3400 /* 20.95.52.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F3500 /* 20.95.53.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F4000 /* 20.95.64.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F4100 /* 20.95.65.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F4200 /* 20.95.66.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F4300 /* 20.95.67.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F4400 /* 20.95.68.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F4600 /* 20.95.70.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F4900 /* 20.95.73.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F4A00 /* 20.95.74.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F4C00 /* 20.95.76.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F4E00 /* 20.95.78.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F5000 /* 20.95.80.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F5100 /* 20.95.81.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F5200 /* 20.95.82.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F5400 /* 20.95.84.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F5500 /* 20.95.85.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F5600 /* 20.95.86.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F5700 /* 20.95.87.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F5800 /* 20.95.88.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F8000 /* 20.95.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F8100 /* 20.95.129.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F8800 /* 20.95.136.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F8900 /* 20.95.137.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F8A00 /* 20.95.138.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F8B00 /* 20.95.139.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F8C00 /* 20.95.140.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F8D00 /* 20.95.141.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145FC000 /* 20.95.192.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145FC800 /* 20.95.200.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145FD000 /* 20.95.208.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145FE000 /* 20.95.224.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145FF000 /* 20.95.240.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145FFF00 /* 20.95.255.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14600000 /* 20.96.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14610000 /* 20.97.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14618000 /* 20.97.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14620000 /* 20.98.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14624000 /* 20.98.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14628000 /* 20.98.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1462C000 /* 20.98.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14630000 /* 20.99.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14638000 /* 20.99.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14640000 /* 20.100.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14644000 /* 20.100.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14648000 /* 20.100.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14650000 /* 20.101.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14660000 /* 20.102.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14668000 /* 20.102.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1466C000 /* 20.102.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14670000 /* 20.103.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14680000 /* 20.104.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14688000 /* 20.104.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1468C000 /* 20.104.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14690000 /* 20.105.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14698000 /* 20.105.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A0000 /* 20.106.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A4000 /* 20.106.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146A8000 /* 20.106.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146B0000 /* 20.107.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146B8000 /* 20.107.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146C0000 /* 20.108.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146D0000 /* 20.109.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146D8000 /* 20.109.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146DC000 /* 20.109.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146E0000 /* 20.110.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F0000 /* 20.111.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x146F4000 /* 20.111.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14700000 /* 20.112.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14708000 /* 20.112.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1470A000 /* 20.112.160.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1470B000 /* 20.112.176.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1470B800 /* 20.112.184.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1470C000 /* 20.112.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14710000 /* 20.113.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14718000 /* 20.113.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1471C000 /* 20.113.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14720000 /* 20.114.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14724000 /* 20.114.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14728000 /* 20.114.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14730000 /* 20.115.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14738000 /* 20.115.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14740000 /* 20.116.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14750000 /* 20.117.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14754000 /* 20.117.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14758000 /* 20.117.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14760000 /* 20.118.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14764000 /* 20.118.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14768000 /* 20.118.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1476C000 /* 20.118.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14770000 /* 20.119.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14778000 /* 20.119.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14780000 /* 20.120.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14788000 /* 20.120.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14790000 /* 20.121.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147A0000 /* 20.122.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147B0000 /* 20.123.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147B8000 /* 20.123.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147C0000 /* 20.124.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D0000 /* 20.125.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D4000 /* 20.125.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147D8000 /* 20.125.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DA000 /* 20.125.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DC000 /* 20.125.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DE000 /* 20.125.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147DF000 /* 20.125.240.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147E0000 /* 20.126.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x147F0000 /* 20.127.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14870000 /* 20.135.0.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14870400 /* 20.135.4.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14870600 /* 20.135.6.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14870800 /* 20.135.8.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14870C00 /* 20.135.12.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14871000 /* 20.135.16.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14871200 /* 20.135.18.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14871400 /* 20.135.20.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14871600 /* 20.135.22.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14871800 /* 20.135.24.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14871A00 /* 20.135.26.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14871C00 /* 20.135.28.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14871E00 /* 20.135.30.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14872000 /* 20.135.32.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14872200 /* 20.135.34.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14872400 /* 20.135.36.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14872600 /* 20.135.38.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14872800 /* 20.135.40.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14872A00 /* 20.135.42.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14872C00 /* 20.135.44.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14872E00 /* 20.135.46.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14873000 /* 20.135.48.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14873200 /* 20.135.50.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14873400 /* 20.135.52.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14873600 /* 20.135.54.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14873800 /* 20.135.56.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14873A00 /* 20.135.58.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14873C00 /* 20.135.60.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14873E00 /* 20.135.62.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14874000 /* 20.135.64.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14874200 /* 20.135.66.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14874400 /* 20.135.68.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14874600 /* 20.135.70.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14874800 /* 20.135.72.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14874A00 /* 20.135.74.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14874C00 /* 20.135.76.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14874E00 /* 20.135.78.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14875000 /* 20.135.80.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14875400 /* 20.135.84.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14875800 /* 20.135.88.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14875A00 /* 20.135.90.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14875C00 /* 20.135.92.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14876000 /* 20.135.96.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14876400 /* 20.135.100.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14876600 /* 20.135.102.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14876800 /* 20.135.104.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14876C00 /* 20.135.108.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14877000 /* 20.135.112.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14877200 /* 20.135.114.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14877400 /* 20.135.116.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14877800 /* 20.135.120.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14878000 /* 20.135.128.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14878400 /* 20.135.132.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14878600 /* 20.135.134.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14878800 /* 20.135.136.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14878C00 /* 20.135.140.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14879000 /* 20.135.144.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14879200 /* 20.135.146.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14879400 /* 20.135.148.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14879800 /* 20.135.152.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14879C00 /* 20.135.156.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14879E00 /* 20.135.158.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487A000 /* 20.135.160.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487A400 /* 20.135.164.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487A800 /* 20.135.168.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487AA00 /* 20.135.170.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487AC00 /* 20.135.172.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487B000 /* 20.135.176.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487B400 /* 20.135.180.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487B600 /* 20.135.182.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487B800 /* 20.135.184.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487BC00 /* 20.135.188.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487C000 /* 20.135.192.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487C200 /* 20.135.194.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487C400 /* 20.135.196.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487C800 /* 20.135.200.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487CC00 /* 20.135.204.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487CE00 /* 20.135.206.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487D000 /* 20.135.208.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487D200 /* 20.135.210.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487D400 /* 20.135.212.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487D800 /* 20.135.216.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487DC00 /* 20.135.220.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487DE00 /* 20.135.222.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487E000 /* 20.135.224.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487E400 /* 20.135.228.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487E800 /* 20.135.232.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487EA00 /* 20.135.234.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487EC00 /* 20.135.236.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487EE00 /* 20.135.238.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487F000 /* 20.135.240.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487F200 /* 20.135.242.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487F400 /* 20.135.244.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487F800 /* 20.135.248.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487FA00 /* 20.135.250.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487FC00 /* 20.135.252.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1487FE00 /* 20.135.254.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14880000 /* 20.136.0.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14880080 /* 20.136.0.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14880100 /* 20.136.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14880200 /* 20.136.2.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14880300 /* 20.136.3.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14880380 /* 20.136.3.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14880400 /* 20.136.4.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14880500 /* 20.136.5.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14888000 /* 20.136.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14888100 /* 20.136.129.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F0000 /* 20.143.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F0100 /* 20.143.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F0200 /* 20.143.2.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F0300 /* 20.143.3.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F0400 /* 20.143.4.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F0500 /* 20.143.5.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F0600 /* 20.143.6.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F0800 /* 20.143.8.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F0A00 /* 20.143.10.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F0C00 /* 20.143.12.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F0D00 /* 20.143.13.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F0E00 /* 20.143.14.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F1000 /* 20.143.16.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F1400 /* 20.143.20.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F1800 /* 20.143.24.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F1A00 /* 20.143.26.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F1C00 /* 20.143.28.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F1E00 /* 20.143.30.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F2000 /* 20.143.32.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F2200 /* 20.143.34.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F2400 /* 20.143.36.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14960000 /* 20.150.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14960100 /* 20.150.1.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14960180 /* 20.150.1.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14960200 /* 20.150.2.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14960400 /* 20.150.4.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14960600 /* 20.150.6.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14960800 /* 20.150.8.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14960A00 /* 20.150.10.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14960C00 /* 20.150.12.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14960E00 /* 20.150.14.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961000 /* 20.150.16.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961100 /* 20.150.17.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961180 /* 20.150.17.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961200 /* 20.150.18.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961280 /* 20.150.18.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961300 /* 20.150.19.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961400 /* 20.150.20.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961480 /* 20.150.20.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961500 /* 20.150.21.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961600 /* 20.150.22.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961700 /* 20.150.23.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961800 /* 20.150.24.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961900 /* 20.150.25.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961A00 /* 20.150.26.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961B00 /* 20.150.27.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961C00 /* 20.150.28.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961D00 /* 20.150.29.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961E00 /* 20.150.30.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14961F00 /* 20.150.31.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962000 /* 20.150.32.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962200 /* 20.150.34.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962400 /* 20.150.36.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962500 /* 20.150.37.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962600 /* 20.150.38.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962800 /* 20.150.40.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962880 /* 20.150.40.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962900 /* 20.150.41.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962A00 /* 20.150.42.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962B00 /* 20.150.43.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962B80 /* 20.150.43.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962C00 /* 20.150.44.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962D00 /* 20.150.45.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962E00 /* 20.150.46.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962F00 /* 20.150.47.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14962F80 /* 20.150.47.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963000 /* 20.150.48.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963100 /* 20.150.49.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963200 /* 20.150.50.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963400 /* 20.150.52.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963500 /* 20.150.53.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963600 /* 20.150.54.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963700 /* 20.150.55.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963800 /* 20.150.56.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963900 /* 20.150.57.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963A00 /* 20.150.58.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963B00 /* 20.150.59.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963C00 /* 20.150.60.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963D00 /* 20.150.61.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963E00 /* 20.150.62.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14963F00 /* 20.150.63.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964000 /* 20.150.64.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964100 /* 20.150.65.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964200 /* 20.150.66.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964300 /* 20.150.67.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964400 /* 20.150.68.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964500 /* 20.150.69.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964600 /* 20.150.70.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964700 /* 20.150.71.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964800 /* 20.150.72.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964900 /* 20.150.73.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964A00 /* 20.150.74.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964B00 /* 20.150.75.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964C00 /* 20.150.76.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964D00 /* 20.150.77.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964E00 /* 20.150.78.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14964F00 /* 20.150.79.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965000 /* 20.150.80.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965100 /* 20.150.81.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965200 /* 20.150.82.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965300 /* 20.150.83.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965400 /* 20.150.84.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965500 /* 20.150.85.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965600 /* 20.150.86.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965700 /* 20.150.87.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965800 /* 20.150.88.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965900 /* 20.150.89.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965A00 /* 20.150.90.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965B00 /* 20.150.91.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965C00 /* 20.150.92.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965D00 /* 20.150.93.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965E00 /* 20.150.94.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14965F00 /* 20.150.95.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966000 /* 20.150.96.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966100 /* 20.150.97.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966200 /* 20.150.98.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966300 /* 20.150.99.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966400 /* 20.150.100.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966500 /* 20.150.101.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966600 /* 20.150.102.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966700 /* 20.150.103.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966800 /* 20.150.104.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966900 /* 20.150.105.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966A00 /* 20.150.106.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966B00 /* 20.150.107.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966C00 /* 20.150.108.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966D00 /* 20.150.109.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966E00 /* 20.150.110.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14966F00 /* 20.150.111.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967000 /* 20.150.112.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967100 /* 20.150.113.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967200 /* 20.150.114.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967300 /* 20.150.115.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967400 /* 20.150.116.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967500 /* 20.150.117.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967600 /* 20.150.118.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967700 /* 20.150.119.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967800 /* 20.150.120.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967900 /* 20.150.121.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967A00 /* 20.150.122.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967B00 /* 20.150.123.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967C00 /* 20.150.124.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967D00 /* 20.150.125.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967E00 /* 20.150.126.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14967F00 /* 20.150.127.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14968000 /* 20.150.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14970000 /* 20.151.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14980000 /* 20.152.0.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14980200 /* 20.152.2.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14980400 /* 20.152.4.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14980600 /* 20.152.6.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14980800 /* 20.152.8.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14980A00 /* 20.152.10.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14980C00 /* 20.152.12.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D0000 /* 20.157.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D0100 /* 20.157.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D0200 /* 20.157.2.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D0300 /* 20.157.3.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D0400 /* 20.157.4.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D0600 /* 20.157.6.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D0800 /* 20.157.8.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D0C00 /* 20.157.12.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1000 /* 20.157.16.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1100 /* 20.157.17.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1200 /* 20.157.18.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1300 /* 20.157.19.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1400 /* 20.157.20.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1500 /* 20.157.21.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1600 /* 20.157.22.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1700 /* 20.157.23.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1800 /* 20.157.24.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1900 /* 20.157.25.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1A00 /* 20.157.26.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1B00 /* 20.157.27.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1C00 /* 20.157.28.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1D00 /* 20.157.29.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1E00 /* 20.157.30.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D1F00 /* 20.157.31.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2000 /* 20.157.32.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2100 /* 20.157.33.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2200 /* 20.157.34.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2400 /* 20.157.36.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2600 /* 20.157.38.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2700 /* 20.157.39.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2800 /* 20.157.40.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2900 /* 20.157.41.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2A00 /* 20.157.42.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2B00 /* 20.157.43.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2C00 /* 20.157.44.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2D00 /* 20.157.45.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2E00 /* 20.157.46.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D2F00 /* 20.157.47.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3000 /* 20.157.48.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3200 /* 20.157.50.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3400 /* 20.157.52.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3500 /* 20.157.53.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3600 /* 20.157.54.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3700 /* 20.157.55.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3800 /* 20.157.56.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3900 /* 20.157.57.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3A00 /* 20.157.58.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3B00 /* 20.157.59.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3C00 /* 20.157.60.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3D00 /* 20.157.61.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D3E00 /* 20.157.62.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D4000 /* 20.157.64.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D4800 /* 20.157.72.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D4900 /* 20.157.73.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D4A00 /* 20.157.74.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D4B00 /* 20.157.75.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D4C00 /* 20.157.76.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D5000 /* 20.157.80.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D5400 /* 20.157.84.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D5500 /* 20.157.85.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D5600 /* 20.157.86.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D5700 /* 20.157.87.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D5800 /* 20.157.88.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D5900 /* 20.157.89.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D5A00 /* 20.157.90.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D5B00 /* 20.157.91.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D5C00 /* 20.157.92.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D5D00 /* 20.157.93.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D5E00 /* 20.157.94.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D5F00 /* 20.157.95.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D6000 /* 20.157.96.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D6100 /* 20.157.97.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D6200 /* 20.157.98.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D6300 /* 20.157.99.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D6400 /* 20.157.100.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D6500 /* 20.157.101.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D6600 /* 20.157.102.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D6700 /* 20.157.103.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D6800 /* 20.157.104.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D6D00 /* 20.157.109.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D6E00 /* 20.157.110.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D6F00 /* 20.157.111.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7000 /* 20.157.112.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7100 /* 20.157.113.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7200 /* 20.157.114.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7300 /* 20.157.115.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7400 /* 20.157.116.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7500 /* 20.157.117.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7600 /* 20.157.118.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7700 /* 20.157.119.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7800 /* 20.157.120.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7900 /* 20.157.121.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7A00 /* 20.157.122.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7B00 /* 20.157.123.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7C00 /* 20.157.124.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7D00 /* 20.157.125.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7E00 /* 20.157.126.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D7F00 /* 20.157.127.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8000 /* 20.157.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8100 /* 20.157.129.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8200 /* 20.157.130.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8300 /* 20.157.131.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8400 /* 20.157.132.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8500 /* 20.157.133.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8600 /* 20.157.134.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8700 /* 20.157.135.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8800 /* 20.157.136.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8900 /* 20.157.137.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8A00 /* 20.157.138.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8B00 /* 20.157.139.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8C00 /* 20.157.140.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8D00 /* 20.157.141.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D8E00 /* 20.157.142.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9000 /* 20.157.144.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9100 /* 20.157.145.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9200 /* 20.157.146.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9300 /* 20.157.147.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9400 /* 20.157.148.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9500 /* 20.157.149.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9600 /* 20.157.150.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9700 /* 20.157.151.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9800 /* 20.157.152.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9900 /* 20.157.153.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9A00 /* 20.157.154.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9B00 /* 20.157.155.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9C00 /* 20.157.156.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9D00 /* 20.157.157.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9E00 /* 20.157.158.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149D9F00 /* 20.157.159.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DA000 /* 20.157.160.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DA100 /* 20.157.161.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DA200 /* 20.157.162.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DA300 /* 20.157.163.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DA400 /* 20.157.164.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DA500 /* 20.157.165.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DA600 /* 20.157.166.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DA700 /* 20.157.167.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DA800 /* 20.157.168.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DA900 /* 20.157.169.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DAA00 /* 20.157.170.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DAB00 /* 20.157.171.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DAC00 /* 20.157.172.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DAD00 /* 20.157.173.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DAE00 /* 20.157.174.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DAF00 /* 20.157.175.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DB000 /* 20.157.176.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DB100 /* 20.157.177.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DB200 /* 20.157.178.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DB300 /* 20.157.179.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DB400 /* 20.157.180.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DB500 /* 20.157.181.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DB600 /* 20.157.182.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DB700 /* 20.157.183.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DB800 /* 20.157.184.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DB900 /* 20.157.185.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DBA00 /* 20.157.186.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DBB00 /* 20.157.187.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DBC00 /* 20.157.188.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DBD00 /* 20.157.189.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DBE00 /* 20.157.190.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DBF00 /* 20.157.191.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DC000 /* 20.157.192.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DC100 /* 20.157.193.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DC200 /* 20.157.194.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DC300 /* 20.157.195.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DC400 /* 20.157.196.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DC500 /* 20.157.197.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DC600 /* 20.157.198.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DC700 /* 20.157.199.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DC800 /* 20.157.200.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DC900 /* 20.157.201.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DCA00 /* 20.157.202.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DCB00 /* 20.157.203.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DCC00 /* 20.157.204.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DCD00 /* 20.157.205.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DCE00 /* 20.157.206.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DD000 /* 20.157.208.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DD100 /* 20.157.209.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DD200 /* 20.157.210.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DD400 /* 20.157.212.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DD500 /* 20.157.213.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DD600 /* 20.157.214.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DD700 /* 20.157.215.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DD800 /* 20.157.216.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DD900 /* 20.157.217.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DDA00 /* 20.157.218.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DDB00 /* 20.157.219.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DDC00 /* 20.157.220.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DDD00 /* 20.157.221.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DDE00 /* 20.157.222.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DDF00 /* 20.157.223.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DE000 /* 20.157.224.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DE100 /* 20.157.225.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DE200 /* 20.157.226.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DE300 /* 20.157.227.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DE400 /* 20.157.228.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DE500 /* 20.157.229.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DE600 /* 20.157.230.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DE700 /* 20.157.231.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DE800 /* 20.157.232.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DE900 /* 20.157.233.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DEA00 /* 20.157.234.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DEB00 /* 20.157.235.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DEC00 /* 20.157.236.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DED00 /* 20.157.237.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DEE00 /* 20.157.238.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DEF00 /* 20.157.239.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DF000 /* 20.157.240.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DF100 /* 20.157.241.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DF200 /* 20.157.242.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DF300 /* 20.157.243.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DF400 /* 20.157.244.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DF500 /* 20.157.245.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DF600 /* 20.157.246.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DF700 /* 20.157.247.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DF800 /* 20.157.248.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x149DF900 /* 20.157.249.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A00000 /* 20.160.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A10000 /* 20.161.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A20000 /* 20.162.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A28000 /* 20.162.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A30000 /* 20.163.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A38000 /* 20.163.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A40000 /* 20.164.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A50000 /* 20.165.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A58000 /* 20.165.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A60000 /* 20.166.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A70000 /* 20.167.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A78000 /* 20.167.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A80000 /* 20.168.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A88000 /* 20.168.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A000 /* 20.168.160.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8A800 /* 20.168.168.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8B000 /* 20.168.176.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A8C000 /* 20.168.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A90000 /* 20.169.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14A98000 /* 20.169.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AA0000 /* 20.170.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AA8000 /* 20.170.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AAA000 /* 20.170.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AAC000 /* 20.170.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AB0000 /* 20.171.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AC0000 /* 20.172.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AC8000 /* 20.172.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AD0000 /* 20.173.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AE0000 /* 20.174.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AF0000 /* 20.175.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14AF8000 /* 20.175.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B80000 /* 20.184.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B84000 /* 20.184.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B88000 /* 20.184.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14B90000 /* 20.185.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BA0000 /* 20.186.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BA8000 /* 20.186.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BAC000 /* 20.186.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BB0000 /* 20.187.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BB4000 /* 20.187.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BB8000 /* 20.187.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBC000 /* 20.187.192.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BBE000 /* 20.187.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC0000 /* 20.188.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC2000 /* 20.188.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC4000 /* 20.188.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC6000 /* 20.188.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BC8000 /* 20.188.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD0000 /* 20.189.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD4000 /* 20.189.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BD8000 /* 20.189.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BDC000 /* 20.189.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE0000 /* 20.190.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE4000 /* 20.190.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE6000 /* 20.190.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8000 /* 20.190.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8100 /* 20.190.129.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8200 /* 20.190.130.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8300 /* 20.190.131.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8400 /* 20.190.132.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8500 /* 20.190.133.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8600 /* 20.190.134.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8700 /* 20.190.135.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8800 /* 20.190.136.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8900 /* 20.190.137.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8A00 /* 20.190.138.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8A80 /* 20.190.138.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8B00 /* 20.190.139.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8B80 /* 20.190.139.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8C00 /* 20.190.140.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8C80 /* 20.190.140.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8D00 /* 20.190.141.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8D80 /* 20.190.141.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8E00 /* 20.190.142.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8E80 /* 20.190.142.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8F00 /* 20.190.143.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE8F80 /* 20.190.143.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9000 /* 20.190.144.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9080 /* 20.190.144.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9100 /* 20.190.145.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9180 /* 20.190.145.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9200 /* 20.190.146.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9280 /* 20.190.146.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9300 /* 20.190.147.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9380 /* 20.190.147.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9400 /* 20.190.148.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9480 /* 20.190.148.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9500 /* 20.190.149.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9600 /* 20.190.150.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9700 /* 20.190.151.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9800 /* 20.190.152.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9900 /* 20.190.153.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9A00 /* 20.190.154.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9B00 /* 20.190.155.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9C00 /* 20.190.156.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9D00 /* 20.190.157.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9E00 /* 20.190.158.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BE9F00 /* 20.190.159.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA000 /* 20.190.160.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA100 /* 20.190.161.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA200 /* 20.190.162.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA300 /* 20.190.163.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA400 /* 20.190.164.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA500 /* 20.190.165.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA600 /* 20.190.166.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA700 /* 20.190.167.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA800 /* 20.190.168.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEA900 /* 20.190.169.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAA00 /* 20.190.170.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAB00 /* 20.190.171.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAC00 /* 20.190.172.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAD00 /* 20.190.173.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAE00 /* 20.190.174.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEAF00 /* 20.190.175.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB000 /* 20.190.176.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB100 /* 20.190.177.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB200 /* 20.190.178.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB300 /* 20.190.179.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB400 /* 20.190.180.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB500 /* 20.190.181.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB600 /* 20.190.182.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB700 /* 20.190.183.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB800 /* 20.190.184.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEB900 /* 20.190.185.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBA00 /* 20.190.186.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBB00 /* 20.190.187.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBC00 /* 20.190.188.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBD00 /* 20.190.189.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBD40 /* 20.190.189.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBD80 /* 20.190.189.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBDC0 /* 20.190.189.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBE00 /* 20.190.190.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBE40 /* 20.190.190.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBE80 /* 20.190.190.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBF00 /* 20.190.191.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBF40 /* 20.190.191.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBF80 /* 20.190.191.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEBFC0 /* 20.190.191.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BEC000 /* 20.190.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BF0000 /* 20.191.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BF4000 /* 20.191.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BF8000 /* 20.191.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFA000 /* 20.191.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14BFC000 /* 20.191.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C00000 /* 20.192.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02000 /* 20.192.32.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C02800 /* 20.192.40.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03000 /* 20.192.48.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C03800 /* 20.192.56.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C04000 /* 20.192.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06000 /* 20.192.96.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C06800 /* 20.192.104.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C07000 /* 20.192.112.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C08000 /* 20.192.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A000 /* 20.192.160.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0A800 /* 20.192.168.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0B000 /* 20.192.176.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0B800 /* 20.192.184.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0C000 /* 20.192.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0E000 /* 20.192.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C0F000 /* 20.192.240.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C10000 /* 20.193.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C14000 /* 20.193.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C16000 /* 20.193.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C18000 /* 20.193.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1A000 /* 20.193.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1C000 /* 20.193.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1D000 /* 20.193.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C1E000 /* 20.193.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C20000 /* 20.194.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C24000 /* 20.194.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C25000 /* 20.194.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C26000 /* 20.194.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C28000 /* 20.194.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C30000 /* 20.195.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34000 /* 20.195.64.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C34800 /* 20.195.72.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35000 /* 20.195.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C35800 /* 20.195.88.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C36000 /* 20.195.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C38000 /* 20.195.128.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C38800 /* 20.195.136.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C39000 /* 20.195.144.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C39800 /* 20.195.152.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C3A000 /* 20.195.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C3C000 /* 20.195.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C40000 /* 20.196.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C44000 /* 20.196.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C48000 /* 20.196.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C50000 /* 20.197.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C54000 /* 20.197.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C58000 /* 20.197.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C60000 /* 20.198.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C68000 /* 20.198.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C70000 /* 20.199.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C78000 /* 20.199.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C7C000 /* 20.199.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C80000 /* 20.200.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C84000 /* 20.200.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C88000 /* 20.200.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C8C000 /* 20.200.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C90000 /* 20.201.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C98000 /* 20.201.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C98100 /* 20.201.129.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C98200 /* 20.201.130.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C98400 /* 20.201.132.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C98600 /* 20.201.134.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C98700 /* 20.201.135.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C98800 /* 20.201.136.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C98900 /* 20.201.137.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C98A00 /* 20.201.138.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C98C00 /* 20.201.140.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C98E00 /* 20.201.142.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C98F00 /* 20.201.143.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C99000 /* 20.201.144.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C99200 /* 20.201.146.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C99300 /* 20.201.147.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C99400 /* 20.201.148.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C99500 /* 20.201.149.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C99600 /* 20.201.150.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C99700 /* 20.201.151.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C99800 /* 20.201.152.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C99A00 /* 20.201.154.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C99B00 /* 20.201.155.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C99C00 /* 20.201.156.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C9DF00 /* 20.201.223.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C9E000 /* 20.201.224.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C9E700 /* 20.201.231.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA0000 /* 20.202.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA0100 /* 20.202.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA0200 /* 20.202.2.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA0300 /* 20.202.3.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA0400 /* 20.202.4.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA0500 /* 20.202.5.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA0600 /* 20.202.6.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA0800 /* 20.202.8.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA0C00 /* 20.202.12.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA1000 /* 20.202.16.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA1400 /* 20.202.20.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA1500 /* 20.202.21.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA1600 /* 20.202.22.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA1700 /* 20.202.23.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA1800 /* 20.202.24.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA1900 /* 20.202.25.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA1A00 /* 20.202.26.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA1C00 /* 20.202.28.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA1E00 /* 20.202.30.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA1F00 /* 20.202.31.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA2000 /* 20.202.32.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA2200 /* 20.202.34.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA2300 /* 20.202.35.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA2400 /* 20.202.36.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA2600 /* 20.202.38.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA2700 /* 20.202.39.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA2800 /* 20.202.40.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA2900 /* 20.202.41.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA2A00 /* 20.202.42.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA2B00 /* 20.202.43.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA2C00 /* 20.202.44.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA3000 /* 20.202.48.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA3200 /* 20.202.50.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA3400 /* 20.202.52.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA3600 /* 20.202.54.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA3800 /* 20.202.56.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA3A00 /* 20.202.58.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA3B00 /* 20.202.59.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA3C00 /* 20.202.60.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA3D00 /* 20.202.61.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA3E00 /* 20.202.62.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA3F00 /* 20.202.63.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA4000 /* 20.202.64.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA4100 /* 20.202.65.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA4200 /* 20.202.66.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA4400 /* 20.202.68.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA4500 /* 20.202.69.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA4600 /* 20.202.70.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA4700 /* 20.202.71.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA4800 /* 20.202.72.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA4900 /* 20.202.73.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA4A00 /* 20.202.74.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA4B00 /* 20.202.75.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA4C00 /* 20.202.76.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA4E00 /* 20.202.78.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA4F00 /* 20.202.79.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA5000 /* 20.202.80.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA5400 /* 20.202.84.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA5500 /* 20.202.85.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA5600 /* 20.202.86.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA5700 /* 20.202.87.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA5800 /* 20.202.88.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA5900 /* 20.202.89.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA5A00 /* 20.202.90.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA5B00 /* 20.202.91.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA5C00 /* 20.202.92.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA5D00 /* 20.202.93.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA5E00 /* 20.202.94.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA5F00 /* 20.202.95.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA6000 /* 20.202.96.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA6100 /* 20.202.97.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA6200 /* 20.202.98.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA6300 /* 20.202.99.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA6400 /* 20.202.100.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA6600 /* 20.202.102.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA6800 /* 20.202.104.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA6900 /* 20.202.105.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA6A00 /* 20.202.106.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA6B00 /* 20.202.107.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA6C00 /* 20.202.108.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA6D00 /* 20.202.109.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA6E00 /* 20.202.110.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA6F00 /* 20.202.111.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA7000 /* 20.202.112.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA7100 /* 20.202.113.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA7200 /* 20.202.114.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA7300 /* 20.202.115.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA7400 /* 20.202.116.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA7500 /* 20.202.117.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA7600 /* 20.202.118.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA7700 /* 20.202.119.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA7800 /* 20.202.120.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA7C00 /* 20.202.124.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA7D00 /* 20.202.125.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA7E00 /* 20.202.126.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA7F00 /* 20.202.127.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA8000 /* 20.202.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA8100 /* 20.202.129.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA8200 /* 20.202.130.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA8300 /* 20.202.131.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA8400 /* 20.202.132.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA8500 /* 20.202.133.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA8600 /* 20.202.134.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA8700 /* 20.202.135.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA8800 /* 20.202.136.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA8900 /* 20.202.137.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA8A00 /* 20.202.138.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA8B00 /* 20.202.139.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA8C00 /* 20.202.140.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA8D00 /* 20.202.141.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA8E00 /* 20.202.142.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA9000 /* 20.202.144.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA9400 /* 20.202.148.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA9600 /* 20.202.150.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA9700 /* 20.202.151.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA9800 /* 20.202.152.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA9900 /* 20.202.153.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA9A00 /* 20.202.154.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA9B00 /* 20.202.155.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA9C00 /* 20.202.156.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA9D00 /* 20.202.157.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA9E00 /* 20.202.158.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CA9F00 /* 20.202.159.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CAA000 /* 20.202.160.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CAA100 /* 20.202.161.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CAA200 /* 20.202.162.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CAA300 /* 20.202.163.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CAA400 /* 20.202.164.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CAA500 /* 20.202.165.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CAA600 /* 20.202.166.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB0000 /* 20.203.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB4000 /* 20.203.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5000 /* 20.203.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB5800 /* 20.203.88.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB6000 /* 20.203.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CB8000 /* 20.203.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CC0000 /* 20.204.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD0000 /* 20.205.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD4000 /* 20.205.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD5000 /* 20.205.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD6000 /* 20.205.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD8000 /* 20.205.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CD9000 /* 20.205.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CDA000 /* 20.205.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CDC000 /* 20.205.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE0000 /* 20.206.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE4000 /* 20.206.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CE8000 /* 20.206.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF0000 /* 20.207.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF4000 /* 20.207.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CF8000 /* 20.207.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CFC000 /* 20.207.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CFE000 /* 20.207.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D00000 /* 20.208.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D08000 /* 20.208.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D0C000 /* 20.208.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D10000 /* 20.209.0.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D10200 /* 20.209.2.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D10400 /* 20.209.4.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D10600 /* 20.209.6.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D10800 /* 20.209.8.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D10A00 /* 20.209.10.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D10C00 /* 20.209.12.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D10E00 /* 20.209.14.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D11000 /* 20.209.16.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D11200 /* 20.209.18.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D11400 /* 20.209.20.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D11600 /* 20.209.22.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D11800 /* 20.209.24.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D11A00 /* 20.209.26.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D11C00 /* 20.209.28.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D11E00 /* 20.209.30.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D12000 /* 20.209.32.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D12200 /* 20.209.34.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D12400 /* 20.209.36.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D12600 /* 20.209.38.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D12800 /* 20.209.40.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D12A00 /* 20.209.42.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D12C00 /* 20.209.44.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D12E00 /* 20.209.46.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D13000 /* 20.209.48.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D13200 /* 20.209.50.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D13400 /* 20.209.52.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D13600 /* 20.209.54.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D13800 /* 20.209.56.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D13A00 /* 20.209.58.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D13C00 /* 20.209.60.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D13E00 /* 20.209.62.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D14000 /* 20.209.64.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D14200 /* 20.209.66.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D14400 /* 20.209.68.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D14600 /* 20.209.70.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D14800 /* 20.209.72.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D14A00 /* 20.209.74.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D14C00 /* 20.209.76.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D14E00 /* 20.209.78.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D15000 /* 20.209.80.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D15200 /* 20.209.82.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D15400 /* 20.209.84.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D15600 /* 20.209.86.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D15800 /* 20.209.88.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D15A00 /* 20.209.90.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D15C00 /* 20.209.92.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D15E00 /* 20.209.94.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D16000 /* 20.209.96.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D16200 /* 20.209.98.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D16400 /* 20.209.100.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D16600 /* 20.209.102.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D16800 /* 20.209.104.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D16A00 /* 20.209.106.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D16C00 /* 20.209.108.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D16E00 /* 20.209.110.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D20000 /* 20.210.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D28000 /* 20.210.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D2C000 /* 20.210.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D30000 /* 20.211.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D38000 /* 20.211.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D3C000 /* 20.211.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D40000 /* 20.212.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D50000 /* 20.213.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D58000 /* 20.213.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5C000 /* 20.213.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5D000 /* 20.213.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D5E000 /* 20.213.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D60000 /* 20.214.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D64000 /* 20.214.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D68000 /* 20.214.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D70000 /* 20.215.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D78000 /* 20.215.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D80000 /* 20.216.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D84000 /* 20.216.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D88000 /* 20.216.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D90000 /* 20.217.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92000 /* 20.217.32.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D92800 /* 20.217.40.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D93000 /* 20.217.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14D94000 /* 20.217.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DA0000 /* 20.218.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DA4000 /* 20.218.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DA8000 /* 20.218.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DB0000 /* 20.219.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DB4000 /* 20.219.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DB8000 /* 20.219.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DC0000 /* 20.220.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DC4000 /* 20.220.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DC8000 /* 20.220.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DD0000 /* 20.221.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DD8000 /* 20.221.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DDC000 /* 20.221.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DE0000 /* 20.222.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14DF0000 /* 20.223.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E00000 /* 20.224.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E10000 /* 20.225.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E20000 /* 20.226.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E30000 /* 20.227.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E34000 /* 20.227.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E38000 /* 20.227.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E40000 /* 20.228.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E44000 /* 20.228.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E48000 /* 20.228.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E50000 /* 20.229.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E60000 /* 20.230.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E68000 /* 20.230.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E70000 /* 20.231.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E78000 /* 20.231.128.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E78040 /* 20.231.128.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E78080 /* 20.231.128.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E7C000 /* 20.231.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E80000 /* 20.232.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14E90000 /* 20.233.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EA0000 /* 20.234.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EA8000 /* 20.234.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EB0000 /* 20.235.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EB4000 /* 20.235.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EB8000 /* 20.235.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EBC000 /* 20.235.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EC0000 /* 20.236.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EC4000 /* 20.236.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EC8000 /* 20.236.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14ECC000 /* 20.236.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14ED0000 /* 20.237.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14ED8000 /* 20.237.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EE0000 /* 20.238.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EE8000 /* 20.238.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14EF0000 /* 20.239.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F00000 /* 20.240.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F04000 /* 20.240.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F08000 /* 20.240.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F10000 /* 20.241.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F18000 /* 20.241.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F20000 /* 20.242.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F28000 /* 20.242.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F30000 /* 20.243.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F40000 /* 20.244.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F48000 /* 20.244.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F50000 /* 20.245.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F60000 /* 20.246.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F68000 /* 20.246.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F70000 /* 20.247.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F78000 /* 20.247.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F80000 /* 20.248.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F88000 /* 20.248.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14F90000 /* 20.249.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14FA0000 /* 20.250.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14FB0000 /* 20.251.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14FC0000 /* 20.252.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14FC8000 /* 20.252.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14FD0000 /* 20.253.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14FD8000 /* 20.253.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14FE0000 /* 20.254.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14FE8000 /* 20.254.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14FF0000 /* 20.255.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17600000 /* 23.96.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17608000 /* 23.96.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17613000 /* 23.97.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17614000 /* 23.97.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17616000 /* 23.97.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17617000 /* 23.97.112.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17617080 /* 23.97.112.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176170A0 /* 23.97.112.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176170C0 /* 23.97.112.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x176170E0 /* 23.97.112.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17617400 /* 23.97.116.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17617800 /* 23.97.120.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17618000 /* 23.97.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17622000 /* 23.98.32.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17622800 /* 23.98.40.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17622C00 /* 23.98.44.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17622D00 /* 23.98.45.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17622E00 /* 23.98.46.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17622F00 /* 23.98.47.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17623000 /* 23.98.48.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17623800 /* 23.98.56.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17623940 /* 23.98.57.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17624000 /* 23.98.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17628000 /* 23.98.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17630000 /* 23.99.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17634000 /* 23.99.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17636000 /* 23.99.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17638000 /* 23.99.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17640000 /* 23.100.0.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17641000 /* 23.100.16.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17642000 /* 23.100.32.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17643000 /* 23.100.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17644000 /* 23.100.64.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17644800 /* 23.100.72.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17645000 /* 23.100.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17645800 /* 23.100.88.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17646000 /* 23.100.96.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17646800 /* 23.100.104.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17647000 /* 23.100.112.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17647800 /* 23.100.120.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17648000 /* 23.100.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764C000 /* 23.100.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764E000 /* 23.100.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1764F000 /* 23.100.240.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17650000 /* 23.101.0.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17651000 /* 23.101.16.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17652000 /* 23.101.32.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17653000 /* 23.101.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17654000 /* 23.101.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17655000 /* 23.101.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17657000 /* 23.101.112.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17658000 /* 23.101.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17659000 /* 23.101.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765A000 /* 23.101.160.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765B000 /* 23.101.176.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765C000 /* 23.101.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765D000 /* 23.101.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1765E000 /* 23.101.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17660000 /* 23.102.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17664000 /* 23.102.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17666000 /* 23.102.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17668000 /* 23.102.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766C000 /* 23.102.192.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766C800 /* 23.102.200.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766CA00 /* 23.102.202.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766CB00 /* 23.102.203.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766CC00 /* 23.102.204.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766D000 /* 23.102.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1766E000 /* 23.102.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17674020 /* 23.103.64.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17674040 /* 23.103.64.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28400000 /* 40.64.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28404000 /* 40.64.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28408000 /* 40.64.128.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28410000 /* 40.65.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28414000 /* 40.65.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28418000 /* 40.65.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2841C000 /* 40.65.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28422000 /* 40.66.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28427800 /* 40.66.120.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28430000 /* 40.67.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28434000 /* 40.67.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28436000 /* 40.67.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28437000 /* 40.67.112.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28437800 /* 40.67.120.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28438000 /* 40.67.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2843A000 /* 40.67.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2843C000 /* 40.67.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2843E000 /* 40.67.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28440000 /* 40.68.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28450000 /* 40.69.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28454000 /* 40.69.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28456000 /* 40.69.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28458000 /* 40.69.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2845C000 /* 40.69.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28460000 /* 40.70.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28464000 /* 40.70.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28465000 /* 40.70.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28465800 /* 40.70.88.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28468000 /* 40.70.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28470000 /* 40.71.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A0000 /* 40.74.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A4000 /* 40.74.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A8000 /* 40.74.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284A9000 /* 40.74.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284AA000 /* 40.74.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284AC000 /* 40.74.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B0000 /* 40.75.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B2000 /* 40.75.32.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B4000 /* 40.75.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284B8000 /* 40.75.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284C0000 /* 40.76.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D0000 /* 40.77.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8000 /* 40.77.128.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8080 /* 40.77.128.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8100 /* 40.77.129.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8200 /* 40.77.130.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8280 /* 40.77.130.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D82C0 /* 40.77.130.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8300 /* 40.77.131.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8380 /* 40.77.131.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D83C0 /* 40.77.131.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D83E0 /* 40.77.131.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D83F0 /* 40.77.131.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8400 /* 40.77.132.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8500 /* 40.77.133.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8600 /* 40.77.134.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8700 /* 40.77.135.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8800 /* 40.77.136.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8810 /* 40.77.136.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8820 /* 40.77.136.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8830 /* 40.77.136.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8840 /* 40.77.136.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8850 /* 40.77.136.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8860 /* 40.77.136.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8870 /* 40.77.136.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8880 /* 40.77.136.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8900 /* 40.77.137.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8980 /* 40.77.137.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D89C0 /* 40.77.137.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8A00 /* 40.77.138.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8A80 /* 40.77.138.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8B00 /* 40.77.139.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284D8B80 /* 40.77.139.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA000 /* 40.77.160.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA020 /* 40.77.160.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA040 /* 40.77.160.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA080 /* 40.77.160.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA100 /* 40.77.161.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA140 /* 40.77.161.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA180 /* 40.77.161.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA200 /* 40.77.162.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA300 /* 40.77.163.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA400 /* 40.77.164.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA500 /* 40.77.165.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA600 /* 40.77.166.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA680 /* 40.77.166.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA6A0 /* 40.77.166.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA6C0 /* 40.77.166.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA700 /* 40.77.167.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA800 /* 40.77.168.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DA900 /* 40.77.169.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DAA00 /* 40.77.170.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DAB00 /* 40.77.171.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DAC00 /* 40.77.172.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DAD00 /* 40.77.173.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DAE00 /* 40.77.174.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DAF00 /* 40.77.175.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DAF20 /* 40.77.175.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DAF40 /* 40.77.175.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DAF60 /* 40.77.175.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DAF80 /* 40.77.175.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DAFA0 /* 40.77.175.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DAFC0 /* 40.77.175.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DAFF0 /* 40.77.175.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB000 /* 40.77.176.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB100 /* 40.77.177.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB200 /* 40.77.178.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB400 /* 40.77.180.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB600 /* 40.77.182.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB610 /* 40.77.182.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB620 /* 40.77.182.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB640 /* 40.77.182.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB660 /* 40.77.182.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB680 /* 40.77.182.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB6A0 /* 40.77.182.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB6C0 /* 40.77.182.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB700 /* 40.77.183.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB800 /* 40.77.184.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB880 /* 40.77.184.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB900 /* 40.77.185.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DB980 /* 40.77.185.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DBA00 /* 40.77.186.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DBC00 /* 40.77.188.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DC000 /* 40.77.192.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DC400 /* 40.77.196.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DC500 /* 40.77.197.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DC600 /* 40.77.198.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DC640 /* 40.77.198.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DC680 /* 40.77.198.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DC700 /* 40.77.199.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DC780 /* 40.77.199.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DC7C0 /* 40.77.199.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DC800 /* 40.77.200.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DC880 /* 40.77.200.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DC900 /* 40.77.201.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DCA00 /* 40.77.202.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE000 /* 40.77.224.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE010 /* 40.77.224.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE020 /* 40.77.224.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE040 /* 40.77.224.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE060 /* 40.77.224.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE080 /* 40.77.224.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE100 /* 40.77.225.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE200 /* 40.77.226.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE280 /* 40.77.226.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE300 /* 40.77.227.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE400 /* 40.77.228.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE500 /* 40.77.229.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE600 /* 40.77.230.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE700 /* 40.77.231.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE800 /* 40.77.232.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE880 /* 40.77.232.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DE900 /* 40.77.233.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DEA00 /* 40.77.234.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DEA80 /* 40.77.234.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DEAA0 /* 40.77.234.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DEAC0 /* 40.77.234.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DEAE0 /* 40.77.234.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DEB00 /* 40.77.235.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DEC00 /* 40.77.236.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DEC20 /* 40.77.236.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DEC50 /* 40.77.236.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DEC60 /* 40.77.236.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DEC80 /* 40.77.236.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DECA0 /* 40.77.236.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DECB0 /* 40.77.236.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DECC0 /* 40.77.236.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DECE0 /* 40.77.236.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DED00 /* 40.77.237.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DED40 /* 40.77.237.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DED80 /* 40.77.237.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DF000 /* 40.77.240.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DF080 /* 40.77.240.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DF100 /* 40.77.241.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DF200 /* 40.77.242.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DF400 /* 40.77.244.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DF500 /* 40.77.245.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DF600 /* 40.77.246.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DF700 /* 40.77.247.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DF800 /* 40.77.248.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DF880 /* 40.77.248.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DF900 /* 40.77.249.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DFA00 /* 40.77.250.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DFB00 /* 40.77.251.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DFC00 /* 40.77.252.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DFE00 /* 40.77.254.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DFE40 /* 40.77.254.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DFE80 /* 40.77.254.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DFF00 /* 40.77.255.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DFF80 /* 40.77.255.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284DFFC0 /* 40.77.255.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E0000 /* 40.78.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284E8000 /* 40.78.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC000 /* 40.78.192.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EC800 /* 40.78.200.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ED000 /* 40.78.208.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ED010 /* 40.78.208.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ED020 /* 40.78.208.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ED030 /* 40.78.208.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ED040 /* 40.78.208.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ED100 /* 40.78.209.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ED200 /* 40.78.210.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ED300 /* 40.78.211.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ED400 /* 40.78.212.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ED500 /* 40.78.213.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ED600 /* 40.78.214.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ED700 /* 40.78.215.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ED800 /* 40.78.216.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284ED900 /* 40.78.217.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EDA00 /* 40.78.218.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EDB00 /* 40.78.219.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EDC00 /* 40.78.220.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EDD00 /* 40.78.221.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EDE00 /* 40.78.222.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EDF00 /* 40.78.223.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE000 /* 40.78.224.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EE800 /* 40.78.232.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284EF000 /* 40.78.240.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F0000 /* 40.79.0.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F0800 /* 40.79.8.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F0820 /* 40.79.8.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F0840 /* 40.79.8.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F0860 /* 40.79.8.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F0900 /* 40.79.9.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F1000 /* 40.79.16.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F2000 /* 40.79.32.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F3000 /* 40.79.48.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F3020 /* 40.79.48.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F3100 /* 40.79.49.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F3800 /* 40.79.56.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F4000 /* 40.79.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F5000 /* 40.79.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F5800 /* 40.79.88.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F5820 /* 40.79.88.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F5900 /* 40.79.89.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F5A00 /* 40.79.90.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F5B00 /* 40.79.91.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F5C00 /* 40.79.92.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F5D00 /* 40.79.93.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F5E00 /* 40.79.94.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F5F00 /* 40.79.95.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F6000 /* 40.79.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F8000 /* 40.79.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9000 /* 40.79.144.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284F9800 /* 40.79.152.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FA000 /* 40.79.160.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB000 /* 40.79.176.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FB800 /* 40.79.184.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC000 /* 40.79.192.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC800 /* 40.79.200.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FC900 /* 40.79.201.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCA00 /* 40.79.202.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCB00 /* 40.79.203.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCC00 /* 40.79.204.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCC20 /* 40.79.204.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCC30 /* 40.79.204.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCC40 /* 40.79.204.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCC60 /* 40.79.204.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCC80 /* 40.79.204.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCCA0 /* 40.79.204.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCCC0 /* 40.79.204.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCD00 /* 40.79.205.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCD40 /* 40.79.205.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCD50 /* 40.79.205.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCD60 /* 40.79.205.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCD80 /* 40.79.205.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCDC0 /* 40.79.205.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCDE0 /* 40.79.205.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCDF0 /* 40.79.205.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCE00 /* 40.79.206.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCE20 /* 40.79.206.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCE40 /* 40.79.206.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCE60 /* 40.79.206.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCE80 /* 40.79.206.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCEA0 /* 40.79.206.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCEC0 /* 40.79.206.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCEE0 /* 40.79.206.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCF00 /* 40.79.207.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCF20 /* 40.79.207.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCF40 /* 40.79.207.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCF50 /* 40.79.207.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCF60 /* 40.79.207.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FCF80 /* 40.79.207.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FD000 /* 40.79.208.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FD100 /* 40.79.209.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FD200 /* 40.79.210.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FD300 /* 40.79.211.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FD400 /* 40.79.212.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FD500 /* 40.79.213.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FD600 /* 40.79.214.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FD700 /* 40.79.215.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FD800 /* 40.79.216.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FD900 /* 40.79.217.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FDA00 /* 40.79.218.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FDB00 /* 40.79.219.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FDC00 /* 40.79.220.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FDD00 /* 40.79.221.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FDE00 /* 40.79.222.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FDF00 /* 40.79.223.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FE800 /* 40.79.232.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x284FF000 /* 40.79.240.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28500000 /* 40.80.0.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28500400 /* 40.80.4.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28500800 /* 40.80.8.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28500C00 /* 40.80.12.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28501000 /* 40.80.16.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28501400 /* 40.80.20.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28501800 /* 40.80.24.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28501C00 /* 40.80.28.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28502000 /* 40.80.32.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28502400 /* 40.80.36.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28502800 /* 40.80.40.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28502C00 /* 40.80.44.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503000 /* 40.80.48.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28503800 /* 40.80.56.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28504000 /* 40.80.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28506000 /* 40.80.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28509000 /* 40.80.144.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28509800 /* 40.80.152.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A000 /* 40.80.160.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A800 /* 40.80.168.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B000 /* 40.80.176.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850B800 /* 40.80.184.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850C000 /* 40.80.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850E000 /* 40.80.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850F000 /* 40.80.240.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28510000 /* 40.81.0.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28511000 /* 40.81.16.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28512000 /* 40.81.32.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28513000 /* 40.81.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28514000 /* 40.81.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28515000 /* 40.81.80.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28516000 /* 40.81.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28517000 /* 40.81.112.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28518000 /* 40.81.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851A000 /* 40.81.160.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851B000 /* 40.81.176.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851C000 /* 40.81.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2851E000 /* 40.81.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28520000 /* 40.82.0.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28520400 /* 40.82.4.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28521000 /* 40.82.16.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28521400 /* 40.82.20.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28521800 /* 40.82.24.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28521C00 /* 40.82.28.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28522000 /* 40.82.32.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28522400 /* 40.82.36.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28522C00 /* 40.82.44.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28523000 /* 40.82.48.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28523C00 /* 40.82.60.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28524000 /* 40.82.64.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28524400 /* 40.82.68.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28524800 /* 40.82.72.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28524C00 /* 40.82.76.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28525000 /* 40.82.80.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28525400 /* 40.82.84.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28525C00 /* 40.82.92.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28526000 /* 40.82.96.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28526400 /* 40.82.100.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28527400 /* 40.82.116.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28527800 /* 40.82.120.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28528000 /* 40.82.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852A000 /* 40.82.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852C000 /* 40.82.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852E000 /* 40.82.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852F000 /* 40.82.240.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852F400 /* 40.82.244.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2852F800 /* 40.82.248.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28530000 /* 40.83.0.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28531000 /* 40.83.16.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28531800 /* 40.83.24.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28531840 /* 40.83.24.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28531860 /* 40.83.24.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28531880 /* 40.83.24.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28531900 /* 40.83.25.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28531A00 /* 40.83.26.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28531C00 /* 40.83.28.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28532000 /* 40.83.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28534000 /* 40.83.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28538000 /* 40.83.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28540000 /* 40.84.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28548000 /* 40.84.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28550000 /* 40.85.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28558000 /* 40.85.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28559000 /* 40.85.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855A000 /* 40.85.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2855C000 /* 40.85.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28560000 /* 40.86.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28568000 /* 40.86.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856A000 /* 40.86.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2856C000 /* 40.86.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28570000 /* 40.87.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28578000 /* 40.87.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A000 /* 40.87.160.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A400 /* 40.87.164.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A800 /* 40.87.168.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A804 /* 40.87.168.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A808 /* 40.87.168.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A810 /* 40.87.168.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A820 /* 40.87.168.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A828 /* 40.87.168.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A830 /* 40.87.168.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A840 /* 40.87.168.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A844 /* 40.87.168.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A846 /* 40.87.168.70/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A848 /* 40.87.168.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A850 /* 40.87.168.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A860 /* 40.87.168.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A880 /* 40.87.168.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A8C0 /* 40.87.168.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A8D0 /* 40.87.168.208/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A8D2 /* 40.87.168.210/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A8D4 /* 40.87.168.212/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A8D8 /* 40.87.168.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A8E0 /* 40.87.168.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A900 /* 40.87.169.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A920 /* 40.87.169.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A928 /* 40.87.169.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A92C /* 40.87.169.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A930 /* 40.87.169.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A938 /* 40.87.169.56/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A93A /* 40.87.169.58/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A93C /* 40.87.169.60/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A940 /* 40.87.169.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A960 /* 40.87.169.96/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A962 /* 40.87.169.98/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A964 /* 40.87.169.100/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A966 /* 40.87.169.102/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A968 /* 40.87.169.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A970 /* 40.87.169.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A980 /* 40.87.169.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A988 /* 40.87.169.136/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A98A /* 40.87.169.138/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A98C /* 40.87.169.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A990 /* 40.87.169.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A9A0 /* 40.87.169.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857A9C0 /* 40.87.169.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AA00 /* 40.87.170.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AA80 /* 40.87.170.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AA90 /* 40.87.170.144/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AA92 /* 40.87.170.146/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AA94 /* 40.87.170.148/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AA98 /* 40.87.170.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAA0 /* 40.87.170.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAB0 /* 40.87.170.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAB8 /* 40.87.170.184/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AABC /* 40.87.170.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAC0 /* 40.87.170.192/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAC2 /* 40.87.170.194/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAC4 /* 40.87.170.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAC8 /* 40.87.170.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAD0 /* 40.87.170.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAD4 /* 40.87.170.212/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAD6 /* 40.87.170.214/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAD8 /* 40.87.170.216/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AADC /* 40.87.170.220/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAE0 /* 40.87.170.224/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAE4 /* 40.87.170.228/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAE8 /* 40.87.170.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAF0 /* 40.87.170.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAF8 /* 40.87.170.248/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AAFC /* 40.87.170.252/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB00 /* 40.87.171.0/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB02 /* 40.87.171.2/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB04 /* 40.87.171.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB08 /* 40.87.171.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB10 /* 40.87.171.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB20 /* 40.87.171.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB24 /* 40.87.171.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB28 /* 40.87.171.40/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB2A /* 40.87.171.42/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB2C /* 40.87.171.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB30 /* 40.87.171.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB40 /* 40.87.171.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB48 /* 40.87.171.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB50 /* 40.87.171.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB60 /* 40.87.171.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AB80 /* 40.87.171.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857ABA0 /* 40.87.171.160/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857ABA2 /* 40.87.171.162/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857ABA4 /* 40.87.171.164/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857ABA6 /* 40.87.171.166/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857ABA8 /* 40.87.171.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857ABB0 /* 40.87.171.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857ABC0 /* 40.87.171.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857ABE0 /* 40.87.171.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857ABF0 /* 40.87.171.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857ABF8 /* 40.87.171.248/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857ABFA /* 40.87.171.250/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857ABFC /* 40.87.171.252/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857AC00 /* 40.87.172.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B000 /* 40.87.176.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B080 /* 40.87.176.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B0A0 /* 40.87.176.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B0A8 /* 40.87.176.168/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B0AC /* 40.87.176.172/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B0AE /* 40.87.176.174/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B0B0 /* 40.87.176.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B0B8 /* 40.87.176.184/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B0BC /* 40.87.176.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B0C0 /* 40.87.176.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B0D0 /* 40.87.176.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B0D8 /* 40.87.176.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B0E0 /* 40.87.176.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B0E8 /* 40.87.176.232/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B0EA /* 40.87.176.234/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B0EC /* 40.87.176.236/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B0F0 /* 40.87.176.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B100 /* 40.87.177.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B110 /* 40.87.177.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B120 /* 40.87.177.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B140 /* 40.87.177.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B160 /* 40.87.177.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B170 /* 40.87.177.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B178 /* 40.87.177.120/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B17A /* 40.87.177.122/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B17C /* 40.87.177.124/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B180 /* 40.87.177.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B190 /* 40.87.177.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B198 /* 40.87.177.152/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B19A /* 40.87.177.154/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B19C /* 40.87.177.156/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B1A0 /* 40.87.177.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B1C0 /* 40.87.177.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B1C8 /* 40.87.177.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B1CC /* 40.87.177.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B1D0 /* 40.87.177.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B1D4 /* 40.87.177.212/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B1D8 /* 40.87.177.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B1E0 /* 40.87.177.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B200 /* 40.87.178.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B300 /* 40.87.179.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B380 /* 40.87.179.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B3C0 /* 40.87.179.192/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B3C2 /* 40.87.179.194/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B3C4 /* 40.87.179.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B3C8 /* 40.87.179.200/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B3CA /* 40.87.179.202/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B3CC /* 40.87.179.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B3D0 /* 40.87.179.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B3E0 /* 40.87.179.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B400 /* 40.87.180.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B404 /* 40.87.180.4/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B406 /* 40.87.180.6/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B408 /* 40.87.180.8/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B40C /* 40.87.180.12/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B40E /* 40.87.180.14/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B410 /* 40.87.180.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B414 /* 40.87.180.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B416 /* 40.87.180.22/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B418 /* 40.87.180.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B41C /* 40.87.180.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B420 /* 40.87.180.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B428 /* 40.87.180.40/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B42A /* 40.87.180.42/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B42C /* 40.87.180.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B430 /* 40.87.180.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B440 /* 40.87.180.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B444 /* 40.87.180.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B448 /* 40.87.180.72/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B44A /* 40.87.180.74/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B44C /* 40.87.180.76/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B450 /* 40.87.180.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B460 /* 40.87.180.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B480 /* 40.87.180.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B4C0 /* 40.87.180.192/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B4C4 /* 40.87.180.196/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B4C8 /* 40.87.180.200/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B4CA /* 40.87.180.202/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B4CC /* 40.87.180.204/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B4D0 /* 40.87.180.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B4E0 /* 40.87.180.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B4F0 /* 40.87.180.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B4F8 /* 40.87.180.248/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B4FC /* 40.87.180.252/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B500 /* 40.87.181.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B504 /* 40.87.181.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B508 /* 40.87.181.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B510 /* 40.87.181.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B520 /* 40.87.181.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B540 /* 40.87.181.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B580 /* 40.87.181.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B590 /* 40.87.181.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B598 /* 40.87.181.152/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B59A /* 40.87.181.154/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B59C /* 40.87.181.156/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B5A0 /* 40.87.181.160/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B5A2 /* 40.87.181.162/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B5A4 /* 40.87.181.164/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B5A8 /* 40.87.181.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B5B0 /* 40.87.181.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B5C0 /* 40.87.181.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B600 /* 40.87.182.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B604 /* 40.87.182.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B608 /* 40.87.182.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B610 /* 40.87.182.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B618 /* 40.87.182.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B620 /* 40.87.182.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B630 /* 40.87.182.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B638 /* 40.87.182.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B63C /* 40.87.182.60/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B63E /* 40.87.182.62/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B640 /* 40.87.182.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B680 /* 40.87.182.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B700 /* 40.87.183.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B710 /* 40.87.183.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B718 /* 40.87.183.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B71C /* 40.87.183.28/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B720 /* 40.87.183.32/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B722 /* 40.87.183.34/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B724 /* 40.87.183.36/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B728 /* 40.87.183.40/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B72A /* 40.87.183.42/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B72C /* 40.87.183.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B730 /* 40.87.183.48/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B734 /* 40.87.183.52/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B736 /* 40.87.183.54/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B738 /* 40.87.183.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B740 /* 40.87.183.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B780 /* 40.87.183.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B790 /* 40.87.183.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B7A0 /* 40.87.183.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B7C0 /* 40.87.183.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B7E0 /* 40.87.183.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B7E8 /* 40.87.183.232/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B7EC /* 40.87.183.236/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B7EE /* 40.87.183.238/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B7F0 /* 40.87.183.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B7F4 /* 40.87.183.244/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B7F8 /* 40.87.183.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857B800 /* 40.87.184.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857BC00 /* 40.87.188.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857C000 /* 40.87.192.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857C400 /* 40.87.196.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857C800 /* 40.87.200.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857CC00 /* 40.87.204.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857D000 /* 40.87.208.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857D400 /* 40.87.212.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857D800 /* 40.87.216.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857DC00 /* 40.87.220.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857E000 /* 40.87.224.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857E400 /* 40.87.228.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2857E800 /* 40.87.232.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28580000 /* 40.88.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28590000 /* 40.89.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28592000 /* 40.89.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28594000 /* 40.89.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28598000 /* 40.89.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859C000 /* 40.89.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2859E000 /* 40.89.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1000 /* 40.90.16.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1020 /* 40.90.16.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1040 /* 40.90.16.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1060 /* 40.90.16.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1080 /* 40.90.16.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A10A0 /* 40.90.16.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A10C0 /* 40.90.16.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1100 /* 40.90.17.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1120 /* 40.90.17.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1140 /* 40.90.17.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1160 /* 40.90.17.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1180 /* 40.90.17.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1190 /* 40.90.17.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A11A0 /* 40.90.17.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A11C0 /* 40.90.17.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A11E0 /* 40.90.17.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1200 /* 40.90.18.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1210 /* 40.90.18.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1220 /* 40.90.18.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1240 /* 40.90.18.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1280 /* 40.90.18.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A12C0 /* 40.90.18.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1300 /* 40.90.19.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1320 /* 40.90.19.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1340 /* 40.90.19.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1380 /* 40.90.19.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1400 /* 40.90.20.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1480 /* 40.90.20.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1500 /* 40.90.21.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1580 /* 40.90.21.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1600 /* 40.90.22.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1680 /* 40.90.22.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1700 /* 40.90.23.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1780 /* 40.90.23.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1800 /* 40.90.24.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1880 /* 40.90.24.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1900 /* 40.90.25.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1940 /* 40.90.25.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1980 /* 40.90.25.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A19C0 /* 40.90.25.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1A00 /* 40.90.26.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1A40 /* 40.90.26.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1A80 /* 40.90.26.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1B00 /* 40.90.27.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1B40 /* 40.90.27.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1B80 /* 40.90.27.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1BC0 /* 40.90.27.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1C00 /* 40.90.28.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1C40 /* 40.90.28.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1C80 /* 40.90.28.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1CC0 /* 40.90.28.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1D00 /* 40.90.29.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1D40 /* 40.90.29.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1D80 /* 40.90.29.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1DC0 /* 40.90.29.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1E00 /* 40.90.30.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1E80 /* 40.90.30.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1EA0 /* 40.90.30.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1EC0 /* 40.90.30.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1F00 /* 40.90.31.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1F20 /* 40.90.31.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1F40 /* 40.90.31.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1F60 /* 40.90.31.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A1F80 /* 40.90.31.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8000 /* 40.90.128.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8010 /* 40.90.128.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8020 /* 40.90.128.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8030 /* 40.90.128.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8040 /* 40.90.128.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8050 /* 40.90.128.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8060 /* 40.90.128.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8070 /* 40.90.128.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8080 /* 40.90.128.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8090 /* 40.90.128.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A80A0 /* 40.90.128.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A80B0 /* 40.90.128.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A80C0 /* 40.90.128.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A80D0 /* 40.90.128.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A80E0 /* 40.90.128.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A80F0 /* 40.90.128.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8100 /* 40.90.129.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8120 /* 40.90.129.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8130 /* 40.90.129.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8140 /* 40.90.129.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8160 /* 40.90.129.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8180 /* 40.90.129.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A81C0 /* 40.90.129.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A81E0 /* 40.90.129.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8200 /* 40.90.130.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8220 /* 40.90.130.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8230 /* 40.90.130.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8240 /* 40.90.130.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8250 /* 40.90.130.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8260 /* 40.90.130.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8270 /* 40.90.130.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8280 /* 40.90.130.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8290 /* 40.90.130.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A82A0 /* 40.90.130.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A82C0 /* 40.90.130.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A82D0 /* 40.90.130.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A82E0 /* 40.90.130.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A82F0 /* 40.90.130.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8300 /* 40.90.131.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8320 /* 40.90.131.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8340 /* 40.90.131.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8360 /* 40.90.131.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8380 /* 40.90.131.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A83A0 /* 40.90.131.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A83C0 /* 40.90.131.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A83E0 /* 40.90.131.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8400 /* 40.90.132.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8420 /* 40.90.132.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8430 /* 40.90.132.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8440 /* 40.90.132.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8450 /* 40.90.132.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8460 /* 40.90.132.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8480 /* 40.90.132.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A84C0 /* 40.90.132.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8500 /* 40.90.133.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8520 /* 40.90.133.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8540 /* 40.90.133.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8560 /* 40.90.133.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8570 /* 40.90.133.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8580 /* 40.90.133.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8590 /* 40.90.133.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A85A0 /* 40.90.133.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A85C0 /* 40.90.133.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8600 /* 40.90.134.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8640 /* 40.90.134.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8680 /* 40.90.134.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A86C0 /* 40.90.134.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8700 /* 40.90.135.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8740 /* 40.90.135.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8780 /* 40.90.135.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8800 /* 40.90.136.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8810 /* 40.90.136.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8820 /* 40.90.136.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8840 /* 40.90.136.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8880 /* 40.90.136.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A88A0 /* 40.90.136.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A88B0 /* 40.90.136.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A88C0 /* 40.90.136.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A88E0 /* 40.90.136.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8900 /* 40.90.137.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8920 /* 40.90.137.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8940 /* 40.90.137.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8960 /* 40.90.137.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8980 /* 40.90.137.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A89A0 /* 40.90.137.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A89C0 /* 40.90.137.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A89E0 /* 40.90.137.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8A00 /* 40.90.138.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8A20 /* 40.90.138.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8A40 /* 40.90.138.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8A60 /* 40.90.138.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8A80 /* 40.90.138.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8AA0 /* 40.90.138.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8AC0 /* 40.90.138.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8AD0 /* 40.90.138.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8AE0 /* 40.90.138.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8B00 /* 40.90.139.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8B20 /* 40.90.139.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8B40 /* 40.90.139.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8B60 /* 40.90.139.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8B80 /* 40.90.139.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8BA0 /* 40.90.139.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8BC0 /* 40.90.139.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8BE0 /* 40.90.139.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8C00 /* 40.90.140.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8C20 /* 40.90.140.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8C40 /* 40.90.140.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8C60 /* 40.90.140.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8C80 /* 40.90.140.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8CA0 /* 40.90.140.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8CC0 /* 40.90.140.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8CE0 /* 40.90.140.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8D00 /* 40.90.141.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8D20 /* 40.90.141.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8D40 /* 40.90.141.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8D60 /* 40.90.141.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8D80 /* 40.90.141.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8DA0 /* 40.90.141.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8DC0 /* 40.90.141.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8E00 /* 40.90.142.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8E20 /* 40.90.142.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8E40 /* 40.90.142.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8E60 /* 40.90.142.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8E80 /* 40.90.142.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8EA0 /* 40.90.142.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8EC0 /* 40.90.142.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8ED0 /* 40.90.142.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8EE0 /* 40.90.142.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8EF0 /* 40.90.142.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8F00 /* 40.90.143.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8F20 /* 40.90.143.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8F40 /* 40.90.143.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8F60 /* 40.90.143.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8F80 /* 40.90.143.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8FA0 /* 40.90.143.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A8FC0 /* 40.90.143.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9000 /* 40.90.144.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9020 /* 40.90.144.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9040 /* 40.90.144.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9080 /* 40.90.144.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A90C0 /* 40.90.144.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A90E0 /* 40.90.144.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9100 /* 40.90.145.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9120 /* 40.90.145.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9140 /* 40.90.145.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9160 /* 40.90.145.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9180 /* 40.90.145.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A91A0 /* 40.90.145.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A91C0 /* 40.90.145.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A91E0 /* 40.90.145.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9200 /* 40.90.146.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9210 /* 40.90.146.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9220 /* 40.90.146.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9240 /* 40.90.146.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9280 /* 40.90.146.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A92A0 /* 40.90.146.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A92C0 /* 40.90.146.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A92E0 /* 40.90.146.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9300 /* 40.90.147.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9320 /* 40.90.147.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9340 /* 40.90.147.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9360 /* 40.90.147.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9380 /* 40.90.147.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A93C0 /* 40.90.147.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A93E0 /* 40.90.147.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9400 /* 40.90.148.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9440 /* 40.90.148.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9460 /* 40.90.148.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9480 /* 40.90.148.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A94A0 /* 40.90.148.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A94B0 /* 40.90.148.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A94C0 /* 40.90.148.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A94E0 /* 40.90.148.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9500 /* 40.90.149.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9520 /* 40.90.149.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9540 /* 40.90.149.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9560 /* 40.90.149.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9580 /* 40.90.149.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9600 /* 40.90.150.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9620 /* 40.90.150.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9640 /* 40.90.150.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9660 /* 40.90.150.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9680 /* 40.90.150.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9700 /* 40.90.151.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9740 /* 40.90.151.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9760 /* 40.90.151.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9780 /* 40.90.151.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9790 /* 40.90.151.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A97A0 /* 40.90.151.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A97C0 /* 40.90.151.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A97E0 /* 40.90.151.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9800 /* 40.90.152.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9880 /* 40.90.152.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A98A0 /* 40.90.152.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A98C0 /* 40.90.152.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A98E0 /* 40.90.152.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9900 /* 40.90.153.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9940 /* 40.90.153.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9960 /* 40.90.153.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9980 /* 40.90.153.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9A00 /* 40.90.154.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9A40 /* 40.90.154.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9A80 /* 40.90.154.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9AC0 /* 40.90.154.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9B00 /* 40.90.155.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9B40 /* 40.90.155.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9B80 /* 40.90.155.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9BC0 /* 40.90.155.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9C00 /* 40.90.156.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9C40 /* 40.90.156.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9C60 /* 40.90.156.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9C80 /* 40.90.156.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9CC0 /* 40.90.156.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9D00 /* 40.90.157.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9D20 /* 40.90.157.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9D40 /* 40.90.157.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9D80 /* 40.90.157.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9DC0 /* 40.90.157.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9DE0 /* 40.90.157.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9E00 /* 40.90.158.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9E40 /* 40.90.158.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9E80 /* 40.90.158.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285A9F00 /* 40.90.159.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285AA000 /* 40.90.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285AC000 /* 40.90.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285AE000 /* 40.90.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0000 /* 40.91.0.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0400 /* 40.91.4.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0C00 /* 40.91.12.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0C10 /* 40.91.12.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0C20 /* 40.91.12.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0C30 /* 40.91.12.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0C40 /* 40.91.12.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0C80 /* 40.91.12.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0CA0 /* 40.91.12.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0CD0 /* 40.91.12.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0CF0 /* 40.91.12.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0D00 /* 40.91.13.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0D40 /* 40.91.13.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0D60 /* 40.91.13.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0D80 /* 40.91.13.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0DF0 /* 40.91.13.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B0E00 /* 40.91.14.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B1000 /* 40.91.16.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B1400 /* 40.91.20.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B1800 /* 40.91.24.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B1C00 /* 40.91.28.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B2000 /* 40.91.32.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285B4000 /* 40.91.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285BA000 /* 40.91.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285BC000 /* 40.91.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0000 /* 40.93.0.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0200 /* 40.93.2.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0300 /* 40.93.3.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0400 /* 40.93.4.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0500 /* 40.93.5.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0600 /* 40.93.6.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0700 /* 40.93.7.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0800 /* 40.93.8.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0900 /* 40.93.9.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0A00 /* 40.93.10.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0B00 /* 40.93.11.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0C00 /* 40.93.12.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0D00 /* 40.93.13.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0E00 /* 40.93.14.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D0F00 /* 40.93.15.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D1000 /* 40.93.16.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D1100 /* 40.93.17.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D4000 /* 40.93.64.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D4100 /* 40.93.65.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D4200 /* 40.93.66.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D4300 /* 40.93.67.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D4400 /* 40.93.68.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D8000 /* 40.93.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285D8100 /* 40.93.129.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285DC000 /* 40.93.192.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285DC100 /* 40.93.193.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285DC200 /* 40.93.194.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285DC400 /* 40.93.196.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285DC600 /* 40.93.198.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285DC800 /* 40.93.200.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285DCA00 /* 40.93.202.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285DCB00 /* 40.93.203.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285DCC00 /* 40.93.204.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285DD000 /* 40.93.208.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285DD400 /* 40.93.212.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285DD500 /* 40.93.213.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x285DD600 /* 40.93.214.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28602E00 /* 40.96.46.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28603200 /* 40.96.50.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28603400 /* 40.96.52.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28603700 /* 40.96.55.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28603D00 /* 40.96.61.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28603F00 /* 40.96.63.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2860FF00 /* 40.96.255.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28610400 /* 40.97.4.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28610500 /* 40.97.5.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28610600 /* 40.97.6.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28610700 /* 40.97.7.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28610C00 /* 40.97.12.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28610D00 /* 40.97.13.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28610E00 /* 40.97.14.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28610E40 /* 40.97.14.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28610E80 /* 40.97.14.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28610F00 /* 40.97.15.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28640400 /* 40.100.4.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28650000 /* 40.101.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28650100 /* 40.101.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28702400 /* 40.112.36.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28702480 /* 40.112.36.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28702500 /* 40.112.37.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28702540 /* 40.112.37.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28702580 /* 40.112.37.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287025C0 /* 40.112.37.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287026C0 /* 40.112.38.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28702700 /* 40.112.39.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28702780 /* 40.112.39.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28703000 /* 40.112.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28704000 /* 40.112.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28706000 /* 40.112.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28708000 /* 40.112.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28710000 /* 40.113.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28714000 /* 40.113.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28716000 /* 40.113.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28718000 /* 40.113.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2871C000 /* 40.113.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28720000 /* 40.114.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28728000 /* 40.114.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28730000 /* 40.115.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28734000 /* 40.115.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28736000 /* 40.115.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28738000 /* 40.115.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28740000 /* 40.116.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28750000 /* 40.117.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28752000 /* 40.117.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28754000 /* 40.117.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28758000 /* 40.117.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28760000 /* 40.118.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28768000 /* 40.118.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28770000 /* 40.119.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28774000 /* 40.119.64.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28774400 /* 40.119.68.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28774800 /* 40.119.72.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28774C00 /* 40.119.76.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28775000 /* 40.119.80.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28775400 /* 40.119.84.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28775800 /* 40.119.88.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28775C00 /* 40.119.92.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28776000 /* 40.119.96.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28776400 /* 40.119.100.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28776420 /* 40.119.100.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28776430 /* 40.119.100.48/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28776434 /* 40.119.100.52/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28776438 /* 40.119.100.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28776440 /* 40.119.100.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877645C /* 40.119.100.92/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28776460 /* 40.119.100.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28776480 /* 40.119.100.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28776484 /* 40.119.100.132/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28776800 /* 40.119.104.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28776C00 /* 40.119.108.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28777000 /* 40.119.112.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28777400 /* 40.119.116.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28777800 /* 40.119.120.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28777C00 /* 40.119.124.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28778000 /* 40.119.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877A000 /* 40.119.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2877C000 /* 40.119.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28780000 /* 40.120.0.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28781000 /* 40.120.16.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28782000 /* 40.120.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28784000 /* 40.120.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28788000 /* 40.120.128.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28788020 /* 40.120.128.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28788030 /* 40.120.128.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28788038 /* 40.120.128.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28788400 /* 40.120.132.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28788410 /* 40.120.132.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28788800 /* 40.120.136.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28789000 /* 40.120.144.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28789010 /* 40.120.144.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28790000 /* 40.121.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A0000 /* 40.122.0.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A1000 /* 40.122.16.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A2000 /* 40.122.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A4000 /* 40.122.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287A8000 /* 40.122.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B0000 /* 40.123.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B8000 /* 40.123.128.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B8400 /* 40.123.132.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B8800 /* 40.123.136.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B8C00 /* 40.123.140.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9000 /* 40.123.144.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9040 /* 40.123.144.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9048 /* 40.123.144.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9050 /* 40.123.144.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9060 /* 40.123.144.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9068 /* 40.123.144.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9070 /* 40.123.144.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9080 /* 40.123.144.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9090 /* 40.123.144.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9098 /* 40.123.144.152/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B909C /* 40.123.144.156/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B90A0 /* 40.123.144.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B90C0 /* 40.123.144.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B90E0 /* 40.123.144.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B90F0 /* 40.123.144.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B90F8 /* 40.123.144.248/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B90FC /* 40.123.144.252/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B90FE /* 40.123.144.254/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9100 /* 40.123.145.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9104 /* 40.123.145.4/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9106 /* 40.123.145.6/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9108 /* 40.123.145.8/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B910C /* 40.123.145.12/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B910E /* 40.123.145.14/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9110 /* 40.123.145.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9114 /* 40.123.145.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9116 /* 40.123.145.22/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9118 /* 40.123.145.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9120 /* 40.123.145.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9130 /* 40.123.145.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9138 /* 40.123.145.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B913C /* 40.123.145.60/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9140 /* 40.123.145.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9144 /* 40.123.145.68/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9148 /* 40.123.145.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9150 /* 40.123.145.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9160 /* 40.123.145.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9180 /* 40.123.145.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B91A0 /* 40.123.145.160/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B91A4 /* 40.123.145.164/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B91A6 /* 40.123.145.166/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B91A8 /* 40.123.145.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B91B0 /* 40.123.145.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B91C0 /* 40.123.145.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B91D0 /* 40.123.145.208/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B91D4 /* 40.123.145.212/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B91D6 /* 40.123.145.214/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B91D8 /* 40.123.145.216/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B91DC /* 40.123.145.220/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B91DE /* 40.123.145.222/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B91E0 /* 40.123.145.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9200 /* 40.123.146.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9210 /* 40.123.146.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9218 /* 40.123.146.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B921C /* 40.123.146.28/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B921E /* 40.123.146.30/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9220 /* 40.123.146.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9228 /* 40.123.146.40/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B922A /* 40.123.146.42/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B922C /* 40.123.146.44/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9230 /* 40.123.146.48/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9232 /* 40.123.146.50/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9234 /* 40.123.146.52/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9236 /* 40.123.146.54/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9238 /* 40.123.146.56/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9240 /* 40.123.146.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9280 /* 40.123.146.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92A0 /* 40.123.146.160/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92A4 /* 40.123.146.164/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92A6 /* 40.123.146.166/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92A8 /* 40.123.146.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92B0 /* 40.123.146.176/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92B4 /* 40.123.146.180/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92B6 /* 40.123.146.182/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92B8 /* 40.123.146.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92C0 /* 40.123.146.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92C8 /* 40.123.146.200/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92CC /* 40.123.146.204/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92CE /* 40.123.146.206/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92D0 /* 40.123.146.208/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92D2 /* 40.123.146.210/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92D4 /* 40.123.146.212/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92D8 /* 40.123.146.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B92E0 /* 40.123.146.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9300 /* 40.123.147.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9320 /* 40.123.147.32/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9322 /* 40.123.147.34/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9324 /* 40.123.147.36/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9326 /* 40.123.147.38/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9328 /* 40.123.147.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9330 /* 40.123.147.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9340 /* 40.123.147.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9350 /* 40.123.147.80/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9354 /* 40.123.147.84/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9356 /* 40.123.147.86/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9358 /* 40.123.147.88/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9360 /* 40.123.147.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9368 /* 40.123.147.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9370 /* 40.123.147.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9378 /* 40.123.147.120/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9380 /* 40.123.147.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9388 /* 40.123.147.136/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B938A /* 40.123.147.138/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B938C /* 40.123.147.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9390 /* 40.123.147.144/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9392 /* 40.123.147.146/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9394 /* 40.123.147.148/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9398 /* 40.123.147.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B93A0 /* 40.123.147.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B93B0 /* 40.123.147.176/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B93B4 /* 40.123.147.180/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B93B6 /* 40.123.147.182/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B93B8 /* 40.123.147.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B93C0 /* 40.123.147.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9400 /* 40.123.148.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9480 /* 40.123.148.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9800 /* 40.123.152.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9C00 /* 40.123.156.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA000 /* 40.123.160.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA400 /* 40.123.164.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA480 /* 40.123.164.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA488 /* 40.123.164.136/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA48A /* 40.123.164.138/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA48C /* 40.123.164.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA490 /* 40.123.164.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA494 /* 40.123.164.148/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA496 /* 40.123.164.150/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA498 /* 40.123.164.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA4A0 /* 40.123.164.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA4C0 /* 40.123.164.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA4E0 /* 40.123.164.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA4F0 /* 40.123.164.240/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA800 /* 40.123.168.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA900 /* 40.123.169.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA904 /* 40.123.169.4/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA906 /* 40.123.169.6/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA908 /* 40.123.169.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA910 /* 40.123.169.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA920 /* 40.123.169.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA940 /* 40.123.169.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA960 /* 40.123.169.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA968 /* 40.123.169.104/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA96A /* 40.123.169.106/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA96C /* 40.123.169.108/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA970 /* 40.123.169.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA980 /* 40.123.169.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA988 /* 40.123.169.136/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA98C /* 40.123.169.140/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA990 /* 40.123.169.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA9A0 /* 40.123.169.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA9C0 /* 40.123.169.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BAA00 /* 40.123.170.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BAA08 /* 40.123.170.8/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BAA0C /* 40.123.170.12/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BAA0E /* 40.123.170.14/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BAA10 /* 40.123.170.16/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BAA14 /* 40.123.170.20/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BAA16 /* 40.123.170.22/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BAA18 /* 40.123.170.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BAA20 /* 40.123.170.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BAC00 /* 40.123.172.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BAC80 /* 40.123.172.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BAD00 /* 40.123.173.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BAE00 /* 40.123.174.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BAF00 /* 40.123.175.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB000 /* 40.123.176.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB400 /* 40.123.180.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB800 /* 40.123.184.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB840 /* 40.123.184.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB850 /* 40.123.184.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB858 /* 40.123.184.88/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB85A /* 40.123.184.90/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB85C /* 40.123.184.92/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB860 /* 40.123.184.96/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB862 /* 40.123.184.98/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB864 /* 40.123.184.100/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB868 /* 40.123.184.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB870 /* 40.123.184.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB880 /* 40.123.184.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB8A0 /* 40.123.184.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BB8A8 /* 40.123.184.168/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BBC00 /* 40.123.188.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BC000 /* 40.123.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BE000 /* 40.123.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BF000 /* 40.123.240.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287C0000 /* 40.124.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287D0000 /* 40.125.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287D2000 /* 40.125.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287D4000 /* 40.125.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0000 /* 40.126.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0100 /* 40.126.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0200 /* 40.126.2.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0300 /* 40.126.3.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0400 /* 40.126.4.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0500 /* 40.126.5.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0600 /* 40.126.6.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0700 /* 40.126.7.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0800 /* 40.126.8.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0900 /* 40.126.9.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0A00 /* 40.126.10.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0A80 /* 40.126.10.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0B00 /* 40.126.11.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0B80 /* 40.126.11.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0C00 /* 40.126.12.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0C80 /* 40.126.12.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0D00 /* 40.126.13.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0D80 /* 40.126.13.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0E00 /* 40.126.14.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0E80 /* 40.126.14.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0F00 /* 40.126.15.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E0F80 /* 40.126.15.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1000 /* 40.126.16.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1080 /* 40.126.16.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1100 /* 40.126.17.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1180 /* 40.126.17.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1200 /* 40.126.18.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1280 /* 40.126.18.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1300 /* 40.126.19.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1380 /* 40.126.19.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1400 /* 40.126.20.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1480 /* 40.126.20.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1500 /* 40.126.21.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1600 /* 40.126.22.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1700 /* 40.126.23.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1800 /* 40.126.24.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1900 /* 40.126.25.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1A00 /* 40.126.26.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1B00 /* 40.126.27.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1C00 /* 40.126.28.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1D00 /* 40.126.29.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1E00 /* 40.126.30.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E1F00 /* 40.126.31.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2000 /* 40.126.32.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2100 /* 40.126.33.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2200 /* 40.126.34.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2300 /* 40.126.35.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2400 /* 40.126.36.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2500 /* 40.126.37.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2600 /* 40.126.38.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2700 /* 40.126.39.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2800 /* 40.126.40.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2900 /* 40.126.41.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2A00 /* 40.126.42.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2B00 /* 40.126.43.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2C00 /* 40.126.44.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2D00 /* 40.126.45.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2E00 /* 40.126.46.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E2F00 /* 40.126.47.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3000 /* 40.126.48.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3100 /* 40.126.49.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3200 /* 40.126.50.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3300 /* 40.126.51.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3400 /* 40.126.52.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3500 /* 40.126.53.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3600 /* 40.126.54.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3700 /* 40.126.55.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3800 /* 40.126.56.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3900 /* 40.126.57.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3A00 /* 40.126.58.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3B00 /* 40.126.59.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3C00 /* 40.126.60.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3D00 /* 40.126.61.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3D40 /* 40.126.61.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3D80 /* 40.126.61.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3DC0 /* 40.126.61.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3E00 /* 40.126.62.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3E40 /* 40.126.62.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3E80 /* 40.126.62.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3F00 /* 40.126.63.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3F40 /* 40.126.63.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3F80 /* 40.126.63.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E3FC0 /* 40.126.63.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287E8000 /* 40.126.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EC000 /* 40.126.192.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EC100 /* 40.126.193.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EC200 /* 40.126.194.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EC300 /* 40.126.195.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EC400 /* 40.126.196.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EC500 /* 40.126.197.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EC600 /* 40.126.198.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EC700 /* 40.126.199.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EC800 /* 40.126.200.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EC900 /* 40.126.201.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287ECA00 /* 40.126.202.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287ECB00 /* 40.126.203.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287ECC00 /* 40.126.204.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287ECD00 /* 40.126.205.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287ECE00 /* 40.126.206.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287ECF00 /* 40.126.207.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287ED000 /* 40.126.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287EE000 /* 40.126.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F0000 /* 40.127.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F2000 /* 40.127.32.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F4000 /* 40.127.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F6000 /* 40.127.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287F8000 /* 40.127.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B0000 /* 51.11.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B4000 /* 51.11.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B6000 /* 51.11.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330B8000 /* 51.11.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330BC000 /* 51.11.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C0000 /* 51.12.0.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1000 /* 51.12.16.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C1800 /* 51.12.24.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C2000 /* 51.12.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C4000 /* 51.12.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6000 /* 51.12.96.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6800 /* 51.12.104.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C6820 /* 51.12.104.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C7000 /* 51.12.112.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C8000 /* 51.12.128.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C8800 /* 51.12.136.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330C9000 /* 51.12.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CA000 /* 51.12.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CC000 /* 51.12.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CD000 /* 51.12.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330CE000 /* 51.12.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D0000 /* 51.13.0.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D1000 /* 51.13.16.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D2000 /* 51.13.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D4000 /* 51.13.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330D8000 /* 51.13.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x330DA000 /* 51.13.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33350000 /* 51.53.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33354000 /* 51.53.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33356000 /* 51.53.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33357000 /* 51.53.112.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33357800 /* 51.53.120.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33358000 /* 51.53.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3335C000 /* 51.53.192.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33670000 /* 51.103.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33678000 /* 51.103.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367C000 /* 51.103.192.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367C020 /* 51.103.192.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367C800 /* 51.103.200.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367D000 /* 51.103.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3367E000 /* 51.103.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33680000 /* 51.104.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33682000 /* 51.104.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33684000 /* 51.104.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33688000 /* 51.104.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3368C000 /* 51.104.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33690000 /* 51.105.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33694000 /* 51.105.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695000 /* 51.105.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33695800 /* 51.105.88.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33696000 /* 51.105.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33698000 /* 51.105.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B0000 /* 51.107.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B4000 /* 51.107.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B6000 /* 51.107.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8000 /* 51.107.128.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B8800 /* 51.107.136.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336B9000 /* 51.107.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BA000 /* 51.107.160.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BB000 /* 51.107.176.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BC000 /* 51.107.192.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BC800 /* 51.107.200.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BD000 /* 51.107.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BE000 /* 51.107.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF000 /* 51.107.240.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x336BF800 /* 51.107.248.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33740000 /* 51.116.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33744000 /* 51.116.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33746000 /* 51.116.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33748000 /* 51.116.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374C000 /* 51.116.192.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374C800 /* 51.116.200.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374D000 /* 51.116.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3374E000 /* 51.116.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33780000 /* 51.120.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33788000 /* 51.120.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378C000 /* 51.120.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D000 /* 51.120.208.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378D800 /* 51.120.216.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E000 /* 51.120.224.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378E800 /* 51.120.232.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3378F000 /* 51.120.240.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x337C0000 /* 51.124.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33840000 /* 51.132.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33844000 /* 51.132.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33848000 /* 51.132.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33880000 /* 51.136.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33890000 /* 51.137.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33898000 /* 51.137.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3389C000 /* 51.137.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338A0000 /* 51.138.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338A8000 /* 51.138.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AA000 /* 51.138.160.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AB000 /* 51.138.176.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AC000 /* 51.138.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338AE000 /* 51.138.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C0000 /* 51.140.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338C8000 /* 51.140.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338CC000 /* 51.140.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D0000 /* 51.141.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D8000 /* 51.141.128.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D8020 /* 51.141.128.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D8040 /* 51.141.128.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D8080 /* 51.141.128.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D8140 /* 51.141.129.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D8180 /* 51.141.129.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D81C0 /* 51.141.129.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D8200 /* 51.141.130.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D8600 /* 51.141.134.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D8700 /* 51.141.135.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D8800 /* 51.141.136.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338D9C00 /* 51.141.156.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338DA000 /* 51.141.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338DC000 /* 51.141.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338E280B /* 51.142.40.11/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338E2FF9 /* 51.142.47.249/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338E2FFC /* 51.142.47.252/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338E4000 /* 51.142.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338E8000 /* 51.142.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338EC000 /* 51.142.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F0000 /* 51.143.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338F8000 /* 51.143.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC000 /* 51.143.192.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC800 /* 51.143.200.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FC900 /* 51.143.201.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FD000 /* 51.143.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x338FE000 /* 51.143.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33900000 /* 51.144.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33910000 /* 51.145.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x33918000 /* 51.145.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34600B00 /* 52.96.11.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34650000 /* 52.101.0.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34650400 /* 52.101.4.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34650800 /* 52.101.8.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34650900 /* 52.101.9.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34650A00 /* 52.101.10.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34650B00 /* 52.101.11.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34650C00 /* 52.101.12.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34651000 /* 52.101.16.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34651400 /* 52.101.20.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34651800 /* 52.101.24.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34651C00 /* 52.101.28.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34652000 /* 52.101.32.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34652400 /* 52.101.36.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34652800 /* 52.101.40.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34652900 /* 52.101.41.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34652A00 /* 52.101.42.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34652B00 /* 52.101.43.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34652C00 /* 52.101.44.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34652E00 /* 52.101.46.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34653000 /* 52.101.48.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34653200 /* 52.101.50.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34653300 /* 52.101.51.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34653400 /* 52.101.52.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34653800 /* 52.101.56.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34653C00 /* 52.101.60.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34653D00 /* 52.101.61.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34653E00 /* 52.101.62.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34654000 /* 52.101.64.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34654100 /* 52.101.65.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34654200 /* 52.101.66.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34654400 /* 52.101.68.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34654500 /* 52.101.69.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34654600 /* 52.101.70.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34654800 /* 52.101.72.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34654A00 /* 52.101.74.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34654B00 /* 52.101.75.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34654C00 /* 52.101.76.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34655000 /* 52.101.80.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34655400 /* 52.101.84.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34655500 /* 52.101.85.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34655600 /* 52.101.86.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34655800 /* 52.101.88.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34655A00 /* 52.101.90.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34655C00 /* 52.101.92.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34655E00 /* 52.101.94.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34655F00 /* 52.101.95.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34656000 /* 52.101.96.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34656200 /* 52.101.98.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34656400 /* 52.101.100.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34656600 /* 52.101.102.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34658000 /* 52.101.128.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34658400 /* 52.101.132.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34658500 /* 52.101.133.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34658600 /* 52.101.134.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34658800 /* 52.101.136.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668000 /* 52.102.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668100 /* 52.102.129.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668200 /* 52.102.130.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668300 /* 52.102.131.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668400 /* 52.102.132.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668500 /* 52.102.133.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668600 /* 52.102.134.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668700 /* 52.102.135.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668800 /* 52.102.136.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668900 /* 52.102.137.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668A00 /* 52.102.138.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668B00 /* 52.102.139.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668C00 /* 52.102.140.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668D00 /* 52.102.141.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668E00 /* 52.102.142.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34668F00 /* 52.102.143.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34669E00 /* 52.102.158.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34669F00 /* 52.102.159.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3466A000 /* 52.102.160.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3466A100 /* 52.102.161.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3466A200 /* 52.102.162.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3466A300 /* 52.102.163.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3466A400 /* 52.102.164.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3466A500 /* 52.102.165.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3466A600 /* 52.102.166.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3466C000 /* 52.102.192.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3466C100 /* 52.102.193.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670000 /* 52.103.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670100 /* 52.103.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670200 /* 52.103.2.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670300 /* 52.103.3.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670400 /* 52.103.4.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670500 /* 52.103.5.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670600 /* 52.103.6.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670700 /* 52.103.7.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670800 /* 52.103.8.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670900 /* 52.103.9.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670A00 /* 52.103.10.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670B00 /* 52.103.11.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670C00 /* 52.103.12.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670D00 /* 52.103.13.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670E00 /* 52.103.14.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34670F00 /* 52.103.15.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34671000 /* 52.103.16.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34671100 /* 52.103.17.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34672000 /* 52.103.32.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34672100 /* 52.103.33.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34672200 /* 52.103.34.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34672300 /* 52.103.35.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34672400 /* 52.103.36.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34672500 /* 52.103.37.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34672600 /* 52.103.38.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34674000 /* 52.103.64.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34674100 /* 52.103.65.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678000 /* 52.103.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678100 /* 52.103.129.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678200 /* 52.103.130.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678300 /* 52.103.131.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678400 /* 52.103.132.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678500 /* 52.103.133.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678600 /* 52.103.134.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678800 /* 52.103.136.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678900 /* 52.103.137.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678A00 /* 52.103.138.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678B00 /* 52.103.139.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678C00 /* 52.103.140.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678D00 /* 52.103.141.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678E00 /* 52.103.142.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34678F00 /* 52.103.143.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3467A000 /* 52.103.160.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3467A100 /* 52.103.161.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3467A200 /* 52.103.162.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3467A300 /* 52.103.163.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3467A400 /* 52.103.164.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3467A500 /* 52.103.165.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3467A600 /* 52.103.166.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3467C000 /* 52.103.192.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3467C100 /* 52.103.193.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C0000 /* 52.108.0.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C1000 /* 52.108.16.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C1800 /* 52.108.24.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C2000 /* 52.108.32.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C2400 /* 52.108.36.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C2800 /* 52.108.40.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C2A00 /* 52.108.42.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C2C00 /* 52.108.44.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C2E00 /* 52.108.46.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C3000 /* 52.108.48.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C3200 /* 52.108.50.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C3400 /* 52.108.52.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C3600 /* 52.108.54.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C3800 /* 52.108.56.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C4400 /* 52.108.68.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C4600 /* 52.108.70.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C4800 /* 52.108.72.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C4900 /* 52.108.73.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C4A00 /* 52.108.74.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C4B00 /* 52.108.75.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C4C00 /* 52.108.76.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C4D00 /* 52.108.77.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C4E00 /* 52.108.78.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C4F00 /* 52.108.79.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5000 /* 52.108.80.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5100 /* 52.108.81.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5200 /* 52.108.82.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5300 /* 52.108.83.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5400 /* 52.108.84.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5500 /* 52.108.85.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5600 /* 52.108.86.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5700 /* 52.108.87.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5800 /* 52.108.88.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5900 /* 52.108.89.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5A00 /* 52.108.90.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5B00 /* 52.108.91.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5C00 /* 52.108.92.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5D00 /* 52.108.93.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5E00 /* 52.108.94.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C5F00 /* 52.108.95.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C6000 /* 52.108.96.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C6100 /* 52.108.97.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C6200 /* 52.108.98.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C6300 /* 52.108.99.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C6400 /* 52.108.100.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C6600 /* 52.108.102.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C6800 /* 52.108.104.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C6900 /* 52.108.105.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C6A00 /* 52.108.106.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C6C00 /* 52.108.108.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C6E00 /* 52.108.110.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C6F00 /* 52.108.111.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C7000 /* 52.108.112.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C7100 /* 52.108.113.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C7300 /* 52.108.115.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C7400 /* 52.108.116.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C7500 /* 52.108.117.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C7600 /* 52.108.118.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C7900 /* 52.108.121.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C7A00 /* 52.108.122.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C7B00 /* 52.108.123.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C7C00 /* 52.108.124.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C7D00 /* 52.108.125.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C7E00 /* 52.108.126.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C7F00 /* 52.108.127.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C8000 /* 52.108.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C8100 /* 52.108.129.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C8200 /* 52.108.130.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C8400 /* 52.108.132.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C8500 /* 52.108.133.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C8600 /* 52.108.134.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C8700 /* 52.108.135.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C8800 /* 52.108.136.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C8900 /* 52.108.137.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C8A00 /* 52.108.138.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C8B00 /* 52.108.139.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CA500 /* 52.108.165.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CA600 /* 52.108.166.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CA800 /* 52.108.168.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CAA00 /* 52.108.170.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CAB00 /* 52.108.171.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CAC00 /* 52.108.172.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CAE00 /* 52.108.174.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CB000 /* 52.108.176.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CB100 /* 52.108.177.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CB200 /* 52.108.178.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CB300 /* 52.108.179.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CB400 /* 52.108.180.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CB500 /* 52.108.181.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CB600 /* 52.108.182.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CB700 /* 52.108.183.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CB800 /* 52.108.184.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CB900 /* 52.108.185.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CBA00 /* 52.108.186.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CBB00 /* 52.108.187.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CBC00 /* 52.108.188.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CBD00 /* 52.108.189.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CBE00 /* 52.108.190.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CBF00 /* 52.108.191.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CC000 /* 52.108.192.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CC100 /* 52.108.193.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CC200 /* 52.108.194.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CC300 /* 52.108.195.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CC400 /* 52.108.196.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CC500 /* 52.108.197.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CC600 /* 52.108.198.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CC700 /* 52.108.199.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CC800 /* 52.108.200.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CC900 /* 52.108.201.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CCA00 /* 52.108.202.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CCB00 /* 52.108.203.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CCC00 /* 52.108.204.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CCE00 /* 52.108.206.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CD000 /* 52.108.208.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CD800 /* 52.108.216.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CDC00 /* 52.108.220.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CDE00 /* 52.108.222.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CE000 /* 52.108.224.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CE200 /* 52.108.226.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CE400 /* 52.108.228.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CE600 /* 52.108.230.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CE800 /* 52.108.232.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CEA00 /* 52.108.234.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CEC00 /* 52.108.236.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CF000 /* 52.108.240.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346CF800 /* 52.108.248.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D0000 /* 52.109.0.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D0400 /* 52.109.4.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D0800 /* 52.109.8.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D0C00 /* 52.109.12.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D1000 /* 52.109.16.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D1400 /* 52.109.20.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D1800 /* 52.109.24.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D1C00 /* 52.109.28.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D2000 /* 52.109.32.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D2400 /* 52.109.36.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D2800 /* 52.109.40.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D2C00 /* 52.109.44.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D3000 /* 52.109.48.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D3400 /* 52.109.52.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D3800 /* 52.109.56.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D3C00 /* 52.109.60.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D4000 /* 52.109.64.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D4400 /* 52.109.68.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D4800 /* 52.109.72.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D4C00 /* 52.109.76.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D5000 /* 52.109.80.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D5200 /* 52.109.82.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D5400 /* 52.109.84.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D5600 /* 52.109.86.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D5800 /* 52.109.88.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D5C00 /* 52.109.92.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D6000 /* 52.109.96.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D6400 /* 52.109.100.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D6600 /* 52.109.102.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D6800 /* 52.109.104.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D6A00 /* 52.109.106.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D6C00 /* 52.109.108.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D7000 /* 52.109.112.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D7400 /* 52.109.116.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D7800 /* 52.109.120.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D7C00 /* 52.109.124.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D8000 /* 52.109.128.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D8400 /* 52.109.132.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D8800 /* 52.109.136.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D8C00 /* 52.109.140.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D9000 /* 52.109.144.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D9200 /* 52.109.146.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D9400 /* 52.109.148.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D9600 /* 52.109.150.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D9800 /* 52.109.152.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D9A00 /* 52.109.154.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D9C00 /* 52.109.156.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346D9E00 /* 52.109.158.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346DA000 /* 52.109.160.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346DA200 /* 52.109.162.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346DA400 /* 52.109.164.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346DA500 /* 52.109.165.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FC000 /* 52.111.192.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FC100 /* 52.111.193.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FC200 /* 52.111.194.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FC300 /* 52.111.195.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FC400 /* 52.111.196.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FC500 /* 52.111.197.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FC600 /* 52.111.198.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FC700 /* 52.111.199.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FC800 /* 52.111.200.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FC900 /* 52.111.201.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FCA00 /* 52.111.202.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FCB00 /* 52.111.203.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FCC00 /* 52.111.204.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FCD00 /* 52.111.205.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FCE00 /* 52.111.206.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FCF00 /* 52.111.207.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FD000 /* 52.111.208.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FD100 /* 52.111.209.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FD200 /* 52.111.210.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FE000 /* 52.111.224.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FE100 /* 52.111.225.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FE200 /* 52.111.226.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FE300 /* 52.111.227.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FE400 /* 52.111.228.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FE500 /* 52.111.229.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FE600 /* 52.111.230.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FE700 /* 52.111.231.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FE800 /* 52.111.232.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FE900 /* 52.111.233.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FEA00 /* 52.111.234.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FEB00 /* 52.111.235.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FEC00 /* 52.111.236.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FED00 /* 52.111.237.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FEE00 /* 52.111.238.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FEF00 /* 52.111.239.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FF000 /* 52.111.240.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FF100 /* 52.111.241.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FF200 /* 52.111.242.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FF300 /* 52.111.243.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FF400 /* 52.111.244.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FF500 /* 52.111.245.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FF600 /* 52.111.246.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FF700 /* 52.111.247.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FF800 /* 52.111.248.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FF900 /* 52.111.249.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FFA00 /* 52.111.250.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FFB00 /* 52.111.251.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FFC00 /* 52.111.252.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FFD00 /* 52.111.253.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FFE00 /* 52.111.254.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346FFF00 /* 52.111.255.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34700E00 /* 52.112.14.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34701100 /* 52.112.17.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34701200 /* 52.112.18.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34701600 /* 52.112.22.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34701700 /* 52.112.23.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34701800 /* 52.112.24.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34702600 /* 52.112.38.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34702700 /* 52.112.39.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34702800 /* 52.112.40.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34703000 /* 52.112.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34704700 /* 52.112.71.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34704800 /* 52.112.72.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34704900 /* 52.112.73.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34704A00 /* 52.112.74.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34704B00 /* 52.112.75.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34704C00 /* 52.112.76.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34705300 /* 52.112.83.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34705400 /* 52.112.84.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34705600 /* 52.112.86.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34705800 /* 52.112.88.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34705C00 /* 52.112.92.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34705D00 /* 52.112.93.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34705E00 /* 52.112.94.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34705F00 /* 52.112.95.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34706100 /* 52.112.97.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34706200 /* 52.112.98.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34706400 /* 52.112.100.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34706500 /* 52.112.101.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34706600 /* 52.112.102.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34706700 /* 52.112.103.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34706800 /* 52.112.104.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34706900 /* 52.112.105.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34706A00 /* 52.112.106.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34706C00 /* 52.112.108.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34706D00 /* 52.112.109.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34706E00 /* 52.112.110.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707000 /* 52.112.112.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707100 /* 52.112.113.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707200 /* 52.112.114.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707300 /* 52.112.115.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707400 /* 52.112.116.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707500 /* 52.112.117.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707600 /* 52.112.118.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707700 /* 52.112.119.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707800 /* 52.112.120.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707900 /* 52.112.121.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707A00 /* 52.112.122.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707B00 /* 52.112.123.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707C00 /* 52.112.124.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707D00 /* 52.112.125.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707E00 /* 52.112.126.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34707F00 /* 52.112.127.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34708B00 /* 52.112.139.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34708C00 /* 52.112.140.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34709000 /* 52.112.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470A400 /* 52.112.164.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470A800 /* 52.112.168.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470AC00 /* 52.112.172.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470B000 /* 52.112.176.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470B800 /* 52.112.184.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470BE00 /* 52.112.190.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470BF00 /* 52.112.191.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470C500 /* 52.112.197.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470C800 /* 52.112.200.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470CC00 /* 52.112.204.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470CE00 /* 52.112.206.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470CF00 /* 52.112.207.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470D400 /* 52.112.212.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470D500 /* 52.112.213.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470D600 /* 52.112.214.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470D800 /* 52.112.216.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470E000 /* 52.112.224.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470E500 /* 52.112.229.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470E600 /* 52.112.230.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470E700 /* 52.112.231.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470E800 /* 52.112.232.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470E900 /* 52.112.233.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470EA00 /* 52.112.234.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470EC00 /* 52.112.236.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470ED00 /* 52.112.237.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470EE00 /* 52.112.238.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470EF00 /* 52.112.239.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470F000 /* 52.112.240.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34710900 /* 52.113.9.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34710A00 /* 52.113.10.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34710C00 /* 52.113.12.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34710D00 /* 52.113.13.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34710E00 /* 52.113.14.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34710F00 /* 52.113.15.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34711000 /* 52.113.16.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34712500 /* 52.113.37.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34712600 /* 52.113.38.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34712800 /* 52.113.40.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34713000 /* 52.113.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34714500 /* 52.113.69.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34714600 /* 52.113.70.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34714800 /* 52.113.72.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34714C00 /* 52.113.76.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34714E00 /* 52.113.78.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34715300 /* 52.113.83.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34715500 /* 52.113.85.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34715600 /* 52.113.86.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34715700 /* 52.113.87.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34715800 /* 52.113.88.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34715C00 /* 52.113.92.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34716000 /* 52.113.96.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34716400 /* 52.113.100.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34716500 /* 52.113.101.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34716600 /* 52.113.102.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34716700 /* 52.113.103.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34716800 /* 52.113.104.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34716900 /* 52.113.105.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34716A00 /* 52.113.106.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34716B00 /* 52.113.107.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34716C00 /* 52.113.108.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34716D00 /* 52.113.109.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34716E00 /* 52.113.110.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34717000 /* 52.113.112.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34718000 /* 52.113.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34718100 /* 52.113.129.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34718200 /* 52.113.130.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34718300 /* 52.113.131.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34718400 /* 52.113.132.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34718500 /* 52.113.133.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34718600 /* 52.113.134.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34718800 /* 52.113.136.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34719000 /* 52.113.144.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34719800 /* 52.113.152.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34719900 /* 52.113.153.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34719A00 /* 52.113.154.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34719B00 /* 52.113.155.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34719C00 /* 52.113.156.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34719D00 /* 52.113.157.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34719E00 /* 52.113.158.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3471A000 /* 52.113.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3471C600 /* 52.113.198.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3471C700 /* 52.113.199.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3471C800 /* 52.113.200.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3471CC00 /* 52.113.204.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3471CD00 /* 52.113.205.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3471CE00 /* 52.113.206.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3471CF00 /* 52.113.207.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3471D000 /* 52.113.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3471E000 /* 52.113.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34720000 /* 52.114.0.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34720800 /* 52.114.8.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34721000 /* 52.114.16.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34721400 /* 52.114.20.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34721800 /* 52.114.24.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34721C00 /* 52.114.28.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34722000 /* 52.114.32.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34722400 /* 52.114.36.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34722800 /* 52.114.40.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34722C00 /* 52.114.44.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34723000 /* 52.114.48.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34723400 /* 52.114.52.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34723600 /* 52.114.54.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34723800 /* 52.114.56.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34723A00 /* 52.114.58.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34723C00 /* 52.114.60.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34724000 /* 52.114.64.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34724800 /* 52.114.72.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34724C00 /* 52.114.76.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34725000 /* 52.114.80.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34725400 /* 52.114.84.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34725800 /* 52.114.88.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34725C00 /* 52.114.92.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34726000 /* 52.114.96.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34726800 /* 52.114.104.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34726C00 /* 52.114.108.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34727000 /* 52.114.112.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34727200 /* 52.114.114.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34727400 /* 52.114.116.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34727800 /* 52.114.120.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34728000 /* 52.114.128.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34728400 /* 52.114.132.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34728800 /* 52.114.136.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34729000 /* 52.114.144.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34729400 /* 52.114.148.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34729800 /* 52.114.152.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472A000 /* 52.114.160.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472A400 /* 52.114.164.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472A800 /* 52.114.168.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472AC00 /* 52.114.172.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472B400 /* 52.114.180.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472B800 /* 52.114.184.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472BA00 /* 52.114.186.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472C000 /* 52.114.192.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472C200 /* 52.114.194.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472C400 /* 52.114.196.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472C800 /* 52.114.200.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472CC00 /* 52.114.204.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472CE00 /* 52.114.206.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472D000 /* 52.114.208.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472D100 /* 52.114.209.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472D200 /* 52.114.210.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472D400 /* 52.114.212.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472D600 /* 52.114.214.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472D800 /* 52.114.216.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472E000 /* 52.114.224.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472E100 /* 52.114.225.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472E200 /* 52.114.226.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472E300 /* 52.114.227.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472E400 /* 52.114.228.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472E500 /* 52.114.229.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472E600 /* 52.114.230.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472E700 /* 52.114.231.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472E800 /* 52.114.232.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472E900 /* 52.114.233.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472EA00 /* 52.114.234.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472EB00 /* 52.114.235.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472EC00 /* 52.114.236.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472ED00 /* 52.114.237.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472EE00 /* 52.114.238.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472EF00 /* 52.114.239.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472F000 /* 52.114.240.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472F100 /* 52.114.241.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472F200 /* 52.114.242.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472F300 /* 52.114.243.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472F400 /* 52.114.244.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472F800 /* 52.114.248.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472FC00 /* 52.114.252.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34731000 /* 52.115.16.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34732000 /* 52.115.32.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34732E00 /* 52.115.46.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34732F00 /* 52.115.47.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34733600 /* 52.115.54.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34733700 /* 52.115.55.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34733E00 /* 52.115.62.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34734400 /* 52.115.68.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34734C00 /* 52.115.76.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34735400 /* 52.115.84.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34735800 /* 52.115.88.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34735C00 /* 52.115.92.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34735D00 /* 52.115.93.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34736000 /* 52.115.96.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34736100 /* 52.115.97.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34736200 /* 52.115.98.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34736300 /* 52.115.99.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34736400 /* 52.115.100.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34736800 /* 52.115.104.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34736A00 /* 52.115.106.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34736C00 /* 52.115.108.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34737000 /* 52.115.112.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34737200 /* 52.115.114.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34738000 /* 52.115.128.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34738800 /* 52.115.136.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34738C00 /* 52.115.140.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34739000 /* 52.115.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3473A000 /* 52.115.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3473C000 /* 52.115.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3473E000 /* 52.115.224.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3473E200 /* 52.115.226.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3473E400 /* 52.115.228.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3473E600 /* 52.115.230.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3473E700 /* 52.115.231.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3473E800 /* 52.115.232.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3473E900 /* 52.115.233.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3473EA00 /* 52.115.234.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3473EB00 /* 52.115.235.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3473EC00 /* 52.115.236.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3473EE00 /* 52.115.238.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3473F000 /* 52.115.240.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3473F200 /* 52.115.242.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34780000 /* 52.120.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34782000 /* 52.120.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34784000 /* 52.120.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34786000 /* 52.120.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34788000 /* 52.120.128.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34788800 /* 52.120.136.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34789000 /* 52.120.144.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34789800 /* 52.120.152.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34789C00 /* 52.120.156.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34789D00 /* 52.120.157.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34789E00 /* 52.120.158.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3478A000 /* 52.120.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3478C000 /* 52.120.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3478D000 /* 52.120.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3478E000 /* 52.120.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3478F000 /* 52.120.240.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34790000 /* 52.121.0.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34791000 /* 52.121.16.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34791800 /* 52.121.24.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34792000 /* 52.121.32.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34792400 /* 52.121.36.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34792800 /* 52.121.40.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34793000 /* 52.121.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34794000 /* 52.121.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34795000 /* 52.121.80.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34795400 /* 52.121.84.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34795600 /* 52.121.86.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34795800 /* 52.121.88.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34796000 /* 52.121.96.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34796400 /* 52.121.100.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34796800 /* 52.121.104.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34796A00 /* 52.121.106.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34796C00 /* 52.121.108.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34797000 /* 52.121.112.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34797400 /* 52.121.116.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34797800 /* 52.121.120.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34797A00 /* 52.121.122.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34797C00 /* 52.121.124.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34798000 /* 52.121.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34799000 /* 52.121.144.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34799800 /* 52.121.152.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3479A000 /* 52.121.160.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3479A400 /* 52.121.164.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3479A500 /* 52.121.165.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3479A600 /* 52.121.166.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3479A800 /* 52.121.168.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3479AC00 /* 52.121.172.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3479B000 /* 52.121.176.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3479B200 /* 52.121.178.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3479B400 /* 52.121.180.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3479C000 /* 52.121.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A0000 /* 52.122.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A0100 /* 52.122.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A0200 /* 52.122.2.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A0400 /* 52.122.4.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A0600 /* 52.122.6.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A0700 /* 52.122.7.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A0800 /* 52.122.8.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A0C00 /* 52.122.12.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A1000 /* 52.122.16.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A1400 /* 52.122.20.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A1800 /* 52.122.24.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A1C00 /* 52.122.28.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A2000 /* 52.122.32.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A2400 /* 52.122.36.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A2800 /* 52.122.40.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347A2C00 /* 52.122.44.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B0000 /* 52.123.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B0100 /* 52.123.1.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B0200 /* 52.123.2.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B0300 /* 52.123.3.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B0400 /* 52.123.4.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B0500 /* 52.123.5.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B0600 /* 52.123.6.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B0700 /* 52.123.7.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B8500 /* 52.123.133.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B8600 /* 52.123.134.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B8800 /* 52.123.136.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B8C00 /* 52.123.140.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B8D00 /* 52.123.141.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B8E00 /* 52.123.142.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B9000 /* 52.123.144.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B9200 /* 52.123.146.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B9300 /* 52.123.147.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B9400 /* 52.123.148.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B9500 /* 52.123.149.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B9600 /* 52.123.150.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B9700 /* 52.123.151.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B9800 /* 52.123.152.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B9900 /* 52.123.153.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B9A00 /* 52.123.154.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B9B00 /* 52.123.155.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B9C00 /* 52.123.156.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B9D00 /* 52.123.157.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B9E00 /* 52.123.158.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B9F00 /* 52.123.159.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BA000 /* 52.123.160.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BA200 /* 52.123.162.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BA400 /* 52.123.164.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BA500 /* 52.123.165.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BA600 /* 52.123.166.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BA800 /* 52.123.168.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BAA00 /* 52.123.170.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BAC00 /* 52.123.172.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BAD00 /* 52.123.173.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BAE00 /* 52.123.174.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BAF00 /* 52.123.175.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BB000 /* 52.123.176.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BB100 /* 52.123.177.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BB200 /* 52.123.178.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BB400 /* 52.123.180.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BB500 /* 52.123.181.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BB600 /* 52.123.182.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BB700 /* 52.123.183.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BB800 /* 52.123.184.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BB900 /* 52.123.185.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BBA00 /* 52.123.186.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BBB00 /* 52.123.187.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BBC00 /* 52.123.188.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BBD00 /* 52.123.189.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BBE00 /* 52.123.190.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BC000 /* 52.123.192.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347D8000 /* 52.125.128.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347D8400 /* 52.125.132.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347D8800 /* 52.125.136.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347D8900 /* 52.125.137.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347D8A00 /* 52.125.138.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347D8C00 /* 52.125.140.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34880000 /* 52.136.0.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34880400 /* 52.136.4.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34880800 /* 52.136.8.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881000 /* 52.136.16.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881100 /* 52.136.17.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881200 /* 52.136.18.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881300 /* 52.136.19.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881400 /* 52.136.20.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881500 /* 52.136.21.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881600 /* 52.136.22.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881700 /* 52.136.23.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881800 /* 52.136.24.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881900 /* 52.136.25.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881A00 /* 52.136.26.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881B00 /* 52.136.27.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881C00 /* 52.136.28.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881D00 /* 52.136.29.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881E00 /* 52.136.30.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34881F00 /* 52.136.31.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34882000 /* 52.136.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34884000 /* 52.136.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34888000 /* 52.136.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3488C000 /* 52.136.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34890000 /* 52.137.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34894000 /* 52.137.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34898000 /* 52.137.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A0000 /* 52.138.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A4000 /* 52.138.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5000 /* 52.138.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A5800 /* 52.138.88.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A6000 /* 52.138.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348A8000 /* 52.138.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B0000 /* 52.139.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B4000 /* 52.139.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348B8000 /* 52.139.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348BC000 /* 52.139.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C0000 /* 52.140.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C4000 /* 52.140.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348C8000 /* 52.140.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348CC000 /* 52.140.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D0000 /* 52.141.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D4000 /* 52.141.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348D8000 /* 52.141.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348DC000 /* 52.141.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348DE000 /* 52.141.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348DF000 /* 52.141.240.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E0000 /* 52.142.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E4000 /* 52.142.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348E8000 /* 52.142.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348EC000 /* 52.142.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F0000 /* 52.143.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F4000 /* 52.143.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348F8000 /* 52.143.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FC000 /* 52.143.192.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FC100 /* 52.143.193.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FC200 /* 52.143.194.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FC300 /* 52.143.195.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FC400 /* 52.143.196.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FC500 /* 52.143.197.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FC600 /* 52.143.198.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FC700 /* 52.143.199.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FC800 /* 52.143.200.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FCA00 /* 52.143.202.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FCB00 /* 52.143.203.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FCC00 /* 52.143.204.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FCE00 /* 52.143.206.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FCF00 /* 52.143.207.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FD000 /* 52.143.208.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FD100 /* 52.143.209.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FD200 /* 52.143.210.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FD300 /* 52.143.211.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FD400 /* 52.143.212.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FD600 /* 52.143.214.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FD700 /* 52.143.215.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FD800 /* 52.143.216.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FDA00 /* 52.143.218.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FDB00 /* 52.143.219.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FDC00 /* 52.143.220.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FDD00 /* 52.143.221.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FDE00 /* 52.143.222.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x348FE000 /* 52.143.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34920000 /* 52.146.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34928000 /* 52.146.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34930000 /* 52.147.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34932000 /* 52.147.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34934000 /* 52.147.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34936000 /* 52.147.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34938000 /* 52.147.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3493A000 /* 52.147.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3493C000 /* 52.147.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34940000 /* 52.148.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34944000 /* 52.148.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34948000 /* 52.148.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3494C000 /* 52.148.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34950000 /* 52.149.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34954000 /* 52.149.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34958000 /* 52.149.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34960000 /* 52.150.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34968000 /* 52.150.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34970000 /* 52.151.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34974000 /* 52.151.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34978000 /* 52.151.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34980000 /* 52.152.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34988000 /* 52.152.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34990000 /* 52.153.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34994000 /* 52.153.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34998000 /* 52.153.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3499C000 /* 52.153.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349A0000 /* 52.154.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349A4000 /* 52.154.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349A8000 /* 52.154.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B0000 /* 52.155.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B2000 /* 52.155.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B4000 /* 52.155.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B6000 /* 52.155.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349B8000 /* 52.155.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349C0000 /* 52.156.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349C2000 /* 52.156.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349C4000 /* 52.156.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349C8000 /* 52.156.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CA000 /* 52.156.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349CC000 /* 52.156.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349D0000 /* 52.157.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349D4000 /* 52.157.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349D8000 /* 52.157.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349E0000 /* 52.158.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349E8000 /* 52.158.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349EA000 /* 52.158.160.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349EB000 /* 52.158.176.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349EC000 /* 52.158.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349EE000 /* 52.158.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F0000 /* 52.159.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F4000 /* 52.159.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x349F8000 /* 52.159.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A00000 /* 52.160.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A10000 /* 52.161.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A20000 /* 52.162.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A30000 /* 52.163.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A40000 /* 52.164.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A50000 /* 52.165.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A52000 /* 52.165.32.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A53000 /* 52.165.48.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A53100 /* 52.165.49.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A53800 /* 52.165.56.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A54000 /* 52.165.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A56000 /* 52.165.96.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A56800 /* 52.165.104.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A56880 /* 52.165.104.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A58000 /* 52.165.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A60000 /* 52.166.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A70000 /* 52.167.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A80000 /* 52.168.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34A90000 /* 52.169.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AA0000 /* 52.170.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AB0000 /* 52.171.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC0000 /* 52.172.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AC8000 /* 52.172.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AD0000 /* 52.173.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AE0000 /* 52.174.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF0000 /* 52.175.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AF8000 /* 52.175.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34AFC000 /* 52.175.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B00000 /* 52.176.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B08000 /* 52.176.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B0A000 /* 52.176.160.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B0B000 /* 52.176.176.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B0C000 /* 52.176.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B0E000 /* 52.176.224.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B0E100 /* 52.176.225.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B0E800 /* 52.176.232.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B0F000 /* 52.176.240.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B10000 /* 52.177.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B20000 /* 52.178.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B28000 /* 52.178.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B30000 /* 52.179.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B38000 /* 52.179.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B40000 /* 52.180.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B48000 /* 52.180.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4A000 /* 52.180.160.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B000 /* 52.180.176.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B800 /* 52.180.184.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B820 /* 52.180.184.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B4B900 /* 52.180.185.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B68000 /* 52.182.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B70000 /* 52.183.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B78000 /* 52.183.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B7C000 /* 52.183.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B80000 /* 52.184.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B88000 /* 52.184.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A000 /* 52.184.160.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A800 /* 52.184.168.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A810 /* 52.184.168.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A820 /* 52.184.168.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A850 /* 52.184.168.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A860 /* 52.184.168.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A880 /* 52.184.168.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8A900 /* 52.184.169.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8AA00 /* 52.184.170.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8B000 /* 52.184.176.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B8C000 /* 52.184.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B90000 /* 52.185.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B92000 /* 52.185.32.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B93000 /* 52.185.48.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B93800 /* 52.185.56.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B93840 /* 52.185.56.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B93860 /* 52.185.56.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B93870 /* 52.185.56.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B93880 /* 52.185.56.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B938A0 /* 52.185.56.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B94000 /* 52.185.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B96000 /* 52.185.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B97000 /* 52.185.112.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B97040 /* 52.185.112.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B97060 /* 52.185.112.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B97800 /* 52.185.120.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B98000 /* 52.185.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34B9C000 /* 52.185.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BA0000 /* 52.186.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB0000 /* 52.187.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BB8000 /* 52.187.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BBC000 /* 52.187.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BC0000 /* 52.188.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BD0000 /* 52.189.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BD8000 /* 52.189.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BDC000 /* 52.189.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BE0000 /* 52.190.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BE8000 /* 52.190.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BF0000 /* 52.191.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BF8000 /* 52.191.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34BFC000 /* 52.191.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E00000 /* 52.224.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E10000 /* 52.225.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E18000 /* 52.225.128.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E18800 /* 52.225.136.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E18820 /* 52.225.136.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E18830 /* 52.225.136.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E18840 /* 52.225.136.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E18900 /* 52.225.137.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E19000 /* 52.225.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1A000 /* 52.225.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E1C000 /* 52.225.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E20000 /* 52.226.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E40000 /* 52.228.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E48000 /* 52.228.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E50000 /* 52.229.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E54000 /* 52.229.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E58000 /* 52.229.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E60000 /* 52.230.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E68000 /* 52.230.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E70000 /* 52.231.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E78000 /* 52.231.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E80000 /* 52.232.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E88000 /* 52.232.128.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E88800 /* 52.232.136.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89000 /* 52.232.144.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89100 /* 52.232.145.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89200 /* 52.232.146.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89300 /* 52.232.147.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89400 /* 52.232.148.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89500 /* 52.232.149.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89600 /* 52.232.150.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89700 /* 52.232.151.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89800 /* 52.232.152.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89900 /* 52.232.153.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89A00 /* 52.232.154.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89B00 /* 52.232.155.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89C00 /* 52.232.156.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89D00 /* 52.232.157.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89E00 /* 52.232.158.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E89F00 /* 52.232.159.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8A000 /* 52.232.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E8C000 /* 52.232.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E90000 /* 52.233.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E94000 /* 52.233.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34E98000 /* 52.233.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EA0000 /* 52.234.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EA8000 /* 52.234.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EB0000 /* 52.235.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EB4000 /* 52.235.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EC0000 /* 52.236.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EC8000 /* 52.236.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED0000 /* 52.237.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED4000 /* 52.237.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34ED8000 /* 52.237.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EDC000 /* 52.237.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EE0000 /* 52.238.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EEC000 /* 52.238.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF0000 /* 52.239.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF8000 /* 52.239.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF8100 /* 52.239.129.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF8200 /* 52.239.130.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF8400 /* 52.239.132.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF8600 /* 52.239.134.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF8700 /* 52.239.135.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF8740 /* 52.239.135.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF8780 /* 52.239.135.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF87C0 /* 52.239.135.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF8800 /* 52.239.136.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF8C00 /* 52.239.140.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9000 /* 52.239.144.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9200 /* 52.239.146.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9400 /* 52.239.148.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9440 /* 52.239.148.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9480 /* 52.239.148.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9500 /* 52.239.149.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9600 /* 52.239.150.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9800 /* 52.239.152.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9C00 /* 52.239.156.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9D00 /* 52.239.157.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9D80 /* 52.239.157.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9DC0 /* 52.239.157.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9DE0 /* 52.239.157.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EF9E00 /* 52.239.158.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA000 /* 52.239.160.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA400 /* 52.239.164.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA480 /* 52.239.164.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA4C0 /* 52.239.164.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA500 /* 52.239.165.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA5A0 /* 52.239.165.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA5C0 /* 52.239.165.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA700 /* 52.239.167.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFA800 /* 52.239.168.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFAC00 /* 52.239.172.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB080 /* 52.239.176.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB100 /* 52.239.177.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB120 /* 52.239.177.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB140 /* 52.239.177.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB180 /* 52.239.177.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB200 /* 52.239.178.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB400 /* 52.239.180.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB800 /* 52.239.184.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB8A0 /* 52.239.184.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB8B0 /* 52.239.184.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB8C0 /* 52.239.184.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB8E0 /* 52.239.184.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB900 /* 52.239.185.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFB920 /* 52.239.185.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFBA00 /* 52.239.186.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFBB00 /* 52.239.187.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFBB80 /* 52.239.187.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFBC00 /* 52.239.188.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFBD00 /* 52.239.189.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFBE00 /* 52.239.190.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFBE80 /* 52.239.190.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFBEC0 /* 52.239.190.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC000 /* 52.239.192.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC040 /* 52.239.192.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC060 /* 52.239.192.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC080 /* 52.239.192.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC0A0 /* 52.239.192.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC0C0 /* 52.239.192.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC100 /* 52.239.193.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC200 /* 52.239.194.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC300 /* 52.239.195.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC400 /* 52.239.196.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC500 /* 52.239.197.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC600 /* 52.239.198.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC680 /* 52.239.198.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC6C0 /* 52.239.198.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC700 /* 52.239.199.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFC800 /* 52.239.200.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFCA00 /* 52.239.202.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFCB00 /* 52.239.203.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFCD00 /* 52.239.205.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFCE00 /* 52.239.206.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFCF20 /* 52.239.207.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFCF40 /* 52.239.207.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFCF80 /* 52.239.207.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFCFC0 /* 52.239.207.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFD000 /* 52.239.208.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFD200 /* 52.239.210.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFD400 /* 52.239.212.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFD600 /* 52.239.214.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFD800 /* 52.239.216.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFDA00 /* 52.239.218.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFDC00 /* 52.239.220.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFDE00 /* 52.239.222.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE000 /* 52.239.224.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE100 /* 52.239.225.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE200 /* 52.239.226.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE300 /* 52.239.227.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE400 /* 52.239.228.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE600 /* 52.239.230.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE700 /* 52.239.231.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE800 /* 52.239.232.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE880 /* 52.239.232.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE900 /* 52.239.233.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFE980 /* 52.239.233.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFEA00 /* 52.239.234.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFEC00 /* 52.239.236.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFEE00 /* 52.239.238.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFEF00 /* 52.239.239.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFF000 /* 52.239.240.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFF100 /* 52.239.241.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFF200 /* 52.239.242.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFF400 /* 52.239.244.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFF600 /* 52.239.246.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFF800 /* 52.239.248.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFF900 /* 52.239.249.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFFA00 /* 52.239.250.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFFB00 /* 52.239.251.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFFC00 /* 52.239.252.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFFD00 /* 52.239.253.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34EFFE00 /* 52.239.254.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F00000 /* 52.240.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F08000 /* 52.240.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F10000 /* 52.241.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F20000 /* 52.242.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F24000 /* 52.242.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F28000 /* 52.242.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F32000 /* 52.243.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F34000 /* 52.243.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F50800 /* 52.245.8.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F50C00 /* 52.245.12.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F51000 /* 52.245.16.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F51400 /* 52.245.20.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F51800 /* 52.245.24.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F51C00 /* 52.245.28.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52000 /* 52.245.32.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52400 /* 52.245.36.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52800 /* 52.245.40.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52C00 /* 52.245.44.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52D00 /* 52.245.45.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52D80 /* 52.245.45.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52D90 /* 52.245.45.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52DA0 /* 52.245.45.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52DC0 /* 52.245.45.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52E00 /* 52.245.46.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52E20 /* 52.245.46.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52E30 /* 52.245.46.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52E40 /* 52.245.46.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52E50 /* 52.245.46.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52E60 /* 52.245.46.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52E70 /* 52.245.46.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52E80 /* 52.245.46.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52EA0 /* 52.245.46.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F52EC0 /* 52.245.46.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F53000 /* 52.245.48.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F53400 /* 52.245.52.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F53800 /* 52.245.56.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F53C00 /* 52.245.60.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F54000 /* 52.245.64.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F54400 /* 52.245.68.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F54500 /* 52.245.69.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F54520 /* 52.245.69.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F54540 /* 52.245.69.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F54560 /* 52.245.69.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F54590 /* 52.245.69.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F545A0 /* 52.245.69.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F545C0 /* 52.245.69.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F54600 /* 52.245.70.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F54800 /* 52.245.72.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F54C00 /* 52.245.76.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F55000 /* 52.245.80.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F55400 /* 52.245.84.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F55800 /* 52.245.88.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F55C00 /* 52.245.92.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F56000 /* 52.245.96.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F56400 /* 52.245.100.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F56800 /* 52.245.104.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F56C00 /* 52.245.108.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F57000 /* 52.245.112.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F57400 /* 52.245.116.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F57800 /* 52.245.120.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F57C00 /* 52.245.124.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F60000 /* 52.246.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F68000 /* 52.246.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F69800 /* 52.246.152.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F6A000 /* 52.246.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F6C000 /* 52.246.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F70000 /* 52.247.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F7C000 /* 52.247.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F80000 /* 52.248.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F88000 /* 52.248.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F90000 /* 52.249.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F94000 /* 52.249.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34F98000 /* 52.249.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA0000 /* 52.250.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FA8000 /* 52.250.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FAC000 /* 52.250.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FB0000 /* 52.251.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FC0000 /* 52.252.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FC8000 /* 52.252.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD0000 /* 52.253.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD4000 /* 52.253.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD5000 /* 52.253.80.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD6000 /* 52.253.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD8000 /* 52.253.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD9400 /* 52.253.148.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD9600 /* 52.253.150.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD9800 /* 52.253.152.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD9A00 /* 52.253.154.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FD9C00 /* 52.253.156.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDA000 /* 52.253.160.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDA100 /* 52.253.161.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDA200 /* 52.253.162.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDA400 /* 52.253.164.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDA500 /* 52.253.165.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDA600 /* 52.253.166.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDA700 /* 52.253.167.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDA800 /* 52.253.168.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDA900 /* 52.253.169.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDAA00 /* 52.253.170.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDAC00 /* 52.253.172.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDAD00 /* 52.253.173.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDAE00 /* 52.253.174.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDAF00 /* 52.253.175.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDB000 /* 52.253.176.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDB100 /* 52.253.177.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDB200 /* 52.253.178.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDB300 /* 52.253.179.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDB400 /* 52.253.180.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDB500 /* 52.253.181.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDB600 /* 52.253.182.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDB800 /* 52.253.184.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDB900 /* 52.253.185.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDBA00 /* 52.253.186.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDBB00 /* 52.253.187.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDBC00 /* 52.253.188.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDBE00 /* 52.253.190.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDBF00 /* 52.253.191.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDC000 /* 52.253.192.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDC100 /* 52.253.193.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDC200 /* 52.253.194.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDC400 /* 52.253.196.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDC500 /* 52.253.197.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDC600 /* 52.253.198.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDC700 /* 52.253.199.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDC800 /* 52.253.200.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDCA00 /* 52.253.202.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDCB00 /* 52.253.203.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDCC00 /* 52.253.204.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDCE00 /* 52.253.206.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDCF00 /* 52.253.207.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDD000 /* 52.253.208.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDD200 /* 52.253.210.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDD400 /* 52.253.212.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDD500 /* 52.253.213.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDD600 /* 52.253.214.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDD800 /* 52.253.216.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDDA00 /* 52.253.218.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDDB00 /* 52.253.219.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDDC00 /* 52.253.220.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDDE00 /* 52.253.222.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDE000 /* 52.253.224.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FDE800 /* 52.253.232.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FE0000 /* 52.254.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FE4000 /* 52.254.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FE6000 /* 52.254.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FE7000 /* 52.254.112.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FE7800 /* 52.254.120.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FE8000 /* 52.254.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF0000 /* 52.255.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF2000 /* 52.255.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF4000 /* 52.255.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34FF8000 /* 52.255.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x40040800 /* 64.4.8.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x40043600 /* 64.4.54.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41340000 /* 65.52.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41342000 /* 65.52.32.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41343000 /* 65.52.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41344000 /* 65.52.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41346800 /* 65.52.104.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41346A00 /* 65.52.106.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41346C00 /* 65.52.108.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41346E00 /* 65.52.110.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41346F00 /* 65.52.111.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41347000 /* 65.52.112.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41348000 /* 65.52.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134A000 /* 65.52.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134C000 /* 65.52.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134E000 /* 65.52.224.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134E800 /* 65.52.232.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134F000 /* 65.52.240.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4134F800 /* 65.52.248.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41361380 /* 65.54.19.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41372080 /* 65.55.32.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x413720C0 /* 65.55.32.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x413720E0 /* 65.55.32.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x413721B0 /* 65.55.33.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x413721C0 /* 65.55.33.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x413723C0 /* 65.55.35.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41372C08 /* 65.55.44.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41372C10 /* 65.55.44.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41372C20 /* 65.55.44.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41372C40 /* 65.55.44.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41372C60 /* 65.55.44.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41372C70 /* 65.55.44.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41372C80 /* 65.55.44.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41373300 /* 65.55.51.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41373CB0 /* 65.55.60.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41373CB8 /* 65.55.60.184/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41373CBC /* 65.55.60.188/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376900 /* 65.55.105.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376960 /* 65.55.105.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x413769A0 /* 65.55.105.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x413769C0 /* 65.55.105.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x413769E0 /* 65.55.105.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376A00 /* 65.55.106.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376A40 /* 65.55.106.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376A80 /* 65.55.106.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376AC0 /* 65.55.106.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376AD0 /* 65.55.106.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376AE0 /* 65.55.106.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376AF0 /* 65.55.106.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376B00 /* 65.55.107.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376B30 /* 65.55.107.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376B40 /* 65.55.107.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376B60 /* 65.55.107.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376C00 /* 65.55.108.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376D00 /* 65.55.109.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41376E00 /* 65.55.110.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41377800 /* 65.55.120.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41379000 /* 65.55.144.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x41379200 /* 65.55.146.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137CF00 /* 65.55.207.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137D100 /* 65.55.209.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137D180 /* 65.55.209.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137D1C0 /* 65.55.209.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137D200 /* 65.55.210.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137D300 /* 65.55.211.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137D320 /* 65.55.211.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137D400 /* 65.55.212.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137D480 /* 65.55.212.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137D500 /* 65.55.213.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137D540 /* 65.55.213.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137D580 /* 65.55.213.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137D900 /* 65.55.217.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137DA00 /* 65.55.218.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137DB00 /* 65.55.219.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137DB20 /* 65.55.219.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137DB40 /* 65.55.219.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137DB80 /* 65.55.219.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137FA00 /* 65.55.250.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4137FC00 /* 65.55.252.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44D20000 /* 68.210.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44D30000 /* 68.211.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DA0000 /* 68.218.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DB0000 /* 68.219.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DB8000 /* 68.219.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DBC000 /* 68.219.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC0000 /* 68.220.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC2000 /* 68.220.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC4000 /* 68.220.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC5000 /* 68.220.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DC8000 /* 68.220.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD0000 /* 68.221.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD8000 /* 68.221.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DD9000 /* 68.221.144.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x44DDA000 /* 68.221.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x46250000 /* 70.37.0.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x46250800 /* 70.37.8.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x46250C00 /* 70.37.12.0/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x46251000 /* 70.37.16.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x46252000 /* 70.37.32.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x46253000 /* 70.37.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x46254000 /* 70.37.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4625A000 /* 70.37.160.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4AE00000 /* 74.224.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4AE10000 /* 74.225.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4AE14000 /* 74.225.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4AE18000 /* 74.225.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4AE20000 /* 74.226.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4AE30000 /* 74.227.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4AEA0000 /* 74.234.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4AEA8000 /* 74.234.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4AEB0000 /* 74.235.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4AF00000 /* 74.240.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4AF10000 /* 74.241.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4AF20000 /* 74.242.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4AF30000 /* 74.243.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4AF38000 /* 74.243.128.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x5EF55800 /* 94.245.88.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x5EF56800 /* 94.245.104.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x5EF57560 /* 94.245.117.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x5EF57600 /* 94.245.118.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x5EF57880 /* 94.245.120.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x5EF57A00 /* 94.245.122.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x5EF57B90 /* 94.245.123.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x5EF57BB0 /* 94.245.123.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x62400000 /* 98.64.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x62410000 /* 98.65.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x62420000 /* 98.66.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x62430000 /* 98.67.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x62438000 /* 98.67.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66250000 /* 102.37.0.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66251000 /* 102.37.16.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66251800 /* 102.37.24.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66251A00 /* 102.37.26.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66251A20 /* 102.37.26.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66252000 /* 102.37.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254000 /* 102.37.64.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66254800 /* 102.37.72.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66255000 /* 102.37.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66256000 /* 102.37.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66258000 /* 102.37.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625A000 /* 102.37.160.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625B000 /* 102.37.176.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6625C000 /* 102.37.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66850000 /* 102.133.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66854000 /* 102.133.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66856000 /* 102.133.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857000 /* 102.133.112.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66857800 /* 102.133.120.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x66858000 /* 102.133.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685C000 /* 102.133.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685E000 /* 102.133.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685F000 /* 102.133.240.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685F080 /* 102.133.240.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6685F800 /* 102.133.248.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x67199C00 /* 103.25.156.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x67246000 /* 103.36.96.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x67FF8C00 /* 103.255.140.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68280000 /* 104.40.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68288000 /* 104.40.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68290000 /* 104.41.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68294000 /* 104.41.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68298000 /* 104.41.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829A000 /* 104.41.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6829C000 /* 104.41.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682A0000 /* 104.42.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682B0000 /* 104.43.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682B8000 /* 104.43.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5800 /* 104.44.88.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5820 /* 104.44.88.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5840 /* 104.44.88.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5860 /* 104.44.88.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5880 /* 104.44.88.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C58A0 /* 104.44.88.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C58C0 /* 104.44.88.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C58E0 /* 104.44.88.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5900 /* 104.44.89.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5920 /* 104.44.89.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5940 /* 104.44.89.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5960 /* 104.44.89.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5980 /* 104.44.89.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C59A0 /* 104.44.89.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C59C0 /* 104.44.89.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C59E0 /* 104.44.89.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5A00 /* 104.44.90.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5A20 /* 104.44.90.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5A40 /* 104.44.90.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5A80 /* 104.44.90.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5AA0 /* 104.44.90.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5AC0 /* 104.44.90.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5AE0 /* 104.44.90.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5B00 /* 104.44.91.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5B20 /* 104.44.91.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5B40 /* 104.44.91.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5B60 /* 104.44.91.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5B80 /* 104.44.91.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5BA0 /* 104.44.91.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5BC0 /* 104.44.91.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5BE0 /* 104.44.91.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5C00 /* 104.44.92.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5C20 /* 104.44.92.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5C40 /* 104.44.92.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5C60 /* 104.44.92.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5C80 /* 104.44.92.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5CA0 /* 104.44.92.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5CC0 /* 104.44.92.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5CE0 /* 104.44.92.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5D00 /* 104.44.93.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5D20 /* 104.44.93.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5D40 /* 104.44.93.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5D60 /* 104.44.93.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5D80 /* 104.44.93.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5DA0 /* 104.44.93.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5DC0 /* 104.44.93.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5DE0 /* 104.44.93.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5E00 /* 104.44.94.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5E10 /* 104.44.94.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5E20 /* 104.44.94.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5E30 /* 104.44.94.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5E40 /* 104.44.94.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5E50 /* 104.44.94.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5E60 /* 104.44.94.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5E70 /* 104.44.94.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5E80 /* 104.44.94.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5E90 /* 104.44.94.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5EA0 /* 104.44.94.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5EC0 /* 104.44.94.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5ED0 /* 104.44.94.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5EE0 /* 104.44.94.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5F00 /* 104.44.95.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5F10 /* 104.44.95.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5F20 /* 104.44.95.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5F30 /* 104.44.95.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5F40 /* 104.44.95.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5F50 /* 104.44.95.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5F60 /* 104.44.95.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5F70 /* 104.44.95.112/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5F80 /* 104.44.95.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5FA0 /* 104.44.95.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5FC0 /* 104.44.95.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5FD0 /* 104.44.95.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5FE0 /* 104.44.95.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C5FF0 /* 104.44.95.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682C8000 /* 104.44.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D0000 /* 104.45.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D4000 /* 104.45.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D5000 /* 104.45.80.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D6000 /* 104.45.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682D8000 /* 104.45.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DC000 /* 104.45.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DD000 /* 104.45.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682DE000 /* 104.45.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E0000 /* 104.46.0.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E0800 /* 104.46.8.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E1800 /* 104.46.24.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E1C00 /* 104.46.28.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E1D00 /* 104.46.29.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E1E00 /* 104.46.30.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E2000 /* 104.46.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E4000 /* 104.46.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682E6000 /* 104.46.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EA000 /* 104.46.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EC000 /* 104.46.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682ED000 /* 104.46.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682EE000 /* 104.46.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682F8000 /* 104.47.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682FC800 /* 104.47.200.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682FD000 /* 104.47.208.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682FD200 /* 104.47.210.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682FD400 /* 104.47.212.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682FD600 /* 104.47.214.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682FD840 /* 104.47.216.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682FDA00 /* 104.47.218.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682FDC00 /* 104.47.220.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x682FE000 /* 104.47.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D00000 /* 104.208.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D02000 /* 104.208.32.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D03000 /* 104.208.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D04000 /* 104.208.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D08000 /* 104.208.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D10000 /* 104.209.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D14000 /* 104.209.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D15000 /* 104.209.80.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D18000 /* 104.209.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D20000 /* 104.210.0.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D22000 /* 104.210.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D24000 /* 104.210.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D28000 /* 104.210.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D2B000 /* 104.210.176.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D2C000 /* 104.210.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D30000 /* 104.211.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D34000 /* 104.211.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D38000 /* 104.211.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D3C000 /* 104.211.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D60000 /* 104.214.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D68000 /* 104.214.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6A000 /* 104.214.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D6C000 /* 104.214.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D70000 /* 104.215.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D74000 /* 104.215.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x68D78000 /* 104.215.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6C8C0000 /* 108.140.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6C8D0000 /* 108.141.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6C8E0000 /* 108.142.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6FDD1C00 /* 111.221.28.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6FDD1D00 /* 111.221.29.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6FDD1E00 /* 111.221.30.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6FDD5000 /* 111.221.80.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x6FDD6000 /* 111.221.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0C00 /* 131.253.12.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0C10 /* 131.253.12.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0C28 /* 131.253.12.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0C30 /* 131.253.12.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0C50 /* 131.253.12.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0CA0 /* 131.253.12.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0CC0 /* 131.253.12.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0CD0 /* 131.253.12.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0CE0 /* 131.253.12.224/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0CE4 /* 131.253.12.228/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0CF0 /* 131.253.12.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0CF8 /* 131.253.12.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0D00 /* 131.253.13.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0D10 /* 131.253.13.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0D18 /* 131.253.13.24/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0D20 /* 131.253.13.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0D30 /* 131.253.13.48/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0D48 /* 131.253.13.72/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0D50 /* 131.253.13.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0D58 /* 131.253.13.88/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0D60 /* 131.253.13.96/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0D64 /* 131.253.13.100/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0D68 /* 131.253.13.104/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0D80 /* 131.253.13.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0E04 /* 131.253.14.4/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0E08 /* 131.253.14.8/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0E10 /* 131.253.14.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0E20 /* 131.253.14.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0E60 /* 131.253.14.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0E80 /* 131.253.14.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0EA0 /* 131.253.14.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0EC0 /* 131.253.14.192/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0ED0 /* 131.253.14.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0EE0 /* 131.253.14.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0EF8 /* 131.253.14.248/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0F08 /* 131.253.15.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0F10 /* 131.253.15.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0F20 /* 131.253.15.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0FC0 /* 131.253.15.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0FD0 /* 131.253.15.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD0FE0 /* 131.253.15.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD1800 /* 131.253.24.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD18A0 /* 131.253.24.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD18C0 /* 131.253.24.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD1900 /* 131.253.25.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD1B00 /* 131.253.27.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD22E0 /* 131.253.34.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD2380 /* 131.253.35.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD23C0 /* 131.253.35.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD2480 /* 131.253.36.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD24E0 /* 131.253.36.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD2600 /* 131.253.38.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD2620 /* 131.253.38.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD2680 /* 131.253.38.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD26E0 /* 131.253.38.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD2800 /* 131.253.40.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD2810 /* 131.253.40.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD2820 /* 131.253.40.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD2840 /* 131.253.40.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD2850 /* 131.253.40.80/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD2860 /* 131.253.40.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD2880 /* 131.253.40.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD28A0 /* 131.253.40.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD28C0 /* 131.253.40.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83FD2900 /* 131.253.41.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x84F5E600 /* 132.245.230.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x86AA5040 /* 134.170.80.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x86AAC000 /* 134.170.192.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x86AADC00 /* 134.170.220.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x86AADE00 /* 134.170.222.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89740000 /* 137.116.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89744000 /* 137.116.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89746000 /* 137.116.96.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89747000 /* 137.116.112.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89748000 /* 137.116.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974A000 /* 137.116.160.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974B000 /* 137.116.176.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974B800 /* 137.116.184.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974C000 /* 137.116.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8974E000 /* 137.116.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89750000 /* 137.117.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89752000 /* 137.117.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89754000 /* 137.117.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89758000 /* 137.117.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89870000 /* 137.135.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89874000 /* 137.135.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x89878000 /* 137.135.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B0000 /* 138.91.0.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B1000 /* 138.91.16.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B2000 /* 138.91.32.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B3000 /* 138.91.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B4000 /* 138.91.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B6000 /* 138.91.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x8A5B8000 /* 138.91.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D370280 /* 157.55.2.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D370300 /* 157.55.3.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D370780 /* 157.55.7.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D370840 /* 157.55.8.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D370890 /* 157.55.8.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D370AA0 /* 157.55.10.160/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D370AB0 /* 157.55.10.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D370AC0 /* 157.55.10.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D370B80 /* 157.55.11.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D370C40 /* 157.55.12.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D370C80 /* 157.55.12.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D370D40 /* 157.55.13.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D370D80 /* 157.55.13.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D371800 /* 157.55.24.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D372500 /* 157.55.37.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D372600 /* 157.55.38.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D372700 /* 157.55.39.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D373000 /* 157.55.48.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D373200 /* 157.55.50.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D3733E0 /* 157.55.51.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D373700 /* 157.55.55.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D373720 /* 157.55.55.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D373764 /* 157.55.55.100/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D373768 /* 157.55.55.104/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D373788 /* 157.55.55.136/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D373790 /* 157.55.55.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D373798 /* 157.55.55.152/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D3737A0 /* 157.55.55.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D3737B0 /* 157.55.55.176/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D3737C8 /* 157.55.55.200/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D3737D8 /* 157.55.55.216/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D3737E4 /* 157.55.55.228/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D3737E8 /* 157.55.55.232/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D3737F0 /* 157.55.55.240/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D373CE0 /* 157.55.60.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D374000 /* 157.55.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D375000 /* 157.55.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D376720 /* 157.55.103.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D376780 /* 157.55.103.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D376A00 /* 157.55.106.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D376A80 /* 157.55.106.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D376B00 /* 157.55.107.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D376C00 /* 157.55.108.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D376E00 /* 157.55.110.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D377300 /* 157.55.115.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D378800 /* 157.55.136.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D379700 /* 157.55.151.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D3799E0 /* 157.55.153.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D379A80 /* 157.55.154.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37A000 /* 157.55.160.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37B000 /* 157.55.176.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37C000 /* 157.55.192.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37C800 /* 157.55.200.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37CC01 /* 157.55.204.1/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37CC02 /* 157.55.204.2/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37CC21 /* 157.55.204.33/32 */, 32, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37CC22 /* 157.55.204.34/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37CC80 /* 157.55.204.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37D000 /* 157.55.208.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D37F800 /* 157.55.248.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D380200 /* 157.56.2.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D380280 /* 157.56.2.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D380300 /* 157.56.3.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D380380 /* 157.56.3.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D380800 /* 157.56.8.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D3813E0 /* 157.56.19.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D3815A0 /* 157.56.21.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D3815C0 /* 157.56.21.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D3818A0 /* 157.56.24.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D3818C0 /* 157.56.24.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D381C00 /* 157.56.28.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D385000 /* 157.56.80.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D387540 /* 157.56.117.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D38A000 /* 157.56.160.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D38B000 /* 157.56.176.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9D38D800 /* 157.56.216.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x9E170000 /* 158.23.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA7690000 /* 167.105.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D0000 /* 168.61.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D2000 /* 168.61.32.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D3000 /* 168.61.48.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D3800 /* 168.61.56.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D4000 /* 168.61.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D5000 /* 168.61.80.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D6000 /* 168.61.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8000 /* 168.61.128.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8080 /* 168.61.128.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D80A0 /* 168.61.128.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D80C0 /* 168.61.128.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8100 /* 168.61.129.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8180 /* 168.61.129.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D81D0 /* 168.61.129.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D81E0 /* 168.61.129.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8240 /* 168.61.130.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8280 /* 168.61.130.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8300 /* 168.61.131.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8380 /* 168.61.131.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8400 /* 168.61.132.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D8800 /* 168.61.136.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83D9000 /* 168.61.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83DA000 /* 168.61.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83DD000 /* 168.61.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83DE000 /* 168.61.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E0000 /* 168.62.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E2000 /* 168.62.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E4000 /* 168.62.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E6000 /* 168.62.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83E8000 /* 168.62.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EA000 /* 168.62.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EC000 /* 168.62.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83EE000 /* 168.62.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F0000 /* 168.63.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F2000 /* 168.63.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F4000 /* 168.63.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F5000 /* 168.63.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F5800 /* 168.63.88.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F5A00 /* 168.63.90.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F5B00 /* 168.63.91.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F5C00 /* 168.63.92.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F6000 /* 168.63.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8000 /* 168.63.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8100 /* 168.63.129.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8120 /* 168.63.129.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8140 /* 168.63.129.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8180 /* 168.63.129.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8200 /* 168.63.130.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8400 /* 168.63.132.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F8800 /* 168.63.136.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F9400 /* 168.63.148.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F9800 /* 168.63.152.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83F9C00 /* 168.63.156.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FA000 /* 168.63.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FC000 /* 168.63.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xA83FE000 /* 168.63.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACA00000 /* 172.160.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACA10000 /* 172.161.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACA20000 /* 172.162.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACA30000 /* 172.163.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACA40000 /* 172.164.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACA50000 /* 172.165.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACA60000 /* 172.166.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACA80000 /* 172.168.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACAA0000 /* 172.170.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACAB0000 /* 172.171.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACAB2000 /* 172.171.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACAB4000 /* 172.171.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACAB6000 /* 172.171.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACAB8000 /* 172.171.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACAC0000 /* 172.172.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACAE0000 /* 172.174.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACAF0000 /* 172.175.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACB00000 /* 172.176.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACB20000 /* 172.178.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACB28000 /* 172.178.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACB30000 /* 172.179.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACB40000 /* 172.180.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACB60000 /* 172.182.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACB70000 /* 172.183.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACB80000 /* 172.184.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACBA0000 /* 172.186.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACBB0000 /* 172.187.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACBB8000 /* 172.187.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE81000 /* 191.232.16.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE82000 /* 191.232.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE84000 /* 191.232.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8A000 /* 191.232.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE8C000 /* 191.232.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90000 /* 191.233.0.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE90800 /* 191.233.8.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE91000 /* 191.233.16.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE92000 /* 191.233.32.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE93000 /* 191.233.48.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE94000 /* 191.233.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE98000 /* 191.233.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE99000 /* 191.233.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9A000 /* 191.233.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFE9C000 /* 191.233.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA0200 /* 191.234.2.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA1000 /* 191.234.16.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA2000 /* 191.234.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEA8000 /* 191.234.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEAC000 /* 191.234.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEAE000 /* 191.234.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB2000 /* 191.235.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB4000 /* 191.235.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEB8000 /* 191.235.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBC000 /* 191.235.192.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBC400 /* 191.235.196.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBC800 /* 191.235.200.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBD000 /* 191.235.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBE000 /* 191.235.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBF000 /* 191.235.240.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBF800 /* 191.235.248.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBFA00 /* 191.235.250.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEBFF00 /* 191.235.255.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC0000 /* 191.236.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC4000 /* 191.236.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEC8000 /* 191.236.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFECC000 /* 191.236.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFED0000 /* 191.237.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFED8000 /* 191.237.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDC000 /* 191.237.192.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDC200 /* 191.237.194.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDC300 /* 191.237.195.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDC400 /* 191.237.196.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDC800 /* 191.237.200.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDD000 /* 191.237.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDE000 /* 191.237.224.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDE800 /* 191.237.232.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDEC00 /* 191.237.236.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDEE00 /* 191.237.238.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDF000 /* 191.237.240.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEDF800 /* 191.237.248.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE0000 /* 191.238.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4000 /* 191.238.64.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4200 /* 191.238.66.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4400 /* 191.238.68.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4600 /* 191.238.70.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE4800 /* 191.238.72.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE5000 /* 191.238.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE5800 /* 191.238.88.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE5C00 /* 191.238.92.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE6000 /* 191.238.96.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE8000 /* 191.238.128.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEE9000 /* 191.238.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEEA000 /* 191.238.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEEC000 /* 191.238.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEEE000 /* 191.238.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEF0000 /* 191.239.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEF4000 /* 191.239.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEF6000 /* 191.239.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEF7000 /* 191.239.112.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFA000 /* 191.239.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFC000 /* 191.239.192.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFC800 /* 191.239.200.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFCC00 /* 191.239.204.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFD000 /* 191.239.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFE000 /* 191.239.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xBFEFF000 /* 191.239.240.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC1954000 /* 193.149.64.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC1954800 /* 193.149.72.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC1955000 /* 193.149.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC1955800 /* 193.149.88.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC6B46100 /* 198.180.97.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC71E1000 /* 199.30.16.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC71E1200 /* 199.30.18.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC71E1400 /* 199.30.20.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC71E1600 /* 199.30.22.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC71E1800 /* 199.30.24.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC71E1B00 /* 199.30.27.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC71E1B90 /* 199.30.27.144/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC71E1BA0 /* 199.30.27.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC71E1C40 /* 199.30.28.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC71E1C80 /* 199.30.28.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC71E1D00 /* 199.30.29.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC71E1F00 /* 199.30.31.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC71E1FC0 /* 199.30.31.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCA59E940 /* 202.89.233.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCA59EB80 /* 202.89.235.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCC4FB400 /* 204.79.180.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCC981200 /* 204.152.18.0/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCC981208 /* 204.152.18.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCC981220 /* 204.152.18.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCC981240 /* 204.152.18.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCC981300 /* 204.152.19.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCCE7C500 /* 204.231.197.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E0D00 /* 207.46.13.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E3280 /* 207.46.50.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E3B40 /* 207.46.59.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E3F40 /* 207.46.63.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E3F80 /* 207.46.63.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E43A0 /* 207.46.67.160/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E43C0 /* 207.46.67.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E4800 /* 207.46.72.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E4DE0 /* 207.46.77.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E5700 /* 207.46.87.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E5910 /* 207.46.89.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E5F20 /* 207.46.95.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E7E00 /* 207.46.126.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2E8000 /* 207.46.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2EC1C0 /* 207.46.193.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2EC1E0 /* 207.46.193.224/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2EC680 /* 207.46.198.128/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2EC860 /* 207.46.200.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2EC8B0 /* 207.46.200.176/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2ECA80 /* 207.46.202.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2ECD00 /* 207.46.205.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF2EE000 /* 207.46.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF44AE08 /* 207.68.174.8/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF44AE28 /* 207.68.174.40/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF44AE30 /* 207.68.174.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF44AEB8 /* 207.68.174.184/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xCF44AED0 /* 207.68.174.208/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xD1F0D400 /* 209.240.212.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xD5C78000 /* 213.199.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xD5C7A900 /* 213.199.169.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xD5C7B420 /* 213.199.180.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xD5C7B460 /* 213.199.180.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xD5C7B4C0 /* 213.199.180.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xD5C7B700 /* 213.199.183.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_cachefly_match.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_cachefly_match.c new file mode 100644 index 0000000000..19866c217f --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_cachefly_match.c @@ -0,0 +1,36 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_cachefly_protocol_list[] = { + { 0xCDEAAF00 /* 205.234.175.0/24 */, 24, NDPI_PROTOCOL_CACHEFLY }, + { 0xCC5D9600 /* 204.93.150.0/24 */, 24, NDPI_PROTOCOL_CACHEFLY }, + { 0xCC5D8E00 /* 204.93.142.0/23 */, 23, NDPI_PROTOCOL_CACHEFLY }, + { 0xA7589E00 /* 167.88.158.0/24 */, 24, NDPI_PROTOCOL_CACHEFLY }, + { 0x42E1C500 /* 66.225.197.0/24 */, 24, NDPI_PROTOCOL_CACHEFLY }, + { 0x2D588400 /* 45.88.132.0/22 */, 22, NDPI_PROTOCOL_CACHEFLY }, + { 0x5250E0BE /* 82.80.224.190/32 */, 32, NDPI_PROTOCOL_CACHEFLY }, + { 0xA747EE9F /* 167.71.238.159/32 */, 32, NDPI_PROTOCOL_CACHEFLY }, + { 0x08F2E3F8 /* 8.242.227.248/29 */, 29, NDPI_PROTOCOL_CACHEFLY }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_cloudflare_match.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_cloudflare_match.c new file mode 100644 index 0000000000..f075e0a22a --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_cloudflare_match.c @@ -0,0 +1,42 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_cloudflare_protocol_list[] = { + { 0xADF53000 /* 173.245.48.0/20 */, 20, NDPI_PROTOCOL_CLOUDFLARE }, + { 0x6715F400 /* 103.21.244.0/22 */, 22, NDPI_PROTOCOL_CLOUDFLARE }, + { 0x6716C800 /* 103.22.200.0/22 */, 22, NDPI_PROTOCOL_CLOUDFLARE }, + { 0x671F0400 /* 103.31.4.0/22 */, 22, NDPI_PROTOCOL_CLOUDFLARE }, + { 0x8D654000 /* 141.101.64.0/18 */, 18, NDPI_PROTOCOL_CLOUDFLARE }, + { 0x6CA2C000 /* 108.162.192.0/18 */, 18, NDPI_PROTOCOL_CLOUDFLARE }, + { 0xBE5DF000 /* 190.93.240.0/20 */, 20, NDPI_PROTOCOL_CLOUDFLARE }, + { 0xBC726000 /* 188.114.96.0/20 */, 20, NDPI_PROTOCOL_CLOUDFLARE }, + { 0xC5EAF000 /* 197.234.240.0/22 */, 22, NDPI_PROTOCOL_CLOUDFLARE }, + { 0xC6298000 /* 198.41.128.0/17 */, 17, NDPI_PROTOCOL_CLOUDFLARE }, + { 0xA29E0000 /* 162.158.0.0/15 */, 15, NDPI_PROTOCOL_CLOUDFLARE }, + { 0x68100000 /* 104.16.0.0/13 */, 13, NDPI_PROTOCOL_CLOUDFLARE }, + { 0x68180000 /* 104.24.0.0/14 */, 14, NDPI_PROTOCOL_CLOUDFLARE }, + { 0xAC400000 /* 172.64.0.0/13 */, 13, NDPI_PROTOCOL_CLOUDFLARE }, + { 0x83004800 /* 131.0.72.0/22 */, 22, NDPI_PROTOCOL_CLOUDFLARE }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_content_match.h b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_content_match.h new file mode 100644 index 0000000000..e74e4b79d2 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_content_match.h @@ -0,0 +1,1940 @@ +/* + * ndpi_content_match.c.inc + * + * Copyright (C) 2011-22 - ntop.org + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network host_protocol_list[] = { + /* + SoundCloud + TODO: are we able to autogenerate this list? + */ + { 0x22FB2FEE /* 34.251.47.238 */, 32, NDPI_PROTOCOL_SOUNDCLOUD }, + { 0x23A06456 /* 35.160.100.86 */, 32, NDPI_PROTOCOL_SOUNDCLOUD }, + { 0x36C0CA58 /* 54.192.202.88 */, 32, NDPI_PROTOCOL_SOUNDCLOUD }, + + /* + Instagram, Inc. + (instagram-*.fbcdn.net, fna-instagram-*.fbcdn.net) + TODO: are we able to autogenerate this list (like the other FB IPs)? + */ + { 0x9DF00225 /* 157.240.2.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00234 /* 157.240.2.52/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF002AC /* 157.240.2.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF002AE /* 157.240.2.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00326 /* 157.240.3.38/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0033F /* 157.240.3.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF003AC /* 157.240.3.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF003AE /* 157.240.3.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00625 /* 157.240.6.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00634 /* 157.240.6.52/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF006AC /* 157.240.6.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF006AE /* 157.240.6.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00725 /* 157.240.7.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00734 /* 157.240.7.52/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF007AC /* 157.240.7.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF007AE /* 157.240.7.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00825 /* 157.240.8.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00834 /* 157.240.8.52/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF008AC /* 157.240.8.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF008AE /* 157.240.8.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00925 /* 157.240.9.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00934 /* 157.240.9.52/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF009AC /* 157.240.9.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF009AE /* 157.240.9.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00A25 /* 157.240.10.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00A34 /* 157.240.10.52/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00AAC /* 157.240.10.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00AAE /* 157.240.10.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00B25 /* 157.240.11.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00B34 /* 157.240.11.52/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00BAC /* 157.240.11.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00BAE /* 157.240.11.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00C25 /* 157.240.12.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00C34 /* 157.240.12.52/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00CAC /* 157.240.12.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00CAE /* 157.240.12.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00D25 /* 157.240.13.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00D34 /* 157.240.13.52/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00DAC /* 157.240.13.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00DAE /* 157.240.13.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00E25 /* 157.240.14.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00E3F /* 157.240.14.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00EAC /* 157.240.14.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00EAE /* 157.240.14.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00F20 /* 157.240.15.32/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00F3F /* 157.240.15.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00FAC /* 157.240.15.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF00FAE /* 157.240.15.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF01025 /* 157.240.16.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0103F /* 157.240.16.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF010AC /* 157.240.16.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF010AE /* 157.240.16.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF01126 /* 157.240.17.38/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0113F /* 157.240.17.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF011AC /* 157.240.17.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF011AE /* 157.240.17.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF01225 /* 157.240.18.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0123F /* 157.240.18.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF012AC /* 157.240.18.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF012AE /* 157.240.18.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF01327 /* 157.240.19.39/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0133F /* 157.240.19.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF013AC /* 157.240.19.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF013AE /* 157.240.19.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF01425 /* 157.240.20.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0143F /* 157.240.20.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF014AC /* 157.240.20.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF014AE /* 157.240.20.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF01525 /* 157.240.21.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0153F /* 157.240.21.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF015AC /* 157.240.21.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF015AE /* 157.240.21.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF01625 /* 157.240.22.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0163F /* 157.240.22.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF016AC /* 157.240.22.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF016AE /* 157.240.22.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF01726 /* 157.240.23.38/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0173F /* 157.240.23.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF017AC /* 157.240.23.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF017AE /* 157.240.23.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF01820 /* 157.240.24.32/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0183F /* 157.240.24.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF018AC /* 157.240.24.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF018AE /* 157.240.24.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF01920 /* 157.240.25.32/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0193F /* 157.240.25.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF019AC /* 157.240.25.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF019AE /* 157.240.25.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF01A26 /* 157.240.26.38/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF01A3F /* 157.240.26.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF01AAC /* 157.240.26.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF01AAE /* 157.240.26.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF01B26 /* 157.240.27.38/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF01B3F /* 157.240.27.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF01BAC /* 157.240.27.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF01BAE /* 157.240.27.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF01C25 /* 157.240.28.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF01C3F /* 157.240.28.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF01CAC /* 157.240.28.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF01CAE /* 157.240.28.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF01E26 /* 157.240.30.38/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF01E3F /* 157.240.30.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF01EAC /* 157.240.30.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF01EAE /* 157.240.30.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0809F /* 157.240.128.159/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF080A1 /* 157.240.128.161/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF080B6 /* 157.240.128.182/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0821F /* 157.240.130.31/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF08220 /* 157.240.130.32/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0822B /* 157.240.130.43/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0831F /* 157.240.131.31/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF08320 /* 157.240.131.32/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0832B /* 157.240.131.43/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0851F /* 157.240.133.31/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF08520 /* 157.240.133.32/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0852B /* 157.240.133.43/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0871F /* 157.240.135.31/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF08720 /* 157.240.135.32/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0872B /* 157.240.135.43/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0881F /* 157.240.136.31/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF08820 /* 157.240.136.32/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0882B /* 157.240.136.43/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF08A1F /* 157.240.138.31/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF08A20 /* 157.240.138.32/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF08A2B /* 157.240.138.43/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF08B1F /* 157.240.139.31/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF08B21 /* 157.240.139.33/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF08B2B /* 157.240.139.43/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF08C1F /* 157.240.140.31/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF08C21 /* 157.240.140.33/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF08C2B /* 157.240.140.43/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF08D1F /* 157.240.141.31/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF08D21 /* 157.240.141.33/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF08D2B /* 157.240.141.43/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF08E1F /* 157.240.142.31/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF08E21 /* 157.240.142.33/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF08E2B /* 157.240.142.43/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF08F1F /* 157.240.143.31/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF08F21 /* 157.240.143.33/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF08F2B /* 157.240.143.43/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0901F /* 157.240.144.31/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF09021 /* 157.240.144.33/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0902B /* 157.240.144.43/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0911F /* 157.240.145.31/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF09121 /* 157.240.145.33/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0912B /* 157.240.145.43/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0921F /* 157.240.146.31/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF09221 /* 157.240.146.33/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0922B /* 157.240.146.43/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0931F /* 157.240.147.31/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF09321 /* 157.240.147.33/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0932B /* 157.240.147.43/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0941F /* 157.240.148.31/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF09421 /* 157.240.148.33/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0942B /* 157.240.148.43/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0971F /* 157.240.151.31/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF09721 /* 157.240.151.33/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0972B /* 157.240.151.43/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0981F /* 157.240.152.31/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF09821 /* 157.240.152.33/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0982B /* 157.240.152.43/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF09B9F /* 157.240.155.159/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF09BA1 /* 157.240.155.161/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF09BB7 /* 157.240.155.183/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF09E9F /* 157.240.158.159/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF09EA1 /* 157.240.158.161/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF09EB7 /* 157.240.158.183/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF09F9F /* 157.240.159.159/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF09FA1 /* 157.240.159.161/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF09FB7 /* 157.240.159.183/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A21F /* 157.240.162.31/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A221 /* 157.240.162.33/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A22B /* 157.240.162.43/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A25F /* 157.240.162.95/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A261 /* 157.240.162.97/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A26B /* 157.240.162.107/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A29F /* 157.240.162.159/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A2A1 /* 157.240.162.161/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A2AB /* 157.240.162.171/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A2DF /* 157.240.162.223/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A2E1 /* 157.240.162.225/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A2EB /* 157.240.162.235/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A41F /* 157.240.164.31/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A421 /* 157.240.164.33/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A42B /* 157.240.164.43/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A45F /* 157.240.164.95/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A461 /* 157.240.164.97/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A46B /* 157.240.164.107/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A51F /* 157.240.165.31/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A521 /* 157.240.165.33/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A52B /* 157.240.165.43/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A55F /* 157.240.165.95/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A561 /* 157.240.165.97/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A56B /* 157.240.165.107/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A61F /* 157.240.166.31/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A621 /* 157.240.166.33/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A62B /* 157.240.166.43/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A65F /* 157.240.166.95/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A661 /* 157.240.166.97/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A66B /* 157.240.166.107/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A71F /* 157.240.167.31/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A721 /* 157.240.167.33/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A72B /* 157.240.167.43/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A75F /* 157.240.167.95/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A761 /* 157.240.167.97/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A76B /* 157.240.167.107/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A81F /* 157.240.168.31/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A821 /* 157.240.168.33/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A82B /* 157.240.168.43/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A85F /* 157.240.168.95/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A861 /* 157.240.168.97/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A86B /* 157.240.168.107/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A99E /* 157.240.169.158/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A9A1 /* 157.240.169.161/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0A9B7 /* 157.240.169.183/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0AC9F /* 157.240.172.159/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0ACA2 /* 157.240.172.162/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0ACB7 /* 157.240.172.183/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0AD1F /* 157.240.173.31/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0AD21 /* 157.240.173.33/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0AD2B /* 157.240.173.43/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0AE9F /* 157.240.174.159/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0AEA1 /* 157.240.174.161/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0AEB7 /* 157.240.174.183/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0AF1F /* 157.240.175.31/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0AF21 /* 157.240.175.33/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0AF2B /* 157.240.175.43/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0B09F /* 157.240.176.159/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0B0A1 /* 157.240.176.161/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0B0B7 /* 157.240.176.183/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0B19F /* 157.240.177.159/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0B1A1 /* 157.240.177.161/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0B1B7 /* 157.240.177.183/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0B29F /* 157.240.178.159/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0B2A1 /* 157.240.178.161/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0B2B7 /* 157.240.178.183/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0B39F /* 157.240.179.159/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0B3A1 /* 157.240.179.161/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0B3B7 /* 157.240.179.183/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0B49F /* 157.240.180.159/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0B4A1 /* 157.240.180.161/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0B4B7 /* 157.240.180.183/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0B59F /* 157.240.181.159/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0B5A1 /* 157.240.181.161/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0B5B7 /* 157.240.181.183/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BA5F /* 157.240.186.95/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BA61 /* 157.240.186.97/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BA6B /* 157.240.186.107/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BB5F /* 157.240.187.95/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BB61 /* 157.240.187.97/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BB6B /* 157.240.187.107/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BC9F /* 157.240.188.159/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BCA1 /* 157.240.188.161/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BCAB /* 157.240.188.171/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BCDF /* 157.240.188.223/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BCE1 /* 157.240.188.225/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BCEB /* 157.240.188.235/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BD1F /* 157.240.189.31/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BD20 /* 157.240.189.32/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BD2B /* 157.240.189.43/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BD5F /* 157.240.189.95/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BD60 /* 157.240.189.96/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BD6B /* 157.240.189.107/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BE1F /* 157.240.190.31/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BE20 /* 157.240.190.32/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BE2B /* 157.240.190.43/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BE5F /* 157.240.190.95/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BE60 /* 157.240.190.96/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BE6B /* 157.240.190.107/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BE9F /* 157.240.190.159/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BEA1 /* 157.240.190.161/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BEAB /* 157.240.190.171/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BEDF /* 157.240.190.223/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BEE1 /* 157.240.190.225/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BEEB /* 157.240.190.235/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BF1E /* 157.240.191.30/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BF20 /* 157.240.191.32/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BF2A /* 157.240.191.42/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BF9F /* 157.240.191.159/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BFA1 /* 157.240.191.161/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BFAB /* 157.240.191.171/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BFDF /* 157.240.191.223/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BFE1 /* 157.240.191.225/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0BFEB /* 157.240.191.235/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C025 /* 157.240.192.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C03F /* 157.240.192.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C0AC /* 157.240.192.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C0AE /* 157.240.192.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C226 /* 157.240.194.38/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C23F /* 157.240.194.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C2AC /* 157.240.194.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C2AE /* 157.240.194.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C325 /* 157.240.195.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C33F /* 157.240.195.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C3AC /* 157.240.195.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C3AE /* 157.240.195.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C425 /* 157.240.196.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C43F /* 157.240.196.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C4AC /* 157.240.196.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C4AE /* 157.240.196.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C525 /* 157.240.197.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C53F /* 157.240.197.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C5AC /* 157.240.197.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C5AE /* 157.240.197.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C625 /* 157.240.198.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C63F /* 157.240.198.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C6AC /* 157.240.198.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C6AE /* 157.240.198.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C726 /* 157.240.199.38/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C73F /* 157.240.199.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C7AC /* 157.240.199.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C7AE /* 157.240.199.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C825 /* 157.240.200.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C83F /* 157.240.200.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C8AC /* 157.240.200.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C8AE /* 157.240.200.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C925 /* 157.240.201.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C93F /* 157.240.201.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C9AC /* 157.240.201.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0C9AE /* 157.240.201.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0CC25 /* 157.240.204.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0CC3F /* 157.240.204.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0CCAC /* 157.240.204.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0CCAE /* 157.240.204.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0CD20 /* 157.240.205.32/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0CD3F /* 157.240.205.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0CDAC /* 157.240.205.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0CDAE /* 157.240.205.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0CE25 /* 157.240.206.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0CE3F /* 157.240.206.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0CEAC /* 157.240.206.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0CEAE /* 157.240.206.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0CF25 /* 157.240.207.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0CF3F /* 157.240.207.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0CFAC /* 157.240.207.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0CFAE /* 157.240.207.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D025 /* 157.240.208.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D03F /* 157.240.208.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D0AC /* 157.240.208.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D0AE /* 157.240.208.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D125 /* 157.240.209.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D13F /* 157.240.209.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D1AC /* 157.240.209.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D1AE /* 157.240.209.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D225 /* 157.240.210.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D23F /* 157.240.210.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D2AC /* 157.240.210.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D2AE /* 157.240.210.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D321 /* 157.240.211.33/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D33F /* 157.240.211.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D3AC /* 157.240.211.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D3AE /* 157.240.211.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D425 /* 157.240.212.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D43F /* 157.240.212.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D4AC /* 157.240.212.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D4AE /* 157.240.212.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D525 /* 157.240.213.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D53F /* 157.240.213.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D5AC /* 157.240.213.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D5AE /* 157.240.213.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D620 /* 157.240.214.32/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D63F /* 157.240.214.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D6AC /* 157.240.214.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D6AE /* 157.240.214.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D725 /* 157.240.215.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D73F /* 157.240.215.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D7AC /* 157.240.215.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D7AE /* 157.240.215.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D825 /* 157.240.216.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D83F /* 157.240.216.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D8AC /* 157.240.216.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D8AE /* 157.240.216.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D926 /* 157.240.217.38/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D93F /* 157.240.217.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D9AC /* 157.240.217.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0D9AE /* 157.240.217.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0DA26 /* 157.240.218.38/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0DA3F /* 157.240.218.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0DAAC /* 157.240.218.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0DAAE /* 157.240.218.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0DC25 /* 157.240.220.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0DC3F /* 157.240.220.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0DCAC /* 157.240.220.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0DCAE /* 157.240.220.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0DD26 /* 157.240.221.38/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0DD3F /* 157.240.221.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0DDAC /* 157.240.221.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0DDAE /* 157.240.221.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0DE25 /* 157.240.222.37/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0DE3F /* 157.240.222.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0DEAC /* 157.240.222.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0DEAE /* 157.240.222.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0DF26 /* 157.240.223.38/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0DF3F /* 157.240.223.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0DFAC /* 157.240.223.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0DFAE /* 157.240.223.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E020 /* 157.240.224.32/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E03F /* 157.240.224.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E0AC /* 157.240.224.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E0AE /* 157.240.224.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E120 /* 157.240.225.32/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E13F /* 157.240.225.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E1AC /* 157.240.225.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E1AE /* 157.240.225.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E220 /* 157.240.226.32/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E23F /* 157.240.226.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E2AC /* 157.240.226.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E2AE /* 157.240.226.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E320 /* 157.240.227.32/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E33F /* 157.240.227.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E3AC /* 157.240.227.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E3AE /* 157.240.227.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E420 /* 157.240.228.32/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E43F /* 157.240.228.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E4AC /* 157.240.228.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E4AE /* 157.240.228.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E520 /* 157.240.229.32/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E53F /* 157.240.229.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E5AC /* 157.240.229.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E5AE /* 157.240.229.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E5C6 /* 157.240.229.198/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E720 /* 157.240.231.32/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E73F /* 157.240.231.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E7AC /* 157.240.231.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E7AE /* 157.240.231.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E820 /* 157.240.232.32/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E83F /* 157.240.232.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E8AC /* 157.240.232.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E8AE /* 157.240.232.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E920 /* 157.240.233.32/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E93F /* 157.240.233.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E9AC /* 157.240.233.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0E9AE /* 157.240.233.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0EA20 /* 157.240.234.32/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0EA3F /* 157.240.234.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0EAAC /* 157.240.234.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0EAAE /* 157.240.234.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0EB20 /* 157.240.235.32/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0EB3F /* 157.240.235.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0EBAC /* 157.240.235.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0EBAE /* 157.240.235.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0EC20 /* 157.240.236.32/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0EC3F /* 157.240.236.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0ECAC /* 157.240.236.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0ECAE /* 157.240.236.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0EF20 /* 157.240.239.32/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0EF3F /* 157.240.239.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0EFAC /* 157.240.239.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0EFAE /* 157.240.239.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0F020 /* 157.240.240.32/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0F03F /* 157.240.240.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0F0AC /* 157.240.240.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0F0AE /* 157.240.240.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0F120 /* 157.240.241.32/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0F13F /* 157.240.241.63/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0F1AC /* 157.240.241.172/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0F1AE /* 157.240.241.174/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + { 0x9DF0F1C4 /* 157.240.241.196/32 */, 32, NDPI_PROTOCOL_INSTAGRAM }, + + /* + OCS GO (Orange Cinéma Séries) + TODO: are we able to autogenerate this list? + */ + + { 0xB2F8D000 /* 178.248.208.0 */, 21, NDPI_PROTOCOL_OCS }, + + + /* Teamviewer + router1.teamviewer.com... router16.teamviewer.com + TODO: are we able to autogenerate this list (like the other Teamviewer IPs)? + */ + { 0x25FCE044 /* 37.252.224.68 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x25FCE048 /* 37.252.224.72 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x25FCE04C /* 37.252.224.76 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x25FCE784 /* 37.252.231.132 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x25FCE788 /* 37.252.231.136 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x25FCE864 /* 37.252.232.100 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x25FCE868 /* 37.252.232.104 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x25FCE86C /* 37.252.232.108 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x25FCF664 /* 37.252.246.100 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x25FCF668 /* 37.252.246.104 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x25FCF764 /* 37.252.247.100 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x25FCF768 /* 37.252.247.104 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x25FCF770 /* 37.252.247.112 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x25FCF772 /* 37.252.247.114 */, 32, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x25FCFD64 /* 37.252.253.100 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x25FCFD68 /* 37.252.253.104 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x25FCFEA4 /* 37.252.254.164 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x25FCFEA8 /* 37.252.254.168 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x25FCFEB0 /* 37.252.254.176 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x25FCFEB8 /* 37.252.254.184 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x25FCFEBC /* 37.252.254.188 */, 32, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x25FCFFC4 /* 37.252.255.196 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x25FCFFC8 /* 37.252.255.200 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x25FCFFD0 /* 37.252.255.208 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x25FCFFD2 /* 37.252.255.210 */, 32, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x32751BD8 /* 50.117.27.216 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x44446410 /* 68.68.100.16 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x462634C8 /* 70.38.52.200 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x5E1006A4 /* 94.16.6.164 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x5E1006A8 /* 94.16.6.168 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x5E1006B0 /* 94.16.6.176 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x5E1006B2 /* 94.16.6.178 */, 32, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x6CA399D8 /* 108.163.153.216 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x9EB05602 /* 158.176.86.2 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x9EB05604 /* 158.176.86.4 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x9EB05608 /* 158.176.86.8 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x9EB0560A /* 158.176.86.10 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x9EB0560C /* 158.176.86.12 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x9EB05610 /* 158.176.86.16 */, 32, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x9F085884 /* 159.8.88.132 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x9F085888 /* 159.8.88.136 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x9F085890 /* 159.8.88.144 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x9F085892 /* 159.8.88.146 */, 32, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x9F08E5E2 /* 159.8.229.226 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x9F08E5E4 /* 159.8.229.228 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x9F08E5E8 /* 159.8.229.232 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x9F08E5F0 /* 159.8.229.240 */, 32, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x9F7AB6C4 /* 159.122.182.196 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x9F7AB6C8 /* 159.122.182.200 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x9F7AB6D0 /* 159.122.182.208 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x9F7AB6D2 /* 159.122.182.210 */, 32, NDPI_PROTOCOL_TEAMVIEWER }, + { 0x9F7ABD20 /* 159.122.189.32 */, 27, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xA19C4362 /* 161.156.67.98 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xA19C4364 /* 161.156.67.100 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xA19C4368 /* 161.156.67.104 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xA19C4370 /* 161.156.67.112 */, 32, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xA9334DE2 /* 169.51.77.226 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xA9334DE4 /* 169.51.77.228 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xA9334DE8 /* 169.51.77.232 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xAE8E0AE0 /* 174.142.10.224 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xAE8EEBE8 /* 174.142.235.232 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xAE8EEC78 /* 174.142.236.120 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xB2FF9A84 /* 178.255.154.132 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xB2FF9A88 /* 178.255.154.136 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xB2FF9A90 /* 178.255.154.144 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xB2FF9A92 /* 178.255.154.146 */, 32, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xB2FF9BA4 /* 178.255.155.164 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xB2FF9BA8 /* 178.255.155.168 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xB2FF9BB0 /* 178.255.155.176 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xB2FF9BBC /* 178.255.155.188 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xB2FF9BBE /* 178.255.155.190 */, 32, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xB86B0EA8 /* 184.107.14.168 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBC414C84 /* 188.65.76.132 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBC414C88 /* 188.65.76.136 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBC414C8C /* 188.65.76.140 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACC064 /* 188.172.192.100 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACC068 /* 188.172.192.104 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACC06C /* 188.172.192.108 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACC684 /* 188.172.198.132 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACC688 /* 188.172.198.136 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACC690 /* 188.172.198.144 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACC698 /* 188.172.198.152 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACC69C /* 188.172.198.156 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACC69E /* 188.172.198.158 */, 32, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACDB84 /* 188.172.219.132 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACDB88 /* 188.172.219.136 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACDB90 /* 188.172.219.144 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACDB9B /* 188.172.219.155 */, 32, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACDB9C /* 188.172.219.156 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACDB9E /* 188.172.219.158 */, 32, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACDF64 /* 188.172.223.100 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACDF68 /* 188.172.223.104 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACDF70 /* 188.172.223.112 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACDF72 /* 188.172.223.114 */, 32, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACE9A4 /* 188.172.233.164 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACE9A8 /* 188.172.233.168 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACE9B0 /* 188.172.233.176 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACE9B2 /* 188.172.233.178 */, 32, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACE9B4 /* 188.172.233.180 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACE9B8 /* 188.172.233.184 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACEB84 /* 188.172.235.132 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACEB88 /* 188.172.235.136 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACEB90 /* 188.172.235.144 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACEB98 /* 188.172.235.152 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACEB9C /* 188.172.235.156 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACEB9E /* 188.172.235.158 */, 32, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACF584 /* 188.172.245.132 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACF588 /* 188.172.245.136 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACF590 /* 188.172.245.144 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACF592 /* 188.172.245.146 */, 32, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACF6A4 /* 188.172.246.164 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACF6A8 /* 188.172.246.168 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACF6B0 /* 188.172.246.176 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACF6BA /* 188.172.246.186 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACF6BC /* 188.172.246.188 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACF6BE /* 188.172.246.190 */, 32, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACFE84 /* 188.172.254.132 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACFE88 /* 188.172.254.136 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xBCACFE8C /* 188.172.254.140 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xC0AF7958 /* 192.175.121.88 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD5E3A264 /* 213.227.162.100 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD5E3A268 /* 213.227.162.104 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD5E3A270 /* 213.227.162.112 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD5E3A27C /* 213.227.162.124 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD5E3A27E /* 213.227.162.126 */, 32, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD5E3A384 /* 213.227.163.132 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD5E3A388 /* 213.227.163.136 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD5E3A390 /* 213.227.163.144 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD5E3A884 /* 213.227.168.132 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD5E3A888 /* 213.227.168.136 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD5E3A890 /* 213.227.168.144 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD5E3B984 /* 213.227.185.132 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD5E3B988 /* 213.227.185.136 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD5E3B98C /* 213.227.185.140 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD5E3BA84 /* 213.227.186.132 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD5E3BA88 /* 213.227.186.136 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD5E3BA90 /* 213.227.186.144 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD5E3BA98 /* 213.227.186.152 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD5E3BA9C /* 213.227.186.156 */, 32, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD9920284 /* 217.146.2.132 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD9920288 /* 217.146.2.136 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD9920484 /* 217.146.4.132 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD9920488 /* 217.146.4.136 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD9920844 /* 217.146.8.68 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD9920848 /* 217.146.8.72 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD992084C /* 217.146.8.76 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD9920D84 /* 217.146.13.132 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD9920D88 /* 217.146.13.136 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD9920D90 /* 217.146.13.144 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD9920D92 /* 217.146.13.146 */, 32, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD9920E84 /* 217.146.14.132 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD9920E88 /* 217.146.14.136 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD9920E8C /* 217.146.14.140 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD9921584 /* 217.146.21.132 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD9921588 /* 217.146.21.136 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD992158C /* 217.146.21.140 */, 31, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD9921784 /* 217.146.23.132 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD9921788 /* 217.146.23.136 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD9921790 /* 217.146.23.144 */, 28, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD99217A0 /* 217.146.23.160 */, 29, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD99217A8 /* 217.146.23.168 */, 30, NDPI_PROTOCOL_TEAMVIEWER }, + { 0xD99217AC /* 217.146.23.172 */, 32, NDPI_PROTOCOL_TEAMVIEWER }, + +#if 0 + /* + IFLIX services -by www.vizuamatix.com R&D team + */ + { 0x344D0000 /* 52.77.0.0 */, 16, NDPI_PROTOCOL_IFLIX }, + { 0x34DC0000 /* 52.220.0.0 */, 16, NDPI_PROTOCOL_IFLIX }, + { 0x344A0000 /* 52.74.0.0 */, 16, NDPI_PROTOCOL_IFLIX }, + { 0x36E69F00 /* 54.230.159.0 */, 24, NDPI_PROTOCOL_IFLIX }, + { 0x36C09C50 /* 54.192.156.80 */, 32, NDPI_PROTOCOL_IFLIX }, + { 0x36FBB6A8 /* 54.251.182.168*/, 32, NDPI_PROTOCOL_IFLIX }, + { 0x36C09600 /* 54.192.150.0 */, 24, NDPI_PROTOCOL_IFLIX }, + { 0x344AC0F7 /* 52.74.192.247 */, 32, NDPI_PROTOCOL_IFLIX }, + { 0x0215E718 /* 2.21.231.24 */, 32, NDPI_PROTOCOL_IFLIX }, +#endif + + /* + Viber Media S.à r.l. + https://whois.arin.net/rest/nets;q=AWS-VIBER-MEDIA?showDetails=true&showARIN=false&showNonArinTopLevelNet=false&ext=netref2 + TODO: are we able to autogenerate this list? + */ + + { 0x0DE61550 /* 13.230.21.80/28 */, 28, NDPI_PROTOCOL_VIBER }, + { 0x0D39B480 /* 13.57.180.128/28 */, 28, NDPI_PROTOCOL_VIBER }, + { 0x012C30400 /* 18.195.4.0/23 */, 23, NDPI_PROTOCOL_VIBER }, + { 0x012C45500 /* 18.196.85.0/25 */, 25, NDPI_PROTOCOL_VIBER }, + { 0x022E8A340 /* 34.232.163.64/28 */, 28, NDPI_PROTOCOL_VIBER }, + { 0x022F67200 /* 34.246.114.0/23 */, 23, NDPI_PROTOCOL_VIBER }, + { 0x3400FC00 /* 52.0.252.0/22 */, 22, NDPI_PROTOCOL_VIBER }, + { 0x3403A746 /* 52.3.167.70/32 */, 32, NDPI_PROTOCOL_VIBER }, + { 0x34162CEB /* 52.22.44.235/32 */, 32, NDPI_PROTOCOL_VIBER }, + { 0x34165F0F /* 52.22.95.15/32 */, 32, NDPI_PROTOCOL_VIBER }, + { 0x3640BFF0 /* 54.64.191.240/28 */, 28, NDPI_PROTOCOL_VIBER }, + { 0x3655545D /* 54.85.84.93/32 */, 32, NDPI_PROTOCOL_VIBER }, + { 0x3655565D /* 54.85.86.93/32 */, 32, NDPI_PROTOCOL_VIBER }, + { 0x36A5FFD0 /* 54.165.255.208/28 */, 28, NDPI_PROTOCOL_VIBER }, + { 0x36A5FFE0 /* 54.165.255.224/27 */, 27, NDPI_PROTOCOL_VIBER }, + { 0x36DBBFA0 /* 54.219.191.160/28 */, 28, NDPI_PROTOCOL_VIBER }, + { 0x36E8FB90 /* 54.232.251.144/28 */, 28, NDPI_PROTOCOL_VIBER }, + + /* AnyDesk + TODO: are we able to autogenerate this list? + */ + { 0x3353EF8E /* 51.83.239.142/31 */, 31, NDPI_PROTOCOL_ANYDESK }, + { 0x3353EF90 /* 51.83.239.144/31 */, 31, NDPI_PROTOCOL_ANYDESK }, + { 0x3353EEC8 /* 51.83.238.200/29 */, 29, NDPI_PROTOCOL_ANYDESK }, + { 0x3353EED0 /* 51.83.238.208/29 */, 29, NDPI_PROTOCOL_ANYDESK }, + { 0x3353EED8 /* 51.83.238.216/30 */, 30, NDPI_PROTOCOL_ANYDESK }, + { 0x3353EEDC /* 51.83.238.220/31 */, 31, NDPI_PROTOCOL_ANYDESK }, + /* From support.anydesk.com/knowledge/firewall */ + { 0xEFFF6612 /* 239.255.102.18/32 */, 32, NDPI_PROTOCOL_ANYDESK }, + + /* + * Edgecast CDN + * Uses captcha to prevent web scraping. + * https://support.globaldots.com/hc/en-us/articles/115004003849-Edgecast-IP-addresses + */ + { 0x6CA1F000 /* 108.161.240.0/20 */, 20, NDPI_PROTOCOL_EDGECAST }, + { 0x6EE8B000 /* 110.232.176.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, + { 0x7567B700 /* 117.103.183.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x7512E800 /* 117.18.232.0/21 */, 21, NDPI_PROTOCOL_EDGECAST }, + { 0x79BD2E00 /* 121.189.46.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0xB4F0B800 /* 180.240.184.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC0100000 /* 192.16.0.0/18 */, 18, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E58000 /* 192.229.128.0/17 */, 17, NDPI_PROTOCOL_EDGECAST }, + { 0xC01E0000 /* 192.30.0.0/19 */, 19, NDPI_PROTOCOL_EDGECAST }, + { 0xC2FFD240 /* 194.255.210.64/26 */, 26, NDPI_PROTOCOL_EDGECAST }, + { 0xC6071000 /* 198.7.16.0/20 */, 20, NDPI_PROTOCOL_EDGECAST }, + { 0xCB4A0440 /* 203.74.4.64/26 */, 26, NDPI_PROTOCOL_EDGECAST }, + { 0xD540EA00 /* 213.64.234.0/26 */, 26, NDPI_PROTOCOL_EDGECAST }, + { 0x2E164000 /* 46.22.64.0/20 */, 20, NDPI_PROTOCOL_EDGECAST }, + { 0x05684000 /* 5.104.64.0/21 */, 21, NDPI_PROTOCOL_EDGECAST }, + { 0x44E82000 /* 68.232.32.0/20 */, 20, NDPI_PROTOCOL_EDGECAST }, + { 0x48155000 /* 72.21.80.0/20 */, 20, NDPI_PROTOCOL_EDGECAST }, + { 0x58C22D80 /* 88.194.45.128/26 */, 26, NDPI_PROTOCOL_EDGECAST }, + { 0x5DB8D000 /* 93.184.208.0/20 */, 20, NDPI_PROTOCOL_EDGECAST }, + + /* + TODO + + Salesforce + https://help.salesforce.com/s/articleView?id=000321501&type=1 + */ + + /* + GoTo products (mainly GoToMeeting) + Some of the IPs reported at + https://support.goto.com/connect/help/what-are-gotoconnects-ip-blocks-gotoconnect-gotoconnects-ip-blocks + are not present in the GoTo/LogMeIn/Citrix ASn + To be extra safe, add here the entire list. + TODO: are we able to autogenerate this list? + */ + { 0xC724F800 /* 199.36.248.0/22 */, 22, NDPI_PROTOCOL_GOTO }, + { 0xC7577800 /* 199.87.120.0/22 */, 22, NDPI_PROTOCOL_GOTO }, + { 0xA2FA3C00 /* 162.250.60.0/22 */, 22, NDPI_PROTOCOL_GOTO }, + { 0x2D0CC400 /* 45.12.196.0/22 */, 22, NDPI_PROTOCOL_GOTO }, + { 0xCAAD1800 /* 202.173.24.0/21 */, 21, NDPI_PROTOCOL_GOTO }, + { 0xADC70000 /* 173.199.0.0/18 */, 18, NDPI_PROTOCOL_GOTO }, + { 0x17EFE000 /* 23.239.224.0/19 */, 19, NDPI_PROTOCOL_GOTO }, + +#ifdef CUSTOM_NDPI_PROTOCOLS +#include "../../../nDPI-custom/custom_ndpi_content_match_host_protocol_list.c.inc" +#endif + + /* End */ + { 0x0, 0, 0 } +}; + + +/* ****************************************************** */ + +/* + Host-based match + + HTTP: Server: field + HTTPS: Server certificate name + + Risk classification criteria + ---------------------------- + + NDPI_PROTOCOL_SAFE + - Web sites (and CDNs) which are not commonly used to host malicious activities. + - OS update hosts. + - App stores. + - Commonly used services with passwords in encrypted channels (SMTPS, POPS, etc) + + NDPI_PROTOCOL_ACCEPTABLE + - Cloud services may be used to host malware (e.g., https://www.fireeye.com/blog/threat-research/2015/11/china-based-threat.html), + but it is mostly used for normal purposes. + - Webmail sites, which can be used to phising. + - Encrypted administrative protocols, such as SSH. + - Text, voice or video communication (e.g., Skype, Slack, Whatsapp). + - Ads services are commonly used to spread malware + (https://www.tripwire.com/state-of-security/security-data-protection/crypto-ransomware-spreads-via-poisoned-ads-on-major-websites/) + + NDPI_PROTOCOL_FUN + - Social media sites and services. + - Communication used for fun purposes, like Snapchat, Tinder, etc. + - Audio and videostreamming services (e.g., Netflix). + - Game services. + + NDPI_PROTOCOL_UNSAFE + - Unencrypted administrative protocols, such as Telnet. + - Cloud hosted servers when accessed by default domains, such as *.amazonaws.com. + - "AWS Supports 41% of Malware Hosting Sites, More than Any Other Web Host or ISP" + http://www.thewhir.com/web-hosting-news/aws-supports-41-malware-hosting-sites-web-host-isp + - https://www.scmagazine.com/600-plus-cloud-repositories-spotted-hosting-malware-and-malicious-files/article/572205/ + - https://howtoremove.guide/remove-s3-amazonaws-virus/ + - Torrents. + - Commonly used services with passwords in unencrypted channels (SMTP, POP, etc) + + NDPI_PROTOCOL_POTENTIALLY_DANGEROUS + - Tor and other anonymization access. + - Sites commonly used to host malware and not as commonly used by "normal" users. (e.g., pastebin.com) + https://isc.sans.edu/forums/diary/Many+Malware+Samples+Found+on+Pastebin/22036/ + + NDPI_PROTOCOL_UNRATED + - Avoid this class. + +*/ + +/* ****************************************************** */ + +static ndpi_protocol_match host_match[] = + { + { "dmqdd6hw24ucf.cloudfront.net", "AmazonVideo", NDPI_PROTOCOL_AMAZON_VIDEO, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "d25xi40x97liuc.cloudfront.net", "AmazonVideo", NDPI_PROTOCOL_AMAZON_VIDEO, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".aiv-delivery.net", "AmazonVideo", NDPI_PROTOCOL_AMAZON_VIDEO, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".aiv-cdn.net", "AmazonVideo", NDPI_PROTOCOL_AMAZON_VIDEO, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "1s3.lvlt.dash.us.aiv-cdn.net.c.footprint.net", "AmazonVideo", NDPI_PROTOCOL_AMAZON_VIDEO, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".s.loris.llnwd.net", "AmazonVideo", NDPI_PROTOCOL_AMAZON_VIDEO, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "atv-ext.amazon.com", "AmazonVideo", NDPI_PROTOCOL_AMAZON_VIDEO, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "atv-ps.amazon.com", "AmazonVideo", NDPI_PROTOCOL_AMAZON_VIDEO, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".media-amazon.com", "AmazonVideo", NDPI_PROTOCOL_AMAZON_VIDEO, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".amazonvideo.com", "AmazonVideo", NDPI_PROTOCOL_AMAZON_VIDEO, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".primevideo.com", "AmazonVideo", NDPI_PROTOCOL_AMAZON_VIDEO, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "amazon.", "Amazon", NDPI_PROTOCOL_AMAZON, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "amazon.com", "Amazon", NDPI_PROTOCOL_AMAZON, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "images-amazon.com", "Amazon", NDPI_PROTOCOL_AMAZON, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "ssl-images-amazon.com", "Amazon", NDPI_PROTOCOL_AMAZON, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "amazonaws.com", "AmazonAWS", NDPI_PROTOCOL_AMAZON_AWS, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "amazon-adsystem.com", "Amazon", NDPI_PROTOCOL_AMAZON, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".aws.", "AmazonAWS", NDPI_PROTOCOL_AMAZON_AWS, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".cloudfront.net", "AmazonAWS", NDPI_PROTOCOL_AMAZON_AWS, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".us-west-2.compute.amazonaws.com", "AmazonAWS", NDPI_PROTOCOL_AMAZON_AWS, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".teamviewer.com", "Teamviewer", NDPI_PROTOCOL_TEAMVIEWER, NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".bloombergvault.com", "Bloomberg", NDPI_PROTOCOL_BLOOMBERG, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".bloomberg.com", "Bloomberg", NDPI_PROTOCOL_BLOOMBERG, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".salesforce.com", "Salesforce", NDPI_PROTOCOL_SALESFORCE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".apple-dns.net", "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "origin-apple.com.akadns.net", "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "e6858.dsce9.akamaiedge.net", "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".mzstatic.com", "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "aaplimg.com", "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".apple.com", "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".apple.news", "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".cdn-apple.com", "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".ls4-apple.com", "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".gc-apple.com", "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".ls-apple.com", "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".apple-cloudkit.com", "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "captive.apple.com", "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_CONNECTIVITY_CHECK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "captive.apple.com.", "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_CONNECTIVITY_CHECK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, /* apple.com.edgekey.net */ + { "gsp1.apple.com", "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_CONNECTIVITY_CHECK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".push.apple.com", "ApplePush", NDPI_PROTOCOL_APPLE_PUSH, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "push-apple.com", "ApplePush", NDPI_PROTOCOL_APPLE_PUSH, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".icloud.com", "AppleiCloud", NDPI_PROTOCOL_APPLE_ICLOUD, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".icloud.com.", "AppleiCloud", NDPI_PROTOCOL_APPLE_ICLOUD, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, /* icloud.com.akadns.net */ + { ".me.com", "AppleiCloud", NDPI_PROTOCOL_APPLE_ICLOUD, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".icloud-content.com", "AppleiCloud", NDPI_PROTOCOL_APPLE_ICLOUD, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "iosapps.itunes.apple.com", "AppleStore", NDPI_PROTOCOL_APPLESTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, /* iOS */ + { "osxapps.itunes.apple.com", "AppleStore", NDPI_PROTOCOL_APPLESTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, /* MacOS */ + { "buy.itunes.apple.com", "AppleStore", NDPI_PROTOCOL_APPLESTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "su.itunes.apple.com", "AppleStore", NDPI_PROTOCOL_APPLESTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "se.itunes.apple.com", "AppleStore", NDPI_PROTOCOL_APPLESTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "myapp.itunes.apple.com", "AppleStore", NDPI_PROTOCOL_APPLESTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "swscan.apple.com", "AppleStore", NDPI_PROTOCOL_APPLESTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "itunes-apple.com", "AppleStore", NDPI_PROTOCOL_APPLESTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "itunes.apple.com", "AppleiTunes", NDPI_PROTOCOL_APPLE_ITUNES, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "tlnk.io", "AppleiTunes", NDPI_PROTOCOL_APPLE_ITUNES, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "guzzoni.apple.", "AppleSiri", NDPI_PROTOCOL_APPLE_SIRI, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".wbagora.com", "Playstation", NDPI_PROTOCOL_PLAYSTATION, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_UNRATED, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".wbplay.com", "Playstation", NDPI_PROTOCOL_PLAYSTATION, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_UNRATED, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".xbox.com", "Xbox", NDPI_PROTOCOL_XBOX, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".xboxlive.com", "Xbox", NDPI_PROTOCOL_XBOX, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".xboxlive.com.akadns.net", "Xbox", NDPI_PROTOCOL_XBOX, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".xboxlive.com.c.footprint.net", "Xbox", NDPI_PROTOCOL_XBOX, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "e13555.b.akamaiedge.net", "Playstation", NDPI_PROTOCOL_PLAYSTATION, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "e1800.d.akamaiedge.net", "Playstation", NDPI_PROTOCOL_PLAYSTATION, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "e1879.e7.akamaiedge.net", "Playstation", NDPI_PROTOCOL_PLAYSTATION, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".cnn.com", "CNN", NDPI_PROTOCOL_CNN, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".cnn.net", "CNN", NDPI_PROTOCOL_CNN, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".dropbox.com", "DropBox", NDPI_PROTOCOL_DROPBOX, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".dropboxstatic.com", "DropBox", NDPI_PROTOCOL_DROPBOX, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".dropbox-dns.com", "DropBox", NDPI_PROTOCOL_DROPBOX, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "log.getdropbox.com", "DropBox", NDPI_PROTOCOL_DROPBOX, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".dropboxapi.com", "DropBox", NDPI_PROTOCOL_DROPBOX, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".ebay.", "eBay", NDPI_PROTOCOL_EBAY, NDPI_PROTOCOL_CATEGORY_SHOPPING, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, /* or FUN */ + { ".ebay.com", "eBay", NDPI_PROTOCOL_EBAY, NDPI_PROTOCOL_CATEGORY_SHOPPING, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".ebaystatic.com", "eBay", NDPI_PROTOCOL_EBAY, NDPI_PROTOCOL_CATEGORY_SHOPPING, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".ebaydesc.com", "eBay", NDPI_PROTOCOL_EBAY, NDPI_PROTOCOL_CATEGORY_SHOPPING, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".ebayrtm.com", "eBay", NDPI_PROTOCOL_EBAY, NDPI_PROTOCOL_CATEGORY_SHOPPING, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".ebaystratus.com", "eBay", NDPI_PROTOCOL_EBAY, NDPI_PROTOCOL_CATEGORY_SHOPPING, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".ebayimg.com", "eBay", NDPI_PROTOCOL_EBAY, NDPI_PROTOCOL_CATEGORY_SHOPPING, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + /* Detected "instagram.c10r.facebook.com". Omitted "*amazonaws.com" and "*facebook.com" CDNs e.g. "ig-telegraph-shv-04-frc3.facebook.com" */ + { ".instagram.", "Instagram", NDPI_PROTOCOL_INSTAGRAM, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "instagram.", "Instagram", NDPI_PROTOCOL_INSTAGRAM, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, 15 }, + { ".cdninstagram.com", "Instagram", NDPI_PROTOCOL_INSTAGRAM, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "igcdn-photos-", "Instagram", NDPI_PROTOCOL_INSTAGRAM, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "instagramimages-", "Instagram", NDPI_PROTOCOL_INSTAGRAM, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "instagramstatic-", "Instagram", NDPI_PROTOCOL_INSTAGRAM, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "facebook.com", "Facebook", NDPI_PROTOCOL_FACEBOOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".facebook.net", "Facebook", NDPI_PROTOCOL_FACEBOOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "fbstatic-a.akamaihd.net", "Facebook", NDPI_PROTOCOL_FACEBOOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".fbcdn.net", "Facebook", NDPI_PROTOCOL_FACEBOOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "fbcdn-", "Facebook", NDPI_PROTOCOL_FACEBOOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".fbsbx.com", "Facebook", NDPI_PROTOCOL_FACEBOOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".fbwat.ch", "Facebook", NDPI_PROTOCOL_FACEBOOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".fb.com", "Facebook", NDPI_PROTOCOL_FACEBOOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".fb.gg", "Facebook", NDPI_PROTOCOL_FACEBOOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "speedtest.", "Ookla", NDPI_PROTOCOL_OOKLA, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".ooklaserver.net", "Ookla", NDPI_PROTOCOL_OOKLA, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "ntop.org", "ntop", NDPI_PROTOCOL_NTOP, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "docs.googleusercontent.com", "GoogleDocs", NDPI_PROTOCOL_GOOGLE_DOCS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "docs.google.com", "GoogleDocs", NDPI_PROTOCOL_GOOGLE_DOCS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "drive-thirdparty.googleusercontent.com", "GoogleDrive", NDPI_PROTOCOL_GOOGLE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "drive.google.com", "GoogleDrive", NDPI_PROTOCOL_GOOGLE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "android.clients.google.com", "PlayStore", NDPI_PROTOCOL_PLAYSTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + /* + https://www.fastvue.co/sophos/blog/google-data-saver-affect-security-confidentiality-reporting/ + Used by Google Chrome Lite Mode for Android + + This traffic will bypass checks and blocks as it will include all the communications from/to + the browser instead of using the standard communication mechanisms SSL/HTTP(S)/DNS + + https://github.com/curl/curl/wiki/DNS-over-HTTPS + */ + { ".googlezip.net", "DataSaver", NDPI_PROTOCOL_DATASAVER, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "datasaver.googleapis.com", "DataSaver", NDPI_PROTOCOL_DATASAVER, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + /* http://check.googlezip.net/connect [check browser connectivity] */ + // { ".googlezip.net", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + /* + https://github.com/bambenek/block-doh/blob/master/db.doh-redirect + https://github.com/curl/curl/wiki/DNS-over-HTTPS + */ + { "dns.google", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dns.google.com", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "mozilla.cloudflare-dns.com", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, /* Firefox */ + { "cloudflare-dns.com", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "commons.host", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "doh.libredns.gr", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dns9.quad9.net", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "doh.opendns.com", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "doh.dns.sb", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "doh.netweaver.uk", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dns.dns-over-https.com", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "jp.tiarap.org", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dns.dnsoverhttps.net", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "doh.powerdns.org", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "adblock.mydns.network", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "jp.tiar.app", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "doh.crypto.sx", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dns.quad9.net", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dns.containerpi.com", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "ibksturm.synology.me", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "doh.captnemo.in", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dns.rubyfish.cn", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "doh.42l.fr", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dns-family.adguard.com", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "appliedprivacy.net", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "doh.cleanbrowsing.org", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dns10.quad9.net", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "doh-ch.blahdns.com", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "doh.seby.io", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dns.adguard.com", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "ibuki.cgnat.net", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "jcdns.fun", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "doh-2.seby.io", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "doh.tiar.app", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "doh.dnswarden.com", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "doh-de.blahdns.com", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "doh-jp.blahdns.com", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "doh.appliedprivacy.net", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "doh.tiarap.org", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "doh.armadillodns.net", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dns-nyc.aaflalo.me", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dns.aa.net.uk", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dns.aaflalo.me", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dns11.quad9.net", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dns.nextdns.io", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "doh.securedns.eu", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "rdns.faelix.net", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "captnemo.in", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dns.dnshome.de", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "doh.dnslify.com", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "resolver-eu.lelux.fi", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "doh.bortzmeyer.fr", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".doh.dns.snopyta.org", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "jarjar.meganerd.nl", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "rumpelsepp.org", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dnsnl.alekberg.net", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dnses.alekberg.net", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dnsse.alekberg.net", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "odvr.nic.cz", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dns.dnscrypt.ca", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dns1.dnscrypt.ca", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dns2.dnscrypt.ca", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dns.digitale-gesellschaft.ch", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dns1.digitale-gesellschaft.ch", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dns.cloudflare.com", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "doh.ffmuc.net", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + + /* + See https://better.fyi/trackers/ + + DoubleClick by Google (2mdn.net) + DoubleClick by Google (doubleclick.net) + DoubleClick by Google + Google AdSense by Google (google.com) + Google AdSense by Google (google.se) + Google AdSense by Google (googleadservices.com) + Google Analytics by Google (google-analytics.com) + Google APIs by Google (ajax.googleapis.com) + Google Fonts by Google (fonts.googleapis.com) + Google Interactive Media Ads (imasdk.googleapis.com) + Google Syndication (googlesyndication.com) + Google Tag Manager by Google (googletagmanager.com) + Google Tag Manager by Google (googletagservices.com) + Gstatic by Google (gstatic.com) + */ + + /* Google Advertisements */ + { ".googlesyndication.com", "Google", NDPI_PROTOCOL_GOOGLE, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "googleads.", "Google", NDPI_PROTOCOL_GOOGLE, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".doubleclick.net", "Google", NDPI_PROTOCOL_GOOGLE, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "googleadservices.", "Google", NDPI_PROTOCOL_GOOGLE, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".2mdn.net", "Google", NDPI_PROTOCOL_GOOGLE, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".dmtry.com", "Google", NDPI_PROTOCOL_GOOGLE, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "google-analytics.", "Google", NDPI_PROTOCOL_GOOGLE, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".gvt1.com", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".gvt2.com", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "telephony.goog", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "connectivitycheck.android.com", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_CONNECTIVITY_CHECK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "connectivitycheck.gstatic.com", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_CONNECTIVITY_CHECK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".ampproject.org", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".ampproject.net", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "app-measurement.com", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".app-measurement.com", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + /* Google Hangout */ + { "images2-hangout-opensocial.googleusercontent.com", "GoogleHangout", NDPI_PROTOCOL_HANGOUT_DUO, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + /* Google Services */ + { "googleapis.com", "GoogleServices", NDPI_PROTOCOL_GOOGLE_SERVICES, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".googletagmanager.com", "GoogleServices", NDPI_PROTOCOL_GOOGLE_SERVICES, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".googletagservices.com", "GoogleServices", NDPI_PROTOCOL_GOOGLE_SERVICES, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "mtalk.google.com", "GoogleServices", NDPI_PROTOCOL_GOOGLE_SERVICES, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "plus.google.com", "GooglePlus", NDPI_PROTOCOL_GOOGLE_PLUS, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "plus.url.google.com", "GooglePlus", NDPI_PROTOCOL_GOOGLE_PLUS, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "googleusercontent.com", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "1e100.net", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "maps.google.", "GoogleMaps", NDPI_PROTOCOL_GOOGLE_MAPS, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "maps.gstatic.com", "GoogleMaps", NDPI_PROTOCOL_GOOGLE_MAPS, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".gmail.", "GMail", NDPI_PROTOCOL_GMAIL, NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "inbox.google.com", "GMail", NDPI_PROTOCOL_GMAIL, NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "mail.google.", "GMail", NDPI_PROTOCOL_GMAIL, NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "google.com", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "google.", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".google.", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".gstatic.com", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "gstatic.com", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "ggpht.com", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".goog", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "outlook.com", "Outlook", NDPI_PROTOCOL_MS_OUTLOOK, NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "hotmail.com", "Outlook", NDPI_PROTOCOL_MS_OUTLOOK, NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".last.fm", "LastFM", NDPI_PROTOCOL_LASTFM, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "netflix.com", "NetFlix", NDPI_PROTOCOL_NETFLIX, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "nflxext.com", "NetFlix", NDPI_PROTOCOL_NETFLIX, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "nflximg.com", "NetFlix", NDPI_PROTOCOL_NETFLIX, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "nflximg.net", "NetFlix", NDPI_PROTOCOL_NETFLIX, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "nflxvideo.net", "NetFlix", NDPI_PROTOCOL_NETFLIX, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "nflxso.net", "NetFlix", NDPI_PROTOCOL_NETFLIX, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "fast.com", "NetFlix", NDPI_PROTOCOL_NETFLIX, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".skype.", "Skype_Teams", NDPI_PROTOCOL_SKYPE_TEAMS, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".skypeassets.", "Skype_Teams", NDPI_PROTOCOL_SKYPE_TEAMS, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".skypedata.", "Skype_Teams", NDPI_PROTOCOL_SKYPE_TEAMS, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".skypeecs-", "Skype_Teams", NDPI_PROTOCOL_SKYPE_TEAMS, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".skypeforbusiness.", "Skype_Teams", NDPI_PROTOCOL_SKYPE_TEAMS, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".lync.com", "Skype_Teams", NDPI_PROTOCOL_SKYPE_TEAMS, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "e7768.b.akamaiedge.net", "Skype_Teams", NDPI_PROTOCOL_SKYPE_TEAMS, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "e4593.dspg.akamaiedge.net", "Skype_Teams", NDPI_PROTOCOL_SKYPE_TEAMS, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "e4593.g.akamaiedge.net", "Skype_Teams", NDPI_PROTOCOL_SKYPE_TEAMS, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "*.gateway.messenger.live.com", "Skype_Teams", NDPI_PROTOCOL_SKYPE_TEAMS, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "teams.live.com", "Skype_Teams", NDPI_PROTOCOL_SKYPE_TEAMS, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "skype-calling-missedcallsregistrar-", "Skype_Teams", NDPI_PROTOCOL_SKYPE_TEAMS, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "teams.cloudapp.net", "Skype_Teams", NDPI_PROTOCOL_SKYPE_TEAMS, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".tuenti.com", "Tuenti", NDPI_PROTOCOL_TUENTI, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".twttr.com", "Twitter", NDPI_PROTOCOL_TWITTER, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "twitter.", "Twitter", NDPI_PROTOCOL_TWITTER, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "twimg.com", "Twitter", NDPI_PROTOCOL_TWITTER, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN , NDPI_PROTOCOL_DEFAULT_LEVEL}, + { "t.co", "Twitter", NDPI_PROTOCOL_TWITTER, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN , NDPI_PROTOCOL_DEFAULT_LEVEL}, + + { ".viber.com", "Viber", NDPI_PROTOCOL_VIBER, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".cdn.viber.com", "Viber", NDPI_PROTOCOL_VIBER, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".viber.it", "Viber", NDPI_PROTOCOL_VIBER, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "wikipedia.", "Wikipedia", NDPI_PROTOCOL_WIKIPEDIA, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "wikimedia.", "Wikipedia", NDPI_PROTOCOL_WIKIPEDIA, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "mediawiki.", "Wikipedia", NDPI_PROTOCOL_WIKIPEDIA, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "wikimediafoundation.", "Wikipedia", NDPI_PROTOCOL_WIKIPEDIA, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "mmg-fna.whatsapp.net", "WhatsAppFiles", NDPI_PROTOCOL_WHATSAPP_FILES, NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".fna.whatsapp.net", "WhatsAppFiles", NDPI_PROTOCOL_WHATSAPP_FILES, NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".cdn.whatsapp.net", "WhatsAppFiles", NDPI_PROTOCOL_WHATSAPP_FILES, NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "mms.whatsapp.net", "WhatsAppFiles", NDPI_PROTOCOL_WHATSAPP_FILES, NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".whatsapp.", "WhatsApp", NDPI_PROTOCOL_WHATSAPP, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "g.whatsapp.net", "WhatsApp", NDPI_PROTOCOL_WHATSAPP, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "v.whatsapp.net", "WhatsApp", NDPI_PROTOCOL_WHATSAPP, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "mmg.whatsapp.net", "WhatsApp", NDPI_PROTOCOL_WHATSAPP, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".yahoo.", "Yahoo", NDPI_PROTOCOL_YAHOO, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".yimg.com", "Yahoo", NDPI_PROTOCOL_YAHOO, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "yahooapis.", "Yahoo", NDPI_PROTOCOL_YAHOO, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "upload.youtube.com", "YouTubeUpload", NDPI_PROTOCOL_YOUTUBE_UPLOAD, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "upload.video.google.com", "YouTubeUpload", NDPI_PROTOCOL_YOUTUBE_UPLOAD, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "youtubei.googleapis.com", "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "youtube.", "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "youtu.be", "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "yt3.ggpht.com", "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".googlevideo.com", "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".ytimg.com", "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "youtube-nocookie.", "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".youtube-ui.l.google.com", "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".youtubeeducation.com", "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".vevo.com", "Vevo", NDPI_PROTOCOL_VEVO, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".spotify.com", "Spotify", NDPI_PROTOCOL_SPOTIFY, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".scdn.co", "Spotify", NDPI_PROTOCOL_SPOTIFY, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".pscdn.co", "Spotify", NDPI_PROTOCOL_SPOTIFY, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "spotifycdn.net", "Spotify", NDPI_PROTOCOL_SPOTIFY, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "spotifycdn.com", "Spotify", NDPI_PROTOCOL_SPOTIFY, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "audio4-ak-spotify-com.akamaized.net", "Spotify", NDPI_PROTOCOL_SPOTIFY, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "audio-ak-spotify-com.akamaized.net", "Spotify", NDPI_PROTOCOL_SPOTIFY, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "heads-ak-spotify-com.akamaized.net", "Spotify", NDPI_PROTOCOL_SPOTIFY, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "spotify-com.akamaized.net", "Spotify", NDPI_PROTOCOL_SPOTIFY, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "spotify.com.edgesuite.net", "Spotify", NDPI_PROTOCOL_SPOTIFY, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "spotify.map.fastly.net", "Spotify", NDPI_PROTOCOL_SPOTIFY, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "spotify.edgekey.net", "Spotify", NDPI_PROTOCOL_SPOTIFY, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "spotify.demdex.net", "Spotify", NDPI_PROTOCOL_SPOTIFY, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".spotilocal.com", "Spotify", NDPI_PROTOCOL_SPOTIFY, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + + { "edge-mqtt.facebook.com", "Messenger", NDPI_PROTOCOL_MESSENGER, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "mqtt-mini.facebook.com", "Messenger", NDPI_PROTOCOL_MESSENGER, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, /* Messenger Lite */ + { "messenger.com", "Messenger", NDPI_PROTOCOL_MESSENGER, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".m.me", "Messenger", NDPI_PROTOCOL_MESSENGER, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + /* Pandora */ + { "pandora.com", "Pandora", NDPI_PROTOCOL_PANDORA, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".torproject.org", "Tor", NDPI_PROTOCOL_TOR, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".kakao.com", "KakaoTalk", NDPI_PROTOCOL_KAKAOTALK, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "ttvnw.net", "Twitch", NDPI_PROTOCOL_TWITCH, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "jtvnw.net", "Twitch", NDPI_PROTOCOL_TWITCH, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "twitch.tv", "Twitch", NDPI_PROTOCOL_TWITCH, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "twitchcdn.net", "Twitch", NDPI_PROTOCOL_TWITCH, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN , NDPI_PROTOCOL_DEFAULT_LEVEL}, + { "twitchsvc.net", "Twitch", NDPI_PROTOCOL_TWITCH, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".contribute.live-video.net", "Twitch", NDPI_PROTOCOL_TWITCH, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".qq.com", "QQ", NDPI_PROTOCOL_QQ, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".gtimg.com", "QQ", NDPI_PROTOCOL_QQ, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".weibo.com", "Sina(Weibo)", NDPI_PROTOCOL_SINA, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".weibo.cn", "Sina(Weibo)", NDPI_PROTOCOL_SINA, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".sinaimg.cn", "Sina", NDPI_PROTOCOL_SINA, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".sinajs.cn", "Sina", NDPI_PROTOCOL_SINA, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".sina.cn", "Sina", NDPI_PROTOCOL_SINA, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".sina.com.cn", "Sina", NDPI_PROTOCOL_SINA, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + /* https://support.cipafilter.com/index.php?/Knowledgebase/Article/View/117/0/snapchat---how-to-block */ + { "feelinsonice.appspot.com", "Snapchat", NDPI_PROTOCOL_SNAPCHAT, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "feelinsonice-hrd.appspot.com", "Snapchat", NDPI_PROTOCOL_SNAPCHAT, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "feelinsonice.com", "Snapchat", NDPI_PROTOCOL_SNAPCHAT, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".snapchat.", "Snapchat", NDPI_PROTOCOL_SNAPCHAT, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".snapads.", "Snapchat", NDPI_PROTOCOL_SNAPCHAT, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".sc-cdn.net", "Snapchat", NDPI_PROTOCOL_SNAPCHAT, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".sc-prod.net", "Snapchat", NDPI_PROTOCOL_SNAPCHAT, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".sc-jpl.com", "Snapchat", NDPI_PROTOCOL_SNAPCHAT, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "sc-analytics.appspot.com", "Snapchat", NDPI_PROTOCOL_SNAPCHAT, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "snap.api.mapbox.com", "Snapchat", NDPI_PROTOCOL_SNAPCHAT, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "cognac-prod.appspot.com", "Snapchat", NDPI_PROTOCOL_SNAPCHAT, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".addlive.io", "Snapchat", NDPI_PROTOCOL_SNAPCHAT, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".waze.com", "Waze", NDPI_PROTOCOL_WAZE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "wazespeechactiviation-pa.googleapis.com", "Waze", NDPI_PROTOCOL_WAZE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "deezer.com", "Deezer", NDPI_PROTOCOL_DEEZER, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + /* Microsoft + Azure */ + { ".wpc.v0cdn.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".gfx.ms", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".aka.ms", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".sfx.ms", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".appcenter.ms", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "-msedge.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".microsoft.us", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".dynamics.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "msftncsi.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CONNECTIVITY_CHECK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".windows.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".windows.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".microsoft.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "msn.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".s-msft.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".webtrends.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".msecnd.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "bing.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".visualstudio.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "login.live.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "statics-marketingsites-wcus-ms-com.akamaized.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "statics-marketingsites-eus-ms-com.akamaized.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "img-prod-cms-rt-microsoft-com.akamaized.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "onecollector.cloudapp.aria.akadns.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "onecollector.akadns.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "microsoft.akadns.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "e1723.dscd.akamaiedge.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".microsofttranslator.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "sharepointonline.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "sharepoint.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".msftconnecttest.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CONNECTIVITY_CHECK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".windowsmedia.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".windowsphone.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".msa.akadns6.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".s-microsoft.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".msidentity.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".wac.phicdn.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".onestore.ms", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".msedge.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".mshome.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "..msn-com.", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".-s-msn-com.", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".s-msn.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".img-s-msn-com.", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "img-s-msn-com.", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".location.live.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".virtualearth.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "trafficmanager.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "testconnectivity.microsoft.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CONNECTIVITY_CHECK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "teredo.ipv6.microsoft.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CONNECTIVITY_CHECK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "teredo.ipv6.microsoft.com.nsatc.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CONNECTIVITY_CHECK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".azure.com", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".azureedge.us", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".azurefd.us", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".azure-automation.net", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".azureedge.net", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "teams.microsoft.com", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "teams.microsoft.us", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "teams.skype.com", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "-teams.cloudapp.net", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "teams.trafficmanager.net", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "teams-msgapi.trafficmanager.net", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "teams.office.net", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "teams.office.com", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".storage.live.com", "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE,NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "skyapi.live.net", "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "d.docs.live.net", "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "onedrive.live.com", "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "cs9.wac.phicdn.net", "WindowsUpdate", NDPI_PROTOCOL_WINDOWS_UPDATE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".dl.delivery.mp.microsoft.com.", "WindowsUpdate", NDPI_PROTOCOL_WINDOWS_UPDATE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".delivery.dsp.mp.microsoft.com.nsatc.net", "WindowsUpdate", NDPI_PROTOCOL_WINDOWS_UPDATE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "sls.update.microsoft.com", "WindowsUpdate", NDPI_PROTOCOL_WINDOWS_UPDATE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "slscr.update.microsoft.com", "WindowsUpdate", NDPI_PROTOCOL_WINDOWS_UPDATE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "fe3.update.microsoft.com", "WindowsUpdate", NDPI_PROTOCOL_WINDOWS_UPDATE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".mp.microsoft.com.", "WindowsUpdate", NDPI_PROTOCOL_WINDOWS_UPDATE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "fe2.update.microsoft.com.", "WindowsUpdate", NDPI_PROTOCOL_WINDOWS_UPDATE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".wac.phicdn.net.", "WindowsUpdate", NDPI_PROTOCOL_WINDOWS_UPDATE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".geo-prod.do.dsp.mp.microsoft.com.", "WindowsUpdate", NDPI_PROTOCOL_WINDOWS_UPDATE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "geo-prod.do.dsp.mp.microsoft.com.", "WindowsUpdate", NDPI_PROTOCOL_WINDOWS_UPDATE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".delivery.mp.microsoft.com", "WindowsUpdate", NDPI_PROTOCOL_WINDOWS_UPDATE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".emdl.ws.microsoft.com", "WindowsUpdate", NDPI_PROTOCOL_WINDOWS_UPDATE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".prod.do.dsp.mp.microsoft.com", "WindowsUpdate", NDPI_PROTOCOL_WINDOWS_UPDATE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "update.microsoft.com", "WindowsUpdate", NDPI_PROTOCOL_WINDOWS_UPDATE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "update.microsoft.com.akadns.net", "WindowsUpdate", NDPI_PROTOCOL_WINDOWS_UPDATE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".windowsupdate.com", "WindowsUpdate", NDPI_PROTOCOL_WINDOWS_UPDATE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".ntservicepack.microsoft.com", "WindowsUpdate", NDPI_PROTOCOL_WINDOWS_UPDATE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".wustat.windows.com", "WindowsUpdate", NDPI_PROTOCOL_WINDOWS_UPDATE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "worldofwarcraft.com", "WorldOfWarcraft", NDPI_PROTOCOL_WORLDOFWARCRAFT, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".anchorfree.", "HotspotShield", NDPI_PROTOCOL_HOTSPOT_SHIELD, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "hotspotshield.com", "HotspotShield", NDPI_PROTOCOL_HOTSPOT_SHIELD, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".northghost.com", "HotspotShield", NDPI_PROTOCOL_HOTSPOT_SHIELD, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".webex.com", "Webex", NDPI_PROTOCOL_WEBEX, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".zoom.us", "Zoom", NDPI_PROTOCOL_ZOOM, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".ocsdomain.com", "OCS", NDPI_PROTOCOL_OCS, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "ocs.fr", "OCS", NDPI_PROTOCOL_OCS, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".ocs.fr", "OCS", NDPI_PROTOCOL_OCS, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".labgency.ws", "OCS", NDPI_PROTOCOL_OCS, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".iflix.com", "IFLIX", NDPI_PROTOCOL_IFLIX, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".app.iflixcorp.com", "IFLIX", NDPI_PROTOCOL_IFLIX, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".images.iflixassets.com", "IFLIX", NDPI_PROTOCOL_IFLIX, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "crl.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "evsecure-ocsp.verisign.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "evsecure-aia.verisign.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "evsecure-crl.verisign.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".omniroot.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".microsoftonline.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".microsoftonline.us", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".office365.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".office.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "office.net", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".msocsp.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".msocdn.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "officeapps.live.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "outlook.live.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "mail.live.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "office.live.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".onenote.", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "cloudflare.com", "Cloudflare", NDPI_PROTOCOL_CLOUDFLARE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "d295hzzivaok4k.cloudfront.net","OpenDNS", NDPI_PROTOCOL_OPENDNS, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".opendns.com", "OpenDNS", NDPI_PROTOCOL_OPENDNS, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + /* https://get.slack.help/hc/en-us/articles/205138367-Troubleshooting-Slack-connection-issues */ + { "slack.com", "Slack", NDPI_PROTOCOL_SLACK, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".slack-msgs.com", "Slack", NDPI_PROTOCOL_SLACK, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "slack-files.com", "Slack", NDPI_PROTOCOL_SLACK, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "slack-imgs.com", "Slack", NDPI_PROTOCOL_SLACK, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".slack-edge.com", "Slack", NDPI_PROTOCOL_SLACK, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".slack-core.com", "Slack", NDPI_PROTOCOL_SLACK, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "slack-redir.net", "Slack", NDPI_PROTOCOL_SLACK, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + /* Detected "slack-assets2.s3-us-west-2.amazonaws.com.". Omitted "*amazonaws.com" CDN */ + { "slack-assets2.s3-", "Slack", NDPI_PROTOCOL_SLACK, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "github.com", "Github", NDPI_PROTOCOL_GITHUB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".github.com", "Github", NDPI_PROTOCOL_GITHUB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "github.io", "Github", NDPI_PROTOCOL_GITHUB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".github.io", "Github", NDPI_PROTOCOL_GITHUB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "githubusercontent.com", "Github", NDPI_PROTOCOL_GITHUB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".githubusercontent.com", "Github", NDPI_PROTOCOL_GITHUB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "gitlab.com", "GitLab", NDPI_PROTOCOL_GITLAB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".gitlab.com", "GitLab", NDPI_PROTOCOL_GITLAB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".gitlab-static.net", "GitLab", NDPI_PROTOCOL_GITLAB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".gitlab.io", "GitLab", NDPI_PROTOCOL_GITLAB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".gitlab.net", "GitLab", NDPI_PROTOCOL_GITLAB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".steampowered.com", "Steam", NDPI_PROTOCOL_STEAM, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "steamcommunity.com", "Steam", NDPI_PROTOCOL_STEAM, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".steamcontent.com", "Steam", NDPI_PROTOCOL_STEAM, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".steamstatic.com", "Steam", NDPI_PROTOCOL_STEAM, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "steamcommunity-a.akamaihd.net", "Steam", NDPI_PROTOCOL_STEAM, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".wechat.com", "WeChat", NDPI_PROTOCOL_WECHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".wechat.org", "WeChat", NDPI_PROTOCOL_WECHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".wechatapp.com", "WeChat", NDPI_PROTOCOL_WECHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".we.chat", "WeChat", NDPI_PROTOCOL_WECHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".wx.", "WeChat", NDPI_PROTOCOL_WECHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".weixin.", "WeChat", NDPI_PROTOCOL_WECHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".mmsns.qpic.cn", "WeChat", NDPI_PROTOCOL_WECHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "dnscrypt.org", "DNScrypt", NDPI_PROTOCOL_DNSCRYPT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "torrent.", "BitTorrent", NDPI_PROTOCOL_BITTORRENT, NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_UNSAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "torrents.", "BitTorrent", NDPI_PROTOCOL_BITTORRENT, NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_UNSAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "torrentz.", "BitTorrent", NDPI_PROTOCOL_BITTORRENT, NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_UNSAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".nintendo.net", "Nintendo", NDPI_PROTOCOL_NINTENDO, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".nintendo.com", "Nintendo", NDPI_PROTOCOL_NINTENDO, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".playstation.net", "Playstation", NDPI_PROTOCOL_PLAYSTATION, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".playstation.com", "Playstation", NDPI_PROTOCOL_PLAYSTATION, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".sonyentertainmentnetwork.com", "Playstation", NDPI_PROTOCOL_PLAYSTATION, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".linkedin.com", "LinkedIn", NDPI_PROTOCOL_LINKEDIN, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".licdn.com", "LinkedIn", NDPI_PROTOCOL_LINKEDIN, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".sndcdn.com", "SoundCloud", NDPI_PROTOCOL_SOUNDCLOUD, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "soundcloud.com", "SoundCloud", NDPI_PROTOCOL_SOUNDCLOUD, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "getrockerbox.com", "SoundCloud", NDPI_PROTOCOL_SOUNDCLOUD, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "web.telegram.org", "Telegram", NDPI_PROTOCOL_TELEGRAM, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "tdesktop.com", "Telegram", NDPI_PROTOCOL_TELEGRAM, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "tupdate.com", "Telegram", NDPI_PROTOCOL_TELEGRAM, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".pastebin.com", "Pastebin", NDPI_PROTOCOL_PASTEBIN, NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "pastebin.com", "Pastebin", NDPI_PROTOCOL_PASTEBIN, NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".ppstream.com", "PPStream", NDPI_PROTOCOL_PPSTREAM, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".pps.tv", "PPStream", NDPI_PROTOCOL_PPSTREAM, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".hulustream.com", "Hulu", NDPI_PROTOCOL_HULU, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "hulu.com", "Hulu", NDPI_PROTOCOL_HULU, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "assetshuluimcom-a.akamaihd.net", "Hulu", NDPI_PROTOCOL_HULU, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "ibhuluimcom-a.akamaihd.net", "Hulu", NDPI_PROTOCOL_HULU, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".huluad.com", "Hulu", NDPI_PROTOCOL_HULU, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".huluim.com", "Hulu", NDPI_PROTOCOL_HULU, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + /* + VidTO streaming service + */ + { ".vidto.me", "VidTO", NDPI_PROTOCOL_PPSTREAM, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".vidto.se", "VidTO", NDPI_PROTOCOL_PPSTREAM, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "snapcraft.io", "UbuntuONE", NDPI_PROTOCOL_UBUNTUONE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "ubuntu.com", "UbuntuONE", NDPI_PROTOCOL_UBUNTUONE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "signal.org", "Signal", NDPI_PROTOCOL_SIGNAL, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "whispersystems.org", "Signal", NDPI_PROTOCOL_SIGNAL, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "musical.ly", "TikTok", NDPI_PROTOCOL_TIKTOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "byteoversea.com", "TikTok", NDPI_PROTOCOL_TIKTOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "p16-tiktok-sign-va-h2.ibyteimg.com", "TikTok", NDPI_PROTOCOL_TIKTOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "p16-tiktok-sg.ibyteimg.com", "TikTok", NDPI_PROTOCOL_TIKTOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "p16-tiktok-va.ibyteimg.com", "TikTok", NDPI_PROTOCOL_TIKTOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "p16-musical-va.ibyteimg.com", "TikTok", NDPI_PROTOCOL_TIKTOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "p16-musical-sg.ibyteimg.com", "TikTok", NDPI_PROTOCOL_TIKTOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "p16-va-tiktok.ibyteimg.com", "TikTok", NDPI_PROTOCOL_TIKTOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "p16-ad-sg.ibyteimg.com", "TikTok", NDPI_PROTOCOL_TIKTOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "p21-ad-sg.ibyteimg.com", "TikTok", NDPI_PROTOCOL_TIKTOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "tiktokcdn.com", "TikTok", NDPI_PROTOCOL_TIKTOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "p16-tiktok-va-h2.ibyteimg.com", "TikTok", NDPI_PROTOCOL_TIKTOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "p16-tiktokcdn-com.akamaized.net", "TikTok", NDPI_PROTOCOL_TIKTOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "p16-va-default.akamaized.net", "TikTok", NDPI_PROTOCOL_TIKTOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "tiktokcdn.liveplay.myqcloud.com", "TikTok", NDPI_PROTOCOL_TIKTOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "musemuse.cn", "TikTok", NDPI_PROTOCOL_TIKTOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "tiktokv.com", "TikTok", NDPI_PROTOCOL_TIKTOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "bytecdn.cn", "TikTok", NDPI_PROTOCOL_TIKTOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "muscdn.com", "TikTok", NDPI_PROTOCOL_TIKTOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "tiktok.com", "TikTok", NDPI_PROTOCOL_TIKTOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "byted.org", "TikTok", NDPI_PROTOCOL_TIKTOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".tik-tokcdn.com", "TikTok", NDPI_PROTOCOL_TIKTOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "v19.byteicdn.com", "TikTok", NDPI_PROTOCOL_TIKTOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "v16m.byteicdn.com", "TikTok", NDPI_PROTOCOL_TIKTOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".tiktokcdn-us.com", "TikTok", NDPI_PROTOCOL_TIKTOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "brasilbandalarga.com.br", "EAQ", NDPI_PROTOCOL_EAQ, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".eaqbr.com.br", "EAQ", NDPI_PROTOCOL_EAQ, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".net.anydesk.com", "AnyDesk", NDPI_PROTOCOL_ANYDESK, NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "discordapp.com", "Discord", NDPI_PROTOCOL_DISCORD, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "discordapp.net", "Discord", NDPI_PROTOCOL_DISCORD, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "discord.com", "Discord", NDPI_PROTOCOL_DISCORD, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "discord.gg", "Discord", NDPI_PROTOCOL_DISCORD, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "discord.media", "Discord", NDPI_PROTOCOL_DISCORD, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + /* + Amazon Alexa services + */ + { "alexa.amazon.com", "AmazonAlexa", NDPI_PROTOCOL_AMAZON_ALEXA, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "amazonalexa.com", "AmazonAlexa", NDPI_PROTOCOL_AMAZON_ALEXA, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "avs-alexa-1-na.amazon.com", "AmazonAlexa", NDPI_PROTOCOL_AMAZON_ALEXA, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "avs-alexa-2-na.amazon.com", "AmazonAlexa", NDPI_PROTOCOL_AMAZON_ALEXA, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "avs-alexa-3-na.amazon.com", "AmazonAlexa", NDPI_PROTOCOL_AMAZON_ALEXA, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "avs-alexa-4-na.amazon.com", "AmazonAlexa", NDPI_PROTOCOL_AMAZON_ALEXA, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "avs-alexa-5-na.amazon.com", "AmazonAlexa", NDPI_PROTOCOL_AMAZON_ALEXA, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "avs-alexa-6-na.amazon.com", "AmazonAlexa", NDPI_PROTOCOL_AMAZON_ALEXA, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "avs-alexa-7-na.amazon.com", "AmazonAlexa", NDPI_PROTOCOL_AMAZON_ALEXA, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "avs-alexa-8-na.amazon.com", "AmazonAlexa", NDPI_PROTOCOL_AMAZON_ALEXA, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "avs-alexa-9-na.amazon.com", "AmazonAlexa", NDPI_PROTOCOL_AMAZON_ALEXA, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "avs-alexa-10-na.amazon.com", "AmazonAlexa", NDPI_PROTOCOL_AMAZON_ALEXA, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "avs-alexa-11-na.amazon.com", "AmazonAlexa", NDPI_PROTOCOL_AMAZON_ALEXA, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "avs-alexa-12-na.amazon.com", "AmazonAlexa", NDPI_PROTOCOL_AMAZON_ALEXA, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "avs-alexa-13-na.amazon.com", "AmazonAlexa", NDPI_PROTOCOL_AMAZON_ALEXA, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "avs-alexa-14-na.amazon.com", "AmazonAlexa", NDPI_PROTOCOL_AMAZON_ALEXA, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "avs-alexa-15-na.amazon.com", "AmazonAlexa", NDPI_PROTOCOL_AMAZON_ALEXA, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "avs-alexa-16-na.amazon.com", "AmazonAlexa", NDPI_PROTOCOL_AMAZON_ALEXA, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "avs-alexa-17-na.amazon.com", "AmazonAlexa", NDPI_PROTOCOL_AMAZON_ALEXA, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "avs-alexa-18-na.amazon.com", "AmazonAlexa", NDPI_PROTOCOL_AMAZON_ALEXA, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "avs-alexa-19-na.amazon.com", "AmazonAlexa", NDPI_PROTOCOL_AMAZON_ALEXA, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + /* + Tumblr social network service + */ + { "tumblr.com", "Tumblr", NDPI_PROTOCOL_TUMBLR, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + /* + Reddit social network service + */ + { ".redd.it", "Reddit", NDPI_PROTOCOL_REDDIT, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".reddit.com", "Reddit", NDPI_PROTOCOL_REDDIT, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".redditmedia.com", "Reddit", NDPI_PROTOCOL_REDDIT, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".redditstatic.com", "Reddit", NDPI_PROTOCOL_REDDIT, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".reddit.map.fastly.net", "Reddit", NDPI_PROTOCOL_REDDIT, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + /* + Pinterest social network service + */ + { ".pinimg.com", "Pinterest", NDPI_PROTOCOL_PINTEREST, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "pinterest.global.map.fastly.net", "Pinterest", NDPI_PROTOCOL_PINTEREST, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "pinterest.map.fastly.net", "Pinterest", NDPI_PROTOCOL_PINTEREST, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "pinterest.", "Pinterest", NDPI_PROTOCOL_PINTEREST, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "pinterest.co.", "Pinterest", NDPI_PROTOCOL_PINTEREST, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + /* + Disney's DisneyPlus streaming service + */ + { "dssott.com.akamaized.net", "DisneyPlus", NDPI_PROTOCOL_DISNEYPLUS, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "disney-plus.com", "DisneyPlus", NDPI_PROTOCOL_DISNEYPLUS, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "disney-plus.net", "DisneyPlus", NDPI_PROTOCOL_DISNEYPLUS, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "disneyplus.com", "DisneyPlus", NDPI_PROTOCOL_DISNEYPLUS, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "disneyplus.net", "DisneyPlus", NDPI_PROTOCOL_DISNEYPLUS, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dssott.com", "DisneyPlus", NDPI_PROTOCOL_DISNEYPLUS, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "disneyplus.com.ssl.sc.omtrdc.net", "DisneyPlus", NDPI_PROTOCOL_DISNEYPLUS, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".bamgrid.com", "DisneyPlus", NDPI_PROTOCOL_DISNEYPLUS, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".registerdisney.go.com", "DisneyPlus", NDPI_PROTOCOL_DISNEYPLUS, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + /* + Likee app + */ + { ".like.video", "Likee", NDPI_PROTOCOL_LIKEE, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".likee.video", "Likee", NDPI_PROTOCOL_LIKEE, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".likee.com", "Likee", NDPI_PROTOCOL_LIKEE, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".likeevideo.com", "Likee", NDPI_PROTOCOL_LIKEE, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".like-video.com", "Likee", NDPI_PROTOCOL_LIKEE, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".likeimo.tech", "Likee", NDPI_PROTOCOL_LIKEE, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".liketech.tech", "Likee", NDPI_PROTOCOL_LIKEE, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "bstream.hzmklvdieo.com", "Likee", NDPI_PROTOCOL_LIKEE, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "bstream.kzhi.tech", "Likee", NDPI_PROTOCOL_LIKEE, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + /* + Activision + */ + { "activision.", "Activision", NDPI_PROTOCOL_ACTIVISION, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".activision.com", "Activision", NDPI_PROTOCOL_ACTIVISION, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + /* Vimeo */ + { "vimeo.com", "Vimeo", NDPI_PROTOCOL_VIMEO, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".vimeo.com", "Vimeo", NDPI_PROTOCOL_VIMEO, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".vimeocdn.com", "Vimeo", NDPI_PROTOCOL_VIMEO, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".crashlytics.com", "Crashlytics", NDPI_PROTOCOL_CRASHLYSTICS, NDPI_PROTOCOL_CATEGORY_DATA_TRANSFER, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".fuze.com", "Fuze", NDPI_PROTOCOL_FUZE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".fuzemeeting.com", "Fuze", NDPI_PROTOCOL_FUZE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".thinkingphones.com", "Fuze", NDPI_PROTOCOL_FUZE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "alibaba.com", "Alibaba", NDPI_PROTOCOL_ALIBABA, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".alibaba.com", "Alibaba", NDPI_PROTOCOL_ALIBABA, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".aliapp.org", "Alibaba", NDPI_PROTOCOL_ALIBABA, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".alicdn.com", "Alibaba", NDPI_PROTOCOL_ALIBABA, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".aliyuncs.com", "Alibaba", NDPI_PROTOCOL_ALIBABA, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".mmstat.com", "Alibaba", NDPI_PROTOCOL_ALIBABA, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "mask.icloud.com", "iCloudPrivateRelay", NDPI_PROTOCOL_ICLOUD_PRIVATE_RELAY, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "mask-h2.icloud.com", "iCloudPrivateRelay", NDPI_PROTOCOL_ICLOUD_PRIVATE_RELAY, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "mask-api.icloud.com", "iCloudPrivateRelay", NDPI_PROTOCOL_ICLOUD_PRIVATE_RELAY, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "badoo.com", "Badoo", NDPI_PROTOCOL_BADOO, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "badoocdn.com", "Badoo", NDPI_PROTOCOL_BADOO, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".badoo.app", "Badoo", NDPI_PROTOCOL_BADOO, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "accuweather.com", "AccuWeather", NDPI_PROTOCOL_ACCUWEATHER, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".accuweather.com", "AccuWeather", NDPI_PROTOCOL_ACCUWEATHER, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "zattoo.com", "Zattoo", NDPI_PROTOCOL_ZATTOO, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".zattoo.com", "Zattoo", NDPI_PROTOCOL_ZATTOO, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "zattosecurehd2-f.akamaihd.net", "Zattoo", NDPI_PROTOCOL_ZATTOO, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "classroom.google.com", "GoogleClassroom", NDPI_PROTOCOL_GOOGLE_CLASSROOM, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "fortinet.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "sophos.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "sophosxl.net", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "bitdefender.net", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "kaspersky.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "kaspersky-labs.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "mcafee.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "symantec.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "norton.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "f-secure.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "avira.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "pandasecurity.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "avast.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".avcdn.net", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "malwarebytes.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "trendmicro.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".eset.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".e5.sk", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "bullguard.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "paloaltonetworks.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "crowdstrike.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "checkpoint.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "darktrace.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "rapid7.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "barracuda.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "sonicwall.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".rsa.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + /* Popular antispam/reputation web sites */ + { "spamhaus.org", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "surbl.org", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "support-intelligence.net", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "mailspike.net", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "spamcop.net", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "rspamd.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "habeas.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "bondedsender.org", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "sorbs.net", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "surriel.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "spameatingmonkey.net", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "senderscore.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "ixhash.net", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "esvarbl.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".dnsbl.", /* www.dnsbl.info */ "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "iqiyi.com", "PPStream", NDPI_PROTOCOL_PPSTREAM, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "iqiyipic.com", "PPStream", NDPI_PROTOCOL_PPSTREAM, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "iq.com", "PPStream", NDPI_PROTOCOL_PPSTREAM, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "qy.net", "PPStream", NDPI_PROTOCOL_PPSTREAM, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "qiyipic.com", "PPStream", NDPI_PROTOCOL_PPSTREAM, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "ppstream.com", "PPStream", NDPI_PROTOCOL_PPSTREAM, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "pluralsight.com", "Pluralsight", NDPI_PROTOCOL_PLURALSIGHT, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "pluralsight2.imgix.net", "Pluralsight", NDPI_PROTOCOL_PLURALSIGHT, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "pluralsight.imgix.net", "Pluralsight", NDPI_PROTOCOL_PLURALSIGHT, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "zn6qzq6caaucudesr-pluralsight.siteintercept.qualtrics.com", "Pluralsight", NDPI_PROTOCOL_PLURALSIGHT, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "znejw6fzxpoc4z2sj-pluralsight.siteintercept.qualtrics.com", "Pluralsight", NDPI_PROTOCOL_PLURALSIGHT, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "ip-video-course-exercise-files-us-west-2.s3.us-west-2.amazonaws.com", "Pluralsight", NDPI_PROTOCOL_PLURALSIGHT, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "pluralsight.demdex.net", "Pluralsight", NDPI_PROTOCOL_PLURALSIGHT, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "pluralsight.sc.omtrdc.net", "Pluralsight", NDPI_PROTOCOL_PLURALSIGHT, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "pluralsight.hb.omtrdc.net", "Pluralsight", NDPI_PROTOCOL_PLURALSIGHT, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "pluralsight.tt.omtrdc.net", "Pluralsight", NDPI_PROTOCOL_PLURALSIGHT, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".xiaomi.com", "Xiaomi", NDPI_PROTOCOL_XIAOMI, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".xiaomi.net", "Xiaomi", NDPI_PROTOCOL_XIAOMI, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".mi.com", "Xiaomi", NDPI_PROTOCOL_XIAOMI, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".miui.com", "Xiaomi", NDPI_PROTOCOL_XIAOMI, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "softether.org", "Softether", NDPI_PROTOCOL_SOFTETHER, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "softether-network.net", "Softether", NDPI_PROTOCOL_SOFTETHER, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "dazn.com", "Dazn", NDPI_PROTOCOL_DAZN, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "indazn.com", "Dazn", NDPI_PROTOCOL_DAZN, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dazn-api.com", "Dazn", NDPI_PROTOCOL_DAZN, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "daznedge.net", "Dazn", NDPI_PROTOCOL_DAZN, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dcavoddazn.akamaized.net", "Dazn", NDPI_PROTOCOL_DAZN, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "goto.com", "GoTo", NDPI_PROTOCOL_GOTO, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "getgo.com", "GoTo", NDPI_PROTOCOL_GOTO, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "gotomeeting.com", "GoTo", NDPI_PROTOCOL_GOTO, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "expertcity.com", "GoTo", NDPI_PROTOCOL_GOTO, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "goto-rtc.com", "GoTo", NDPI_PROTOCOL_GOTO, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "logmeininc.com", "GoTo", NDPI_PROTOCOL_GOTO, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "gotowebinar.com", "GoTo", NDPI_PROTOCOL_GOTO, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "gototraining.com", "GoTo", NDPI_PROTOCOL_GOTO, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "launchdarkly.com", "GoTo", NDPI_PROTOCOL_GOTO, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "api-pub.mltree.net", "GoTo", NDPI_PROTOCOL_GOTO, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "getgocdn.com", "GoTo", NDPI_PROTOCOL_GOTO, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "cdngetgo.com", "GoTo", NDPI_PROTOCOL_GOTO, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "gotomeet.at", "GoTo", NDPI_PROTOCOL_GOTO, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "gotomeet.me", "GoTo", NDPI_PROTOCOL_GOTO, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "getgoservices.com", "GoTo", NDPI_PROTOCOL_GOTO, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "getgoservices.net", "GoTo", NDPI_PROTOCOL_GOTO, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "gotoconference.com", "GoTo", NDPI_PROTOCOL_GOTO, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "gotoroom.com", "GoTo", NDPI_PROTOCOL_GOTO, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "joinwebinar.com", "GoTo", NDPI_PROTOCOL_GOTO, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "1kxun.com", "1kxun", NDPI_PROTOCOL_1KXUN, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "1kxun.mobi", "1kxun", NDPI_PROTOCOL_1KXUN, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "tunnelbear.com", "TunnelBear", NDPI_PROTOCOL_TUNNELBEAR, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "polargrizzly.com", "TunnelBear", NDPI_PROTOCOL_TUNNELBEAR, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "cloudflareclient.com", "CloudflareWarp", NDPI_PROTOCOL_CLOUDFLARE_WARP, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "ocsp.digicert.com", "OCSP", NDPI_PROTOCOL_OCSP, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "ocsp.godaddy.com", "OCSP", NDPI_PROTOCOL_OCSP, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "ocsp.sectigo.com", "OCSP", NDPI_PROTOCOL_OCSP, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "ocsp.quovadisglobal.com", "OCSP", NDPI_PROTOCOL_OCSP, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "psiphon3.net", "Psiphon", NDPI_PROTOCOL_PSIPHON, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".psiphon3.net", "Psiphon", NDPI_PROTOCOL_PSIPHON, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "cachefly.com", "CacheFly", NDPI_PROTOCOL_CACHEFLY, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "discovery.syncthing.net", "Syncthing", NDPI_PROTOCOL_SYNCTHING, NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".line-apps.com", "Line", NDPI_PROTOCOL_LINE, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".line-scdn.net", "Line", NDPI_PROTOCOL_LINE, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "line.me", "Line", NDPI_PROTOCOL_LINE, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "line-website.com", "Line", NDPI_PROTOCOL_LINE, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".linecorp.com", "Line", NDPI_PROTOCOL_LINE, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { ".line.naver.jp", "Line", NDPI_PROTOCOL_LINE, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "tv.apple.com", "AppleTVPlus", NDPI_PROTOCOL_APPLETVPLUS, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "tv.g.apple.com", "AppleTVPlus", NDPI_PROTOCOL_APPLETVPLUS, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "tv.v.aaplimg.com", "AppleTVPlus", NDPI_PROTOCOL_APPLETVPLUS, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "directv.com", "DirecTV", NDPI_PROTOCOL_DIRECTV, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "directvnow.com", "DirecTV", NDPI_PROTOCOL_DIRECTV, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dtvbb.tv", "DirecTV", NDPI_PROTOCOL_DIRECTV, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dtvce.com", "DirecTV", NDPI_PROTOCOL_DIRECTV, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "hbo.com", "HBO", NDPI_PROTOCOL_HBO, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "hbogo.co.th", "HBO", NDPI_PROTOCOL_HBO, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "hbogo.com", "HBO", NDPI_PROTOCOL_HBO, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "hbogo.eu", "HBO", NDPI_PROTOCOL_HBO, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "hbogoasia.com", "HBO", NDPI_PROTOCOL_HBO, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "hbogoasia.id", "HBO", NDPI_PROTOCOL_HBO, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "hbogoasia.ph", "HBO", NDPI_PROTOCOL_HBO, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "hbomax.com", "HBO", NDPI_PROTOCOL_HBO, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "hbomaxcdn.com", "HBO", NDPI_PROTOCOL_HBO, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "hbonow.com", "HBO", NDPI_PROTOCOL_HBO, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "maxgo.com", "HBO", NDPI_PROTOCOL_HBO, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "vudu.com", "Vudu", NDPI_PROTOCOL_VUDU, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".showtime.com", "Showtime", NDPI_PROTOCOL_SHOWTIME, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "dai.ly", "Dailymotion", NDPI_PROTOCOL_DAILYMOTION, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dailymotion.com", "Dailymotion", NDPI_PROTOCOL_DAILYMOTION, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dailymotionadvertising.com", "Dailymotion", NDPI_PROTOCOL_DAILYMOTION, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dmcdn.net", "Dailymotion", NDPI_PROTOCOL_DAILYMOTION, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dmxleo.com", "Dailymotion", NDPI_PROTOCOL_DAILYMOTION, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".livestream.com", "Livestream", NDPI_PROTOCOL_LIVESTREAM, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "v.qq.com", "Tencentvideo", NDPI_PROTOCOL_TENCENTVIDEO, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "937theriver.com", "IHeartRadio", NDPI_PROTOCOL_IHEARTRADIO, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "iheart.com", "IHeartRadio", NDPI_PROTOCOL_IHEARTRADIO, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "iheart.mx", "IHeartRadio", NDPI_PROTOCOL_IHEARTRADIO, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "iheartmedia.com", "IHeartRadio", NDPI_PROTOCOL_IHEARTRADIO, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "iheartradio.ca", "IHeartRadio", NDPI_PROTOCOL_IHEARTRADIO, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "iheartradio.co.nz", "IHeartRadio", NDPI_PROTOCOL_IHEARTRADIO, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "iheartradio.com", "IHeartRadio", NDPI_PROTOCOL_IHEARTRADIO, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "ihrdev.com", "IHeartRadio", NDPI_PROTOCOL_IHEARTRADIO, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "ihrhls.com", "IHeartRadio", NDPI_PROTOCOL_IHEARTRADIO, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "ihrint.com", "IHeartRadio", NDPI_PROTOCOL_IHEARTRADIO, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "ihrstage.com", "IHeartRadio", NDPI_PROTOCOL_IHEARTRADIO, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { ".tidal.com", "Tidal", NDPI_PROTOCOL_TIDAL, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "radiotime.com", "TuneIn", NDPI_PROTOCOL_TUNEIN, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "tunein.com", "TuneIn", NDPI_PROTOCOL_TUNEIN, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "tunenet.io", "TuneIn", NDPI_PROTOCOL_TUNEIN, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "siriusxm.ca", "SiriusXMRadio", NDPI_PROTOCOL_SIRIUSXMRADIO, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "siriusxm.com", "SiriusXMRadio", NDPI_PROTOCOL_SIRIUSXMRADIO, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "tailscale.com", "Tailscale", NDPI_PROTOCOL_TAILSCALE, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + +#ifdef CUSTOM_NDPI_PROTOCOLS +#include "../../../nDPI-custom/custom_ndpi_content_match_host_match.c.inc" +#endif + + { NULL, NULL, NDPI_PROTOCOL_UNKNOWN, NDPI_PROTOCOL_CATEGORY_UNSPECIFIED, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL } + }; + +/* ******************************************************************** */ + +static ndpi_tls_cert_name_match tls_certificate_match [] = { + { "CN=AnyDesk Client", NDPI_PROTOCOL_ANYDESK }, + { "O=philandro Software GmbH", NDPI_PROTOCOL_ANYDESK }, + { "O=Kakao", NDPI_PROTOCOL_KAKAOTALK }, + { "O=ntop.org", NDPI_PROTOCOL_NTOP }, + { "O=Netflix", NDPI_PROTOCOL_NETFLIX }, + { "O=Cloudflare", NDPI_PROTOCOL_CLOUDFLARE }, + { "CN=simplednscrypt.org", NDPI_PROTOCOL_DNSCRYPT }, + { "CN=*.gateway.messenger.live.com", NDPI_PROTOCOL_SKYPE_TEAMS }, + { "OU=FortiGate", NDPI_PROTOCOL_FORTICLIENT }, + { "CN=www.update.microsoft.com", NDPI_PROTOCOL_WINDOWS_UPDATE }, + { "CN=*.tunnelbear.com", NDPI_PROTOCOL_TUNNELBEAR }, + { "CN=cloudflareclient.com", NDPI_PROTOCOL_CLOUDFLARE_WARP }, + + { NULL, 0 } +}; + +/* ******************************************************************** */ + +/* + IMPORTANT + + Do NOT pur here strings that overlap with string in host_match[] + specified above +*/ + +static ndpi_category_match category_match[] = { + { ".edgecastcdn.net", NDPI_PROTOCOL_CATEGORY_MEDIA }, + { ".hwcdn.net", NDPI_PROTOCOL_CATEGORY_MEDIA }, + { ".llnwd.net", NDPI_PROTOCOL_CATEGORY_MEDIA }, + { ".llns.net", NDPI_PROTOCOL_CATEGORY_MEDIA }, + { ".fastly.net", NDPI_PROTOCOL_CATEGORY_MEDIA }, + { ".vultr.com", NDPI_PROTOCOL_CATEGORY_CLOUD }, + { "baidu.com", NDPI_PROTOCOL_CATEGORY_WEB }, + { "icq.com", NDPI_PROTOCOL_CATEGORY_CHAT }, + { "quickplay.com", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { ".71.am", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { "tcad.wedolook.com", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { ".rapidvideo.com", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { ".playercdn.net", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { "showmax.com", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { "showmax.akamaized.net", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { "skyq.sky.com", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { "iptv.sky.", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { "pcdn.skycdn.", NDPI_PROTOCOL_CATEGORY_STREAMING }, + + /* https://success.tanaza.com/s/article/How-Automatic-Detection-of-Captive-Portal-works */ + { "thinkdifferent.us", NDPI_PROTOCOL_CATEGORY_CONNECTIVITY_CHECK }, + { "airport.us", NDPI_PROTOCOL_CATEGORY_CONNECTIVITY_CHECK }, + { "detectportal.firefox.com", NDPI_PROTOCOL_CATEGORY_CONNECTIVITY_CHECK }, + { "connectivitycheck.platform.hicloud.com", NDPI_PROTOCOL_CATEGORY_CONNECTIVITY_CHECK }, + + /* Hulu Streaming services AS23286 */ + { "8.28.124.0/24", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { "8.28.125.0/24", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { "199.200.50.0/23", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { "199.200.51.0/24", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { "199.60.116.0/24", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { "208.91.158.0/23", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { "209.249.186.0/24", NDPI_PROTOCOL_CATEGORY_STREAMING }, + + /* Disney Streaming services AS11251 */ + { "8.4.4.0/24", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { "8.5.5.0/24", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { "8.33.30.0/24", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { "63.116.222.0/24", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { "63.116.223.0/24", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { "139.104.192.0/24", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { "139.104.193.0/24", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { "139.104.200.0/24", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { "139.104.201.0/24", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { "139.104.202.0/24", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { "139.104.203.0/24", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { "139.104.204.0/24", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { "139.104.205.0/24", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { "139.104.206.0/24", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { "139.104.207.0/24", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { "139.104.208.0/24", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { "139.104.209.0/24", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { "139.104.212.0/24", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { "139.104.216.0/24", NDPI_PROTOCOL_CATEGORY_STREAMING }, + { "139.104.217.0/24", NDPI_PROTOCOL_CATEGORY_STREAMING }, + + /* + ADS and tracking + */ + /* Smaato is a digital ad tech platform and ad server */ + { ".smaato.net", CUSTOM_CATEGORY_ADVERTISEMENT }, + { ".smaato.com", CUSTOM_CATEGORY_ADVERTISEMENT }, + /* MoPub, a Twitter company, provides monetization solutions */ + { ".mopub.com", CUSTOM_CATEGORY_ADVERTISEMENT }, + /* AppsFlyer is a SaaS mobile marketing analytics and attribution platform */ + { ".appsflyer.com", CUSTOM_CATEGORY_ADVERTISEMENT }, + /* Adjust is the mobile marketing platform for marketers around the world */ + { ".adjust.com", CUSTOM_CATEGORY_ADVERTISEMENT }, + /* Helpshift enables brands to deliver superior digital customer service digital channels*/ + { ".helpshift.com", CUSTOM_CATEGORY_ADVERTISEMENT }, + /* AppLovin is a mobile marketing platform */ + { ".applovin.com", CUSTOM_CATEGORY_ADVERTISEMENT }, + /* AdRight is an innovative online advertising network */ + { ".adright.com", CUSTOM_CATEGORY_ADVERTISEMENT }, + /* MGID: Native Visitors Acquisition for Advertisers */ + { ".mgid.com", CUSTOM_CATEGORY_ADVERTISEMENT }, + /* InMobi is the world's leading mobile marketing and advertising platform provider */ + { ".inmobi.com", CUSTOM_CATEGORY_ADVERTISEMENT }, + /* AdColony - Elevating mobile advertising */ + { ".adcolony.com", CUSTOM_CATEGORY_ADVERTISEMENT }, + /* Supersonicads: App monetization done right */ + { ".supersonicads.com", CUSTOM_CATEGORY_ADVERTISEMENT }, + /* Criteo is an advertising company that provides online display advertisements */ + { ".criteo.net", CUSTOM_CATEGORY_ADVERTISEMENT }, + { ".criteo.com", CUSTOM_CATEGORY_ADVERTISEMENT }, + /* Flurry is an American mobile analytics, monetization, and advertising company */ + { ".flurry.com", CUSTOM_CATEGORY_ADVERTISEMENT }, + /* Taboola is the world's leading discovery & native advertising platform */ + { ".taboola.com", CUSTOM_CATEGORY_ADVERTISEMENT }, + /* Market research community, a leading global market research effort that studies and reports on Internet trends and behavior. */ + { ".scorecardresearch.com", CUSTOM_CATEGORY_ADVERTISEMENT }, + /* Magnite Inc. (formerly Rubicon Project) is an American online advertising technology firm */ + { ".rubiconproject.com", CUSTOM_CATEGORY_ADVERTISEMENT }, + /* Adnxs.com is run by AppNexus, a company that provides technology, data and analytics to help companies buy and sell online display advertising */ + { ".adnxs.com", CUSTOM_CATEGORY_ADVERTISEMENT }, + /* PubMatic, Inc. is a company that develops and implements online advertising software */ + { ".pubmatic.com", CUSTOM_CATEGORY_ADVERTISEMENT }, + /* “OpenX’s unified monetization platform */ + { ".openx.net", CUSTOM_CATEGORY_ADVERTISEMENT }, + /* AddThis share buttons, targeting tools and content recommendations help you get more likes, shares and followers */ + { ".addthis.com", CUSTOM_CATEGORY_ADVERTISEMENT }, + { ".addthisedge.com", CUSTOM_CATEGORY_ADVERTISEMENT }, + /* NEXAGE offers a mobile advertising platform that provides private and public exchanges */ + { ".nexage.com", CUSTOM_CATEGORY_ADVERTISEMENT }, + /* RadiumOne (formerly GWallet) is a digital advertising company */ + { ".gwallet.com", CUSTOM_CATEGORY_ADVERTISEMENT }, + + { NULL, 0 } +}; + diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_dga_match.h b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_dga_match.h new file mode 100644 index 0000000000..6d8dc6aeea --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_dga_match.h @@ -0,0 +1,115 @@ +/* + * ndpi_dga_match.c.inc + * + * Copyright (C) 2011-22 - ntop.org + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ******************************************************************** */ + +/* + Tor + The tor protocol uses SSL to contact peers so it could be exchanged with + standard SSL. However the host names such as + + - www.fgd2iwya7vinfutj5wq5we.com + - www.qbtxzhetq4s2f.com + - www.fgd2iwya7vinfutj5wq5we.net + + See also DGA (Domain Generation Algorithm) + + In essence www..com|net + + To do things properly we should check if host name in the certificate + exists or if the IP address of the SSL peer resolves to a name. Unfortunately + for performance reasons we can't afford to do a DNS lookup in nDPI (however apps + can do it if possible) and thus we have created a heuristic algorithm that tries + to check the host name (in the SSL certificate) to see if it looks like a + random name or a real name. We cannot use a dictionary (how can the kernel read a file?) + and this we use bigrams distribution to decide if the string looks like a + word or just random chars. + + http://www3.nd.edu/~busiforc/handouts/cryptography/Letter%20Frequencies.html + + DGA Datasets + - https://data.netlab.360.com/dga/ + - https://github.com/baderj/domain_generation_algorithms +*/ + +static const char *ndpi_en_bigrams[] = { + "aa", "ba", "ca", "da", "ea", "fa", "ga", "ha", "ia", "ja", "ka", "la", "ma", "na", "oa", "pa", "qa", + "ra", "sa", "ta", "ua", "va", "wa", "xa", "ya", "za", "ab", "bb", "db", "eb", "fb", "gb", "hb", "ib", + "kb", "lb", "mb", "nb", "ob", "pb", "rb", "sb", "tb", "ub", "wb", "yb", "ac", "bc", "cc", "dc", "ec", + "fc", "gc", "hc", "ic", "kc", "lc", "mc", "nc", "oc", "pc", "rc", "sc", "tc", "uc", "wc", "xc", "yc", + "ad", "bd", "cd", "dd", "ed", "fd", "gd", "hd", "id", "kd", "ld", "md", "nd", "od", "pd", "rd", "sd", + "td", "ud", "wd", "xd", "yd", "zd", "ae", "be", "ce", "de", "ee", "fe", "ge", "he", "ie", "je", "ke", + "le", "me", "ne", "oe", "pe", "re", "se", "te", "ue", "ve", "we", "xe", "ye", "ze", "af", "bf", "df", + "ef", "ff", "gf", "hf", "if", "kf", "lf", "mf", "nf", "of", "pf", "rf", "sf", "tf", "uf", "wf", "xf", + "yf", "zf", "ag", "bg", "dg", "eg", "fg", "gg", "hg", "ig", "kg", "lg", "ng", "og", "pg", "rg", "sg", + "tg", "ug", "wg", "yg", "ah", "bh", "ch", "dh", "eh", "fh", "gh", "hh", "ih", "kh", "lh", "mh", "nh", + "oh", "ph", "rh", "sh", "th", "uh", "wh", "xh", "yh", "ai", "bi", "ci", "di", "ei", "fi", "gi", "hi", + "ii", "ji", "ki", "li", "mi", "ni", "oi", "pi", "qi", "ri", "si", "ti", "ui", "vi", "wi", "xi", "yi", + "zi", "aj", "bj", "dj", "ej", "fj", "gj", "hj", "ij", "jj", "kj", "lj", "nj", "oj", "pj", "rj", "sj", + "tj", "uj", "wj", "yj", "ak", "ck", "dk", "ek", "gk", "ik", "kk", "lk", "mk", "nk", "ok", "pk", "rk", + "sk", "tk", "uk", "wk", "yk", "zk", "al", "bl", "cl", "dl", "el", "fl", "gl", "hl", "il", "kl", "ll", + "ml", "nl", "ol", "pl", "rl", "sl", "tl", "ul", "vl", "wl", "xl", "yl", "zl", "am", "bm", "cm", "dm", + "em", "fm", "gm", "hm", "im", "km", "lm", "mm", "nm", "om", "pm", "rm", "sm", "tm", "um", "wm", "xm", + "ym", "zm", "an", "bn", "cn", "dn", "en", "fn", "gn", "hn", "in", "kn", "ln", "mn", "nn", "on", "pn", + "rn", "sn", "tn", "un", "wn", "xn", "yn", "ao", "bo", "co", "do", "eo", "fo", "go", "ho", "io", "jo", + "ko", "lo", "mo", "no", "oo", "po", "ro", "so", "to", "uo", "vo", "wo", "xo", "yo", "zo", "ap", "bp", + "dp", "ep", "fp", "gp", "hp", "ip", "kp", "lp", "mp", "np", "op", "pp", "rp", "sp", "tp", "up", "wp", + "xp", "yp", "zp", "aq", "cq", "dq", "eq", "hq", "iq", "nq", "oq", "qq", "rq", "sq", "uq", "xq", "ar", + "br", "cr", "dr", "er", "fr", "gr", "hr", "ir", "kr", "lr", "mr", "nr", "or", "pr", "rr", "sr", "tr", + "ur", "vr", "wr", "xr", "yr", "as", "bs", "cs", "ds", "es", "fs", "gs", "hs", "is", "ks", "ls", "ms", + "ns", "os", "ps", "rs", "ss", "ts", "us", "vs", "ws", "xs", "ys", "at", "bt", "ct", "dt", "et", "ft", + "gt", "ht", "it", "kt", "lt", "mt", "nt", "ot", "pt", "rt", "st", "tt", "ut", "wt", "xt", "yt", "zt", + "au", "bu", "cu", "du", "eu", "fu", "gu", "hu", "iu", "ju", "ku", "lu", "mu", "nu", "ou", "pu", "qu", + "ru", "su", "tu", "uu", "vu", "wu", "xu", "yu", "zu", "av", "bv", "dv", "ev", "iv", "lv", "mv", "nv", + "ov", "rv", "sv", "tv", "uv", "vv", "zv", "aw", "bw", "dw", "ew", "fw", "gw", "hw", "iw", "kw", "lw", + "mw", "nw", "ow", "pw", "rw", "sw", "tw", "uw", "ww", "xw", "yw", "zw", "ax", "ex", "ix", "nx", "ox", + "rx", "ux", /* "xx", */ "yx", "ay", "by", "cy", "dy", "ey", "fy", "gy", "hy", "ky", "ly", "my", "ny", "oy", + "py", "ry", "sy", "ty", "uy", "vy", "wy", "xy", "yy", "zy", "az", "bz", "cz", "dz", "ez", "gz", "iz", + "lz", "nz", "oz", "pz", "rz", "tz", "uz", "zz", + NULL }; + +/* ******************************************************************** */ + +/* http://practicalcryptography.com/media/cryptanalysis/files/english_trigrams.txt.zip */ +/* Top EN trigrams */ +static const char *ndpi_en_trigrams[] = { +"the", "and", "ing", "ent", "ion", "her", "for", "tha", "nth", "int", "ere", "tio", "ter", "est", "ers", "ati", "hat", "ate", "all", "eth", "hes", "ver", "his", "oft", "ith", "fth", "sth", "oth", "res", "ont", "dth", "are", "rea", "ear", "was", "sin", "sto", "tth", "sta", "thi", "tin", "ted", "ons", "edt", "wit", "san", "din", "ort", "con", "rth", "eve", "eco", "era", "ist", "ngt", "ast", "ill", "com", "ore", "ive", "nce", "one", "edi", "pro", "ess", "out", "ein", "att", "men", "hec", "esa", "hen", "ina", "eri", "ert", "ame", "iti", "ome", "son", "art", "man", "ean", "ona", "eof", "tor", "hea", "ran", "rin", "ine", "eda", "nto", "ave", "nin", "ove", "oun", "ain", "ant", "str", "eto", "hem", "sof", "per", "nde", "ste", "nte", "eas", "dto", "our", "red", "rom", "tof", "ght", "tot", "ese", "cha", "ica", "hei", "hin", "ide", "ndt", "han", "tan", "lin", "not", "der", "ect", "tra", "igh", "fro", "eat", "sti", "hep", "ndi", "ins", "she", "nal", "pla", "als", "een", "nti", "you", "lan", "und", "nda", "rat", "lea", "can", "has", "nds", "nga", "hel", "hed", "inc", "use", "esi", "gth", "asa", "het", "nts", "hav", "hew", "tho", "but", "nan", "ass", "hef", "ies", "ret", "end", "par", "wer", "cti", "ren", "rec", "cal", "its", "ree", "ene", "rst", "eal", "ana", "nst", "cou", "tur", "min", "ity", "yth", "hey", "eca", "oul", "lle", "ard", "rou", "anc", "ost", "pre", "age", "efo", "les", "ssi", "ema", "eso", "tat", "ath", "wor", "ust", "heb", "ewa", "sho", "ind", "sed", "hou", "lly", "uld", "ase", "ure", "ono", "ele", "enc", "nat", "ead", "whe", "ell", "ble", "kin", "ans", "tic", "ali", "sco", "ero", "whi", "ces", "own", "nta", "act", "ber", "ven", "tim", "don", "dan", "ose", "ice", "isa", "ton", "den", "ngs", "ugh", "nes", "lat", "tal", "edo", "ten", "ime", "eme", "ack", "tes", "ple", "ous", "off", "tto", "chi", "ani", "orm", "ned", "ens", "sha", "mor", "iss", "ite", "nge", "tis", "ora", "lli", "ede", "sse", "ade", "rie", "aid", "emo", "ral", "sit", "oin", "hth", "tre", "any", "ake", "ern", "mer", "ric", "dis", "ish", "oug", "ini", "ong", "ntr", "eli", "wil", "led", "sar", "how", "edb", "ich", "spe", "sea", "lit", "yin", "sai", "ndo", "gin", "shi", "ord", "mon", "ena", "new", "por", "ser", "ial", "ori", "tte", "mar", "epr", "ach", "har", "yea", "tri", "che", "tea", "unt", "omp", "who", "tar", "owe", "rit", "ded", "ors", "day", "hee", "thr", "eir", "ond", "mes", "efi", "had", "ner", "ela", "let", "lso", "ris", "ire", "isi", "met", "ars", "hic", "cen", "ari", "fin", "tob", "nsi", "las", "ope", "lar", "des", "fte", "nit", "sen", "ang", "som", "abo", "sio", "two", "ian", "eis", "tsa", "ngi", "uni", "ses", "rep", "rac", "top", "abl", "eti", "ebe", "eha", "now", "oni", "ves", "fir", "erc", "ofa", "ace", "sal", "get", "app", "ane", "rsa", "nof", "heh", "gre", "win", "car", "ete", "mat", "cho", "lay", "swe", "esp", "pri", "tiv", "rof", "gra", "llo", "cor", "eac", "nis", "dit", "gan", "gto", "eno", "bou", "obe", "esh", "tos", "ery", "rma", "ngo", "ewi", "ara", "rto", "rel", "oma", "ala", "asi", "tst", "utt", "irs", "yan", "lla", "sfo", "ork", "ett", "lth", "sid", "aso", "swi", "ita", "set", "twa", "erm", "epa", "ron", "tit", "aft", "dre", "tle", "mil", "dby", "ale", "pen", "bec", "mbe", "toa", "heg", "sch", "sis", "rti", "heo", "low", "lis", "oll", "war", "alt", "elo", "tro", "cat", "med", "lic", "hil", "ile", "tht", "rem", "rre", "ays", "oli", "rso", "nsa", "omm", "old", "cre", "ata", "ise", "cia", "pos", "ger", "sma", "uti", "sts", "sec", "sbe", "eni", "sre", "lon", "isc", "nse", "nor", "bee", "ano", "nco", "fer", "itt", "sno", "epo", "eon", "eds", "eam", "esc", "fic", "ech", "way", "ved", "ike", "alo", "yof", "ash", "ote", "ook", "eta", "erf", "onc", "emi", "eci", "ats", "erv", "rsi", "sst", "ili", "eed", "ary", "sso", "mth", "vel", "dat", "mea", "esu", "uri", "pan", "rch", "uth", "spo", "wou", "ffe", "sel", "rei", "rge", "rse", "tom", "usi", "ega", "sas", "ssa", "ato", "erw", "ood", "ama", "sat", "ece", "mpl", "tso", "gen", "arr", "dea", "sca", "dof", "ual", "dbe", "ewo", "nso", "rte", "vin", "adi", "ndw", "ndh", "edf", "swh", "see", "toc", "tch", "ewh", "eba", "onl", "tem", "dwi", "err", "lec", "lac", "eop", "tel", "ami", "ehe", "dfo", "ien", "uch", "ndc", "ely", "dst", "ici", "edw", "aus", "nfo", "ntt", "nne", "ewe", "sur", "exp", "bet", "ket", "inf", "etr", "yto", "rde", "rce", "omt", "evi", "vet", "pec", "rai", "arl", "yst", "sou", "him", "ref", "lik", "ges", "cto", "urn", "fou", "lls", "rne", "wha", "tow", "ndr", "das", "ssu", "spr", "opl", "rad", "esw", "onf", "col", "omi", "duc", "mos", "ark", "tai", "ick", "hos", "ult", "emb", "ign", "hoo", "too", "nea", "itw", "ppe", "ffi", "ula", "nam", "mis", "ced", "los", "gam", "nas", "reg", "lie", "olo", "twe", "ann", "tod", "ail", "ota", "iso", "aye", "tco", "gro", "cam", "efe", "onw", "bea", "ngl", "wee", "edu", "rew", "aga", "til", "ode", "ory", "erb", "bac", "len", "nly", "imp", "aro", "ehi", "amp", "mpa", "spa", "ivi", "ict", "stt", "net", "rta", "hre", "erh", "eet", "row", "sor", "epe", "tie", "nch", "tru", "mal", "cte", "ndm", "atc", "fac", "twi", "orc", "dco", "ndp", "fre", "ofs", "arg", "ima", "dec", "eng", "ria", "owi", "eit", "pol", "ked", "inn", "bli", "dow", "etw", "clu", "hol", "air", "rri", "rig", "sla", "rop", "ofi", "toh", "non", "ool", "isp", "mak", "rev", "equ", "lyt", "jus", "lya", "ole", "cit", "pea", "vea", "kno", "oca", "tak", "acc", "cer", "ada", "sup", "ngw", "peo", "dso", "rdi", "tou", "cau", "rov", "tfo", "stu", "pin", "tly", "ied", "ues", "tsi", "awa", "ler", "wel", "epl", "hor", "erp", "hro", "ute", "oss", "tbe", "tyo", "tog", "heu", "byt", "ngf", "ngh", "hal", "ban", "ism", "rol", "atu", "sam", "hom", "dhi", "ild", "gai", "rds", "edh", "ino", "ego", "egi", "llt", "arc", "ram", "oto", "cle", "dhe", "aco", "orl", "cas", "riv", "ofc", "orn", "rna", "urs", "avi", "nar", "ubl", "tti", "mem", "amo", "rme", "qui", "que", "nee", "ndf", "inh", "ink", "eho", "ncl", "ock", "vic", "rts", "ets", "leg", "cla", "tse", "eor", "nci", "sli", "erg", "did", "rco", "bas", "loc", "ebu", "hig", "asp", "ext", "egr", "dia", "tab", "bri", "cei", "ras", "dal", "alc", "run", "ppo", "ofh", "cke", "atw", "cea", "ott", "bal", "nsh", "mai", "dar", "asb", "rfo", "vis", "owa", "ude", "rsh", "ifi", "loo", "hit", "uar", "cet", "ovi", "ndb", "tol", "uto", "lem", "bro", "vid", "rio", "uct", "try", "efr", "sde", "dha", "bel", "bil", "tas", "suc", "ebo", "oro", "sev", "mit", "yco", "nwh", "neo", "rvi", "dev", "eun", "wan", "sig", "ths", "asc", "dsa", "tac", "emp", "ank", "rke", "nhe", "nme", "nre", "ros", "ngc", "may", "unc", "nic", "nni", "ura", "ful", "oco", "osi", "def", "ngr", "tec", "say", "nbe", "yre", "ntl", "dge", "sac", "sfr", "tsh", "isn", "ldi", "arm", "cur", "eag", "ndl", "eld", "smo", "org", "llb", "del", "poi", "iat", "urt", "ker", "sol", "tma", "mus", "bei", "qua", "lys", "dwa", "nma", "hip", "rod", "efa", "inv", "isl", "pon", "yon", "pas", "lia", "reo", "lif", "tia", "cri", "nsu", "rly", "lbe", "oha", "ndd", "ham", "ept", "ebr", "bes", "ngp", "yha", "tme", "lef", "add", "ofm", "mad", "dma", "dur", "mme", "mas", "ize", "ics", "ybe", "dno", "ege", "gat", "dde", "cul", "uta", "meo", "lco", "val", "atr", "ecu", "ged", "ndu", "yar", "det", "isf", "ofp", "spi", "rot", "rob", "ped", "lde", "oti", "eek", "dem", "bef", "mov", "els", "iou", "swa", "erl", "imi", "fam", "nex", "lof", "fan", "oes", "scr", "isw", "ull", "erd", "inm", "soc", "rni", "eel", "apa", "mic", "dep", "rda", "pit", "ogr", "sun", "esf", "ida", "gar", "cks", "rag", "geo", "goo", "lud", "nhi", "ife", "bra", "ddi", "pat", "ceo", "ngb", "kes", "yer", "nwa", "dra", "lyi", "odu", "pub", "inu", "orr", "aya", "lor", "ttl", "hon", "sab", "nha", "ldb", "liv", "edr", "seo", "oad", "rmo", "dle", "ecr", "udi", "gon", "alf", "die", "rwa", "lst", "lig", "rid", "rmi", "ofe", "urc", "sic", "ape", "ayi", "bot", "eye", "fri", "ila", "ryo", "ado", "alm", "sag", "nwi", "wed", "nno", "abi", "rve", "ees", "aki", "fie", "bor", "dou", "eep", "dif", "tet", "orp", "ito", "ayt", "onh", "oba", "tud", "vie", "nyo", "sbu", "dic", "dri", "ofo", "oan", "rya", "rus", "xpe", "nca", "nve", "ily", "hot", "nag", "uts", "lre", "rap", "ecl", "dse", "oup", "leo", "upp", "roa", "nad", "bus", "ntw", "alp", "urr", "yfo", "omo", "onm", "ntu", "ows", "iff", "rsw", "asw", "asn", "hap", "cce", "cro", "ier", "cco", "cap", "lev", "tsw", "ken", "oke", "owt", "asm", "ngm", "cts", "nou", "put", "reb", "tta", "edm", "lio", "ney", "onb", "sfi", "tag", "eem", "umb", "cra", "anu", "swo", "wev", "eig", "ssh", "eus", "eyo", "sim", "gle", "roc", "cie", "log", "reh", "wth", "slo", "eer", "ift", "hev", "fit", "tua", "epu", "gov", "got", "cin", "inw", "inp", "wes", "ago", "ams", "sap", "itu", "oac", "opp", "etu", "wat", "sus", "lai", "arn", "eea", "itc", "isr", "tca", "rld", "alr", "ask", "ctu", "lto", "oge", "oot", "eap", "pti", "edp", "fea", "fil", "twh", "ngu", "ems", "veb", "uil", "mot", "roo", "rpr", "rli", "mpo", "isb", "elf", "dfr", "sei", "oon", "sle", "mou", "nev", "nec", "clo", "iel", "lot", "usa", "apr", "edc", "rer", "lei", "fra", "wea", "nen", "alw", "esb", "bar", "eya", "nei", "nsw", "elp", "ola", "eak", "fen", "esn", "ryt", "orh", "anb", "lsa", "far", "giv", "pic", "cep", "toe", "dpr", "rim", "eab", "pac", "lti", "hof", "asu", "saf", "ews", "stw", "eex", "atm", "mpe", "tba", "tee", "inb", "eav", "dwh", "nom", "mun", "enh", "rro", "pet", "nsp", "mto", "agr", "lew", "rha", "lve", "alb", "odo", "tun", "lwa", "gue", "dca", "rar", "rwh", "pai", "hop", "rog", "nfr", "fal", "onn", "inl", "sep", "bat", "smi", "vem", "cus", "epi", "wal", "dsh", "lab", "thc", "apo", "aan", "odi", "fol", "gof", "squ", "sfa", "bur", "nac", "rga", "vil", "ngd", "oci", "hir", "rhe", "uss", "efu", "ywi", "esm", "ywa", "npr", "ume", "oda", "osa", "dro", "ghe", "ghi", "opr", "van", "lds", "kan", "beg", "rpo", "orw", "isd", "dmi", "goi", "fun", "oar", "ofr", "onp", "rib", "idi", "rwi", "lop", "hto", "edd", "stp", "mag", "sne", "sem", "eru", "adt", "bui", "mmi", "alk", "gal", "ibl", "opu", "ald", "oal", "ysa", "tsc", "idt", "pli", "muc", "num", "sba", "nel", "nia", "enu", "ruc", "lyo", "stm", "bre", "toi", "esd", "dmo", "ryi", "ots", "sda", "vol", "dam", "aca", "rbe", "pul", "won", "exa", "yed", "lse", "aci", "stc", "ofw", "lim", "atl", "ais", "flo", "cel", "rno", "cht", "sty", "boo", "aug", "rys", "upt", "sex", "spl", "rty", "eva", "ysi", "ofb", "ldr", "uit", "cli", "mei", "ior", "doe", "ira", "lyw", "igi", "siv", "nab", "law", "tpr", "lda", "ayo", "rki", "idn", "nio", "iva", "tya", "pho", "coa", "ilt", "chr", "ndg", "phi", "eff", "eyw", "raf", "yis", "asr", "nov", "lyb", "aut", "nap", "fee", "ndn", "gfo", "sub", "ski", "nty", "asf", "oor", "aff", "enn", "sdi", "hur", "stl", "lyc", "dir", "cut", "wen", "afe", "dne", "kth", "plo", "rab", "nfi", "yma", "ofl", "ung", "anw", "tmo", "enw", "gas", "tss", "jec", "foo", "gis", "vat", "ley", "tne", "ush", "rnm", "tsp", "nsc", "gea", "div", "sad", "dsi", "fco", "opo", "fhi", "edl", "yor", "yca", "iev", "ywe", "omb", "ird", "big", "tif", "dli", "rhi", "rca", "gha", "pth", "sgo", "ywh", "ava", "sib", "gwi", "sum", "atp", "leb", "tsu", "cki", "fec", "ncr", "rle", "sme", "cis", "tdo", "olu", "kea", "iew", "yse", "mod", "uce", "fai", "nig", "tye", "tli", "tsf", "rba", "dor", "aba", "enb", "bla", "rsc", "thh", "mpi", "ads", "mmu", "pow", "lfo", "gst", "asd", "egu", "snt", "tno", "adv", "iet", "bya", "nvi", "aha", "ofd", "cov", "pop", "rra", "nli", "lte", "uca", "dwe", "tei", "nue", "fla", "sdo", "ril", "iro", "iam", "tev", "esl", "mpr", "edg", "mew", "ico", "yal", "yle", "ntf", "stb", "lyd", "eft", "orb", "hte", "cem", "ben", "yas", "kee", "ntc", "ntb", "une", "nem", "eou", "ouc", "ppl", "thu", "tex", "icu", "rdo", "sew", "sul", "osp", "exc", "otb", "gne", "ids", "kil", "lov", "sys", "ims", "niv", "oom", "stf", "irc", "ohi", "nmo", "asl", "onv", "tde", "oce", "ebi", "pto", "ldh", "ype", "nie", "nsf", "elt", "ibe", "fig", "npa", "fat", "lym", "tyt", "typ", "dnt", "lue", "uro", "owh", "ohe", "blo", "wri", "hts", "rks", "deo", "hri", "sot", "lyr", "dus", "ayb", "chu", "tfr", "wom", "yde", "bin", "req", "gge", "mel", "ffo", "arb", "sop", "uma", "vio", "inr", "rtu", "ror", "taf", "dab", "mee", "lee", "inj", "mse", "vei", "bed", "bit", "hek", "ury", "ppr", "tep", "dac", "mac", "acr", "mma", "enr", "utw", "onr", "nju", "eys", "fas", "kto", "orf", "pte", "cid", "ysh", "var", "saw", "eaf", "tla", "cka", "sia", "obl", "uen", "rsu", "oki", "uat", "uet", "ajo", "cos", "ckt", "chw", "oas", "llh", "sbo", "few", "mst", "scu", "boa", "rry", "eev", "lma", "lyf", "veh", "ido", "mid", "ois", "teo", "sci", "owo", "uck", "dch", "irt", "opa", "rss", "agu", "rsp", "ule", "eki", "beh", "oye", "nwe", "dom", "ady", "ypr", "nki", "fes", "git", "nfe", "ssp", "lou", "ymo", "urg", "pra", "dme", "sow", "edn", "sav", "icl", "opi", "lyp", "kof", "nla", "ldt", "rav", "tfi", "dot", "rfa", "eau", "nho", "dba", "nim", "cew", "ske", "enf", "rho", "nna", "tpa", "wis", "dfi", "anh", "api", "rpa", "llc", "ipa", "adm", "gla", "tap", "abe", "ety", "gco", "rms", "ldn", "lam", "tam", "yat", "anp", "dla", "iri", "nbu", "emu", "ntp", "uns", "ols", "dpa", "lmo", "gua", "irl", "nef", "rbo", "pal", "urd", "lyh", "sce", "anf", "gni", "rip", "urp", "ify", "nle", "eph", "efl", "woo", "mmo", "iga", "joh", "sra", "isg", "tir", "ttr", "thm", "ydi", "fel", "jor", "dpo", "rtr", "sue", "yso", "dho", "lpr", "rla", "opt", "ksa", "cta", "mpt", "yhe", "dup", "nol", "oso", "hej", "alu", "gli", "goa", "itl", "cko", "thw", "bly", "dsu", "hwa", "tsb", "ofg", "rfi", "otr", "wna", "ohn", "gio", "pur", "mec", "nfl", "zed", "ilm", "dbu", "dun", "ogi", "fli", "ucc", "nba", "fle", "raw", "eiv", "deb", "eot", "unn", "ntm", "evo", "mig", "hai", "ldo", "oat", "nfa", "ssc", "lus", "naf", "iwa", "eup", "cip", "pay", "chs", "atf", "amb", "ody", "agi", "yme", "exi", "tpe", "rpe", "imm", "lye", "tbu", "ctt", "llp", "lha", "tdi", "ils", "eur", "lbu", "tyi", "hun", "hie", "gsa", "nif", "nks", "wnt", "atb", "ddo", "gel", "lep", "msa", "enm", "oms", "ywo", "rye", "dap", "osh", "hco", "apt", "irm", "maj", "ait", "yfr", "ocr", "gho", "yli", "tys", "atd", "upa", "fyo", "nun", "afr", "avo", "adb", "eim", "usl", "tpo", "lad", "owl", "htt", "bod", "dwo", "ffa", "liz", "och", "thl", "lau", "scl", "anm", "vot", "npo", "vit", "rdt", "hti", "daf", "mof", "ief", "fiv", "kel", "pot", "isu", "olv", "enp", "key", "rsf", "rlo", "ncy", "rgi", "chn", "una", "ilo", "ghs", "ods", "ony", "afo", "mef", "oub", "lsi", "thp", "sna", "loy", "pir", "tlo", "hta", "lag", "ych", "dtr", "rns", "cef", "hum", "ofn", "lex", "sef", "ndy", "amm", "gui", "cil", "dpe", "vec", "hus", "kst", "llw", "sgr", "esr", "aph", "uir", "awi", "tmi", "tsm", "ocu", "dru", "jun", "tew", "niz", "osu", "uff", "six", "quo", "nke", "hhi", "dua", "chh", "dyo", "eju", "sil", "tok", "iha", "phe", "wne", "gso", "dsp", "dlo", "nss", "rfr", "eec", "hma", "oit", "dad", "ips", "nbo", "gor", "lta", "rtt", "yno", "eyc", "tig", "wns", "dav", "ray", "hhe", "nmi", "ump", "iza", "noc", "lut", "veo", "tef", "ccu", "aim", "kat", "alg", "dsc", "occ", "ldw", "idd", "job", "anr", "nlo", "fis", "nyt", "ryw", "fhe", "eyh", "upe", "doc", "oru", "ctr", "adu", "ngg", "rsd", "ops", "tus", "syo", "mul", "ogo", "ups", "eck", "fed", "rtm", "teg", "chm", "sby", "tgo", "upo", "tyl", "rbu", "pie", "cec", "sua", "lel", "dee", "nby", "rex", "ued", "lca", "yne", "coo", "meb", "rey", "leh", "ceb", "mbi", "nus", "pme", "gol", "dio", "ldc", "ubs", "aig", "lum", "llf", "ylo", "ibu", "rwo", "std", "gna", "oct", "lib", "lme", "cad", "seb", "utu", "eby", "asg", "ydo", "glo", "mso", "aho", "ayw", "nwo", "ebl", "vir", "ryc", "oof", "lsh", "doi", "uis", "sov", "hca", "tad", "ckl", "lun", "oop", "rva", "gei", "nut", "ntd", "gri", "gul", "thb", "rtw", "rsb", "nua", "ias", "ugg", "rci", "awh", "eei", "mep", "sfu", "hno", "dex", "abr", "pof", "gem", "fma", "tut", "sbr", "aul", "vep", "ayf", "usp", "dly", "oph", "kso", "enl", "smu", "abu", "umm", "npe", "soi", "seh", "spu", "xam", "ybu", "lfa", "ycl", "aun", "pha", "mba", "ngn", "reu", "obs", "oks", "nau", "phy", "wid", "alh", "llm", "ipp", "adr", "chc", "dag", "bys", "jan", "gab", "usc", "nop", "dte", "soa", "afi", "ppi", "kis", "bab", "dva", "imt", "dei", "isk", "gma", "eke", "etc", "hle", "lyn", "lfi", "ewy", "thf", "gun", "sye", "rgo", "rif", "pes", "xpl", "aty", "thd", "nvo", "lid", "emt", "neg", "tsn", "rwe", "dfa", "sfe", "tup", "nos", "afa", "oje", "loa", "ypa", "lwi", "urb", "arp", "bon", "rul", "sro", "ibi", "dsw", "pio", "arw", "utc", "ply", "wyo", "aps", "ejo", "igu", "sly", "dvi", "hst", "rka", "oud", "roj", "nav", "aly", "obi", "ddr", "hoc", "yes", "asy", "tax", "icc", "ybo", "fur", "pis", "why", "dgo", "rpl", "tov", "ssf", "ofu", "mfo", "hoi", "irp", "soo", "tyc", "ige", "gus", "ypo", "lpa", "sju", "lyl", "nep", "nro", "hoh", "dpl", "oyo", "cca", "tpl", "itm", "gou", "eyr", "kon", "xte", "nsb", "gic", "mpu", "yla", "ium", "awe", "ryb", "fus", "ndj", "nsl", "fto", "oka", "zin", "ahe", "udg", "neb", "rum", "dol", "opm", "llr", "roy", "itr", "rbi", "kei", "tby", "lub", "ipl", "oil", "usu", "nct", "tay", "ysu", "ogy", "bam", "yhi", "ova", "hab", "upi", "due", "cop", "lpe", "exe", "oww", "nya", "ael", "dve", "esy", "dul", "joi", "ysc", "oen", "imo", "cru", "ygo", "rug", "uin", "rcu", "tyw", "vew", "bru", "hha", "svi", "pee", "fst", "dbo", "anl", "vef", "ntg", "nsm", "veg", "jac", "tsl", "lap", "sob", "thy", "oho", "gpr", "gag", "atn", "rsm", "zat", "eol", "rfe", "npl", "meh", "hsc", "weh", "idh", "iaa", "dta", "njo", "apl", "dbr", "utf", "env", "rgr", "ltu", "hod", "gfr", "lln", "nja", "mbl", "nbr", "cot", "dda", "ysp", "icr", "isy", "neu", "adc", "eny", "obo", "rsq", "gno", "sod", "eyd", "ssw", "teh", "gsi", "lhe", "dau", "fwh", "etb", "omh", "vai", "eyt", "lld", "nai", "aud", "lip", "yfi", "omy", "wro", "hfo", "rsl", "idg", "eaw", "lsc", "naw", "irf", "yac", "erk", "yit", "ayn", "tge", "oga", "yba", "dgr", "onj", "ryf", "ryp", "emy", "xis", "hme", "tsr", "uan", "itb", "pst", "nys", "lch", "bad", "sos", "boy", "oos", "vor", "oic", "uel", "ahi", "tfa", "ewr", "obu", "elv", "eov", "tbo", "flu", "ceh", "ssm", "dju", "riz", "ifo", "tau", "ayh", "cee", "urf", "wai", "utm", "uso", "xtr", "stg", "urv", "sve", "bul", "tsd", "acl", "yho", "eef", "moc", "tda", "ipt", "lts", "pap", "gir", "usb", "vey", "uic", "ekn", "yet", "psa", "lba", "rgu", "fse", "iod", "owd", "web", "dai", "dim", "sau", "yaf", "azi", "igg", "noo", "itf", "tga", "uli", "ltr", "osc", "lne", "chd", "xce", "oua", "eai", "stn", "iol", "gwa", "rcr", "gur", "utr", "lal", "eks", "aym", "soh", "llu", "jul", "iqu", "wew", "lsw", "utb", "kne", "shu", "voi", "teb", "pel", "uly", "kid", "bse", "iar", "hbo", "lpo", "rbr", "hmo", "fft", "ddl", "dqu", "hwe", "wst", "ytr", "yun", "omu", "hso", "pta", "sri", "oya", "sui", "sge", "utp", "yfa", "rcl", "gse", "adl", "sey", "uge", "kfo", "ryd", "rdw", "poo", "jur", "gwh", "rfu", "pus", "rnt", "itd", "atg", "lak", "fti", "dop", "lyg", "esk", "fpr", "pwi", "lwh", "upl", "doo", "fca", "awo", "icp", "tfe", "ndv", "arf", "gca", "eid", "erj", "onu", "ehu", "nka", "gew", "ymi", "pil", "cum", "edy", "ugu", "vee", "nra", "mys", "rmy", "irr", "tgr", "rup", "kep", "gmo", "gup", "cup", "ldm", "hsa", "ctl", "ndk", "fso", "ouw", "tbr", "keo", "kar", "utl", "sdu", "oex", "imb", "gbe", "obr", "nye", "ttw", "ewt", "ffs", "hwi", "neh", "chb", "lki", "gef", "fav", "oid", "rdr", "gme", "yda", "sga", "gac", "amt", "gia", "ghl", "ryl", "kha", "jam", "bir", "dov", "htw", "haw", "mwi", "noi", "chf", "aur", "gba", "fet", "bje", "fut", "llg", "otw", "kit", "enj", "gsh", "thn", "wif", "lob", "wei", "esg", "fde", "blu", "gav", "hys", "ckw", "fpe", "chp", "kle", "amu", "zon", "ngy", "lll", "sht", "seq", "byc", "jud", "god", "tyf", "rah", "guy", "wto", "dna", "nkt", "uha", "daw", "sdr", "bym", "yte", "bep", "rby", "utd", "nva", "oly", "ftw", "nob", "rym", "gdo", "lfr", "acu", "deg", "olt", "cif", "tty", "pag", "dtw", "fch", "byh", "via", "lph", "yab", "gap", "byp", "otc", "pse", "mco", "hpr", "sss", "hoa", "tcl", "zen", "owm", "dcr", "pou", "hac", "buy", "hse", "rtf", "nyw", "oap", "shm", "bum", "ums", "alv", "chl", "eja", "tju", "wle", "iec", "dcl", "dga", "lyu", "abs", "omf", "nri", "ryh", "bow", "yra", "ofj", "bst", "umi", "yen", "rok", "mur", "gly", "mwa", "wof", "sif", "rui", "yro", "imu", "iag", "lbo", "lsu", "lsp", "mps", "gec", "fmo", "elc", "msi", "sbi", "hni", "unl", "yex", "uty", "seu", "utn", "ouh", "lno", "htb", "lmi", "aln", "ofv", "idu", "ska", "bud", "sug", "mwh", "eew", "odr", "thg", "ksh", "ldl", "rtl", "wre", "tkn", "pso", "acy", "bsi", "gde", "iab", "dig", "ypl", "oys", "aka", "foc", "lga", "ghb", "adw", "rko", "ldp", "dsf", "iny", "upw", "eka", "omc", "ksi", "feb", "ssl", "cab", "lhi", "isv", "heq", "seg", "lty", "ilw", "ffr", "hce", "mbo", "nny", "wni", "hwh", "oxi", "aof", "mir", "fof", "lgo", "nym", "cir", "sru", "wec", "unk", "rsr", "lke", "wsa", "ayl", "gpo", "ybr", "hli", "geb", "mom", "yna", "edv", "sah", "aws", "eyb", "dew", "wic", "lho", "kem", "fmi", "ldf", "yap", "taw", "cth", "rgy", "dti", "gte", "viv", "ypi", "arv", "ipe", "yta", "kly", "kwi", "lav", "umo", "ofy", "rmu", "pun", "eym", "luc", "otl", "fta", "tna", "nyc", "mno", "tsg", "cyc", "olf", "fwa", "psi", "bol", "ddu", "dpu", "dsl", "adn", "siz", "djo", "lwo", "vas", "bis", "jap", "bem", "nqu", "gbu", "yri", "dfe", "haf", "eps", "nyp", "sie", "tue", "elm", "nnu", "npu", "dos", "fon", "amw", "dye", "tip", "arh", "wno", "fpo", "suf", "tts", "xpa", "kwa", "agg", "lvi", "toy", "nah", "mha", "mbu", "dmu", "hae", "ocl", "dog", "meg", "box", "usw", "eil", "rik", "lss", "dss", "bia", "rue", "ckb", "plu", "yad", "ewc", "aru", "rej", "bos", "uea", "nsd", "rjo", "ppa", "hla", "eyf", "nfu", "moo", "hbe", "hra", "dsm", "omw", "csa", "fpa", "idw", "fsa", "gad", "yss", "ewm", "mph", "toj", "ofk", "zer", "ayc", "ygr", "kab", "rtn", "tcr", "yge", "owc", "mhe", "tvi", "yus", "ysw", "sgi", "udo", "igr", "tyb", "tpu", "eje", "rdf", "odt", "gpa", "rut", "xec", "kas", "ifa", "urm", "yam", "owb", "lro", "rdl", "roi", "keh", "yot", "fly", "yti", "yby", "adh", "iwo", "lpl", "url", "ibr", "dah", "ctw", "eif", "cio", "ios", "otp", "ryr", "fem", "map", "hly", "tyh", "iot", "uid", "uag", "icy", "unf", "rau", "lwe", "nko", "ldg", "eah", "msw", "mie", "eyi", "hug", "usf", "tmu", "sir", "hsi", "fbe", "rae", "gyo", "mcc", "hsh", "dya", "fme", "joy", "ydr", "wso", "pau", "nsr", "cai", "gpe", "jer", "jou", "civ", "irb", "fab", "ncu", "gep", "ymp", "hio", "eeo", "obb", "owr", "ftr", "pok", "etf", "rkt", "udy", "fho", "dcu", "kor", "yag", "abb", "etm", "fne", "elb", "hdo", "skn", "tym", "aqu", "otm", "nyi", "irw", "msh", "rru", "gch", "lsf", "sph", "wwh", "ksw", "fno", "mbr", "sjo", "yel", "udd", "ntn", "odd", "goe", "beo", "ckh", "htr", "itn", "cog", "uer", "naa", "ogn", "hns", "hau", "irg", "eyl", "mre", "bay", "cof", "jon", "byr", "adf", "ptu", "kie", "hia", "fsu", "gsw", "ixt", "tyr", "yni", "dgi", "ggl", "oui", "okn", "hde", "icf", "mca", "nup", "hpo", "ldd", "cod", "avy", "gsu", "deh", "icd", "wnf", "uos", "otf", "wma", "eob", "ltt", "yfe", "fap", "byb", "ngv", "pfo", "hpa", "uls", "ckf", "mhi", "ulo", "fwe", "otu", "hag", "ptt", "wco", "cst", "emw", "ggr", "agn", "dys", "ipo", "edj", "elu", "kla", "ipi", "cky", "hoe", "bbe", "rdc", "ysl", "wos", "oko", "nmy", "adp", "fha", "tiz", "eyp", "ghw", "hyo", "ebs", "fsh", "lgr", "tjo", "uga", "ssr", "yev", "gfi", "iai", "usm", "okt", "rek", "tfu", "ngj", "rdu", "kew", "ggi", "egl", "aon", "bio", "shr", "gdi", "oea", "dki", "hmi", "lks", "bov", "kma", "xin", "asv", "gsc", "ysb", "uci", "rua", "tid", "shs", "icb", "xan", "rkw", "onk", "eeh", "iac", "lva", "dfu", "bso", "anj", "dja", "idl", "lpi", "ewp", "afu", "eww", "fif", "nmu", "hne", "tni", "gwe", "upf", "nsy", "kou", "byd", "cci", "ysm", "ymu", "etp", "ycr", "yye", "ius", "tah", "lom", "jos", "gwo", "sym", "ahu", "rls", "ayp", "fdi", "aar", "fid", "gtr", "cqu", "rdp", "beb", "pts", "pid", "mex", "coc", "fwi", "myo", "usd", "diu", "kec", "sky", "gti", "fru", "htf", "kup", "xim", "hdi", "elw", "kal", "irh", "byf", "oam", "hib", "kic", "rdb", "htl", "tqu", "otg", "eut", "ftt", "ube", "bun", "isj", "niq", "igo", "icm", "byi", "ueo", "dyi", "shc", "ssb", "tki", "xpo", "dsb", "xpr", "mob", "wye", "nru", "vac", "ntk", "wsp", "gaz", "kco", "tce", "dyt", "lah", "itp", "gns", "ghh", "bey", "tdr", "lft", "aks", "hch", "hda", "ngk", "geh", "ewb", "upr", "fba", "gsp", "beu", "dbl", "sbl", "fts", "tum", "lur", "rqu", "awn", "eum", "dbi", "mya", "icw", "ckn", "dil", "gos", "dut", "gil", "apu", "dpi", "doa", "rhu", "urh", "fad", "cag", "rtb", "orv", "gbo", "mam", "cow", "mol", "gaf", "axi", "raz", "mik", "dvo", "dfl", "atk", "lge", "msu", "pco", "kwh", "rph", "noa", "eoc", "fau", "uad", "asj", "sgu", "aby", "fgo", "enk", "htn", "rpu", "bai", "xic", "rtc", "hut", "mah", "eey", "ssy", "ckm", "rsn", "idb", "yim", "bye", "lfe", "oim", "voc", "sfl", "oml", "kli", "leu", "acq", "hid", "bag", "swr", "uno", "mab", "byl", "uve", "fei", "yga", "uee", "yve", "hwo", "xas", "hlo", "msc", "jew", "mix", "nyb", "ppy", "iki", "idf", "orj", "uys", "uei", "veu", "ckc", "mfr", "wnw", "pab", "adj", "rpi", "hba", "teu", "ubt", "gie", "yyo", "ckp", "owf", "ypu", "lka", "amc", "nir", "iaw", "wsh", "wol", "otd", "fwo", "kag", "ixe", "lms", "nkn", "ryg", "uke", "tbi", "eao", "lsb", "uba", "yee", "odf", "ayd", "byw", "xes", "ayr", "iph", "mia", "psh", "agl", "khe", "gga", "bew", "gee", "nod", "aas", "laf", "ogu", "urk", "gpl", "zes", "edk", "doy", "stv", "ifh", "ffl", "odw", "fix", "rdm", "ldu", "wot", "hgr", "tpm", "meu", "oum", "raa", "yju", "hfr", "myf", "ewl", "gya", "fsi", "oab", "sni", "xth", "hbu", "wnb", "ubj", "idm", "nid", "wca", "usr", "bom", "oaf", "oev", "xed", "myt", "obj", "hsp", "urw", "woy", "kre", "nbi", "ulf", "hpe", "gev", "jum", "uot", "emc", "htc", "eyg", "tpi", "umn", "shw", "rmt", "tve", "epp", "tsy", "rdh", "nsn", "egy", "tdu", "zet", "etl", "gim", "kyo", "fbo", "sva", "fsp", "idc", "rsy", "iea", "eow", "jim", "byo", "gfa", "mss", "yvi", "omd", "hho", "ubb", "olk", "nur", "yce", "tva", "afl", "bid", "dce", "pma", "tav", "wow", "ysf", "iba", "rox", "ogs", "oou", "hsu", "hyd", "zar", "omn", "odg", "ykn", "omr", "fbu", "rsg", "fex", "ufa", "cku", "nil", "tyd", "hya", "caa", "pbe", "lra", "dob", "zea", "lcl", "uwa", "joe", "ghp", "wet", "aza", "buc", "yop", "amh", "wnp", "bob", "lri", "ako", "hak", "hob", "ipm", "owp", "eeu", "hex", "hfi", "auc", "wop", "nyd", "dke", "fsc", "fag", "lbr", "ilh", "rak", "wwe", "ewf", "sks", "eeb", "pad", "max", "psw", "izi", "ksf", "gop", "rnc", "dgu", "psy", "uip", "egg", "tgi", "oqu", "ntv", "deu", "raq", "axe", "kra", "maa", "iin", "fgr", "dhu", "npi", "exh", "osl", "cac", "rju", "fbr", "ipw", "adg", "eaa", "ieg", "ivo", "mli", "itz", "chy", "osw", "rkc", "eyn", "xac", "cav", "kni", "yjo", "osm", "wag", "mde", "myc", "rvo", "ydu", "etn", "izo", "esv", "ewd", "nbl", "mne", "llk", "wsi", "gaw", "syn", "wnc", "yov", "kef", "tfl", "mwe", "gob", "iwi", "shl", "tuc", "ctf", "ssd", "gmi", "ttu", "eic", "nns", "shf", "dmy", "hyt", "mut", "tgu", "msf", "hpl", "uph", "rfl", "mda", "hif", "nsk", "aze", "wde", "dni", "fdo", "kbe", "idr", "lcr", "imw", "mmy", "rbl", "nkl", "msp", "ikn", "cya", "gru", "keb", "ckd", "nuf", "ovo", "wfo", "tmy", "elh", "wav", "odc", "svo", "xch", "lsm", "cso", "ilb", "kev", "dtu", "byg", "emm", "mum", "tcu", "iis", "htm", "ojo", "rtp", "wse", "gda", "oem", "poe", "mev", "uco", "shb", "tib", "dyw", "tbl", "byn", "gow", "aat", "kse", "gby", "nyf", "atv", "ouv", "iah", "rtg", "bbi", "coi", "olb", "upb", "nyr", "vou", "faf", "fue", "thk", "zan", "okl", "nyh", "ogl", "utg", "ryn", "bsa", "awt", "woc", "taa", "nhu", "ueb", "ouk", "lyk", "kss", "cpr", "csc", "gex", "mle", "ctc", "ggo", "oav", "rdd", "kho", "bvi", "idp", "syc", "hov", "rkn", "sak", "odb", "coh", "anv", "fda", "rud", "ebt", "eko", "upd", "stj", "atj", "aor", "wnh", "chg", "ilr", "wwi", "aal", "lcu", "irn", "jes", "hna", "mey", "pwa", "stk", "amf", "obt", "ytw", "dci", "ilv", "ksc", "ybi", "rja", "obv", "shp", "eeg", "uda", "daa", "keu", "unb", "aja", "fvi", "eos", "upc", "yki", "gif", "oze", "oym", "uew", "olc", "lpu", "csi", "wdo", "wod", "nsg", "lpt", "ilu", "oet", "kir", "lua", "exu", "rkf", "fev", "etd", "ksb", "lod", "lce", "ckr", "pia", "igs", "ckg", "thj", "yru", "tke", "dph", "ubi", "nak", "ucl", "maz", "ubm", "tci", "tiw", "elr", "ghc", "yaw", "gcl", "maf", "awk", "soe", "cob", "elg", "wsc", "oog", "hay", "tyg", "ugs", "cry", "wli", "gta", "lfu", "oir", "odp", "iap", "hyp", "nip", "lps", "byj", "wmo", "icg", "ulp", "rkh", "imf", "oak", "rub", "saa", "fmy", "xtt", "fbi", "lna", "hbr", "usn", "esj", "wir", "fna", "gsf", "uef", "nuc", "cch", "slu", "rsk", "emf", "unw", "kov", "wsw", "wim", "ygi", "olm", "ubu", "tsk", "nry", "itg", "bta", "hqu", "hdr", "oel", "unr", "sja", "sud", "mho", "kwe", "bie", "lgi", "mla", "unp", "fge", "oju", "ltw", "ifu", "riu", "dyn", "ipr", "yfu", "uec", "nje", "esq", "bby", "hah", "imn", "kim", "oag", "thv", "oob", "dsr", "wly", "ksl", "xer", "olw", "roe", "cse", "weg", "ctm", "lsl", "lmu", "pef", "dry", "rnh", "kfr", "ulu", "oty", "cue", "ssn", "wnl", "fga", "ifs", "khi", "smy", "hgo", "ilf", "kgr", "dum", "iju", "lsy", "myb", "ilc", "maw", "myh", "hfa", "pup", "wsu", "oov", "fpl", "gau", "kri", "dib", "ceg", "mwo", "dip", "ghf", "yah", "gib", "bak", "olp", "tuf", "ika", "rtd", "wak", "hog", "nyl", "ioc", "nkw", "iru", "ghm", "syl", "hru", "myw", "efs", "wup", "aml", "ybl", "nph", "iad", "loi", "kam", "hye", "jef", "iao", "xua", "gss", "ntj", "lkn", "dsd", "pda", "fcr", "kbu", "ioa", "gbr", "cyo", "nui", "amn", "eeq", "rps", "rii", "cub", "kba", "bic", "sko", "tsj", "lyv", "yqu", "pfr", "ndq", "xci", "htp", "alj", "iii", "laa", "rnf", "pov", "ilk", "rao", "ags", "usg", "dyb", "imh", "inq", "mok", "bev", "mlo", "kdo", "omg", "mch", "ukn", "gay", "fmu", "wwa", "ycu", "ksp", "fju", "wab", "wem", "amr", "cma", "xhi", "awr", "kca", "lby", "wpr", "wmu", "iem", "fcl", "lsd", "tsv", "cyt", "yem", "pwh", "ouf", "wbe", "ifw", "dwr", "cde", "nay", "gum", "lfw", "tja", "fyi", "aju", "pak", "ieb", "lek", "rgh", "eog", "kro", "ixi", "dje", "gsb", "oyi", "ugo", "rnb", "myp", "sya", "hty", "vad", "dod", "iow", "ysd", "rmc", "yif", "asq", "mym", "ctb", "jen", "ekt", "msb", "mgo", "mdo", "sok", "mau", "shh", "lfl", "kpa", "akt", "pei", "bsc", "ysr", "psc", "fgh", "mdi", "tub", "nwr", "fox", "xcl", "enz", "uwi", "nkr", "umt", "dsn", "ilp", "tyn", "iho", "uyi", "rnw", "laz", "opy", "aer", "yja", "raj", "gye", "wme", "gsy", "wbu", "iof", "hez", "oja", "owu", "ayg", "odl", "amd", "noh", "ecy", "otn", "afg", "jai", "noe", "cdo", "iaf", "eyv", "dyh", "lju", "ekl", "nky", "gyp", "lci", "okp", "eze", "ypt", "yhu", "rnp", "idy", "ogg", "uru", "bbl", "msl", "ffw", "woa", "xto", "umw", "jas", "lil", "wra", "poc", "gcr", "hyi", "ebb", "hvi", "ceu", "tph", "usy", "nrs", "htu", "euk", "myl", "xty", "lsr", "xts", "cfo", "wob", "dnu", "caf", "dka", "myi", "ddy", "odh", "jet", "rnu", "pca", "nkh", "okf", "owy", "fpu", "ibb", "pyo", "nza", "dyc", "sog", "awy", "gsl", "www", "ryu", "nik", "rkb", "cyi", "wbo", "irk", "yow", "yfl", "mra", "niw", "cey", "pgr", "dyf", "dsy", "mye", "azz", "wnm", "diw", "mfi", "ghr", "roh", "pss", "ghd", "hga", "hcl", "dub", "hbi", "eip", "dsk", "fot", "ftb", "lfc", "ghn", "sip", "onz", "nmc", "icn", "htd", "tvo", "eoi", "msm", "fhu", "oah", "xon", "wad", "nog", "kmo", "mna", "pew", "mif", "yup", "uou", "hul", "usk", "osb", "wep", "aku", "yav", "tul", "jin", "ffu", "otj", "pmo", "aac", "gnt", "doz", "mek", "wnr", "yke", "niu", "tnu", "yva", "gfu", "mrs", "hiv", "eiw", "gmu", "ysg", "yph", "gah", "geg", "anz", "iei", "dkn", "dds", "ixo", "yau", "akn", "lbi", "ccl", "rmw", "fye", "xof", "woh", "thq", "ipu", "rur", "gsm", "lej", "jea", "kad", "ctp", "upg", "jay", "imc", "uds", "mcl", "psp", "ayu", "gvi", "ygu", "bha", "uab", "oln", "yvo", "ulc", "snu", "kpr", "kai", "ldq", "igb", "rdn", "cev", "wla", "lru", "vev", "von", "kya", "amy", "uep", "unu", "bth", "zil", "bmi", "pip", "fja", "feo", "llv", "kpl", "buf", "wog", "syt", "hmu", "cui", "ghu", "mni", "icv", "ymb", "ftf", "mtr", "ssk", "ytu", "hfu", "ecc", "gfe", "fos", "myd", "oed", "gdr", "awf", "kia", "nyg", "yll", "cpa", "vig", "fjo", "wss", "lfs", "hfe", "etv", "sms", "emh", "kru", "lug", "cdi", "hcr", "jar", "cwa", "izz", "odm", "gce", "unh", "eez", "irv", "shn", "gbi", "deq", "psf", "hua", "kun", "rkm", "agh", "pep", "lyy", "pbu", "phr", "ysn", "kay", "img", "rje", "egs", "ahm", "ksu", "iwh", "hik", "mro", "duk", "myr", "ulm", "tze", "ewu", "awl", "xit", "rdg", "ewg", "opf", "oaw", "bik", "yci", "wlo", "ewj", "zab", "iog", "ksm", "cys", "ueh", "gpi", "olh", "tih", "kur", "shy", "hok", "wpo", "ieu", "igt", "emn", "oby", "nek", "klo", "ywr", "rnd", "isq", "ulg", "kaw", "psu", "kpo", "ysy", "fia", "gyi", "wba", "lbl", "pfi", "skt", "uie", "byu", "oyt", "sje", "nix", "gnu", "emr", "ohu", "lyj", "csp", "kos", "rez", "ryv", "fdr", "opc", "csh", "ljo", "wsf", "jok", "bof", "wdi", "onq", "bba", "kob", "rkp", "ulb", "hfl", "rkl", "wac", "okh", "pod", "gtw", "iry", "mby", "ooc", "lko", "iwe", "dak", "rwr", "akh", "fce", "uzz", "uwo", "liq", "mbs", "uya", "ldy", "rkr", "lkt", "psb", "rdy", "emd", "ylv", "bib", "eee", "kap", "xti", "gju", "ipb", "ugl", "gpu", "miz", "keg", "doh", "umu", "aes", "xfo", "dlu", "erq", "faw", "odn", "gnm", "hyw", "lax", "hby", "mte", "kac", "ifn", "nyn", "cpo", "oku", "owg", "pru", "twr", "neq", "kwo", "aic", "tvs", "kfa", "nao", "rcy", "nsv", "csw", "phs", "fim", "ixm", "paw", "kme", "wfr", "vag", "gyt", "gom", "osn", "iop", "eod", "sek", "wnd", "lqu", "hup", "msd", "ffb", "kna", "ksd", "ieh", "bco", "bry", "fah", "oau", "fop", "oow", "egm", "ifl", "iko", "dgl", "ffh", "ryy", "kde", "pam", "vej", "fki", "ubo", "hge", "uka", "ltd", "rgl", "eza", "gym", "otk", "lup", "nze", "omj", "wda", "upm", "azo", "shd", "css", "gjo", "syr", "oyd", "kaf", "uas", "igm", "nkf", "wpa", "awm", "umc", "eyu", "moi", "ngq", "ihe", "wam", "eyk", "yai", "pby", "aad", "aii", "gqu", "zeo", "wap", "cgr", "ezo", "hjo", "yid", "hju", "etg", "oue", "lgu", "trs", "cwi", "ctd", "imd", "ptf", "llj", "mta", "iya", "fbl", "mju", "uem", "tej", "wwo", "xha", "oxe", "bap", "egn", "axp", "kci", "kfi", "toq", "naz", "lvo", "kbo", "rmf", "ggs", "tka", "pde", "rml", "exo", "lnu", "utk", "wek", "haz", "ayy", "ptr", "ssg", "kti", "fva", "ffm", "msr", "gry", "dyp", "lux", "pga", "mfa", "ccr", "xco", "fff", "kby", "dsg", "abd", "yob", "byk", "uln", "adq", "oei", "ibo", "hao", "bma", "iml", "gbl", "rsv", "uor", "feu", "kch", "dyl", "fty", "bbo", "ltf", "bca", "bau", "alq", "unm", "pum", "ayj", "eoa", "tey", "cyb", "sox", "eml", "soy", "eia", "wmi", "ekw", "ltb", "epm", "boi", "osf", "myg", "xtu", "oer", "hko", "ulk", "zza", "nkb", "stq", "fci", "ipc", "mgr", "dym", "uki", "lfb", "uye", "kot", "bek", "htg", "wef", "tje", "wfa", "hmy", "pav", "akf", "mfe", "rbs", "yie", "hsw", "fpi", "ftc", "mup", "lja", "ync", "opw", "nlu", "axa", "osy", "iji", "utj", "bto", "cme", "okw", "hyb", "byv", "rmb", "fve", "ezi", "cwh", "ewz", "yoc", "jua", "gmy", "wsm", "uwe", "ysk", "imr", "caw", "goc", "mcg", "fug", "abc", "sut", "kyl", "jaz", "wze", "csu", "cyw", "sgl", "hsl", "gko", "fcu", "lsn", "fyt", "fph", "lui", "ahs", "lry", "zzl", "bah", "okc", "nyy", "rsj", "xmo", "ulw", "cej", "lhu", "haa", "kip", "aum", "wpe", "cbo", "aje", "lsk", "tug", "okm", "aia", "coe", "ptw", "cun", "nez", "ilg", "dvd", "mri", "rnr", "ftu", "hki", "ugi", "cmo", "pyt", "smc", "cyr", "ehy", "ynd", "zei", "saj", "nbc", "cne", "wch", "wje", "nae", "siw", "gve", "geu", "iia", "ldv", "xtd", "cba", "rhy", "rlu", "gdu", "ixa", "tox", "cyp", "skm", "eul", "ufo", "epc", "tao", "wte", "cwo", "bbc", "ndz", "akl", "hva", "ddh", "omv", "amg", "hud", "hub", "mpb", "mud", "hpi", "gsd", "ptc", "ciz", "psm", "azy", "ioi", "zle", "idj", "umf", "shg", "vek", "ggu", "liu", "xtm", "rmp", "zel", "rmr", "dyr", "pty", "skf", "nii", "xcu", "vul", "gwr", "mve", "goh", "lfh", "mge", "ipf", "pmt", "ldj", "cbe", "elk", "huc", "rkd", "mej", "peg", "gey", "eom", "oxf", "mim", "ofq", "aaf", "syd", "wig", "rir", "ixs", "pik", "kta", "hsm", "fef", "dih", "nib", "ksr", "nok", "nej", "mcd", "dty", "fdu", "hpu", "hve", "iae", "eyj", "ewn", "gcu", "iom", "iln", "chj", "wsb", "kol", "opb", "zie", "naj", "lfd", "woe", "ynt", "uez", "chk", "cbu", "igl", "ekh", "pps", "kpe", "dyd", "nih", "lir", "luk", "lpf", "gys", "cmi", "fje", "edq", "itj", "ryj", "iit", "woi", "yak", "fqu", "gut", "igp", "lff", "wks", "wnu", "oxa", "bwa", "ffc", "wsk", "ekr", "kus", "fgu", "vre", "uiv", "hnm", "vik", "osk", "xre", "pyr", "pba", "iep", "upu", "nzi", "okb", "cfi", "mog", "lsg", "cly", "aos", "fke", "moh", "wfi", "hja", "omk", "axo", "zha", "ktr", "ltc", "kda", "rgs", "mao", "ouo", "pya", "kgo", "tyu", "aub", "fka", "kys", "kaa", "smt", "mcr", "xtw", "tek", "hbl", "cvi", "rnl", "pne", "feh", "aap", "cfa", "lao", "nkm", "ioo", "fak", "eih", "gid", "ltl", "zal", "aen", "dmc", "aea", "nyu", "fya", "mop", "tiq", "oyc", "ija", "xtf", "pig", "acs", "pdo", "gki", "pch", "kah", "ieo", "dey", "rmh", "aiw", "ooh", "cim", "mav", "chv", "riw", "tlu", "bug", "nuo", "osd", "gsr", "hyh", "mti", "oai", "dox", "tmc", "hym", "ylu", "vab", "fsw", "olr", "dae", "eln", "cpl", "sej", "eiz", "gaa", "cna", "ksg", "apy", "gfl", "zec", "eij", "eud", "aqi", "ghg", "bdu", "orq", "ueg", "zis", "yef", "roz", "yol", "akr", "wbr", "glu", "ryk", "kdi", "uak", "paf", "yei", "gci", "ifr", "aww", "voy", "mce", "cek", "erz", "ldk", "bog", "ttp", "olg", "arj", "vam", "bsw", "ydn", "zoo", "pmi", "fsm", "zac", "gig", "nji", "dyg", "myn", "yos", "uyt", "ubw", "hss", "cyl", "ubc", "hdu", "ecs", "kbr", "wtr", "osq", "osr", "exs", "smr", "xta", "agm", "mga", "ynn", "lni", "rix", "fib", "wie", "bcs", "ehr", "tyy", "fni", "ymc", "nkc", "gnw", "wng", "kmi", "aji", "tcy", "wau", "pki", "fay", "gyc", "gva", "iau", "tgl", "oec", "cym", "akw", "wsr", "irj", "ulr", "miu", "axc", "shv", "ddt", "ekm", "awb", "oky", "uof", "msn", "leq", "usv", "igc", "epb", "egh", "rku", "ftp", "hsb", "dmr", "oyl", "gnc", "nox", "jak", "hcu", "oif", "rlf", "fvo", "ctn", "lmc", "eay", "csf", "aab", "hke", "lul", "mdu", "nul", "hci", "pno", "mug", "epw", "dao", "oxy", "dez", "psl", "wun", "cak", "xil", "pem", "kiw", "yka", "wex", "uev", "cah", "oef", "anx", "epf", "oza", "cua", "lfp", "kow", "uwh", "arq", "vau", "ubr", "tsq", "auk", "mae", "ahl", "otv", "bsh", "nzo", "utv", "sih", "lol", "wsl", "ffy", "mck", "fov", "peb", "waf", "gog", "aam", "bub", "yje", "mpm", "kul", "wfu", "ulh", "boe", "arz", "kdr", "noy", "ecd", "siu", "lmt", "ugb", "wgo", "eik", "ooo", "fum", "tyv", "hhu", "aed", "ymy", "ynu", "tui", "suk", "aik", "eae", "tww", "vow", "ezs", "csb", "baa", "kif", "oyf", "tii", "cda", "psd", "ovs", "uon", "inz", "xwi", "mci", "iob", "opd", "dek", "xca", "diz", "ekb", "vok", "fsy", "anq", "rnn", "ihi", "nsj", "sku", "wov", "exw", "jav", "oxs", "hyl", "moa", "igd", "xem", "lih", "hnn", "gvo", "ooa", "joa", "cpe", "gph", "cao", "eib", "gnp", "dej", "yil", "mvi", "hyc", "oyw", "nsq", "epd", "ucr", "umh", "zew", "wnn", "ahn", "ibs", "axr", "ikh", "aaa", "ahr", "rmm", "cga", "kte", "taj", "cfr", "gnf", "psr", "teq", "lwr", "hyn", "rmd", "cno", "ssq", "gyw", "foi", "liw", "ckj", "bss", "gja", "ukr", "nxi", "ixw", "zem", "aux", "wpl", "aht", "cex", "bbs", "avr", "wgr", "itv", "xia", "yrs", "gsk", "lmy", "kii", "ltm", "kfu", "rky", "rdq", "xie", "dgm", "pwo", "hry", "rtv", "yeo", "tik", "cyf", "mja", "nhl", "nku", "ooi", "ixy", "abh", "akd", "eku", "nkp", "ttt", "osg", "ffp", "fgl", "ahw", "fsl", "ifp", "ttc", "apm", "pdi", "pfu", "hph", "efc", "gae", "eoh", "eii", "kex", "elj", "gsn", "xat", "hgu", "lyz", "tiu", "xye", "dji", "bte", "etz", "drs", "zas", "rrs", "kop", "ksn", "aag", "ubd", "xpi", "cbs", "tza", "zim", "upy", "fep", "lmw", "gsg", "umd", "daj", "fup", "zsa", "ftm", "bfo", "rih", "epy", "ixp", "igf", "yze", "xma", "ouj", "pwe", "bwi", "lfm", "wip", "eoo", "pms", "bts", "tae", "jia", "ftl", "pbo", "kcl", "mly", "peh", "sik", "rza", "smw", "ayv", "rij", "wcl", "msg", "udl", "ufi", "alz", "wki", "cnn", "pyw", "ewv", "kom", "dzo", "umr", "aiv", "hvo", "skr", "obw", "rtz", "owj", "fob", "zzi", "uxu", "giu", "zam", "pev", "uai", "kyt", "yaa", "sao", "fby", "atz", "mjo", "idk", "cwe", "rdj", "sps", "oeu", "iak", "loh", "yec", "sii", "ooe", "hgi", "bdi", "mdr", "uyo", "pom", "cae", "xid", "coy", "zor", "lpm", "buz", "hsf", "uju", "uyw", "sbn", "fgi", "gyf", "nyk", "mue", "owk", "atq", "iun", "rng", "bej", "eji", "exm", "hii", "hka", "ghy", "eug", "adk", "ifm", "okr", "lii", "euc", "ifc", "xib", "aup", "mki", "aem", "obc", "aue", "mow", "dyk", "nyv", "kau", "aex", "sax", "oxo", "xur", "bwe", "rpm", "mcn", "wej", "jag", "jab", "mru", "rze", "tmr", "awc", "upn", "giz", "ofz", "dko", "feg", "enq", "mfu", "abw", "xio", "ssv", "spy", "gtu", "kum", "wti", "kke", "igw", "etj", "uml", "cze", "yya", "shk", "aeo", "xwe", "ioh", "pcl", "vib", "uac", "vaa", "acd", "ttm", "ubh", "ntq", "cyh", "zak", "cgo", "ekc", "ipg", "hnc", "hms", "lez", "axt", "kvi", "nnw", "smd", "kpi", "ffd", "btt", "xst", "lmm", "rtj", "evs", "ctg", "kej", "gao", "ebc", "yir", "kmu", "rkg", "ttb", "apb", "boc", "pfa", "ekf", "ixc", "saq", "mpf", "wta", "eaj", "ubp", "bho", "lae", "dpm", "lyq", "baf", "wsd", "yiw", "mrb", "wah", "wls", "oeb", "wok", "duo", "cbr", "hnb", "ffg", "ahy", "hyf", "kyw", "kaz", "kki", "xtb", "lkw", "ezw", "daq", "rlw", "dug", "imj", "tyj", "dik", "pyi", "rpt", "csm", "wjo", "uhe", "xwa", "mcm", "udr", "pbr", "fnu", "oia", "mns", "bwh", "eie", "efb", "kok", "cty", "itk", "ymn", "hje", "ufe", "mtu", "lpp", "syi", "cyn", "ptl", "nux", "rdv", "dud", "luf", "mrm", "vyw", "hnu", "paa", "eej", "eio", "ctv", "exf", "awp", "kka", "loe", "msy", "hnw", "uji", "avs", "hiw", "zai", "cig", "mio", "pue", "oxt", "rct", "uko", "agt", "xbo", "apc", "hnh", "wus", "ggy", "mpw", "rlt", "vak", "srs", "ckv", "pah", "emg", "ilj", "tko", "bde", "iov", "vap", "iks", "pey", "waw", "ugt", "ncs", "zwa", "odj", "nnc", "sae", "afs", "kek", "xra", "bsp", "udt", "zio", "rgw", "uva", "awd", "hih", "cic", "wfe", "csl", "vii", "ptb", "ekd", "nkd", "vya", "csd", "ckk", "cfe", "aky", "xor", "spn", "ngz", "euv", "dii", "udb", "ruf", "fwr", "oig", "nnb", "epg", "uia", "btr", "bsu", "byy", "wii", "oxc", "puc", "ygl", "pgo", "usj", "aev", "tzi", "cyd", "eok", "rdk", "bpr", "ayk", "cay", "ezu", "aip", "skh", "ueu", "wke", "gyb", "apw", "ucu", "kyr", "ttf", "ftd", "pez", "hsy", "syw", "ltp", "xwh", "aet", "mhu", "dix", "zef", "aou", "nnh", "bsf", "yog", "jol", "xse", "ipd", "dsv", "cfl", "tzs", "cpu", "geq", "tyk", "iex", "opk", "smf", "aol", "jad", "phd", "iee", "bpa", "mva", "hyr", "vst", "bti", "dps", "aif", "mfl", "gej", "bbr", "ikk", "yty", "dok", "etk", "oxw", "ysv", "dhy", "dsq", "vsh", "vsk", "ghv", "skw", "edz", "yuk", "aeu", "lmf", "axb", "zaa", "icj", "wdr", "akb", "ogh", "cdr", "ntz", "rji", "pex", "auf", "hoy", "kcr", "urj", "nug", "evr", "lmb", "bsb", "scs", "iav", "lix", "cox", "oyh", "nkg", "kav", "ozo", "hiz", "ahp", "wik", "kyi", "uvi", "ixf", "ltz", "ecb", "evy", "opg", "kga", "piz", "nnf", "uoi", "exr", "jui", "zeb", "meq", "weo", "csr", "ehm", "owv", "nmr", "mtw", "wsn", "oiw", "pim", "vys", "unj", "yps", "ogt", "wbi", "aua", "amj", "exb", "udw", "vla", "kak", "uja", "ruz", "iiw", "smb", "efd", "xle", "aqa", "gnb", "ghj", "aop", "xme", "cye", "dyu", "lpb", "vos", "juv", "tll", "hue", "ssj", "drm", "psn", "okd", "htv", "unv", "oyb", "fiw", "kye", "zhe", "wds", "huf", "zma", "yom", "boh", "wge", "khu", "wsy", "azu", "obh", "vez", "mih", "cmu", "ekp", "aib", "fax", "bdo", "cge", "acm", "nnt", "rgt", "ppu", "vse", "axw", "ecp", "fow", "yua", "akp", "kfe", "fkn", "apf", "wiz", "efm", "gke", "suz", "ezh", "mcu", "fry", "idv", "xtp", "waa", "uay", "wcr", "haj", "lsq", "ysj", "ixd", "udh", "xel", "lok", "kjo", "evu", "lje", "bme", "zep", "vth", "oey", "muh", "iej", "yur", "mke", "vro", "fsk", "iek", "xtg", "kdu", "hnd", "zeh", "ahb", "gka", "eaq", "puz", "zur", "nnd", "ifb", "lpc", "ixh", "spm", "faa", "syf", "fio", "koo", "ebp", "tzo", "nuk", "fuc", "lkh", "zth", "gyr", "vsa", "lpw", "wga", "naq", "uks", "dzi", "yza", "aai", "jaw", "ouu", "msk", "xar", "csy", "bch", "biz", "rrh", "yok", "yay", "uza", "uom", "jal", "pmu", "mpc", "zia", "yew", "orz", "rny", "mrc", "iku", "egt", "iim", "btl", "ovt", "ewk", "yko", "abt", "wiv", "usq", "xen", "ogw", "oji", "lmd", "uxi", "wby", "amv", "uku", "fae", "scy", "kja", "pmf", "yep", "weu", "axs", "xtc", "npm", "fkm", "efw", "mez", "zho", "ucs", "drh", "myk", "qin", "qan", "jah", "foa", "kyb", "yeq", "ibm", "uqu", "lsv", "fey", "zzo", "dtv", "toz", "pfe", "cib", "uej", "byz", "dze", "koh", "mii", "ioe", "gek", "ymr", "bcr", "vyc", "mbt", "mqu", "wve", "efp", "miw", "gak", "yic", "uho", "luo", "wyn", "jug", "lqa", "hnt", "oeh", "mgu", "bno", "mgl", "ypm", "oew", "tkm", "bhi", "ahh", "amk", "fko", "wnv", "rnj", "bue", "dsj", "zip", "beq", "jee", "hsd", "gje", "phu", "izu", "aot", "myv", "iio", "xvi", "dts", "yug", "opn", "dnr", "wvi", "hlu", "mka", "pix", "pdr", "hmc", "dui", "gyd", "ulv", "pfl", "smm", "ysq", "acb", "cgu", "gnh", "rlb", "kib", "hnf", "oep", "pht", "bbu", "obd", "xde", "jit", "udu", "cds", "syb", "drb", "hnp", "pcr", "snr", "pmm", "ttd", "zwh", "akm", "rlh", "kpu", "cph", "zag", "fls", "psg", "ubf", "utz", "fsn", "rzo", "akk", "sze", "fog", "aau", "mvp", "cpi", "xbu", "kih", "ksy", "zee", "nyj", "cve", "ffn", "ixg", "pge", "ohy", "apd", "sji", "afc", "nud", "zig", "zad", "acp", "daz", "kut", "tuo", "xcr", "aoi", "aav", "akc", "wru", "yns", "koc", "lfg", "mgi", "eue", "hsr", "smp", "hwr", "yia", "ugm", "bct", "lpy", "cni", "oxb", "baw", "agw", "kfl", "ruk", "ymm", "gps", "aio", "okg", "ahc", "bhe", "oyn", "hui", "gkn", "xne", "koa", "ptp", "fmr", "ciu", "bsd", "kju", "iic", "zli", "xyg", "rtk", "duf", "rpc", "drd", "bip", "ttg", "zap", "ozi", "ukh", "pdu", "gdp", "iby", "sfy", "fyf", "pke", "lmp", "gnd", "rmg", "joc", "uiz", "tvc", "pqu", "odv", "hyg", "myu", "arx", "qwh", "eox", "otq", "ugr", "ghq", "jil", "mmc", "xsa", "kyp", "hnl", "vco", "pmw", "dza", "kva", "foe", "wpi", "nhy", "hkn", "ixr", "dkr", "ixb", "soj", "veq", "sny", "fcc", "gyh", "ptm", "peu", "myj", "kbl", "xho", "mpp", "xga", "aov", "riy", "koi", "wbl", "smh", "obm", "lkl", "gnl", "sza", "wkn", "eaz", "hsn", "huk", "kve", "auo", "yig", "moz", "ryq", "qis", "kod", "lbs", "dcy", "nps", "ogb", "ktw", "cgi", "mrp", "ohl", "emv", "ijo", "xal", "taq", "kmy", "zze", "mtv", "noj", "htj", "onx", "wce", "mrh", "egw", "yeb", "vwa", "ddw", "zto", "kym", "kio", "aaw", "syp", "ecw", "zaw", "tds", "kyh", "iwr", "pci", "mib", "lkr", "pcs", "bne", "rgm", "aoc", "whu", "ksv", "xli", "axy", "yut", "lmr", "imk", "wfl", "fss", "rcs", "lsj", "uus", "hnr", "uum", "lgl", "wqu", "hij", "giw", "egb", "fmc", "kyc", "iyo", "agp", "uby", "klu", "yeu", "bna", "moe", "pog", "lmh", "uow", "bpo", "zue", "urq", "hoj", "sdy", "axl", "rgc", "iaz", "jel", "uex", "vyi", "cbc", "imv", "pys", "kje", "yao", "nub", "exl", "laq", "llq", "ezt", "cby", "umg", "dku", "zom", "rnv", "bop", "lcy", "ltg", "ksk", "tji", "imy", "rmn", "eky", "xot", "kmm", "zum", "haq", "ifd", "ocs", "kua", "mms", "uov", "ivy", "uhi", "lkm", "jra", "htk", "laj", "ltv", "kmh", "rax", "fsd", "uam", "kbi", "kik", "yih", "gmc", "ezb", "snd", "uny", "bwo", "yey", "cbi", "mkn", "pbi", "pcu", "shj", "xfi", "nrb", "oeg", "gnr", "yrd", "gyl", "ufr", "vaw", "zco", "kub", "uol", "mwr", "ctj", "aih", "obf", "jis", "kge", "vyt", "ocy", "ogd", "mip", "gaj", "cdu", "lkb", "pna", "eub", "bhu", "bsm", "xmi", "efj", "xag", "pye", "kyd", "mpd", "agd", "xus", "cva", "ooz", "yoa", "roq", "hsk", "hng", "vra", "yod", "aui", "ozz", "ohm", "zbe", "acw", "kgi", "zuk", "zah", "wey", "oaa", "pjo", "piv", "uxe", "xbr", "cfu", "odk", "zzy", "ceq", "pju", "hls", "gms", "ahd", "xbe", "vod", "egp", "abn", "pif", "kao", "pvi", "ucy", "tml", "gyu", "cuf", "buk", "oxh", "ecf", "axd", "moy", "bcn", "mnu", "tms", "nfc", "fih", "tzw", "ecm", "aec", "eax", "asz", "ftg", "drc", "ogm", "bae", "wny", "ukt", "tuk", "eua", "rkk", "guo", "ekk", "kms", "wju", "wva", "suv", "axm", "ebm", "aeg", "osv", "ugc", "bce", "pek", "ttv", "tzg", "aie", "nzy", "udc", "bsl", "auw", "aow", "fps", "wpu", "sgt", "ndx", "ehn", "knu", "ccs", "agb", "isz", "vah", "hnk", "nnm", "emk", "ecz", "rxi", "pph", "kkn", "ibn", "phw", "wya", "pao", "feq", "poa", "wkw", "ogc", "lkc", "csn", "nck", "aqw", "xwo", "pud", "tct", "rzi", "psk", "ohs", "ncc", "btw", "zwi", "ftn", "hgl", "fsf", "iih", "kqu", "bda", "ogf", "xso", "aoa", "yds", "ktu", "cjo", "jed", "pmc", "pmy", "ltn", "kcu", "oxn", "wsg", "bok", "jib", "ehl", "bsr", "cok", "wnj", "iaj", "vto", "dms", "skb", "lkf", "ngx", "phl", "aoh", "spc", "wgu", "aef", "spt", "rgb", "tez", "muk", "faj", "utq", "fsb", "xdi", "rkj", "exd", "rkv", "mrr", "esz", "nrh", "kce", "zge", "oay", "fhy", "wci", "mpg", "lza", "ihu", "tij", "ifg", "kyf", "xav", "yms", "ccc", "wiw", "irq", "rgp", "lky", "zhi", "okk", "ncb", "ikm", "mrd", "wmy", "bav", "zst", "yum", "xsp", "rpg", "mje", "gok", "wcu", "ugd", "wja", "noq", "inx", "oih", "suh", "bcc", "szo", "uze", "doj", "cud", "ncw", "gyn", "zca", "xii", "dcc", "sbc", "bao", "icz", "iid", "tvt", "ytv", "iye", "mrg", "msv", "vyr", "bgr", "rnk", "ehs", "cyg", "ekg", "eht", "ebh", "xfr", "vip", "bci", "umv", "aak", "kud", "axf", "mpy", "xdo", "tpw", "slt", "uim", "ogp", "skl", "bmo", "egf", "jev", "hji", "iib", "mmm", "oyu", "rfs", "bif", "xba", "lns", "goj", "tmp", "hyu", "hmr", "ddc", "jat", "wax", "uig", "ddm", "yoh", "yaj", "ttn", "khs", "pyf", "iox", "lzo", "spp", "dcs", "efh", "ikt", "upk", "mpk", "cuu", "uyb", "srh", "mrt", "xsh", "acf", "obp", "svs", "aqs", "vds", "miy", "nnp", "aij", "oyp", "mlb", "cuo", "lpd", "aiz", "dtd", "soq", "cdc", "vsc", "lij", "wdu", "rgf", "jeo", "agy", "bmw", "euf", "vyd", "mvo", "ovw", "xro", "uxo", "ofx", "uap", "ezz", "uaw", "yiv", "zya", "xfa", "rbt", "vha", "hrs", "cvo", "uod", "ezc", "mrk", "kko", "zre", "jub", "tku", "ghk", "exg", "mrw", "uyh", "nnr", "yeg", "zym", "pry", "uxa", "dkm", "ugp", "upj", "rgn", "csg", "uzu", "kae", "pyc", "chq", "scb", "tps", "vym", "aah", "ugw", "vpr", "vli", "hsg", "ksj", "scc", "egc", "zof", "vpa", "flc", "ftv", "kmc", "exy", "rbc", "yly", "cbl", "ipn", "lpg", "awg", "aei", "aob", "oux", "ptd", "kiv", "qae", "oeq", "gsq", "iif", "vyl", "uft", "zhu", "pug", "aok", "baz", "mcs", "pce", "yoi", "fld", "zbo", "bfr", "mcf", "eui", "goy", "mrl", "xsc", "nms", "loq", "tzh", "fuk", "bsn", "mnt", "pae", "ecn", "iip", "dij", "nzh", "yzi", "jig", "aom", "fsq", "ncd", "vch", "bcl", "apn", "yrn", "tcs", "vda", "avu", "noz", "xtl", "zol", "ohr", "rbh", "ozy", "acn", "njr", "oxl", "xda", "drj", "kaj", "ebn", "wia", "tvw", "dyj", "fcs", "vca", "piu", "pww", "lmg", "vwh", "uoa", "yji", "nmd", "ipy", "vyo", "kuw", "bim", "ppt", "bcw", "yip", "pgi", "ruh", "hiu", "gji", "vma", "nng", "frs", "oxp", "zir", "ahf", "ezr", "oyr", "hyy", "wlt", "lml", "vyb", "qwa", "uoy", "nyq", "zos", "rck", "phc", "kry", "drp", "wtw", "iir", "thz", "sxi", "bps", "baj", "eoe", "riq", "tvp", "sft", "tzk", "ixl", "koz", "rlc", "nax", "fsr", "uaa", "ujo", "eyy", "wgi", "zun", "snb", "ezd", "ebd", "ydw", "pmp", "pyl", "cnu", "epn", "oaq", "xla", "dkh", "fuj", "lku", "skp", "rgd", "agf", "wry", "oax", "ije", "xop", "btf", "pbl", "fys", "skc", "uah", "oaj", "dwy", "upv", "ouy", "iul", "bih", "npp", "fod", "ubg", "cza", "uey", "uun", "kgu", "dnd", "axh", "obg", "fej", "rll", "uyl", "rpp", "drr", "uop", "koe", "oxm", "wtu", "yng", "pyb", "vyf", "cuc", "vae", "ddv", "zde", "flt", "vri", "rcm", "vne", "faq", "sds", "pdf", "orx", "kmf", "fyw", "egd", "vog", "fcy", "mlu", "taz", "dhr", "zba", "mbh", "wvo", "gih", "rlm", "pyh", "auh", "auv", "itq", "pob", "zul", "tkr", "jih", "lhy", "oht", "lfy", "ykr", "drw", "fom", "zaf", "wnk", "jaf", "vsp", "kph", "lcd", "bpl", "woj", "uif", "sry", "obn", "drg", "scd", "evl", "caj", "gyg", "biw", "wsv", "ruv", "buo", "qur", "mbw", "suw", "zit", "gmr", "jod", "tzt", "dct", "syu", "ugf", "jir", "dgy", "uyf", "mrf", "mui", "vss", "ulj", "erx", "bcu", "ycy", "plc", "lkp", "myy", "skd", "bii", "zeg", "yls", "ukw", "msj", "mls", "dcb", "olj", "scm", "ebw", "gdy", "uaf", "uob", "oip", "cct", "dyv", "xfe", "zsc", "ffj", "apg", "oiv", "mua", "jaa", "lvd", "eux", "evw", "sbs", "csk", "adz", "xhe", "kvo", "pwr", "nnl", "ikr", "avv", "olz", "yeh", "vof", "xsu", "vaj", "ddb", "mko", "kmn", "nmp", "wph", "zbu", "elz", "uyc", "jha", "faz", "pja", "rcc", "btc", "opj", "abm", "sct", "ohw", "nhs", "sdw", "voo", "uzi", "sml", "nkj", "fku", "hmm", "pym", "zys", "zek", "avl", "ybc", "wlw", "uxt", "afp", "bez", "ovc", "gip", "jut", "ncn", "mcb", "jpm", "bni", "oii", "pbs", "ncp", "ctk", "gsv", "cja", "agc", "yhy", "srd", "vao", "vaf", "pej", "kwr", "ydb", "vue", "syh", "bfi", "fms", "vde", "lze", "yul", "drt", "srb", "osj", "npc", "phb", "ttk", "mcp", "udm", "fji", "lrs", "lfn", "viz", "vdi", "mbc", "tdw", "blv", "fyh", "ncm", "yaq", "ezm", "zra", "ezf", "exx", "bjo", "jup", "yku", "bex", "kig", "owq", "uvr", "awu", "cdp", "xpu", "pyd", "fok", "phm", "tmd", "oxv", "pii", "kuk", "vdr", "uym", "ynb", "oie", "mgm", "aep", "zte", "fij", "dax", "xab", "oxr", "icq", "luv", "tcc", "pgu", "pve", "gzh", "euw", "ruw", "php", "lkd", "kog", "trh", "hps", "lcs", "akg", "kuc", "mbb", "tvn", "osx", "hza", "upq", "rlp", "uyu", "wwf", "tcb", "tzp", "bfa", "wwr", "bpe", "wih", "sjr", "abf", "azt", "saz", "uoc", "yii", "zeu", "zfo", "udf", "pua", "xsi", "rmv", "ddn", "tcw", "spd", "zoi", "dbc", "skg", "ahg", "rhp", "gng", "xlo", "puf", "zwe", "mhz", "gub", "pyp", "luz", "wsj", "cii", "prs", "guc", "liy", "dky", "zpa", "scf", "vwi", "pni", "emj", "rfc", "ufc", "iey", "kyn", "pmd", "vom", "dcd", "nwy", "izh", "sgm", "jma", "sll", "biq", "vso", "isx", "uzh", "udp", "tvm", "ynm", "efn", "ynh", "dpc", "lzh", "ukc", "kiy", "tvr", "phn", "ahj", "aew", "iur", "cju", "okv", "vfo", "muf", "tzc", "tzm", "dpt", "yaz", "evc", "dmp", "tdy", "ikw", "pva", "zic", "nmt", "sgh", "pmj", "wws", "ymd", "ynw", "kmt", "rlr", "vex", "euo", "oyg", "snp", "izs", "wdw", "sld", "ptg", "snc", "cmp", "wka", "ixn", "xei", "vsi", "byq", "yzo", "sdc", "fze", "xex", "phk", "vyp", "hkm", "msq", "sgs", "yae", "rff", "zla", "cps", "xxx", "vyh", "gsj", "ezp", "pcc", "ppp", "gmt", "eiu", "nij", "huh", "tpc", "diy", "syg", "pvo", "ivs", "szi", "mmr", "evt", "kuh", "ufl", "khm", "ekj", "ebf", "acg", "qth", "yuc", "omq", "phh", "abp", "tyq", "yrh", "frh", "vvy", "tcm", "mts", "gty", "cwr", "ejr", "voa", "swu", "fmp", "fek", "iyu", "ehw", "dnc", "fuz", "scw", "tnd", "zmi", "wwc", "qia", "zda", "ddf", "ehd", "fiz", "mbp", "rpw", "scp", "dpp", "fyu", "ncf", "bve", "wlc", "wdt", "iay", "psv", "aiy", "ufu", "mrj", "oik", "muz", "hsq", "xet", "tcp", "iil", "phf", "spb", "svu", "aek", "drf", "fip", "flp", "duv", "oek", "efy", "nmm", "sfc", "nrd", "ipv", "edx", "ifj", "unq", "ddp", "niy", "yoo", "iig", "xya", "mbd", "tmt", "zwo", "ipk", "drk", "vpo", "ffk", "mmt", "ttj", "bcp", "ftk", "eix", "xun", "vsw", "ydy", "npt", "nbb", "uyn", "suo", "tdp", "rcb", "jog", "kgl", "kui", "zmo", "dmd", "xgo", "hiy", "vmo", "rrb", "bju", "azh", "rpd", "bua", "uzo", "jrw", "pmb", "ypn", "nvs", "afb", "ppm", "dcp", "vij", "azd", "tkh", "fza", "drl", "ovr", "miv", "jrs", "rpf", "zpr", "oeo", "ouz", "fkr", "waz", "uoh", "ikl", "exn", "lnc", "xad", "tiy", "tvb", "oib", "foh", "fud", "gts", "rbb", "kyu", "djs", "lbc", "usz", "iez", "rcd", "uek", "rft", "ubn", "iie", "ooy", "dld", "igy", "vdo", "coz", "uxs", "ppc", "gcy", "ewq", "aod", "evp", "kez", "zop", "qat", "ddj", "nkv", "gxi", "ahk", "qai", "wul", "ylt", "bax", "biu", "huy", "aqt", "maq", "ovp", "aeb", "oxd", "rjr", "dmm", "fmt", "eyq", "zyn", "ovd", "zyt", "yjr", "tgm", "ddd", "vim", "yry", "uvo", "bdr", "bcb", "ppw", "moj", "fao", "fcw", "boj", "nnn", "ovb", "hpm", "ugn", "tdb", "dcn", "nnj", "tcd", "afw", "epj", "xxi", "fkh", "bsg", "gnn", "vga", "bnp", "gud", "rvs", "jik", "stz", "sez", "rzy", "jst", "yny", "xno", "yrt", "joo", "zoa", "ajp", "rrd", "rpb", "hnj", "yib", "dny", "mft", "sfs", "azm", "xiv", "uav", "nzu", "umk", "zuc", "udn", "zlo", "vsm", "ehp", "opv", "hny", "zey", "xhu", "guj", "odz", "umy", "rrw", "xna", "dgh", "uyg", "nww", "keq", "ppg", "sls", "tzb", "vus", "gtv", "tfs", "lmv", "guz", "izm", "urz", "zsh", "efg", "jro", "rgg", "xsy", "kyg", "iok", "uzb", "rww", "dgw", "oao", "jax", "tzl", "zvo", "xap", "ovm", "gny", "sdn", "poh", "azl", "ubv", "foy", "zoe", "mrn", "omz", "ptn", "hrh", "paj", "kht", "rrt", "dcm", "xbi", "uoo", "lox", "pmn", "fii", "epk", "aiu", "hku", "zne", "piw", "ayz", "vye", "tvg", "ivu", "cms", "oio", "mnw", "wlg", "qas", "biv", "kmw", "jau", "sxa", "boz", "pmr", "idz", "mnc", "aay", "nll", "ciw", "ffv", "yio", "mry", "hmp", "btb", "kuo", "dtc", "gaq", "uhl", "esx", "sbp", "cmc", "evd", "duh", "czy", "smg", "hrm", "odq", "gzo", "vbe", "ocm", "ggw", "evm", "zao", "ouq", "xgr", "pct", "zki", "bmc", "ydh", "rlg", "nht", "zod", "tvu", "loz", "eqi", "mpn", "jwa", "ixu", "gii", "ukb", "mml", "ifk", "prc", "krs", "vsu", "trp", "wwt", "zqu", "uxb", "cyu", "lji", "flh", "dhs", "ayq", "hnv", "ozh", "jem", "paz", "xml", "lnw", "xxo", "bga", "bms", "bgo", "ukk", "sbb", "ekv", "vna", "pka", "bge", "tlt", "juk", "ghz", "wwm", "ocd", "rzh", "jov", "eoj", "dtt", "snf", "xod", "wgl", "nvu", "zse", "tvf", "sgy", "vle", "gmp", "vaz", "avn", "ajs", "qho", "dkl", "hcy", "unz", "tnt", "euh", "zdi", "puj", "bja", "ezl", "sqm", "ggh", "dls", "tbs", "pyg", "otz", "fcb", "ltj", "paq", "wao", "xby", "wur", "tpt", "sww", "ydc", "okj", "rbm", "hhy", "vlo", "tvd", "ajr", "tmm", "psj", "atx", "rrr", "dcw", "smn", "cgl", "fzi", "wdy", "bsy", "zsi", "rln", "rbp", "zko", "iiv", "dnb", "rcp", "tcf", "vvi", "luh", "lgh", "gku", "fct", "xru", "zot", "dzh", "izt", "bcd", "tls", "uyp", "ecg", "huo", "tsx", "zzs", "ivt", "woq", "zou", "pax", "buh", "hlt", "evf", "dll", "dns", "gwy", "khr", "aeh", "tdt", "tvl", "uwr", "kku", "pox", "tpp", "rbw", "uib", "ezv", "dbs", "tzr", "azs", "mox", "tbc", "ykm", "ukl", "cyy", "dcf", "pnc", "ccp", "hhh", "hrt", "buq", "spf", "jiw", "nlc", "nhd", "ruo", "yts", "qmi", "ydd", "pkn", "ccw", "dgs", "bpi", "luw", "tnc", "spw", "izw", "bcf", "pcm", "uyd", "pkw", "csv", "nkk", "apk", "zow", "kug", "uup", "uhu", "lmn", "sij", "kij", "sql", "mbf", "tdc", "uxw", "cpc", "vsb", "uae", "wlb", "yik", "hkh", "gmd", "xev", "srt", "nlt", "zzb", "ovh", "yub", "yld", "hpk", "dbh", "nfs", "hdt", "xqu", "ehb", "sdm", "tny", "acz", "wmc", "fdy", "epv", "cdt", "zni", "rcw", "tjr", "ypp", "ibh", "fgd", "bup", "mdc", "drn", "vmi", "jsa", "tlb", "tvh", "scn", "dpg", "ykh", "mty", "src", "ukp", "fyc", "lnd", "awv", "ryz", "nmb", "abk", "qar", "ovn", "yue", "jid", "tzu", "jot", "zyb", "tft", "awj", "nxa", "zev", "dmt", "bki", "hdd", "gza", "uzm", "tnb", "bns", "dlt", "ygh", "mnf", "pje", "aoz", "mct", "koy", "pns", "zyi", "evh", "zid", "yrg", "jii", "fyb", "flw", "rmj", "rsz", "nbh", "nuw", "ydm", "waj", "bsk", "xtn", "mnd", "jri", "vhs", "ksq", "sdv", "dfs", "zna", "ylc", "wlu", "bhp", "zzf", "ocw", "trm", "dfc", "fyp", "hsv", "cpm", "fcp", "nls", "gug", "zus", "crs", "ivr", "evg", "ibd", "obk", "spg", "vsf", "nvy", "rfw", "ynf", "zyo", "yyi", "ufm", "nml", "szt", "zri", "ydl", "jop", "ptv", "rmk", "zzw", "mmw", "jth", "hkr", "fsg", "smv", "sdh", "ovu", "eqa", "dxi", "xri", "nzs", "wty", "xfu", "flr", "grs", "pgs", "jow", "fik", "ddg", "lcc", "zog", "afn", "nlv", "ppf", "ebj", "bnt", "rfb", "vte", "hrb", "mds", "asx", "fzo", "zzt", "ymt", "srp", "kuz", "mku", "ipj", "dbb", "knr", "zyw", "zfe", "mbm", "ggp", "nsz", "amz", "dhd", "nhc", "muj", "uio", "xyo", "huw", "zsp", "oxg", "ohd", "gik", "zik", "kmr", "qwe", "pnu", "pcb", "ncz", "viw", "dzu", "izb", "ccd", "aoy", "nft", "hds", "zro", "hzo", "sbh", "zav", "sdp", "pml", "ggm", "uyr", "bcm", "hwy", "goz", "vwo", "djr", "ocb", "azr", "eiy", "zmu", "ymf", "tcn", "ukm", "hlc", "dhp", "oix", "wwb", "mmd", "eoz", "uiw", "tgh", "nld", "stx", "jja", "yyu", "tzf", "sxp", "hmt", "dyy", "xaf", "mza", "qco", "slr", "bbw", "vdc", "uvs", "ozu", "vni", "yud", "lpk", "vge", "tsz", "wyc", "ezg", "hrd", "aqb", "duw", "yuu", "dpw", "gmb", "enx", "rrc", "fcd", "ioj", "sdb", "dvs", "uhr", "trb", "ibc", "iut", "ovy", "mnb", "afm", "myq", "jie", "dmb", "tmb", "zme", "fmm", "ohc", "lzi", "qha", "ovl", "uky", "nfm", "crt", "avc", "wlx", "iuc", "jae", "sns", "aqc", "vbu", "tdm", "ohb", "xdr", "gbt", "syk", "kuy", "dft", "sdt", "ezn", "ckq", "ieq", "uxc", "jiv", "jeh", "xys", "ivp", "hyj", "exv", "vsd", "igv", "kml", "ftj", "akv", "jpa", "gpm", "bij", "thx", "tdh", "gze", "pyn", "cfs", "ynr", "ovg", "hlb", "fyd", "ziz", "yui", "zyg", "vta", "vno", "mcq", "irz", "cyv", "vsn", "dux", "tuw", "wwp", "trd", "ulz", "vfr", "ziw", "yvs", "vay", "zno", "ovf", "lfk", "ggt", "ixv", "tnf", "txi", "iud", "qub", "tlc", "nzl", "lgy", "vgu", "oae", "wcw", "nfk", "ifv", "mkh", "uhn", "twy", "pmh", "srw", "mji", "oej", "ctq", "rrm", "rcf", "slc", "umj", "bmu", "ygm", "mll", "hyk", "zzc", "bjp", "igj", "ozn", "uii", "yuw", "pzi", "xif", "lpn", "wdc", "rfm", "btu", "jre", "nrc", "hyv", "gjr", "dlb", "bke", "zso", "vsr", "npd", "hze", "hoq", "ydt", "flf", "xtv", "viu", "svp", "yvu", "fcn", "kty", "hdf", "ajm", "xea", "lbf", "idq", "ccf", "zfa", "osz", "jca", "ikb", "slb", "zch", "jic", "cyj", "syv", "vwe", "fym", "siq", "xsl", "diq", "puk", "hrl", "vav", "tld", "ohh", "mmp", "iup", "ipz", "gyz", "dnf", "oxx", "lng", "etq", "vhe", "jrt", "bfl", "dtb", "aao", "ecv", "ruj", "tky", "snl", "kuf", "zfi", "mcw", "cdm", "vun", "hld", "ibw", "soz", "uxd", "qyo", "tmw", "usx", "iaq", "hpc", "zzm", "cvs", "uxf", "aae", "elq", "rwy", "ruy", "rcn", "pdt", "oyk", "bpm", "zub", "txa", "ppd", "nwu", "aee", "zyc", "piq", "tbp", "vtr", "zfr", "hdy", "gcs", "aog", "jpu", "hdm", "xve", "vsl", "pcw", "rbf", "ynp", "ahv", "luj", "ukf", "hlw", "ydg", "vdp", "yks", "lrh", "ucf", "vih", "lnb", "koj", "hlp", "xou", "fll", "uik", "pcp", "nhr", "ltk", "kue", "vbr", "mhy", "tzd", "tuh", "ajj", "pui", "rpk", "bkh", "llz", "ykl", "btp", "yxi", "rht", "wwn", "ccb", "yck", "crc", "mij", "rlj", "dvu", "ovj", "pls", "nnk", "lfv", "rbn", "zov", "nbs", "wae", "mbn", "bfe", "fcf", "jco", "hox", "rdz", "ppb", "vyn", "dlc", "rxa", "nxm", "csq", "xva", "tng", "uok", "mmg", "jna", "exk", "ezy", "lnt", "ejs", "zdo", "tkl", "lfj", "zob", "lgb", "rrp", "evb", "kgb", "hpt", "dbp", "flb", "xgi", "hzi", "evj", "coj", "wrt", "gmm", "fcm", "yrr", "tmh", "ehc", "wsx", "nuu", "xki", "dff", "foz", "mkr", "lvs", "uxh", "ivc", "afd", "poz", "mmb", "rzu", "cez", "cje", "ihs", "gkr", "ajg", "xfl", "ohp", "zky", "hlh", "sbt", "nuh", "tux", "sbm", "phg", "fmb", "ntx", "cuy", "fua", "nnv", "dvr", "rbd", "cik", "ztr", "xyl", "hlg", "cdw", "lct", "oee", "weq", "tfc", "wbc", "rvl", "ctx", "lnh", "jge", "snh", "amq", "mmf", "hpp", "jda", "lbt", "ukg", "bbb", "yoy", "cmt", "gmw", "izc", "dxa", "vti", "ivw", "hpb", "pih", "shq", "efk", "wlf", "tns", "ysz", "vba", "prt", "ajd", "qif", "ooq", "wys", "ypc", "brc", "ibt", "zib", "hdc", "rpn", "btm", "nqi", "zii", "exq", "ccm", "gcc", "zyd", "vcr", "ejm", "dtm", "pmg", "jho", "ypd", "fyr", "csj", "fgm", "avp", "wll", "wyl", "dbm", "wlr", "tbh", "rvu", "bty", "xsm", "xmu", "nzw", "bbt", "chz", "afh", "peq", "glb", "fmw", "jao", "dht", "htq", "sng", "nxb", "abj", "nrt", "rhs", "igk", "pkr", "rqa", "yek", "nhb", "mhs", "vbo", "vjo", "jde", "npb", "xup", "ooj", "dpy", "qal", "bjr", "dtj", "qdo", "hlm", "slp", "zau", "zyk", "npy", "eqb", "qwi", "hdw", "aqh", "ptj", "uau", "hrc", "dng", "apj", "ocp", "psq", "kmd", "sws", "ktv", "ggc", "ikp", "sdf", "jrh", "suy", "uyy", "oyj", "pds", "rvy", "mmh", "nfb", "wdb", "swc", "qip", "vka", "mub", "zbr", "fhr", "zta", "sdl", "wut", "rwu", "grh", "qto", "qba", "hll", "bph", "ikc", "gkh", "xos", "yuh", "tnw", "wwd", "iuk", "rgv", "wwg", "sxv", "dww", "rnq", "ijk", "caz", "oaz", "ocf", "ejp", "sxs", "fbh", "aix", "ukd", "fbc", "vgo", "trn", "zgr", "loj", "oij", "wnq", "wlp", "pdp", "zyp", "lwy", "srm", "cyk", "xsw", "khz", "gij", "nlp", "iqa", "wrs", "mhm", "zay", "ycb", "evn", "azp", "lny", "jeb", "vob", "oyy", "sgp", "pgl", "htz", "kyk", "hsj", "iyi", "lkg", "hmd", "fxi", "puy", "djp", "hkl", "auz", "vyg", "cih", "kza", "guk", "gww", "mws", "ocn", "tix", "aqo", "igq", "avt", "sxm", "mnh", "frd", "acv", "avg", "zoh", "wsq", "vpe", "zga", "vho", "ynx", "crd", "vfi", "huj", "ebv", "iik", "zvi", "xyc", "uog", "azw", "dbt", "hgh", "jof", "xge", "ydp", "ymw", "zyh", "ucd", "szk", "nrw", "flg", "cml", "tmf", "rpy", "tbb", "fpm", "prp", "abg", "ijs", "drv", "xyt", "scg", "rrf", "szu", "cmd", "ejc", "iub", "jom", "vyu", "lbw", "dpd", "rfp", "duq", "skq", "twc", "sfm", "sdj", "alx", "uxl", "nqa", "zpi", "tuv", "gnv", "vsg", "jsi", "vop", "dpf", "grd", "ytt", "gbs", "zif", "skj", "sdd", "euz", "ruu", "dyq", "kkr", "iky", "fbs", "gtt", "trc", "hcc", "oxu", "opq", "nhw", "lnf", "pib", "czo", "vme", "rtq", "mpj", "avk", "nrp", "wlh", "tzv", "siy", "evv", "suu", "dlp", "jaj", "yzs", "brs", "yuz", "sbd", "wdh", "eoy", "tvv", "azn", "zgo", "bpu", "ebg", "oxj", "xbl", "gzi", "tdn", "iua", "zka", "lhp", "gyv", "gpp", "bva", "axn", "ggb", "gbp", "gbh", "zaz", "wcc", "dtp", "rfd", "mze", "zpo", "mtc", "nbn", "cuz", "uxp", "ivn", "swy", "ehh", "zae", "rcz", "zyl", "trt", "rbj", "plt", "crm", "mrv", "fdn", "lbh", "jto", "dml", "nlw", "jek", "frm", "nhp", "ylm", "wko", "gtc", "wij", "wwl", "nws", "azq", "nxs", "npg", "gmf", "ynl", "yky", "biy", "ajk", "kyv", "vpi", "uhs", "ijn", "ezk", "coq", "lnp", "fln", "xju", "vdt", "fpc", "qad", "sgd", "lcw", "njs", "exj", "cnb", "gqi", "axx", "bmp", "mdw", "gez", "ylb", "wtv", "apv", "oox", "nff", "uih", "dpb", "owz", "mdb", "fnb", "xdu", "mtp", "jfk", "bdy", "nyx", "iyy", "lkv", "qso", "cls", "pko", "wlm", "srf", "nbp", "brn", "cgw", "szc", "khw", "hjr", "pcg", "nxt", "jrg", "dgb", "dhm", "bka", "jpe", "zyf", "zuz", "nuv", "jwh", "yoj", "vpl", "mwc", "gwu", "xiw", "zoc", "zsu", "dfm", "jiu", "woz", "khy", "hcm", "ojr", "jrr", "jba", "fez", "ncg", "imq", "vdw", "zss", "qsa", "zly", "axg", "mnp", "ikf", "sqb", "ylp", "uoe", "xub", "tnh", "uzs", "fky", "zcl", "etx", "tfm", "ygy", "lbb", "jhe", "cfc", "fyl", "dtf", "aoo", "zej", "mcv", "ejt", "cdd", "sgw", "tpg", "hhs", "aaj", "nvl", "hmb", "ccy", "ssz", "buj", "mgs", "tpb", "jwi", "dgp", "ycs", "ebk", "ixk", "hcs", "tpd", "nzb", "izr", "dmv", "khl", "nlb", "vif", "uuk", "voe", "bnf", "skv", "zke", "nrm", "hfc", "aqf", "zpe", "vix", "ejd", "tyz", "tdf", "rnz", "grt", "vfa", "jeu", "fiu", "rux", "mcy", "hrw", "zjo", "wmd", "aez", "ydj", "fdh", "ajn", "bfu", "ylw", "qit", "mng", "rhm", "ozs", "cdb", "cbn", "wdf", "ajb", "wib", "lvy", "ueq", "lcm", "ljr", "clc", "xss", "hmw", "nhm", "nuy", "vps", "nwc", "efv", "afy", "szh", "gpc", "mzo", "kny", "mnm", "lcp", "jrb", "yml", "snm", "bgi", "mnl", "fww", "ckz", "auj", "ibf", "huv", "jrn", "vve", "aaz", "gmg", "nwt", "egk", "swt", "xir", "kiu", "lzb", "fdc", "cmy", "udv", "ajw", "xov", "lck", "zpl", "hwb", "rxs", "npf", "dgn", "wmr", "vja", "hdh", "ynj", "jfo", "muo", "qbs", "emq", "mzi", "ydf", "zdu", "vov", "pcf", "mnr", "jrc", "jka", "frb", "kyj", "cdf", "ajc", "avm", "gax", "tnm", "bnw", "jla", "dhc", "mld", "nrl", "jif", "lnm", "qic", "vyy", "swb", "ncv", "krz", "gmh", "fny", "avd", "scj", "gtd", "bmx", "ypy", "cbd", "mlt", "vyv", "axu", "zzp", "qig", "poy", "qma", "mny", "hlf", "yox", "jmo", "bsj", "vut", "hcb", "sgn", "tuy", "tgw", "mpv", "akj", "fpt", "lxx", "wvu", "mww", "mdy", "ybb", "xke", "dfb", "rzb", "ecj", "vva", "rhd", "fds", "cpp", "ajh", "ryx", "swp", "oxk", "fkl", "lbp", "mtb", "nxp", "izd", "avh", "yij", "ufs", "mfs", "fml", "bnc", "lcb", "fxa", "vgr", "fmf", "tgy", "cnc", "nbt", "gml", "pgt", "tdv", "nxe", "jsh", "bbh", "rfh", "ikd", "fmd", "ydv", "xym", "bnb", "ozl", "fbp", "ycm", "iqi", "dgt", "wyt", "nbm", "snw", "frc", "dwu", "cws", "tzy", "dbn", "vdb", "uur", "mlc", "dks", "vfw", "tgs", "xiu", "njc", "muw", "uzc", "xyi", "suj", "fwy", "sgc", "kmb", "cuw", "ycd", "rlk", "jsc", "jbu", "ivf", "rcg", "lxl", "iax", "dnh", "jio", "olq", "bnh", "uje", "ggd", "zbi", "zva", "tzn", "tws", "jue", "dtn", "ynk", "nmh", "guf", "jpr", "wkr", "sqf", "flm", "nzf", "jse", "rrn", "kts", "omx", "ylg", "ylr", "tbm", "nfd", "tlp", "nuz", "ivl", "yrm", "fyn", "cfm", "zex", "jme", "aeq", "mvs", "gls", "rrl", "yoe", "rbg", "qfo", "sxt", "jci", "ucb", "huz", "hlr", "jsp", "vfl", "kji", "kiz", "ahz", "kuj", "zcz", "ivd", "fsv", "xai", "twt", "jmi", "cpt", "vox", "hmg", "bux", "fdw", "dpn", "uhf", "bcg", "zhn", "afk", "zye", "vts", "yct", "vcl", "wym", "ycn", "kkh", "jdi", "sgb", "fnm", "hdv", "buw", "njh", "tpy", "hcp", "rvp", "dsz", "tdd", "tpf", "ovk", "grb", "rvt", "ldz", "iiu", "rgk", "gld", "cft", "lsz", "bnd", "jrm", "qir", "fbb", "cdy", "szy", "qca", "hix", "ohk", "xjo", "hax", "crp", "azb", "zzu", "ycc", "ubk", "tbn", "avw", "oiz", "kmp", "twu", "tdj", "svr", "wld", "njt", "dvl", "xtj", "hbh", "sbw", "mdt", "ajt", "egj", "dqa", "mgh", "grn", "ylh", "dfw", "ezj", "vci", "uxm", "hpd", "gnj", "gbc", "pdc", "vpc", "hky", "fuh", "yrc", "fnc", "azc", "joj", "uws", "mrz", "bnm", "vcs", "jta", "bhs", "mvc", "fzh", "jli", "hiq", "zyr", "uao", "njp", "fgw", "xxv", "uzt", "trk", "kpm", "nrf", "kcy", "szl", "jrd", "nmf", "kjr", "bpc", "xmm", "wdl", "rkz", "ohg", "zcr", "jko", "mtt", "tks", "yfc", "pfc", "dfd", "crh", "wyd", "xxa", "djd", "voh", "nvh", "qvi", "zih", "djc", "yax", "xyf", "mtm", "wdp", "vhi", "tgt", "ppn", "lbj", "fub", "fcz", "bgu", "bsv", "qun", "hdb", "fnf", "syj", "fnd", "dkw", "fyy", "cns", "tgd", "qft", "dtl", "ulq", "svt", "jux", "fyg", "dmg", "wts", "wua", "vph", "igz", "drz", "dmh", "dhb", "hdp", "sbf", "lmk", "lmj", "jbe", "xvo", "oyv", "izp", "mlp", "tbt", "yuj", "rgj", "rhr", "wps", "dkg", "mdh", "nzr", "ygn", "nfy", "mht", "clt", "ivb", "pfs", "bdp", "axv", "oyz", "dnm", "vuk", "fgt", "sdk", "izn", "nmw", "pnp", "fns", "nxr", "hoz", "hrp", "btd", "jch", "xol", "rlv", "phj", "pcd", "png", "uyv", "npw", "vrs", "xob", "pyv", "jep", "ihy", "pnt", "jle", "brt", "ggf", "duz", "hux", "ptk", "rxe", "lbk", "bls", "ioz", "byx", "lrt", "yrb", "wcs", "qst", "zaj", "vdf", "zdr", "vtu", "bsq", "wrc", "nmn", "hbc", "bpp", "tkg", "xgu", "uxk", "lrd", "grp", "dmw", "txv", "xje", "prd", "dmf", "zut", "xau", "lyx", "nwv", "nbj", "obz", "svc", "pvc", "scv", "lbd", "djm", "ikg", "rzw", "vpt", "nzc", "nsx", "egv", "dwt", "guw", "uzw", "tuz", "ywy", "dhw", "pyk", "jcp", "hcd", "bqu", "pji", "aqd", "mfm", "bpw", "cmw", "dhl", "twp", "xnu", "tnp", "sfb", "pgc", "qim", "sfw", "fhs", "xyw", "qab", "tmn", "aaq", "zsf", "udk", + +#if 0 +"glt", "gtm", "iij", "hfs", "uht", "pll", "srr", "tmg", "gyj", "zui", "vce", "qre", "izf", "nzm", "fpp", "zzr", "voj", "jip", "bbq", "trl", "nrn", "ehf", "uut", "rxb", "nmv", "sqa", "qpr", "vmw", "jhi", "xsf", "xip", "hbb", "mtl", "lhs", "ejb", "cfb", "dvc", "swf", "spx", "fws", "wum", "ozm", "ocq", "djt", "fpy", "pyu", "nxw", "khn", "bmt", "zuo", "zve", "tcg", "smk", "dcz", "frp", "sfd", "nzt", "mxi", "fpg", "nfp", "nrr", "lbm", "zuh", "sxr", "qbe", "fui", "gcd", "aqm", "gpt", "ytl", "cbm", "kcs", "ybp", "svy", "vje", "ykw", "sfp", "mdm", "sff", "kuu", "gtp", "duj", "btv", "wcd", "prf", "ivh", "hpw", "qaw", "xoc", "nmg", "hgm", "uij", "vur", "wdg", "pgw", "yzh", "izl", "zua", "wdm", "udz", "prm", "ilz", "evk", "vwr", "eyz", "spv", "djb", "trw", "bpt", "udj", "qbu", "ixj", "hvs", "izk", "xep", "slf", "mbg", "gbm", "fks", "rqi", "xix", "jbl", "ogj", "hbp", "ggn", "qor", "ylk", "zsl", "hct", "ybm", "huu", "zzh", "vnd", "uhy", "lcf", "aej", "frt", "vru", "twm", "wyr", "ivv", "aoj", "pyj", "ilq", "bds", "uzn", "prb", "ncj", "kzo", "bnu", "kaq", "buu", "swm", "fiq", "ppv", "qam", "jdu", "ojs", "slm", "nwf", "ikv", "czi", "vms", "gkm", "fzu", "pgf", "fgs", "qon", "iuw", "ejl", "nlr", "juj", "jgr", "mgt", "ccn", "zby", "prw", "czs", "pgp", "lrb", "cpd", "wkm", "aoe", "abv", "xps", "epq", "ybs", "rzs", "jrf", "tlh", "svl", "fuf", "yxa", "lrc", "cmb", "bix", "lxi", "lpv", "lcz", "lww", "dtk", "rsx", "lcn", "juc", "lnr", "quh", "rvr", "dbj", "ibp", "dlw", "wkh", "xig", "uoj", "ioy", "wrd", "fck", "knd", "dlr", "oiu", "jcr", "dmk", "xud", "xlu", "djh", "ypg", "iuj", "xph", "ehk", "umq", "sxc", "rkq", "baq", "bft", "xyb", "rcv", "njw", "aey", "ybh", "zpu", "dxm", "skk", "kvs", "wlv", "mlf", "xeg", "xom", "uzy", "ozt", "cnt", "ylf", "lgd", "imz", "tgb", "sxb", "mdp", "dws", "jrp", "iuy", "gvs", "pvs", "txt", "tfw", "qbt", "cji", "yiu", "ycz", "zyz", "tqb", "fuw", "auq", "nlh", "nhh", "ejv", "bkn", "uxr", "kyy", "hml", "hcn", "wgs", "uvu", "lbn", "nvr", "pnd", "dfg", "mfc", "wuh", "rws", "tgn", "kky", "wms", "hbs", "cwt", "pnr", "jdo", "rfg", "dnp", "ycp", "nxc", "miq", "dlm", "aqp", "wuc", "rrv", "glc", "yww", "yff", "dcg", "hdl", "fvu", "fhp", "qdi", "jbo", "gyk", "blt", "prr", "lvu", "rxu", "tuu", "jjo", "cmm", "bko", "dmn", "hmf", "bnx", "guh", "dfp", "ozw", "nwb", "fpn", "dqi", "gcm", "fkw", "rvc", "ufk", "hpf", "sjs", "dnw", "fdm", "ywc", "gox", "nyz", "lgm", "bvo", "wfc", "mmn", "grc", "dlh", "mkm", "ipq", "ocz", "vbi", "vdu", "hmh", "wkt", "prn", "grm", "ggg", "yxm", "ajl", "fdp", "ejh", "dxe", "dtg", "tkw", "tgp", "jez", "fqa", "uix", "vui", "fqi", "nrg", "jso", "fhm", "hpv", "dwb", "bbf", "mnn", "bmg", "zsm", "jyo", "hks", "uoz", "brd", "nhk", "gtz", "dbw", "lnn", "tjp", "zzg", "qbj", "pzo", "zsr", "ozc", "cmr", "ioq", "bbm", "nxf", "prh", "mdn", "eiq", "sjp", "kbp", "jaq", "dbd", "cmh", "gll", "yej", "luy", "kps", "xkm", "hpj", "jbr", "cnr", "ihl", "elx", "ijr", "bnr", "dxb", "twb", "hrr", "dgc", "cww", "sxe", "tdl", "tdg", "pcv", "btn", "kzi", "aox", "xyz", "nfh", "vsy", "slw", "ccg", "xsb", "wdd", "fwu", "avb", "tpn", "smj", "qaf", "czw", "rpv", "mhw", "vdd", "zgi", "dcv", "ztu", "pgm", "lzs", "gcp", "ejj", "nwm", "nbd", "uaj", "jpo", "cmf", "xja", "lnl", "crb", "zti", "sjc", "ojp", "gcb", "cdv", "rqb", "slv", "vpu", "vko", "nlm", "ejn", "rjp", "nxu", "mgp", "wfp", "wdn", "pdw", "lgs", "vki", "gtb", "tfd", "rjd", "caq", "wcy", "cdn", "dgk", "rhb", "fgy", "cgh", "avf", "jni", "bbd", "khc", "fbn", "bng", "uhh", "nzd", "wkc", "waq", "jga", "aqr", "zug", "hqa", "ytc", "hdn", "xsd", "xee", "txe", "lpj", "wcb", "djw", "ykj", "fwp", "srn", "uqi", "ymh", "pff", "fgc", "jsm", "mkl", "dwp", "tmv", "yrw", "vtw", "pvt", "jno", "wwk", "wtc", "ehg", "xtq", "mtn", "jss", "ltq", "jtw", "nlf", "mdd", "uxn", "sln", "pnw", "djj", "hgy", "bmd", "zru", "ygw", "xaw", "njd", "yuv", "blm", "ygg", "sbj", "cfd", "bwr", "puw", "bkg", "oqi", "wwu", "vcu", "iuf", "mtd", "dwc", "iqb", "kll", "qsh", "jru", "dbf", "phv", "mxa", "sfg", "jpl", "cuh", "tjs", "ocg", "cmg", "hgw", "fmh", "dkc", "krd", "kox", "dqb", "goq", "emx", "vhf", "iue", "srg", "rrg", "fbm", "yhr", "vpm", "llx", "yez", "ivk", "bbg", "vcc", "kfc", "acj", "trg", "nxo", "rhn", "yuf", "uaz", "krh", "ohf", "srl", "slg", "fdd", "ctz", "zij", "ymg", "vdv", "nxx", "cbb", "xue", "vua", "ohj", "aqe", "qut", "yfs", "iht", "lkj", "iui", "pgh", "ivm", "svm", "azk", "qus", "wio", "ihr", "iuh", "tnr", "nhn", "xey", "kpp", "wyi", "bpd", "vfe", "jne", "hdj", "zok", "rhc", "rfy", "hrn", "gdc", "uuu", "uqa", "jtr", "dcj", "trf", "ewx", "dnj", "gtj", "wwj", "ojc", "nkz", "wwv", "ukv", "vpw", "ucn", "vsv", "mtf", "ugy", "slh", "kkk", "jmu", "wgm", "ssx", "svh", "mlw", "fpd", "ogv", "npn", "yft", "mdf", "gds", "hht", "jsw", "ffq", "cpw", "jei", "gbb", "ckx", "gky", "fpf", "qof", "fng", "okq", "qla", "opz", "nwn", "dgd", "tbw", "wct", "pcy", "hnq", "dvp", "cuk", "cgt", "qiw", "fmn", "njb", "mhc", "fbt", "bbp", "yrf", "tln", "xwr", "utx", "rvn", "csx", "xry", "mgw", "juw", "yzu", "kls", "ozd", "jiy", "dvt", "vmu", "juh", "fmg", "zgu", "xyp", "dkb", "hft", "rjs", "pnm", "pfw", "dxr", "yyy", "mks", "jpi", "fkg", "xni", "jsu", "cwc", "prz", "prk", "sxx", "zsw", "trr", "ojt", "cjs", "uyj", "kze", "ivg", "vax", "fwc", "uhw", "nbf", "lht", "dlg", "aql", "ugk", "gnk", "vdm", "qbr", "hpg", "cgs", "nvp", "blc", "cnd", "kww", "zsd", "wpm", "rcj", "ypf", "uua", "syy", "nvt", "lzu", "klm", "yht", "rwc", "sxo", "crw", "wfs", "fyv", "crr", "xmr", "rxt", "vpn", "qls", "bnl", "amx", "ziv", "tbd", "rxm", "rrj", "zny", "ovv", "wuw", "wmt", "sjd", "ubz", "dlf", "sdg", "wpc", "tcz", "nwp", "mhl", "duy", "rjc", "txs", "gxu", "cij", "bza", "krt", "krp", "ybd", "uhm", "srv", "qse", "azg", "bmr", "yrp", "scz", "hzw", "djf", "cll", "vpp", "swl", "nuj", "njm", "cfp", "lgp", "tjh", "ogk", "dwm", "cdh", "spk", "nzp", "jmc", "frn", "ypb", "fdl", "qbc", "hzu", "kcn", "cax", "gtl", "mgb", "fgn", "brz", "bfc", "tnl", "tfb", "lhc", "jlo", "clw", "zsb", "qde", "lzw", "fsj", "hrf", "fjr", "uzd", "ixx", "fgp", "dkt", "bze", "kkl", "pnb", "hzt", "giy", "tgc", "kgm", "yoz", "dhn", "zja", "pvp", "izg", "bfs", "khb", "frf", "fdv", "doq", "plp", "wcp", "qsi", "sxw", "pgb", "nmk", "yfm", "shz", "gkl", "iys", "jsk", "sfh", "qbm", "zzd", "rvw", "khp", "frr", "nbw", "ejf", "wbs", "jke", "qio", "joz", "ejw", "whp", "oez", "gdn", "wtf", "pld", "tlw", "gyy", "kwu", "gtk", "plm", "nnz", "idx", "fvl", "xcy", "wpt", "qaa", "mln", "cgy", "xsr", "rdx", "fdt", "qii", "pft", "hln", "cbt", "kgt", "kcb", "yuo", "gcn", "gfc", "bhd", "kgw", "zcu", "xaa", "sck", "uyk", "gdv", "vsj", "vby", "qta", "ksz", "clb", "wfm", "tyx", "tjm", "msz", "ycf", "jcc", "rbk", "mhr", "tqa", "pxi", "ozb", "jwe", "plw", "nvc", "tfp", "lgw", "cpb", "szw", "jfr", "gdw", "wpp", "vrt", "pmv", "gqb", "hgs", "lkk", "khh", "wox", "crn", "uwm", "mwt", "hkd", "pyy", "lhd", "jij", "trz", "agk", "dhh", "yhs", "dvb", "hhp", "ykc", "tbf", "jds", "cbw", "ajf", "gpw", "wrm", "hww", "flq", "puh", "jva", "jya", "qli", "lgt", "gwb", "sxf", "zju", "ziy", "xah", "mvu", "qsc", "lgn", "gct", "ucp", "mmv", "tzj", "fpb", "zup", "gtf", "pku", "nqb", "qhe", "tuj", "qil", "pdl", "xkl", "rwb", "mgc", "iuz", "dkp", "wku", "jfi", "bnn", "rvm", "svg", "pcn", "ijd", "wud", "kdj", "czu", "afj", "cny", "xeo", "qib", "fvs", "fdj", "eqw", "ywu", "ymk", "xyr", "qte", "sqi", "ybn", "jrk", "vum", "zzz", "agv", "mdl", "hpy", "frw", "cdl", "uud", "mhb", "fcg", "ytm", "rvd", "mgd", "jji", "quy", "mxm", "wft", "svw", "fuu", "zuy", "tkt", "fnh", "dxp", "zfu", "ojm", "txr", "rhw", "fxs", "dxs", "wmp", "rwm", "mwm", "mwy", "yln", "wcf", "kns", "jrl", "zbl", "xow", "vtt", "knj", "jvo", "zce", "jki", "aqg", "xew", "bmh", "tff", "btg", "rwt", "hgp", "cvc", "swd", "ugv", "qid", "lrp", "nxh", "wkb", "tkb", "wiy", "ufw", "mky", "fnt", "tlm", "ddk", "jte", "iqs", "ykt", "mbk", "kcc", "hcf", "klt", "dnl", "bhr", "azf", "nxn", "szs", "iuo", "hzh", "fxe", "dvf", "hbf", "brg", "auu", "aqq", "zyu", "cng", "xef", "wzi", "wji", "pnh", "lhr", "kgh", "jcl", "efx", "xmc", "txm", "rpj", "syx", "cbp", "fxm", "bpb", "xxs", "wiu", "nhg", "dfh", "tjc", "rwd", "fhn", "cwm", "vyj", "hpn", "cgc", "lwu", "lvc", "jsf", "gvu", "djv", "ziu", "eqs", "mfy", "ijm", "dqv", "tjd", "sgf", "mhp", "lvt", "rzl", "wyf", "cvt", "yrk", "qsp", "yvl", "ejk", "ygd", "frg", "xul", "xsn", "rvh", "mgy", "pmk", "nlg", "hxi", "fuo", "tjb", "ftq", "gkg", "yhm", "jbi", "ytb", "pij", "gfs", "wkl", "qbb", "tvy", "mlm", "dvh", "khk", "tck", "plf", "dvm", "whs", "vct", "pdh", "jhu", "snj", "qah", "eqt", "clr", "wln", "iww", "wnz", "vji", "nhf", "mdg", "npv", "aqn", "njf", "gtg", "cpn", "wbb", "tkc", "qum", "xih", "wgc", "pfp", "rfn", "bzu", "bld", "agj", "txb", "jps", "iwu", "nwl", "bvr", "wzo", "luu", "ehv", "jwo", "ajy", "yhd", "lxa", "gpd", "wwy", "qld", "flv", "dln", "xms", "wgn", "tkp", "rfk", "snv", "clp", "nrv", "hgt", "axk", "sjh", "qwo", "qbd", "nvm", "fgb", "dpj", "rbv", "yym", "kcd", "wyb", "vry", "mlk", "qih", "hrg", "uul", "sjb", "gbd", "whl", "pdy", "hnz", "fdb", "afv", "kuv", "wuk", "uzl", "lvr", "yrl", "vuz", "jjh", "kgs", "yjp", "jdd", "vdh", "bjs", "yfy", "plb", "xgl", "wza", "snn", "rhl", "bny", "qiu", "gmj", "ktm", "kld", "hzb", "dxt", "kpt", "khd", "vpb", "rmq", "msx", "gmn", "tlr", "svd", "wrp", "pdb", "snk", "oqa", "tcv", "wgh", "xxc", "kbs", "jti", "dxc", "dbg", "vgi", "rxw", "wrb", "swg", "rrk", "pfm", "cfw", "vpf", "rjh", "pdd", "hhd", "gpy", "tnk", "tcj", "spj", "mjr", "cgm", "uxg", "qbi", "bzo", "grr", "bck", "lgc", "prl", "jgo", "hbt", "sxl", "wue", "gzu", "poj", "ojv", "kvd", "jpg", "fiy", "ygp", "wyw", "eoq", "wui", "wcm", "hmv", "dhg", "wtg", "vuv", "jku", "jeg", "aiq", "vbl", "rxr", "zez", "xka", "pnf", "grf", "fht", "vju", "emz", "lws", "krc", "hgb", "grw", "dwl", "xkn", "njn", "dkf", "nzn", "cuv", "azv", "iug", "vuo", "tbj", "tlg", "nkq", "pvr", "ptq", "iux", "vbs", "tmz", "rxp", "kbb", "xht", "cff", "fkp", "vud", "puo", "bcj", "rjj", "ocv", "gft", "euu", "vup", "jbs", "mfw", "hzs", "hhm", "gpg", "uuc", "svf", "hbm", "clm", "nln", "bgl", "gdh", "cpg", "wtt", "szp", "piy", "ifq", "pks", "jej", "fvr", "bmb", "zwr", "ucm", "ljs", "pjs", "yhp", "lzm", "jsb", "gpf", "tjf", "tfg", "prg", "wrz", "lsx", "mkt", "fkb", "unx", "pdm", "wub", "ikj", "xeu", +#endif + +NULL +}; + +/* ******************************************************************** */ + +static const char *ndpi_en_impossible_bigrams[] = { + "bk", "bq", "bx", "cb", "cf", "cg", "cj", "cp", /* "cv", */ "cw", "cx", "dx", "fk", "fq", "fv", "fx", /* "ee", removed it can be found in 'meeting' */ + "fz", "gq", "gv", "gx", "hh", "hk", "hv", "hx", "hz", "iy", "jb", /* "jc", jcrew.com */ "jd", "jf", "jg", "jh", "jk", + "jl", "jm", "jn", "jp", "jq", /* "jr",*/ /* "js", */ "jt", "jv", "jw", "jx", "jy", "jz", /* "kg", */ "kq", "kv", "kx", + "kz", "lq", "lx", /* "mg" tamgrt.com , */ "mj", /* "mq", mqtt */ "mx", "mz", "pq", "pv", "px", "qb", "qc", "qd", "qe", "qf", "ii", + "qg", "qh", "qj", "qk", "ql", "qm", "qn", "qo", "qp", "qr", "qs", "qt", "qv", "qw", "qx", "qy", "uu", + "qz", "sx", "sz", "tq", "tx", "vb", "vc", "vd", "vf", "vg", "vh", "vj", /* "vm" Used in VMs */ "vn", /* "vp", Removed for vpbank.com */ "bw", /* "vk", "zr" Removed for kavkazr */ + "vq", /* "vt", gvt1.com, gvt2.com */ "vw", "vx", "vz", "wq", "wv", "wx", "wz", /* "xb", foxbusiness.com */ + "xg", "xj", "xk", "xv", "xz", "xw", /* "yd", Removed for anywayanyday.com */ /*"yp", Removed for paypal */ + "yj", "yq", "yv", "yz", "yw", "zb", "zc", "zg", "zh", "zj", "zn", "zq", "zs", "zx", /* "wh", e.g. why */ "wk", + "wb", "zk", "kp", "zk", "xy", "xx", + NULL }; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_ethereum_match.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_ethereum_match.c new file mode 100644 index 0000000000..691f6b3b0b --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_ethereum_match.c @@ -0,0 +1,51 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_mining_protocol_list[] = { + { 0x128A6C43 /* 18.138.108.67/32 */, 32, NDPI_PROTOCOL_MINING }, + { 0x03D12D4F /* 3.209.45.79/32 */, 32, NDPI_PROTOCOL_MINING }, + { 0x34BBCF1B /* 52.187.207.27/32 */, 32, NDPI_PROTOCOL_MINING }, + { 0xBFEAA2C6 /* 191.234.162.198/32 */, 32, NDPI_PROTOCOL_MINING }, + { 0x34E7A56C /* 52.231.165.108/32 */, 32, NDPI_PROTOCOL_MINING }, + { 0x682AD919 /* 104.42.217.25/32 */, 32, NDPI_PROTOCOL_MINING }, + { 0x416C4665 /* 65.108.70.101/32 */, 32, NDPI_PROTOCOL_MINING }, + { 0x9D5A23A6 /* 157.90.35.166/32 */, 32, NDPI_PROTOCOL_MINING }, + { 0x34B0070A /* 52.176.7.10/32 */, 32, NDPI_PROTOCOL_MINING }, + { 0x34B0644D /* 52.176.100.77/32 */, 32, NDPI_PROTOCOL_MINING }, + { 0x34E8F398 /* 52.232.243.152/32 */, 32, NDPI_PROTOCOL_MINING }, + { 0xC051D0DF /* 192.81.208.223/32 */, 32, NDPI_PROTOCOL_MINING }, + { 0x12A8B656 /* 18.168.182.86/32 */, 32, NDPI_PROTOCOL_MINING }, + { 0x340E97B1 /* 52.14.151.177/32 */, 32, NDPI_PROTOCOL_MINING }, + { 0x34A92A65 /* 52.169.42.101/32 */, 32, NDPI_PROTOCOL_MINING }, + { 0x34039EB8 /* 52.3.158.184/32 */, 32, NDPI_PROTOCOL_MINING }, + { 0x9F591CD3 /* 159.89.28.211/32 */, 32, NDPI_PROTOCOL_MINING }, + { 0x338D4E35 /* 51.141.78.53/32 */, 32, NDPI_PROTOCOL_MINING }, + { 0x0D5D3689 /* 13.93.54.137/32 */, 32, NDPI_PROTOCOL_MINING }, + { 0x5EED3672 /* 94.237.54.114/32 */, 32, NDPI_PROTOCOL_MINING }, + { 0x12DAFA42 /* 18.218.250.66/32 */, 32, NDPI_PROTOCOL_MINING }, + { 0x030B9343 /* 3.11.147.67/32 */, 32, NDPI_PROTOCOL_MINING }, + { 0x2E04637A /* 46.4.99.122/32 */, 32, NDPI_PROTOCOL_MINING }, + { 0x586346B6 /* 88.99.70.182/32 */, 32, NDPI_PROTOCOL_MINING }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_google_cloud_match.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_google_cloud_match.c new file mode 100644 index 0000000000..bdc1bd4d51 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_google_cloud_match.c @@ -0,0 +1,558 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_google_cloud_protocol_list[] = { + { 0x22500000 /* 34.80.0.0/15 */, 15, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22890000 /* 34.137.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23B98000 /* 35.185.128.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23B9A000 /* 35.185.160.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23BB9000 /* 35.187.144.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23BDA000 /* 35.189.160.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23C28000 /* 35.194.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23C98000 /* 35.201.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23CEC000 /* 35.206.192.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23DC2000 /* 35.220.32.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23DD8000 /* 35.221.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23E58000 /* 35.229.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23EA0000 /* 35.234.0.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23EB1000 /* 35.235.16.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23EC8000 /* 35.236.128.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F22000 /* 35.242.32.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x689BC000 /* 104.155.192.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x689BE000 /* 104.155.224.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x68C78000 /* 104.199.128.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x68C7C000 /* 104.199.192.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x68C7E000 /* 104.199.224.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x68C7F200 /* 104.199.242.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x68C7F400 /* 104.199.244.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x68C7F800 /* 104.199.248.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x6BA7B000 /* 107.167.176.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x82D3F000 /* 130.211.240.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x225C0000 /* 34.92.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22608000 /* 34.96.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22685800 /* 34.104.88.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227C1800 /* 34.124.24.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22960000 /* 34.150.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23D78000 /* 35.215.128.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23DC1B00 /* 35.220.27.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23DC8000 /* 35.220.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F14000 /* 35.241.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F21B00 /* 35.242.27.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F30800 /* 35.243.8.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22540000 /* 34.84.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22550000 /* 34.85.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22683E00 /* 34.104.62.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22688000 /* 34.104.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227FBE00 /* 34.127.190.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22920000 /* 34.146.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229D4000 /* 34.157.64.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229DA400 /* 34.157.164.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229DC000 /* 34.157.192.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23BBC000 /* 35.187.192.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23BD8000 /* 35.189.128.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23BEE000 /* 35.190.224.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23C26000 /* 35.194.96.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23C80000 /* 35.200.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23D50000 /* 35.213.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23DC3800 /* 35.220.56.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23DD4000 /* 35.221.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23E6F000 /* 35.230.240.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F23800 /* 35.242.56.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F34000 /* 35.243.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x68C65000 /* 104.198.80.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x68C67000 /* 104.198.112.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22610000 /* 34.97.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22683100 /* 34.104.49.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227FB100 /* 34.127.177.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23D98000 /* 35.217.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23DC2D00 /* 35.220.45.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F22D00 /* 35.242.45.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F33800 /* 35.243.56.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22402000 /* 34.64.32.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22404000 /* 34.64.64.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22404400 /* 34.64.68.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22404800 /* 34.64.72.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22405000 /* 34.64.80.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22406000 /* 34.64.96.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22408000 /* 34.64.128.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22408400 /* 34.64.132.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22408800 /* 34.64.136.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22409000 /* 34.64.144.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x2240A000 /* 34.64.160.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x2240C000 /* 34.64.192.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23D80000 /* 35.216.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x225D0000 /* 34.93.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22648000 /* 34.100.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22686C00 /* 34.104.108.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227C2C00 /* 34.124.44.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229D5700 /* 34.157.87.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229DD700 /* 34.157.215.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23C88000 /* 35.200.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23C92900 /* 35.201.41.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23CFC000 /* 35.207.192.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23DC2A00 /* 35.220.42.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23EAD000 /* 35.234.208.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F22A00 /* 35.242.42.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F40000 /* 35.244.0.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22687800 /* 34.104.120.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227C3800 /* 34.124.56.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227ED000 /* 34.126.208.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22830000 /* 34.131.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22158000 /* 34.21.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22570000 /* 34.87.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22578000 /* 34.87.128.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22683A00 /* 34.104.58.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22686A00 /* 34.104.106.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227C2A00 /* 34.124.42.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227C8000 /* 34.124.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227E4000 /* 34.126.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227E8000 /* 34.126.128.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x228E8000 /* 34.142.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x228F8000 /* 34.143.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229D5200 /* 34.157.82.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229D5800 /* 34.157.88.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229DD200 /* 34.157.210.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23B9B000 /* 35.185.176.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23BA9000 /* 35.186.144.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23BBE000 /* 35.187.224.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23C58000 /* 35.197.128.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23C6C000 /* 35.198.192.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23D58000 /* 35.213.128.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23DC1800 /* 35.220.24.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23EAC000 /* 35.234.192.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F08000 /* 35.240.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F21800 /* 35.242.24.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F78000 /* 35.247.128.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22651200 /* 34.101.18.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22651400 /* 34.101.20.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22651800 /* 34.101.24.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22652000 /* 34.101.32.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22654000 /* 34.101.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22658000 /* 34.101.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22804000 /* 34.128.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23DB0000 /* 35.219.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x2257C000 /* 34.87.192.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22686800 /* 34.104.104.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22744000 /* 34.116.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227C2800 /* 34.124.40.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22974000 /* 34.151.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22978000 /* 34.151.128.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23BD0000 /* 35.189.0.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23C5A000 /* 35.197.160.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23C90000 /* 35.201.0.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23D5C000 /* 35.213.192.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23DC2900 /* 35.220.41.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23EAE000 /* 35.234.224.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F22900 /* 35.242.41.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F44000 /* 35.244.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22687A00 /* 34.104.122.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227C3A00 /* 34.124.58.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227EC000 /* 34.126.192.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22810000 /* 34.129.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22687400 /* 34.104.116.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22748000 /* 34.116.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22760000 /* 34.118.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227C3400 /* 34.124.52.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22580000 /* 34.88.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22686000 /* 34.104.96.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227C2000 /* 34.124.32.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23CBE800 /* 35.203.232.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23D90000 /* 35.217.0.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23DC1A00 /* 35.220.26.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23E40000 /* 35.228.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F21A00 /* 35.242.26.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229D2C00 /* 34.157.44.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229DAC00 /* 34.157.172.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22A40000 /* 34.164.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22AF0000 /* 34.175.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x0822D000 /* 8.34.208.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x0822D300 /* 8.34.211.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x0822DC00 /* 8.34.220.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x17FB8000 /* 23.251.128.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22168000 /* 34.22.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x224C0000 /* 34.76.0.0/14 */, 14, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x2276FE00 /* 34.118.254.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x228C0000 /* 34.140.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23BB0000 /* 35.187.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23BBA000 /* 35.187.160.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23BDC000 /* 35.189.192.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23BEC000 /* 35.190.192.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23C30000 /* 35.195.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23CD0000 /* 35.205.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23CE8000 /* 35.206.128.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23D20000 /* 35.210.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23DC6000 /* 35.220.96.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23E90000 /* 35.233.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F00000 /* 35.240.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F18000 /* 35.241.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F24000 /* 35.242.64.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x689B0000 /* 104.155.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x68C70000 /* 104.199.0.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x68C74200 /* 104.199.66.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x68C74400 /* 104.199.68.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x68C74800 /* 104.199.72.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x68C75000 /* 104.199.80.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x68C76000 /* 104.199.96.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x82D33000 /* 130.211.48.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x82D34000 /* 130.211.64.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x82D36000 /* 130.211.96.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x92940200 /* 146.148.2.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x92940400 /* 146.148.4.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x92940800 /* 146.148.8.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x92941000 /* 146.148.16.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x92947000 /* 146.148.112.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0xC09E1C00 /* 192.158.28.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22590000 /* 34.89.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22698000 /* 34.105.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227FBA00 /* 34.127.186.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x228E0000 /* 34.142.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22938000 /* 34.147.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229D2400 /* 34.157.36.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229D2800 /* 34.157.40.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229DA800 /* 34.157.168.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23BD4000 /* 35.189.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23C5C000 /* 35.197.192.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23CBD200 /* 35.203.210.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23CBD400 /* 35.203.212.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23CBD800 /* 35.203.216.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23D60000 /* 35.214.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23DC1400 /* 35.220.20.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23E68000 /* 35.230.128.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23EA8000 /* 35.234.128.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23EB3000 /* 35.235.48.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F21400 /* 35.242.20.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F28000 /* 35.242.128.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F60000 /* 35.246.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22598000 /* 34.89.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22687000 /* 34.104.112.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x226B0000 /* 34.107.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x2276F400 /* 34.118.244.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227C3000 /* 34.124.48.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x228D0000 /* 34.141.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229D3000 /* 34.157.48.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229DB000 /* 34.157.176.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229F0000 /* 34.159.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23C64000 /* 35.198.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23C68000 /* 35.198.128.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23CF4000 /* 35.207.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23CF8000 /* 35.207.128.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23DC1200 /* 35.220.18.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23EA4000 /* 35.234.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23EB2000 /* 35.235.32.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F21200 /* 35.242.18.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F2C000 /* 35.242.192.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F68000 /* 35.246.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x225A0000 /* 34.90.0.0/15 */, 15, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22687E00 /* 34.104.126.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227C3E00 /* 34.124.62.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x228D8000 /* 34.141.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22930000 /* 34.147.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229D5000 /* 34.157.80.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229D5C00 /* 34.157.92.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229DD000 /* 34.157.208.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229DDC00 /* 34.157.220.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23CC0000 /* 35.204.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23D68000 /* 35.214.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23DC1000 /* 35.220.16.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23EAA000 /* 35.234.160.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F21000 /* 35.242.16.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22410000 /* 34.65.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22686E00 /* 34.104.110.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227C2E00 /* 34.124.46.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23D88000 /* 35.216.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23DC2C00 /* 35.220.44.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23EBD800 /* 35.235.216.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F22C00 /* 35.242.44.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229A0000 /* 34.154.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229D0800 /* 34.157.8.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229D8800 /* 34.157.136.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23DBE000 /* 35.219.224.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229B0000 /* 34.155.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229D0C00 /* 34.157.12.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229D8C00 /* 34.157.140.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22A30000 /* 34.163.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x225F4000 /* 34.95.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22604000 /* 34.96.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22624000 /* 34.98.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22668000 /* 34.102.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22681B00 /* 34.104.27.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x226B8000 /* 34.107.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x226E8000 /* 34.110.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x226F0000 /* 34.111.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22740000 /* 34.116.0.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22750000 /* 34.117.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22780000 /* 34.120.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22808000 /* 34.128.128.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x2290C000 /* 34.144.192.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22950000 /* 34.149.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22A00000 /* 34.160.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23BAC000 /* 35.186.192.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23BE0000 /* 35.190.0.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23BE4000 /* 35.190.64.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23BE7000 /* 35.190.112.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23C94000 /* 35.201.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23E3C000 /* 35.227.192.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F10000 /* 35.241.0.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F48000 /* 35.244.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x6BB2F000 /* 107.178.240.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x82D30400 /* 130.211.4.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x82D30800 /* 130.211.8.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x82D31000 /* 130.211.16.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x82D32000 /* 130.211.32.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22004000 /* 34.0.64.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229D5A00 /* 34.157.90.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229DD800 /* 34.157.216.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22A50000 /* 34.165.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22138000 /* 34.19.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22140000 /* 34.20.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x225F0000 /* 34.95.0.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22684C00 /* 34.104.76.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22768000 /* 34.118.128.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227C0C00 /* 34.124.12.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22980000 /* 34.152.0.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23CB0000 /* 35.203.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23D70000 /* 35.215.0.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23DC2B00 /* 35.220.43.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23EAF000 /* 35.234.240.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F22B00 /* 35.242.43.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22002000 /* 34.0.32.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22687200 /* 34.104.114.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227C3200 /* 34.124.50.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227C7000 /* 34.124.112.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22820000 /* 34.130.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x225F8000 /* 34.95.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22685000 /* 34.104.80.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227C1000 /* 34.124.16.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22970000 /* 34.151.0.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x2297C000 /* 34.151.192.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23C60000 /* 35.198.0.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23C74000 /* 35.199.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23D7C000 /* 35.215.192.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23DC2800 /* 35.220.40.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23EB0000 /* 35.235.0.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F22800 /* 35.242.40.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F7C000 /* 35.247.192.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22683200 /* 34.104.50.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227FB200 /* 34.127.178.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22B00000 /* 34.176.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x0822D200 /* 8.34.210.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x0822D400 /* 8.34.212.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x0822D800 /* 8.34.216.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x0823C000 /* 8.35.192.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x17EC3000 /* 23.236.48.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x17FB9000 /* 23.251.144.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22100000 /* 34.16.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x221B0000 /* 34.27.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x221C0000 /* 34.28.0.0/15 */, 15, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x221E0000 /* 34.30.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22420000 /* 34.66.0.0/15 */, 15, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22440000 /* 34.68.0.0/14 */, 14, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22480000 /* 34.72.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x2276C800 /* 34.118.200.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22790000 /* 34.121.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227A0000 /* 34.122.0.0/15 */, 15, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22840000 /* 34.132.0.0/14 */, 14, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22880000 /* 34.136.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229D5400 /* 34.157.84.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229D6000 /* 34.157.96.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229DD400 /* 34.157.212.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229DE000 /* 34.157.224.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22AA0000 /* 34.170.0.0/15 */, 15, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22AC0000 /* 34.172.0.0/15 */, 15, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23B80000 /* 35.184.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23BC0000 /* 35.188.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23BC8000 /* 35.188.128.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23BCC000 /* 35.188.192.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23C00000 /* 35.192.0.0/15 */, 15, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23C20000 /* 35.194.0.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23CA0000 /* 35.202.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23CE4000 /* 35.206.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23D00000 /* 35.208.0.0/15 */, 15, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23DC4000 /* 35.220.64.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23DE0000 /* 35.222.0.0/15 */, 15, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23E00000 /* 35.224.0.0/15 */, 15, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23E20000 /* 35.226.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23E80000 /* 35.232.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23EE0000 /* 35.238.0.0/15 */, 15, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F26000 /* 35.242.96.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x689A1000 /* 104.154.16.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x689A2000 /* 104.154.32.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x689A4000 /* 104.154.64.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x689A6000 /* 104.154.96.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x689A7100 /* 104.154.113.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x689A7200 /* 104.154.114.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x689A7400 /* 104.154.116.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x689A7800 /* 104.154.120.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x689A8000 /* 104.154.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x689B8000 /* 104.155.128.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x68C50000 /* 104.197.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x68C61000 /* 104.198.16.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x68C62000 /* 104.198.32.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x68C64000 /* 104.198.64.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x68C68000 /* 104.198.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x6BB2D000 /* 107.178.208.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x6C3B5000 /* 108.59.80.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x82D37000 /* 130.211.112.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x82D38000 /* 130.211.128.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x82D3C000 /* 130.211.192.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x82D3E000 /* 130.211.224.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x92942000 /* 146.148.32.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x92944000 /* 146.148.64.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x92946000 /* 146.148.96.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0xA2DEB000 /* 162.222.176.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0xADFF7000 /* 173.255.112.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0xC7C07300 /* 199.192.115.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0xC7DFE800 /* 199.223.232.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0xC7DFEC00 /* 199.223.236.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22160000 /* 34.22.0.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23BA0000 /* 35.186.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23BA8000 /* 35.186.128.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23CE2000 /* 35.206.32.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23DC2E00 /* 35.220.46.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F22E00 /* 35.242.46.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x6BA7A000 /* 107.167.160.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x6C3B5800 /* 108.59.88.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0xADFF7800 /* 173.255.120.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22170000 /* 34.23.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22180000 /* 34.24.0.0/15 */, 15, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x221A0000 /* 34.26.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22490000 /* 34.73.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x224A0000 /* 34.74.0.0/15 */, 15, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22628000 /* 34.98.128.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x2276FA00 /* 34.118.250.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x228A0000 /* 34.138.0.0/15 */, 15, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22940000 /* 34.148.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23B90000 /* 35.185.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23BE8000 /* 35.190.128.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23C40000 /* 35.196.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23CF0000 /* 35.207.0.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23D30000 /* 35.211.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23DC0000 /* 35.220.0.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23E30000 /* 35.227.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23E51000 /* 35.229.16.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23E52000 /* 35.229.32.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23E54000 /* 35.229.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23E70000 /* 35.231.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23ED0000 /* 35.237.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F20000 /* 35.242.0.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F38000 /* 35.243.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x68C40000 /* 104.196.0.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x68C44100 /* 104.196.65.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x68C44200 /* 104.196.66.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x68C44400 /* 104.196.68.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x68C46000 /* 104.196.96.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x68C48000 /* 104.196.128.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x68C4C000 /* 104.196.192.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0xA2D89400 /* 162.216.148.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22150000 /* 34.21.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22558000 /* 34.85.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22560000 /* 34.86.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22683C00 /* 34.104.60.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22687C00 /* 34.104.124.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x2276FC00 /* 34.118.252.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227C3C00 /* 34.124.60.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227FBC00 /* 34.127.188.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22918000 /* 34.145.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22968000 /* 34.150.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229D0000 /* 34.157.0.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229D1000 /* 34.157.16.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229D8000 /* 34.157.128.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229D9000 /* 34.157.144.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23BAA000 /* 35.186.160.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23BCE000 /* 35.188.224.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23C24000 /* 35.194.64.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23C70000 /* 35.199.0.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23D40000 /* 35.212.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23DC3C00 /* 35.220.60.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23DD0000 /* 35.221.0.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23E6A000 /* 35.230.160.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23EAB000 /* 35.234.176.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23ECC000 /* 35.236.192.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F23C00 /* 35.242.60.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F32800 /* 35.243.40.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F50000 /* 35.245.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229D2000 /* 34.157.32.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229DA000 /* 34.157.160.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22A20000 /* 34.162.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22683800 /* 34.104.56.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227FB800 /* 34.127.184.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22A10000 /* 34.161.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23CE0A00 /* 35.206.10.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229D2E00 /* 34.157.46.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229DAE00 /* 34.157.174.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22AE0000 /* 34.174.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22130000 /* 34.19.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22520000 /* 34.82.0.0/15 */, 15, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22690000 /* 34.105.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x2276C000 /* 34.118.192.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227F0000 /* 34.127.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22910000 /* 34.145.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229D7000 /* 34.157.112.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x229DF000 /* 34.157.240.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22A80000 /* 34.168.0.0/15 */, 15, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23B9C000 /* 35.185.192.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23C50000 /* 35.197.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23C79000 /* 35.199.144.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23C7A000 /* 35.199.160.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23CB8000 /* 35.203.128.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23D48000 /* 35.212.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23DC3000 /* 35.220.48.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23E38000 /* 35.227.128.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23E60000 /* 35.230.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23E98000 /* 35.233.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F23000 /* 35.242.48.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F32000 /* 35.243.32.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F70000 /* 35.247.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x68C4E000 /* 104.196.224.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x68C60000 /* 104.198.0.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x68C66000 /* 104.198.96.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x68C77000 /* 104.199.112.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22148000 /* 34.20.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x225E0000 /* 34.94.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22660000 /* 34.102.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22684000 /* 34.104.64.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x226C0000 /* 34.108.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x2276F800 /* 34.118.248.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227C0000 /* 34.124.0.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23D74000 /* 35.215.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23DC2F00 /* 35.220.47.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23EB4000 /* 35.235.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23EC0000 /* 35.236.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F22F00 /* 35.242.47.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F30000 /* 35.243.0.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22162000 /* 34.22.32.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22683400 /* 34.104.52.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x226A0000 /* 34.106.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227FB400 /* 34.127.180.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23D94000 /* 35.217.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23DC1F00 /* 35.220.31.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23F21F00 /* 35.242.31.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22108000 /* 34.16.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22684800 /* 34.104.72.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x2276F000 /* 34.118.240.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227C0800 /* 34.124.8.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x227D0000 /* 34.125.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x23DB8000 /* 35.219.128.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_google_match.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_google_match.c new file mode 100644 index 0000000000..06c082b772 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_google_match.c @@ -0,0 +1,198 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_google_protocol_list[] = { + { 0x08080400 /* 8.8.4.0/24 */, 24, NDPI_PROTOCOL_GOOGLE }, + { 0x08080800 /* 8.8.8.0/24 */, 24, NDPI_PROTOCOL_GOOGLE }, + { 0x0823C800 /* 8.35.200.0/21 */, 21, NDPI_PROTOCOL_GOOGLE }, + { 0x22000000 /* 34.0.0.0/19 */, 19, NDPI_PROTOCOL_GOOGLE }, + { 0x22003000 /* 34.0.48.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x22006000 /* 34.0.96.0/19 */, 19, NDPI_PROTOCOL_GOOGLE }, + { 0x22008000 /* 34.0.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE }, + { 0x22010000 /* 34.1.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE }, + { 0x22020000 /* 34.2.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE }, + { 0x22030000 /* 34.3.0.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, + { 0x22030300 /* 34.3.3.0/24 */, 24, NDPI_PROTOCOL_GOOGLE }, + { 0x22030400 /* 34.3.4.0/24 */, 24, NDPI_PROTOCOL_GOOGLE }, + { 0x22030800 /* 34.3.8.0/21 */, 21, NDPI_PROTOCOL_GOOGLE }, + { 0x22031000 /* 34.3.16.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x22032000 /* 34.3.32.0/19 */, 19, NDPI_PROTOCOL_GOOGLE }, + { 0x22034000 /* 34.3.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE }, + { 0x22038000 /* 34.3.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE }, + { 0x22040000 /* 34.4.0.0/14 */, 14, NDPI_PROTOCOL_GOOGLE }, + { 0x22080000 /* 34.8.0.0/13 */, 13, NDPI_PROTOCOL_GOOGLE }, + { 0x22110000 /* 34.17.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE }, + { 0x22120000 /* 34.18.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE }, + { 0x22164000 /* 34.22.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE }, + { 0x221F0000 /* 34.31.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE }, + { 0x22200000 /* 34.32.0.0/11 */, 11, NDPI_PROTOCOL_GOOGLE }, + { 0x22400000 /* 34.64.0.0/19 */, 19, NDPI_PROTOCOL_GOOGLE }, + { 0x22600000 /* 34.96.0.0/18 */, 18, NDPI_PROTOCOL_GOOGLE }, + { 0x22620000 /* 34.98.0.0/18 */, 18, NDPI_PROTOCOL_GOOGLE }, + { 0x22628800 /* 34.98.136.0/21 */, 21, NDPI_PROTOCOL_GOOGLE }, + { 0x22629000 /* 34.98.144.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x2262A000 /* 34.98.160.0/19 */, 19, NDPI_PROTOCOL_GOOGLE }, + { 0x2262C000 /* 34.98.192.0/18 */, 18, NDPI_PROTOCOL_GOOGLE }, + { 0x22630000 /* 34.99.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE }, + { 0x22640000 /* 34.100.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE }, + { 0x22650000 /* 34.101.0.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x22651000 /* 34.101.16.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, + { 0x22651300 /* 34.101.19.0/24 */, 24, NDPI_PROTOCOL_GOOGLE }, + { 0x22651C00 /* 34.101.28.0/22 */, 22, NDPI_PROTOCOL_GOOGLE }, + { 0x22670000 /* 34.103.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE }, + { 0x22680000 /* 34.104.0.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x22681000 /* 34.104.16.0/21 */, 21, NDPI_PROTOCOL_GOOGLE }, + { 0x22681800 /* 34.104.24.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, + { 0x22681A00 /* 34.104.26.0/24 */, 24, NDPI_PROTOCOL_GOOGLE }, + { 0x22681C00 /* 34.104.28.0/22 */, 22, NDPI_PROTOCOL_GOOGLE }, + { 0x22682000 /* 34.104.32.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x22683000 /* 34.104.48.0/24 */, 24, NDPI_PROTOCOL_GOOGLE }, + { 0x22683500 /* 34.104.53.0/24 */, 24, NDPI_PROTOCOL_GOOGLE }, + { 0x22683600 /* 34.104.54.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, + { 0x226D0000 /* 34.109.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE }, + { 0x226E0000 /* 34.110.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE }, + { 0x22700000 /* 34.112.0.0/14 */, 14, NDPI_PROTOCOL_GOOGLE }, + { 0x22740800 /* 34.116.8.0/21 */, 21, NDPI_PROTOCOL_GOOGLE }, + { 0x22741000 /* 34.116.16.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x22742000 /* 34.116.32.0/19 */, 19, NDPI_PROTOCOL_GOOGLE }, + { 0x2276D000 /* 34.118.208.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x2276E000 /* 34.118.224.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x22770000 /* 34.119.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE }, + { 0x227C4000 /* 34.124.64.0/19 */, 19, NDPI_PROTOCOL_GOOGLE }, + { 0x227C6000 /* 34.124.96.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x227E0000 /* 34.126.0.0/18 */, 18, NDPI_PROTOCOL_GOOGLE }, + { 0x227EE000 /* 34.126.224.0/19 */, 19, NDPI_PROTOCOL_GOOGLE }, + { 0x227F8000 /* 34.127.128.0/19 */, 19, NDPI_PROTOCOL_GOOGLE }, + { 0x227FA000 /* 34.127.160.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x227FB000 /* 34.127.176.0/24 */, 24, NDPI_PROTOCOL_GOOGLE }, + { 0x227FB500 /* 34.127.181.0/24 */, 24, NDPI_PROTOCOL_GOOGLE }, + { 0x227FB600 /* 34.127.182.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, + { 0x227FC000 /* 34.127.192.0/18 */, 18, NDPI_PROTOCOL_GOOGLE }, + { 0x22800000 /* 34.128.0.0/18 */, 18, NDPI_PROTOCOL_GOOGLE }, + { 0x2280C000 /* 34.128.192.0/18 */, 18, NDPI_PROTOCOL_GOOGLE }, + { 0x228F0000 /* 34.143.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE }, + { 0x22900000 /* 34.144.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE }, + { 0x22908000 /* 34.144.128.0/18 */, 18, NDPI_PROTOCOL_GOOGLE }, + { 0x22984000 /* 34.152.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE }, + { 0x22988000 /* 34.152.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE }, + { 0x22990000 /* 34.153.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE }, + { 0x229C0000 /* 34.156.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE }, + { 0x229D0A00 /* 34.157.10.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, + { 0x229D5600 /* 34.157.86.0/24 */, 24, NDPI_PROTOCOL_GOOGLE }, + { 0x229D7800 /* 34.157.120.0/21 */, 21, NDPI_PROTOCOL_GOOGLE }, + { 0x229D8A00 /* 34.157.138.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, + { 0x229DD600 /* 34.157.214.0/24 */, 24, NDPI_PROTOCOL_GOOGLE }, + { 0x229DDA00 /* 34.157.218.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, + { 0x229DF800 /* 34.157.248.0/21 */, 21, NDPI_PROTOCOL_GOOGLE }, + { 0x229E0000 /* 34.158.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE }, + { 0x22A60000 /* 34.166.0.0/15 */, 15, NDPI_PROTOCOL_GOOGLE }, + { 0x22B10000 /* 34.177.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE }, + { 0x22B20000 /* 34.178.0.0/15 */, 15, NDPI_PROTOCOL_GOOGLE }, + { 0x22B40000 /* 34.180.0.0/14 */, 14, NDPI_PROTOCOL_GOOGLE }, + { 0x22B80000 /* 34.184.0.0/13 */, 13, NDPI_PROTOCOL_GOOGLE }, + { 0x23BB8000 /* 35.187.128.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x23BE6000 /* 35.190.96.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x23BEF000 /* 35.190.240.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x23BF0000 /* 35.191.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE }, + { 0x23C78000 /* 35.199.128.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x23C92000 /* 35.201.32.0/21 */, 21, NDPI_PROTOCOL_GOOGLE }, + { 0x23C92800 /* 35.201.40.0/24 */, 24, NDPI_PROTOCOL_GOOGLE }, + { 0x23C92A00 /* 35.201.42.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, + { 0x23C92C00 /* 35.201.44.0/22 */, 22, NDPI_PROTOCOL_GOOGLE }, + { 0x23C93000 /* 35.201.48.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x23CBC000 /* 35.203.192.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x23CBD000 /* 35.203.208.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, + { 0x23CBDC00 /* 35.203.220.0/22 */, 22, NDPI_PROTOCOL_GOOGLE }, + { 0x23CBE000 /* 35.203.224.0/21 */, 21, NDPI_PROTOCOL_GOOGLE }, + { 0x23CBF000 /* 35.203.240.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x23CE0000 /* 35.206.0.0/21 */, 21, NDPI_PROTOCOL_GOOGLE }, + { 0x23CE0800 /* 35.206.8.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, + { 0x23CE0C00 /* 35.206.12.0/22 */, 22, NDPI_PROTOCOL_GOOGLE }, + { 0x23CE1000 /* 35.206.16.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x23DA0000 /* 35.218.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE }, + { 0x23DBC000 /* 35.219.192.0/19 */, 19, NDPI_PROTOCOL_GOOGLE }, + { 0x23DC1C00 /* 35.220.28.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, + { 0x23DC1E00 /* 35.220.30.0/24 */, 24, NDPI_PROTOCOL_GOOGLE }, + { 0x23E50000 /* 35.229.0.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x23E6C000 /* 35.230.192.0/19 */, 19, NDPI_PROTOCOL_GOOGLE }, + { 0x23E6E000 /* 35.230.224.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x23EB8000 /* 35.235.128.0/18 */, 18, NDPI_PROTOCOL_GOOGLE }, + { 0x23EBC000 /* 35.235.192.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x23EBD000 /* 35.235.208.0/21 */, 21, NDPI_PROTOCOL_GOOGLE }, + { 0x23EBE000 /* 35.235.224.0/19 */, 19, NDPI_PROTOCOL_GOOGLE }, + { 0x23F21C00 /* 35.242.28.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, + { 0x23F21E00 /* 35.242.30.0/24 */, 24, NDPI_PROTOCOL_GOOGLE }, + { 0x23F31000 /* 35.243.16.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x23F33000 /* 35.243.48.0/21 */, 21, NDPI_PROTOCOL_GOOGLE }, + { 0x400F7000 /* 64.15.112.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x40E9A000 /* 64.233.160.0/19 */, 19, NDPI_PROTOCOL_GOOGLE }, + { 0x4216E400 /* 66.22.228.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, + { 0x42660000 /* 66.102.0.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x42F94000 /* 66.249.64.0/19 */, 19, NDPI_PROTOCOL_GOOGLE }, + { 0x46208000 /* 70.32.128.0/19 */, 19, NDPI_PROTOCOL_GOOGLE }, + { 0x480EC000 /* 72.14.192.0/18 */, 18, NDPI_PROTOCOL_GOOGLE }, + { 0x4A721800 /* 74.114.24.0/21 */, 21, NDPI_PROTOCOL_GOOGLE }, + { 0x4A7D0000 /* 74.125.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE }, + { 0x689A0000 /* 104.154.0.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x689A7000 /* 104.154.112.0/24 */, 24, NDPI_PROTOCOL_GOOGLE }, + { 0x689A7A00 /* 104.154.122.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, + { 0x689A7C00 /* 104.154.124.0/22 */, 22, NDPI_PROTOCOL_GOOGLE }, + { 0x689BF000 /* 104.155.240.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x68C44000 /* 104.196.64.0/24 */, 24, NDPI_PROTOCOL_GOOGLE }, + { 0x68C44800 /* 104.196.72.0/21 */, 21, NDPI_PROTOCOL_GOOGLE }, + { 0x68C45000 /* 104.196.80.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x68C74000 /* 104.199.64.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, + { 0x68C7F000 /* 104.199.240.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, + { 0x68EDA000 /* 104.237.160.0/19 */, 19, NDPI_PROTOCOL_GOOGLE }, + { 0x6BB2C000 /* 107.178.192.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x6BB2E000 /* 107.178.224.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x6CAAC000 /* 108.170.192.0/18 */, 18, NDPI_PROTOCOL_GOOGLE }, + { 0x6CB10000 /* 108.177.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE }, + { 0x82D30000 /* 130.211.0.0/22 */, 22, NDPI_PROTOCOL_GOOGLE }, + { 0x88700000 /* 136.112.0.0/12 */, 12, NDPI_PROTOCOL_GOOGLE }, + { 0x8EFA0000 /* 142.250.0.0/15 */, 15, NDPI_PROTOCOL_GOOGLE }, + { 0x92940000 /* 146.148.0.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, + { 0xAC6E2000 /* 172.110.32.0/21 */, 21, NDPI_PROTOCOL_GOOGLE }, + { 0xACD90000 /* 172.217.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE }, + { 0xACFD0000 /* 172.253.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE }, + { 0xADC20000 /* 173.194.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE }, + { 0xC0B20000 /* 192.178.0.0/15 */, 15, NDPI_PROTOCOL_GOOGLE }, + { 0xC1BA0400 /* 193.186.4.0/24 */, 24, NDPI_PROTOCOL_GOOGLE }, + { 0xC7249A00 /* 199.36.154.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, + { 0xC7249C00 /* 199.36.156.0/24 */, 24, NDPI_PROTOCOL_GOOGLE }, + { 0xC7C07000 /* 199.192.112.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, + { 0xC7C07200 /* 199.192.114.0/24 */, 24, NDPI_PROTOCOL_GOOGLE }, + { 0xC7DFED00 /* 199.223.237.0/24 */, 24, NDPI_PROTOCOL_GOOGLE }, + { 0xC7DFEE00 /* 199.223.238.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, + { 0xCFDFA000 /* 207.223.160.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0xD0419800 /* 208.65.152.0/22 */, 22, NDPI_PROTOCOL_GOOGLE }, + { 0xD0446C00 /* 208.68.108.0/22 */, 22, NDPI_PROTOCOL_GOOGLE }, + { 0xD051BC00 /* 208.81.188.0/22 */, 22, NDPI_PROTOCOL_GOOGLE }, + { 0xD075E000 /* 208.117.224.0/19 */, 19, NDPI_PROTOCOL_GOOGLE }, + { 0xD1558000 /* 209.85.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE }, + { 0xD83AC000 /* 216.58.192.0/19 */, 19, NDPI_PROTOCOL_GOOGLE }, + { 0xD8495000 /* 216.73.80.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0xD8EF2000 /* 216.239.32.0/19 */, 19, NDPI_PROTOCOL_GOOGLE }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_icloud_private_relay_match.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_icloud_private_relay_match.c new file mode 100644 index 0000000000..388f75afd1 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_icloud_private_relay_match.c @@ -0,0 +1,3147 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_anonymous_subscriber_protocol_list[] = { + { 0x081B4317 /* 8.27.67.23/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B431F /* 8.27.67.31/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B4320 /* 8.27.67.32/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B4329 /* 8.27.67.41/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B432A /* 8.27.67.42/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B432C /* 8.27.67.44/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B4333 /* 8.27.67.51/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B4334 /* 8.27.67.52/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B4336 /* 8.27.67.54/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B4339 /* 8.27.67.57/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B433A /* 8.27.67.58/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B433D /* 8.27.67.61/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B433F /* 8.27.67.63/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B434A /* 8.27.67.74/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B434D /* 8.27.67.77/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B434E /* 8.27.67.78/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B4359 /* 8.27.67.89/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B4362 /* 8.27.67.98/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B4364 /* 8.27.67.100/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B436D /* 8.27.67.109/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B4376 /* 8.27.67.118/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B4378 /* 8.27.67.120/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B4382 /* 8.27.67.130/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B438A /* 8.27.67.138/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B438D /* 8.27.67.141/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B438F /* 8.27.67.143/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B4392 /* 8.27.67.146/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B43A4 /* 8.27.67.164/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B43A9 /* 8.27.67.169/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B43AD /* 8.27.67.173/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B43BC /* 8.27.67.188/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B43BE /* 8.27.67.190/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B43CB /* 8.27.67.203/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B43D2 /* 8.27.67.210/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B43D4 /* 8.27.67.212/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B43E4 /* 8.27.67.228/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B43F3 /* 8.27.67.243/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x081B43F5 /* 8.27.67.245/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C0801 /* 104.28.8.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C0802 /* 104.28.8.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C0804 /* 104.28.8.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C0808 /* 104.28.8.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C0810 /* 104.28.8.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C0820 /* 104.28.8.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C0840 /* 104.28.8.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C0880 /* 104.28.8.128/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C0900 /* 104.28.9.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C0A00 /* 104.28.10.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C0C00 /* 104.28.12.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C0E00 /* 104.28.14.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C0F00 /* 104.28.15.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C0F40 /* 104.28.15.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C0F60 /* 104.28.15.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C0F70 /* 104.28.15.112/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C0F78 /* 104.28.15.120/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1C00 /* 104.28.28.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1C40 /* 104.28.28.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1C48 /* 104.28.28.72/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1C4C /* 104.28.28.76/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1C4F /* 104.28.28.79/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1C50 /* 104.28.28.80/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1C53 /* 104.28.28.83/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1C54 /* 104.28.28.84/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1C58 /* 104.28.28.88/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1C5B /* 104.28.28.91/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1C5C /* 104.28.28.92/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1C5F /* 104.28.28.95/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1C60 /* 104.28.28.96/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1C64 /* 104.28.28.100/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1D00 /* 104.28.29.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1D20 /* 104.28.29.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1D30 /* 104.28.29.48/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1D32 /* 104.28.29.50/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1D35 /* 104.28.29.53/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1D36 /* 104.28.29.54/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1D3B /* 104.28.29.59/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1D3C /* 104.28.29.60/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1D3F /* 104.28.29.63/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1D40 /* 104.28.29.64/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1D44 /* 104.28.29.68/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1D47 /* 104.28.29.71/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1D48 /* 104.28.29.72/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1D4C /* 104.28.29.76/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1D4F /* 104.28.29.79/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1D50 /* 104.28.29.80/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1D54 /* 104.28.29.84/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1D57 /* 104.28.29.87/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1D58 /* 104.28.29.88/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1E00 /* 104.28.30.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1E80 /* 104.28.30.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1EA0 /* 104.28.30.160/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1F00 /* 104.28.31.0/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1F04 /* 104.28.31.4/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1F06 /* 104.28.31.6/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1F09 /* 104.28.31.9/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1F0A /* 104.28.31.10/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1F0C /* 104.28.31.12/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1F10 /* 104.28.31.16/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1F14 /* 104.28.31.20/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1F17 /* 104.28.31.23/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1F18 /* 104.28.31.24/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1F20 /* 104.28.31.32/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1F24 /* 104.28.31.36/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1F26 /* 104.28.31.38/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1F29 /* 104.28.31.41/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1F2A /* 104.28.31.42/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1F2C /* 104.28.31.44/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1F30 /* 104.28.31.48/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1F40 /* 104.28.31.64/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C1F42 /* 104.28.31.66/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2000 /* 104.28.32.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2040 /* 104.28.32.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2050 /* 104.28.32.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2058 /* 104.28.32.88/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C205A /* 104.28.32.90/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C205C /* 104.28.32.92/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2060 /* 104.28.32.96/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2080 /* 104.28.32.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C20A0 /* 104.28.32.160/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C20A8 /* 104.28.32.168/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C20AC /* 104.28.32.172/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C20B0 /* 104.28.32.176/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C20C0 /* 104.28.32.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C20E0 /* 104.28.32.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C20F0 /* 104.28.32.240/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C20F8 /* 104.28.32.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C20FC /* 104.28.32.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C20FE /* 104.28.32.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2100 /* 104.28.33.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C210A /* 104.28.33.10/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C210C /* 104.28.33.12/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2110 /* 104.28.33.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2120 /* 104.28.33.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2140 /* 104.28.33.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2180 /* 104.28.33.128/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2184 /* 104.28.33.132/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2188 /* 104.28.33.136/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2190 /* 104.28.33.144/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2200 /* 104.28.34.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2220 /* 104.28.34.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2230 /* 104.28.34.48/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2234 /* 104.28.34.52/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2238 /* 104.28.34.56/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2240 /* 104.28.34.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2250 /* 104.28.34.80/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2252 /* 104.28.34.82/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2255 /* 104.28.34.85/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2256 /* 104.28.34.86/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2258 /* 104.28.34.88/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2260 /* 104.28.34.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2270 /* 104.28.34.112/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2276 /* 104.28.34.118/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2278 /* 104.28.34.120/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2280 /* 104.28.34.128/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2284 /* 104.28.34.132/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2287 /* 104.28.34.135/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2288 /* 104.28.34.136/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C228B /* 104.28.34.139/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C228C /* 104.28.34.140/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2290 /* 104.28.34.144/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C22A0 /* 104.28.34.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C22B2 /* 104.28.34.178/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C22B4 /* 104.28.34.180/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C22B8 /* 104.28.34.184/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2300 /* 104.28.35.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2320 /* 104.28.35.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2330 /* 104.28.35.48/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2336 /* 104.28.35.54/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C233A /* 104.28.35.58/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C233C /* 104.28.35.60/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2342 /* 104.28.35.66/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2346 /* 104.28.35.70/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2348 /* 104.28.35.72/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C234E /* 104.28.35.78/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2350 /* 104.28.35.80/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2354 /* 104.28.35.84/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2358 /* 104.28.35.88/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C235C /* 104.28.35.92/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2360 /* 104.28.35.96/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2366 /* 104.28.35.102/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2402 /* 104.28.36.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2404 /* 104.28.36.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2408 /* 104.28.36.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2410 /* 104.28.36.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2420 /* 104.28.36.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2440 /* 104.28.36.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2448 /* 104.28.36.72/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C244B /* 104.28.36.75/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C244C /* 104.28.36.76/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2450 /* 104.28.36.80/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2460 /* 104.28.36.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2468 /* 104.28.36.104/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C246C /* 104.28.36.108/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2470 /* 104.28.36.112/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2480 /* 104.28.36.128/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2488 /* 104.28.36.136/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C248C /* 104.28.36.140/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2490 /* 104.28.36.144/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2494 /* 104.28.36.148/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2498 /* 104.28.36.152/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C249E /* 104.28.36.158/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C24A0 /* 104.28.36.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C24B0 /* 104.28.36.176/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C24B8 /* 104.28.36.184/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2500 /* 104.28.37.0/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2506 /* 104.28.37.6/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2508 /* 104.28.37.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2510 /* 104.28.37.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2518 /* 104.28.37.24/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C251B /* 104.28.37.27/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C251C /* 104.28.37.28/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2527 /* 104.28.37.39/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2528 /* 104.28.37.40/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2530 /* 104.28.37.48/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2540 /* 104.28.37.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2580 /* 104.28.37.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C25A0 /* 104.28.37.160/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C25A4 /* 104.28.37.164/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C25A8 /* 104.28.37.168/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C25B0 /* 104.28.37.176/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C25B8 /* 104.28.37.184/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C25BA /* 104.28.37.186/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C25BD /* 104.28.37.189/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C25BE /* 104.28.37.190/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C25C0 /* 104.28.37.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C25E0 /* 104.28.37.224/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C25E8 /* 104.28.37.232/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C25EA /* 104.28.37.234/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C25ED /* 104.28.37.237/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C25EE /* 104.28.37.238/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C25F0 /* 104.28.37.240/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C25F6 /* 104.28.37.246/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C25F8 /* 104.28.37.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C25FC /* 104.28.37.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C25FE /* 104.28.37.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2600 /* 104.28.38.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2620 /* 104.28.38.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2630 /* 104.28.38.48/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2638 /* 104.28.38.56/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C263C /* 104.28.38.60/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2640 /* 104.28.38.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2648 /* 104.28.38.72/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C264B /* 104.28.38.75/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C264C /* 104.28.38.76/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2650 /* 104.28.38.80/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2660 /* 104.28.38.96/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2669 /* 104.28.38.105/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C266A /* 104.28.38.106/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C266C /* 104.28.38.108/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C266E /* 104.28.38.110/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2673 /* 104.28.38.115/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2674 /* 104.28.38.116/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2678 /* 104.28.38.120/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2680 /* 104.28.38.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C26A0 /* 104.28.38.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C26B0 /* 104.28.38.176/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C26B4 /* 104.28.38.180/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C26B7 /* 104.28.38.183/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C26B8 /* 104.28.38.184/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C26BE /* 104.28.38.190/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C26C0 /* 104.28.38.192/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C26C8 /* 104.28.38.200/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C26CB /* 104.28.38.203/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C26CC /* 104.28.38.204/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C26CF /* 104.28.38.207/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C26D0 /* 104.28.38.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C26D8 /* 104.28.38.216/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2700 /* 104.28.39.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2780 /* 104.28.39.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C27A0 /* 104.28.39.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2800 /* 104.28.40.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2880 /* 104.28.40.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C28A0 /* 104.28.40.160/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C28A8 /* 104.28.40.168/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C28AC /* 104.28.40.172/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C28AE /* 104.28.40.174/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2A00 /* 104.28.42.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2A80 /* 104.28.42.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2B00 /* 104.28.43.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2B08 /* 104.28.43.8/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2B0C /* 104.28.43.12/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2B0E /* 104.28.43.14/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2B11 /* 104.28.43.17/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2B12 /* 104.28.43.18/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2B14 /* 104.28.43.20/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2B1F /* 104.28.43.31/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2B20 /* 104.28.43.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2B40 /* 104.28.43.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2B80 /* 104.28.43.128/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2B88 /* 104.28.43.136/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2B8C /* 104.28.43.140/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2B90 /* 104.28.43.144/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2B98 /* 104.28.43.152/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2B9C /* 104.28.43.156/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2BA0 /* 104.28.43.160/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2BC0 /* 104.28.43.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2BE0 /* 104.28.43.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2BF0 /* 104.28.43.240/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2BF8 /* 104.28.43.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2BFC /* 104.28.43.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2BFE /* 104.28.43.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2C00 /* 104.28.44.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2C40 /* 104.28.44.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2C62 /* 104.28.44.98/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2C64 /* 104.28.44.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2C68 /* 104.28.44.104/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2C6E /* 104.28.44.110/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2C70 /* 104.28.44.112/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2C74 /* 104.28.44.116/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2C78 /* 104.28.44.120/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2C80 /* 104.28.44.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2CC0 /* 104.28.44.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2CE0 /* 104.28.44.224/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2CE4 /* 104.28.44.228/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2CE8 /* 104.28.44.232/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2D00 /* 104.28.45.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2D10 /* 104.28.45.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2D18 /* 104.28.45.24/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2D1C /* 104.28.45.28/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2D20 /* 104.28.45.32/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2D24 /* 104.28.45.36/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2D2A /* 104.28.45.42/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2D30 /* 104.28.45.48/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2E00 /* 104.28.46.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2E10 /* 104.28.46.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2E18 /* 104.28.46.24/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2E1C /* 104.28.46.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2E20 /* 104.28.46.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2E40 /* 104.28.46.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2E60 /* 104.28.46.96/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2E64 /* 104.28.46.100/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2F00 /* 104.28.47.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2F40 /* 104.28.47.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2F48 /* 104.28.47.72/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2F4C /* 104.28.47.76/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2F50 /* 104.28.47.80/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2F60 /* 104.28.47.96/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2F80 /* 104.28.47.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2FC0 /* 104.28.47.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2FE0 /* 104.28.47.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C2FF0 /* 104.28.47.240/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3000 /* 104.28.48.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3080 /* 104.28.48.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C30C0 /* 104.28.48.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C30E0 /* 104.28.48.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C30F0 /* 104.28.48.240/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C30F8 /* 104.28.48.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C30FC /* 104.28.48.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C30FE /* 104.28.48.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3100 /* 104.28.49.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3140 /* 104.28.49.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3150 /* 104.28.49.80/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3200 /* 104.28.50.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3280 /* 104.28.50.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C32C0 /* 104.28.50.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C32E0 /* 104.28.50.224/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C32E8 /* 104.28.50.232/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3300 /* 104.28.51.0/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3306 /* 104.28.51.6/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3308 /* 104.28.51.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3310 /* 104.28.51.16/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3314 /* 104.28.51.20/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C331A /* 104.28.51.26/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C331C /* 104.28.51.28/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3320 /* 104.28.51.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3340 /* 104.28.51.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3350 /* 104.28.51.80/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3353 /* 104.28.51.83/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3354 /* 104.28.51.84/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3358 /* 104.28.51.88/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C335C /* 104.28.51.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3360 /* 104.28.51.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3372 /* 104.28.51.114/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3374 /* 104.28.51.116/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3378 /* 104.28.51.120/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3380 /* 104.28.51.128/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3390 /* 104.28.51.144/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3394 /* 104.28.51.148/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3397 /* 104.28.51.151/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3398 /* 104.28.51.152/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C33A0 /* 104.28.51.160/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C33A8 /* 104.28.51.168/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C33AC /* 104.28.51.172/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C33AF /* 104.28.51.175/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C33B0 /* 104.28.51.176/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C33C0 /* 104.28.51.192/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C33C2 /* 104.28.51.194/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C33C5 /* 104.28.51.197/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C33C6 /* 104.28.51.198/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C33CF /* 104.28.51.207/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C33D0 /* 104.28.51.208/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C33E2 /* 104.28.51.226/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C33E4 /* 104.28.51.228/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C33E6 /* 104.28.51.230/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C33E9 /* 104.28.51.233/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C33EA /* 104.28.51.234/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C33EC /* 104.28.51.236/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C33F0 /* 104.28.51.240/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C33F4 /* 104.28.51.244/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C33F8 /* 104.28.51.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C33FE /* 104.28.51.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3400 /* 104.28.52.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C340A /* 104.28.52.10/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3500 /* 104.28.53.0/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3504 /* 104.28.53.4/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3508 /* 104.28.53.8/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C350C /* 104.28.53.12/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3510 /* 104.28.53.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C351B /* 104.28.53.27/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C351C /* 104.28.53.28/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3520 /* 104.28.53.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3540 /* 104.28.53.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3548 /* 104.28.53.72/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C354C /* 104.28.53.76/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C354F /* 104.28.53.79/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3550 /* 104.28.53.80/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3552 /* 104.28.53.82/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3600 /* 104.28.54.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3640 /* 104.28.54.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3660 /* 104.28.54.96/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3700 /* 104.28.55.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3780 /* 104.28.55.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C37C0 /* 104.28.55.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C37E0 /* 104.28.55.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C37F0 /* 104.28.55.240/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C37F8 /* 104.28.55.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C37FC /* 104.28.55.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C37FE /* 104.28.55.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3800 /* 104.28.56.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3810 /* 104.28.56.16/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3812 /* 104.28.56.18/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3900 /* 104.28.57.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3980 /* 104.28.57.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C39C0 /* 104.28.57.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C39E0 /* 104.28.57.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C39F0 /* 104.28.57.240/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C39F8 /* 104.28.57.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C39FC /* 104.28.57.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C39FE /* 104.28.57.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3A00 /* 104.28.58.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3A10 /* 104.28.58.16/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3A12 /* 104.28.58.18/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3B00 /* 104.28.59.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3B80 /* 104.28.59.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3BA0 /* 104.28.59.160/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3BA8 /* 104.28.59.168/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3BAA /* 104.28.59.170/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3C00 /* 104.28.60.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3C20 /* 104.28.60.32/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3C26 /* 104.28.60.38/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3C2A /* 104.28.60.42/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3C2C /* 104.28.60.44/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3C30 /* 104.28.60.48/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3C40 /* 104.28.60.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3C62 /* 104.28.60.98/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3C64 /* 104.28.60.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3C68 /* 104.28.60.104/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3C70 /* 104.28.60.112/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3C80 /* 104.28.60.128/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3C88 /* 104.28.60.136/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3C8C /* 104.28.60.140/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3C8F /* 104.28.60.143/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3C90 /* 104.28.60.144/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3C98 /* 104.28.60.152/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3C9C /* 104.28.60.156/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3CA0 /* 104.28.60.160/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3CA4 /* 104.28.60.164/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3CA8 /* 104.28.60.168/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3CAE /* 104.28.60.174/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3CB2 /* 104.28.60.178/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3CB6 /* 104.28.60.182/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3CB8 /* 104.28.60.184/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3CBC /* 104.28.60.188/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3CC0 /* 104.28.60.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3CE0 /* 104.28.60.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3CF0 /* 104.28.60.240/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3CF8 /* 104.28.60.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3CFC /* 104.28.60.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3CFE /* 104.28.60.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3D00 /* 104.28.61.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3D10 /* 104.28.61.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3D18 /* 104.28.61.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3D1C /* 104.28.61.28/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3D1F /* 104.28.61.31/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3D20 /* 104.28.61.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3D40 /* 104.28.61.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3D48 /* 104.28.61.72/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3D4C /* 104.28.61.76/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3D4F /* 104.28.61.79/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3D50 /* 104.28.61.80/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3D60 /* 104.28.61.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3D70 /* 104.28.61.112/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3D74 /* 104.28.61.116/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3E00 /* 104.28.62.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3E40 /* 104.28.62.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3E60 /* 104.28.62.96/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3E62 /* 104.28.62.98/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3F00 /* 104.28.63.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3F80 /* 104.28.63.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3FC0 /* 104.28.63.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3FE0 /* 104.28.63.224/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3FE8 /* 104.28.63.232/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C3FEC /* 104.28.63.236/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4000 /* 104.28.64.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4020 /* 104.28.64.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4030 /* 104.28.64.48/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4036 /* 104.28.64.54/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4038 /* 104.28.64.56/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C403C /* 104.28.64.60/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4100 /* 104.28.65.0/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4104 /* 104.28.65.4/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4106 /* 104.28.65.6/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C410B /* 104.28.65.11/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C410C /* 104.28.65.12/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4110 /* 104.28.65.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4120 /* 104.28.65.32/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4128 /* 104.28.65.40/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C412A /* 104.28.65.42/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C412D /* 104.28.65.45/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C412E /* 104.28.65.46/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4130 /* 104.28.65.48/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4140 /* 104.28.65.64/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4142 /* 104.28.65.66/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4200 /* 104.28.66.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4240 /* 104.28.66.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4260 /* 104.28.66.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4268 /* 104.28.66.104/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C426A /* 104.28.66.106/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4270 /* 104.28.66.112/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4275 /* 104.28.66.117/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4276 /* 104.28.66.118/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4278 /* 104.28.66.120/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C427C /* 104.28.66.124/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C427E /* 104.28.66.126/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4281 /* 104.28.66.129/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4282 /* 104.28.66.130/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4284 /* 104.28.66.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4288 /* 104.28.66.136/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4290 /* 104.28.66.144/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C42A0 /* 104.28.66.160/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C42C0 /* 104.28.66.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C42E0 /* 104.28.66.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C42F0 /* 104.28.66.240/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C42F3 /* 104.28.66.243/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C42F4 /* 104.28.66.244/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C42F8 /* 104.28.66.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C42FC /* 104.28.66.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C42FE /* 104.28.66.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4300 /* 104.28.67.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4308 /* 104.28.67.8/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C430A /* 104.28.67.10/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C430D /* 104.28.67.13/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C430E /* 104.28.67.14/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4310 /* 104.28.67.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4320 /* 104.28.67.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4340 /* 104.28.67.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4380 /* 104.28.67.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C43C0 /* 104.28.67.192/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C43D0 /* 104.28.67.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C43D8 /* 104.28.67.216/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C43DC /* 104.28.67.220/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C43E8 /* 104.28.67.232/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C43EA /* 104.28.67.234/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C43ED /* 104.28.67.237/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C43EE /* 104.28.67.238/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C43F0 /* 104.28.67.240/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C43F3 /* 104.28.67.243/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C43F4 /* 104.28.67.244/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C43F8 /* 104.28.67.248/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C43FA /* 104.28.67.250/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C43FD /* 104.28.67.253/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C43FE /* 104.28.67.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4402 /* 104.28.68.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4404 /* 104.28.68.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4408 /* 104.28.68.8/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C440C /* 104.28.68.12/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4410 /* 104.28.68.16/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4416 /* 104.28.68.22/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4418 /* 104.28.68.24/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4420 /* 104.28.68.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4430 /* 104.28.68.48/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4434 /* 104.28.68.52/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4438 /* 104.28.68.56/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4440 /* 104.28.68.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4450 /* 104.28.68.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4458 /* 104.28.68.88/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C445A /* 104.28.68.90/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C445D /* 104.28.68.93/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C445E /* 104.28.68.94/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4460 /* 104.28.68.96/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4465 /* 104.28.68.101/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4466 /* 104.28.68.102/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4469 /* 104.28.68.105/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C446A /* 104.28.68.106/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C446C /* 104.28.68.108/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4470 /* 104.28.68.112/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4478 /* 104.28.68.120/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C447C /* 104.28.68.124/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4480 /* 104.28.68.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C44A0 /* 104.28.68.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C44B0 /* 104.28.68.176/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C44B4 /* 104.28.68.180/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C44B6 /* 104.28.68.182/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C44B9 /* 104.28.68.185/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C44BA /* 104.28.68.186/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C44BC /* 104.28.68.188/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C44BE /* 104.28.68.190/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4500 /* 104.28.69.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4508 /* 104.28.69.8/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C450C /* 104.28.69.12/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C450E /* 104.28.69.14/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4519 /* 104.28.69.25/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C451A /* 104.28.69.26/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C451C /* 104.28.69.28/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4520 /* 104.28.69.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4540 /* 104.28.69.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C454A /* 104.28.69.74/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C454C /* 104.28.69.76/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4550 /* 104.28.69.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4558 /* 104.28.69.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C455C /* 104.28.69.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4560 /* 104.28.69.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4568 /* 104.28.69.104/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4570 /* 104.28.69.112/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4575 /* 104.28.69.117/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4576 /* 104.28.69.118/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4578 /* 104.28.69.120/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C457C /* 104.28.69.124/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C457E /* 104.28.69.126/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4581 /* 104.28.69.129/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4582 /* 104.28.69.130/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4584 /* 104.28.69.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4588 /* 104.28.69.136/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4590 /* 104.28.69.144/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C45A0 /* 104.28.69.160/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C45C0 /* 104.28.69.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C45E0 /* 104.28.69.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C45F0 /* 104.28.69.240/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C45F3 /* 104.28.69.243/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C45F4 /* 104.28.69.244/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C45F8 /* 104.28.69.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C45FC /* 104.28.69.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C45FE /* 104.28.69.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4600 /* 104.28.70.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4608 /* 104.28.70.8/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C460A /* 104.28.70.10/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C460D /* 104.28.70.13/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C460E /* 104.28.70.14/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4610 /* 104.28.70.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4620 /* 104.28.70.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4640 /* 104.28.70.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4680 /* 104.28.70.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C46C0 /* 104.28.70.192/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C46D0 /* 104.28.70.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C46D8 /* 104.28.70.216/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C46DC /* 104.28.70.220/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C46E8 /* 104.28.70.232/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C46EA /* 104.28.70.234/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C46ED /* 104.28.70.237/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C46EE /* 104.28.70.238/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C46F0 /* 104.28.70.240/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C46F3 /* 104.28.70.243/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C46F4 /* 104.28.70.244/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C46F8 /* 104.28.70.248/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C46FA /* 104.28.70.250/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C46FD /* 104.28.70.253/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C46FE /* 104.28.70.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4702 /* 104.28.71.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4704 /* 104.28.71.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4708 /* 104.28.71.8/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C470C /* 104.28.71.12/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4710 /* 104.28.71.16/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4716 /* 104.28.71.22/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4718 /* 104.28.71.24/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4720 /* 104.28.71.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4730 /* 104.28.71.48/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4734 /* 104.28.71.52/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4738 /* 104.28.71.56/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4740 /* 104.28.71.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4750 /* 104.28.71.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4758 /* 104.28.71.88/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C475A /* 104.28.71.90/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C475D /* 104.28.71.93/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C475E /* 104.28.71.94/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4760 /* 104.28.71.96/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4765 /* 104.28.71.101/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4766 /* 104.28.71.102/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4769 /* 104.28.71.105/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C476A /* 104.28.71.106/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C476C /* 104.28.71.108/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4770 /* 104.28.71.112/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4778 /* 104.28.71.120/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C477C /* 104.28.71.124/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4780 /* 104.28.71.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C47A0 /* 104.28.71.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C47B0 /* 104.28.71.176/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C47B4 /* 104.28.71.180/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C47B6 /* 104.28.71.182/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C47B9 /* 104.28.71.185/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C47BA /* 104.28.71.186/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C47BC /* 104.28.71.188/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C47BE /* 104.28.71.190/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4800 /* 104.28.72.0/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4808 /* 104.28.72.8/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C480E /* 104.28.72.14/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4810 /* 104.28.72.16/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4814 /* 104.28.72.20/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4818 /* 104.28.72.24/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C481C /* 104.28.72.28/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4820 /* 104.28.72.32/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4824 /* 104.28.72.36/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4C01 /* 104.28.76.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4C02 /* 104.28.76.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4C04 /* 104.28.76.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4C08 /* 104.28.76.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4C10 /* 104.28.76.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4C20 /* 104.28.76.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4C30 /* 104.28.76.48/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4C39 /* 104.28.76.57/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4C3A /* 104.28.76.58/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4C3C /* 104.28.76.60/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4C3F /* 104.28.76.63/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4C40 /* 104.28.76.64/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4C45 /* 104.28.76.69/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4C46 /* 104.28.76.70/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4C48 /* 104.28.76.72/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4C50 /* 104.28.76.80/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4C60 /* 104.28.76.96/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4C80 /* 104.28.76.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4CC0 /* 104.28.76.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4CE0 /* 104.28.76.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4CF0 /* 104.28.76.240/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4CF8 /* 104.28.76.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4CFC /* 104.28.76.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4CFE /* 104.28.76.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4D02 /* 104.28.77.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4D04 /* 104.28.77.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4D08 /* 104.28.77.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4D10 /* 104.28.77.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4D20 /* 104.28.77.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4D40 /* 104.28.77.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4D48 /* 104.28.77.72/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4D4C /* 104.28.77.76/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4D4F /* 104.28.77.79/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4D50 /* 104.28.77.80/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4D60 /* 104.28.77.96/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4D80 /* 104.28.77.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4DC0 /* 104.28.77.192/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4DC4 /* 104.28.77.196/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4DC7 /* 104.28.77.199/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4DC8 /* 104.28.77.200/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4DD0 /* 104.28.77.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4DD8 /* 104.28.77.216/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4E02 /* 104.28.78.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4E04 /* 104.28.78.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4E08 /* 104.28.78.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4E10 /* 104.28.78.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4E20 /* 104.28.78.32/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4E28 /* 104.28.78.40/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4E2C /* 104.28.78.44/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4E2E /* 104.28.78.46/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4E31 /* 104.28.78.49/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4E32 /* 104.28.78.50/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4E34 /* 104.28.78.52/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4E36 /* 104.28.78.54/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4E39 /* 104.28.78.57/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4E3A /* 104.28.78.58/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4E3C /* 104.28.78.60/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4E3F /* 104.28.78.63/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4E40 /* 104.28.78.64/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4E45 /* 104.28.78.69/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4E46 /* 104.28.78.70/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4E48 /* 104.28.78.72/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4E50 /* 104.28.78.80/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4E60 /* 104.28.78.96/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4E80 /* 104.28.78.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4EC0 /* 104.28.78.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4EE0 /* 104.28.78.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4EF0 /* 104.28.78.240/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4EF8 /* 104.28.78.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4EFC /* 104.28.78.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4EFE /* 104.28.78.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4F02 /* 104.28.79.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4F04 /* 104.28.79.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4F08 /* 104.28.79.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4F10 /* 104.28.79.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4F20 /* 104.28.79.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4F40 /* 104.28.79.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4F48 /* 104.28.79.72/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4F4C /* 104.28.79.76/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4F4F /* 104.28.79.79/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4F50 /* 104.28.79.80/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4F60 /* 104.28.79.96/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4F80 /* 104.28.79.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4FC0 /* 104.28.79.192/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4FC4 /* 104.28.79.196/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4FC7 /* 104.28.79.199/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4FC8 /* 104.28.79.200/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4FD0 /* 104.28.79.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C4FD8 /* 104.28.79.216/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5000 /* 104.28.80.0/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5004 /* 104.28.80.4/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5006 /* 104.28.80.6/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5008 /* 104.28.80.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5010 /* 104.28.80.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5020 /* 104.28.80.32/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5028 /* 104.28.80.40/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C502C /* 104.28.80.44/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5030 /* 104.28.80.48/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5040 /* 104.28.80.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5050 /* 104.28.80.80/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5052 /* 104.28.80.82/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5055 /* 104.28.80.85/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5056 /* 104.28.80.86/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5058 /* 104.28.80.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C505E /* 104.28.80.94/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5062 /* 104.28.80.98/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5064 /* 104.28.80.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5068 /* 104.28.80.104/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5070 /* 104.28.80.112/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5074 /* 104.28.80.116/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5078 /* 104.28.80.120/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5080 /* 104.28.80.128/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C508A /* 104.28.80.138/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C508C /* 104.28.80.140/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5090 /* 104.28.80.144/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C50A0 /* 104.28.80.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C50B0 /* 104.28.80.176/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C50B2 /* 104.28.80.178/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C50B5 /* 104.28.80.181/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C50B6 /* 104.28.80.182/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C50B8 /* 104.28.80.184/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C50C0 /* 104.28.80.192/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C50C8 /* 104.28.80.200/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C50CA /* 104.28.80.202/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C50CF /* 104.28.80.207/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C50D0 /* 104.28.80.208/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C50D7 /* 104.28.80.215/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C50D8 /* 104.28.80.216/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C50DB /* 104.28.80.219/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C50DC /* 104.28.80.220/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C50DE /* 104.28.80.222/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C50E3 /* 104.28.80.227/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C50E4 /* 104.28.80.228/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C50E8 /* 104.28.80.232/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C50F0 /* 104.28.80.240/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C50F8 /* 104.28.80.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C50FC /* 104.28.80.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C50FE /* 104.28.80.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5100 /* 104.28.81.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5108 /* 104.28.81.8/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C510A /* 104.28.81.10/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C510D /* 104.28.81.13/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C510E /* 104.28.81.14/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5110 /* 104.28.81.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C511A /* 104.28.81.26/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C511C /* 104.28.81.28/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5120 /* 104.28.81.32/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5124 /* 104.28.81.36/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5127 /* 104.28.81.39/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5128 /* 104.28.81.40/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C512C /* 104.28.81.44/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C512E /* 104.28.81.46/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5131 /* 104.28.81.49/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5132 /* 104.28.81.50/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5134 /* 104.28.81.52/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5138 /* 104.28.81.56/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5140 /* 104.28.81.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5148 /* 104.28.81.72/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C514C /* 104.28.81.76/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C514E /* 104.28.81.78/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5151 /* 104.28.81.81/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5152 /* 104.28.81.82/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5155 /* 104.28.81.85/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5156 /* 104.28.81.86/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5158 /* 104.28.81.88/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5200 /* 104.28.82.0/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5204 /* 104.28.82.4/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5206 /* 104.28.82.6/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5209 /* 104.28.82.9/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C520A /* 104.28.82.10/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C520C /* 104.28.82.12/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5210 /* 104.28.82.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5218 /* 104.28.82.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C521C /* 104.28.82.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5220 /* 104.28.82.32/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5224 /* 104.28.82.36/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5228 /* 104.28.82.40/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5230 /* 104.28.82.48/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5240 /* 104.28.82.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5260 /* 104.28.82.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5270 /* 104.28.82.112/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5300 /* 104.28.83.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5320 /* 104.28.83.32/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5328 /* 104.28.83.40/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C532C /* 104.28.83.44/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C532E /* 104.28.83.46/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5330 /* 104.28.83.48/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5340 /* 104.28.83.64/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5344 /* 104.28.83.68/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5348 /* 104.28.83.72/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C534C /* 104.28.83.76/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5354 /* 104.28.83.84/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5359 /* 104.28.83.89/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C535A /* 104.28.83.90/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C535C /* 104.28.83.92/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5360 /* 104.28.83.96/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5362 /* 104.28.83.98/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5365 /* 104.28.83.101/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5366 /* 104.28.83.102/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5368 /* 104.28.83.104/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5370 /* 104.28.83.112/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5380 /* 104.28.83.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C53C0 /* 104.28.83.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C53E0 /* 104.28.83.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C53F0 /* 104.28.83.240/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C53F4 /* 104.28.83.244/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C53F6 /* 104.28.83.246/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5402 /* 104.28.84.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5404 /* 104.28.84.4/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5407 /* 104.28.84.7/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5408 /* 104.28.84.8/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C540A /* 104.28.84.10/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C540D /* 104.28.84.13/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C540E /* 104.28.84.14/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5410 /* 104.28.84.16/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5414 /* 104.28.84.20/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5417 /* 104.28.84.23/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5418 /* 104.28.84.24/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C541B /* 104.28.84.27/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C541C /* 104.28.84.28/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5420 /* 104.28.84.32/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5422 /* 104.28.84.34/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5425 /* 104.28.84.37/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5426 /* 104.28.84.38/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5428 /* 104.28.84.40/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C542A /* 104.28.84.42/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C542F /* 104.28.84.47/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5430 /* 104.28.84.48/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5440 /* 104.28.84.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5448 /* 104.28.84.72/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C544C /* 104.28.84.76/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C544F /* 104.28.84.79/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5450 /* 104.28.84.80/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5454 /* 104.28.84.84/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5459 /* 104.28.84.89/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C545A /* 104.28.84.90/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C545D /* 104.28.84.93/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C545E /* 104.28.84.94/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5460 /* 104.28.84.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5468 /* 104.28.84.104/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C546E /* 104.28.84.110/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5470 /* 104.28.84.112/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5480 /* 104.28.84.128/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5488 /* 104.28.84.136/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C548C /* 104.28.84.140/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5500 /* 104.28.85.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5510 /* 104.28.85.16/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5516 /* 104.28.85.22/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C551A /* 104.28.85.26/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C551C /* 104.28.85.28/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5520 /* 104.28.85.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5540 /* 104.28.85.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5580 /* 104.28.85.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C55C0 /* 104.28.85.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C55E0 /* 104.28.85.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C55F0 /* 104.28.85.240/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5600 /* 104.28.86.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5620 /* 104.28.86.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5630 /* 104.28.86.48/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5634 /* 104.28.86.52/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5636 /* 104.28.86.54/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5638 /* 104.28.86.56/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5640 /* 104.28.86.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5680 /* 104.28.86.128/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5684 /* 104.28.86.132/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5688 /* 104.28.86.136/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5700 /* 104.28.87.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5708 /* 104.28.87.8/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C570A /* 104.28.87.10/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C570C /* 104.28.87.12/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5710 /* 104.28.87.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5718 /* 104.28.87.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C571C /* 104.28.87.28/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C571F /* 104.28.87.31/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5720 /* 104.28.87.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5730 /* 104.28.87.48/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5738 /* 104.28.87.56/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C573C /* 104.28.87.60/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5740 /* 104.28.87.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5748 /* 104.28.87.72/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C574C /* 104.28.87.76/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C574F /* 104.28.87.79/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5750 /* 104.28.87.80/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5753 /* 104.28.87.83/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5754 /* 104.28.87.84/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5758 /* 104.28.87.88/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5760 /* 104.28.87.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5770 /* 104.28.87.112/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5773 /* 104.28.87.115/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5774 /* 104.28.87.116/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5778 /* 104.28.87.120/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C577A /* 104.28.87.122/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5800 /* 104.28.88.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5810 /* 104.28.88.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C581A /* 104.28.88.26/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C581C /* 104.28.88.28/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5820 /* 104.28.88.32/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5828 /* 104.28.88.40/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C582C /* 104.28.88.44/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C582F /* 104.28.88.47/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5830 /* 104.28.88.48/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5840 /* 104.28.88.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5848 /* 104.28.88.72/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C584C /* 104.28.88.76/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5850 /* 104.28.88.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5858 /* 104.28.88.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C585C /* 104.28.88.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C585E /* 104.28.88.94/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5861 /* 104.28.88.97/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5862 /* 104.28.88.98/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5865 /* 104.28.88.101/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5866 /* 104.28.88.102/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5868 /* 104.28.88.104/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5870 /* 104.28.88.112/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5880 /* 104.28.88.128/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5888 /* 104.28.88.136/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C588C /* 104.28.88.140/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5890 /* 104.28.88.144/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5900 /* 104.28.89.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5910 /* 104.28.89.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5918 /* 104.28.89.24/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C591B /* 104.28.89.27/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C591C /* 104.28.89.28/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5920 /* 104.28.89.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5940 /* 104.28.89.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5960 /* 104.28.89.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5968 /* 104.28.89.104/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C596B /* 104.28.89.107/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C596C /* 104.28.89.108/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C596E /* 104.28.89.110/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5A00 /* 104.28.90.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5A20 /* 104.28.90.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5A30 /* 104.28.90.48/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5A38 /* 104.28.90.56/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5A3E /* 104.28.90.62/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5A42 /* 104.28.90.66/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5A44 /* 104.28.90.68/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5A4A /* 104.28.90.74/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5A4C /* 104.28.90.76/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5A50 /* 104.28.90.80/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5A54 /* 104.28.90.84/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5A58 /* 104.28.90.88/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5B00 /* 104.28.91.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5B80 /* 104.28.91.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5BA0 /* 104.28.91.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5BB0 /* 104.28.91.176/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5C01 /* 104.28.92.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5C02 /* 104.28.92.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5C04 /* 104.28.92.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5C08 /* 104.28.92.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5C10 /* 104.28.92.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5C20 /* 104.28.92.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5C40 /* 104.28.92.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5C80 /* 104.28.92.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5CC0 /* 104.28.92.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5CE0 /* 104.28.92.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5CF0 /* 104.28.92.240/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5CF8 /* 104.28.92.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5CFC /* 104.28.92.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5CFE /* 104.28.92.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5D00 /* 104.28.93.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5D08 /* 104.28.93.8/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5D0C /* 104.28.93.12/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5E02 /* 104.28.94.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5E04 /* 104.28.94.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5E08 /* 104.28.94.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5E10 /* 104.28.94.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5E20 /* 104.28.94.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5E40 /* 104.28.94.64/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5E46 /* 104.28.94.70/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5E48 /* 104.28.94.72/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5E50 /* 104.28.94.80/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5E60 /* 104.28.94.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5E72 /* 104.28.94.114/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5E74 /* 104.28.94.116/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5E78 /* 104.28.94.120/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5E82 /* 104.28.94.130/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5E86 /* 104.28.94.134/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5E88 /* 104.28.94.136/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5E8E /* 104.28.94.142/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5E90 /* 104.28.94.144/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5EA0 /* 104.28.94.160/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5EC0 /* 104.28.94.192/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5EC2 /* 104.28.94.194/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5EC5 /* 104.28.94.197/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5EC6 /* 104.28.94.198/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5EC8 /* 104.28.94.200/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5ED0 /* 104.28.94.208/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5EE0 /* 104.28.94.224/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5EE8 /* 104.28.94.232/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5EEE /* 104.28.94.238/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5EF0 /* 104.28.94.240/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5EF8 /* 104.28.94.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5EFC /* 104.28.94.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5EFE /* 104.28.94.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5F00 /* 104.28.95.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5F08 /* 104.28.95.8/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C5F0C /* 104.28.95.12/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6000 /* 104.28.96.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6010 /* 104.28.96.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6018 /* 104.28.96.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C601E /* 104.28.96.30/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6020 /* 104.28.96.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6040 /* 104.28.96.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6048 /* 104.28.96.72/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C604C /* 104.28.96.76/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C604F /* 104.28.96.79/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6050 /* 104.28.96.80/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6060 /* 104.28.96.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6068 /* 104.28.96.104/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C606E /* 104.28.96.110/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6070 /* 104.28.96.112/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6078 /* 104.28.96.120/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C607A /* 104.28.96.122/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C607D /* 104.28.96.125/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C607E /* 104.28.96.126/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6081 /* 104.28.96.129/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6082 /* 104.28.96.130/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6084 /* 104.28.96.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6088 /* 104.28.96.136/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6090 /* 104.28.96.144/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C60A0 /* 104.28.96.160/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C60A4 /* 104.28.96.164/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C60A8 /* 104.28.96.168/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C60B0 /* 104.28.96.176/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6100 /* 104.28.97.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6140 /* 104.28.97.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6150 /* 104.28.97.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6158 /* 104.28.97.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C615C /* 104.28.97.92/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C615F /* 104.28.97.95/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6160 /* 104.28.97.96/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6180 /* 104.28.97.128/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6200 /* 104.28.98.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6240 /* 104.28.98.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6248 /* 104.28.98.72/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C624A /* 104.28.98.74/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C624C /* 104.28.98.76/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6250 /* 104.28.98.80/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6260 /* 104.28.98.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6270 /* 104.28.98.112/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6300 /* 104.28.99.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6340 /* 104.28.99.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6348 /* 104.28.99.72/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C634E /* 104.28.99.78/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6353 /* 104.28.99.83/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6354 /* 104.28.99.84/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6358 /* 104.28.99.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C635C /* 104.28.99.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C635E /* 104.28.99.94/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6361 /* 104.28.99.97/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6362 /* 104.28.99.98/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6364 /* 104.28.99.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6368 /* 104.28.99.104/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6370 /* 104.28.99.112/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6380 /* 104.28.99.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C63C0 /* 104.28.99.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C63E0 /* 104.28.99.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C63F0 /* 104.28.99.240/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C63F2 /* 104.28.99.242/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C63FD /* 104.28.99.253/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C63FE /* 104.28.99.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6400 /* 104.28.100.0/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6403 /* 104.28.100.3/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6404 /* 104.28.100.4/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6406 /* 104.28.100.6/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6409 /* 104.28.100.9/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C640A /* 104.28.100.10/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C640C /* 104.28.100.12/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6410 /* 104.28.100.16/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6413 /* 104.28.100.19/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6414 /* 104.28.100.20/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6417 /* 104.28.100.23/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6418 /* 104.28.100.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C641C /* 104.28.100.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C641E /* 104.28.100.30/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6421 /* 104.28.100.33/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6422 /* 104.28.100.34/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6424 /* 104.28.100.36/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6426 /* 104.28.100.38/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C642B /* 104.28.100.43/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C642C /* 104.28.100.44/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6430 /* 104.28.100.48/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6440 /* 104.28.100.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6448 /* 104.28.100.72/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C644B /* 104.28.100.75/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C644C /* 104.28.100.76/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6450 /* 104.28.100.80/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6455 /* 104.28.100.85/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6456 /* 104.28.100.86/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6459 /* 104.28.100.89/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C645A /* 104.28.100.90/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C645C /* 104.28.100.92/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6460 /* 104.28.100.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C646A /* 104.28.100.106/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C646C /* 104.28.100.108/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6500 /* 104.28.101.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6520 /* 104.28.101.32/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6528 /* 104.28.101.40/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C652C /* 104.28.101.44/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6530 /* 104.28.101.48/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6538 /* 104.28.101.56/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C653E /* 104.28.101.62/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6540 /* 104.28.101.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C654E /* 104.28.101.78/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6553 /* 104.28.101.83/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6554 /* 104.28.101.84/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6558 /* 104.28.101.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C655C /* 104.28.101.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C655E /* 104.28.101.94/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6561 /* 104.28.101.97/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6562 /* 104.28.101.98/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6564 /* 104.28.101.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6568 /* 104.28.101.104/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6570 /* 104.28.101.112/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6580 /* 104.28.101.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C65C0 /* 104.28.101.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C65E0 /* 104.28.101.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C65F0 /* 104.28.101.240/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C65F2 /* 104.28.101.242/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C65FD /* 104.28.101.253/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C65FE /* 104.28.101.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6600 /* 104.28.102.0/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6603 /* 104.28.102.3/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6604 /* 104.28.102.4/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6606 /* 104.28.102.6/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6609 /* 104.28.102.9/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C660A /* 104.28.102.10/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C660C /* 104.28.102.12/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6610 /* 104.28.102.16/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6613 /* 104.28.102.19/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6614 /* 104.28.102.20/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6617 /* 104.28.102.23/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6618 /* 104.28.102.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C661C /* 104.28.102.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C661E /* 104.28.102.30/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6621 /* 104.28.102.33/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6622 /* 104.28.102.34/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6624 /* 104.28.102.36/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6626 /* 104.28.102.38/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C662B /* 104.28.102.43/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C662C /* 104.28.102.44/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6630 /* 104.28.102.48/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6640 /* 104.28.102.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6648 /* 104.28.102.72/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C664B /* 104.28.102.75/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C664C /* 104.28.102.76/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6650 /* 104.28.102.80/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6655 /* 104.28.102.85/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6656 /* 104.28.102.86/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6659 /* 104.28.102.89/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C665A /* 104.28.102.90/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C665C /* 104.28.102.92/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6660 /* 104.28.102.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C666A /* 104.28.102.106/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C666C /* 104.28.102.108/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6700 /* 104.28.103.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6780 /* 104.28.103.128/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C678A /* 104.28.103.138/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C678C /* 104.28.103.140/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6790 /* 104.28.103.144/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C67A0 /* 104.28.103.160/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C67C0 /* 104.28.103.192/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C67D0 /* 104.28.103.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C67D8 /* 104.28.103.216/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6800 /* 104.28.104.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6880 /* 104.28.104.128/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C688A /* 104.28.104.138/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C688C /* 104.28.104.140/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6890 /* 104.28.104.144/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C68A0 /* 104.28.104.160/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C68C0 /* 104.28.104.192/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C68D0 /* 104.28.104.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C68D8 /* 104.28.104.216/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6900 /* 104.28.105.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6910 /* 104.28.105.16/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6912 /* 104.28.105.18/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6916 /* 104.28.105.22/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6918 /* 104.28.105.24/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6920 /* 104.28.105.32/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A00 /* 104.28.106.0/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A06 /* 104.28.106.6/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A08 /* 104.28.106.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A10 /* 104.28.106.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A18 /* 104.28.106.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A1C /* 104.28.106.28/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A23 /* 104.28.106.35/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A24 /* 104.28.106.36/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A27 /* 104.28.106.39/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A28 /* 104.28.106.40/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A30 /* 104.28.106.48/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A34 /* 104.28.106.52/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A36 /* 104.28.106.54/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A39 /* 104.28.106.57/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A3A /* 104.28.106.58/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A3C /* 104.28.106.60/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A42 /* 104.28.106.66/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A46 /* 104.28.106.70/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A48 /* 104.28.106.72/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A50 /* 104.28.106.80/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A54 /* 104.28.106.84/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A58 /* 104.28.106.88/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A60 /* 104.28.106.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A68 /* 104.28.106.104/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A6C /* 104.28.106.108/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A70 /* 104.28.106.112/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A80 /* 104.28.106.128/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A88 /* 104.28.106.136/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A8C /* 104.28.106.140/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A90 /* 104.28.106.144/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A94 /* 104.28.106.148/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6A98 /* 104.28.106.152/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6AA0 /* 104.28.106.160/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6AAC /* 104.28.106.172/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6AB4 /* 104.28.106.180/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6AB8 /* 104.28.106.184/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6AC0 /* 104.28.106.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6AE0 /* 104.28.106.224/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6AE3 /* 104.28.106.227/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6AE4 /* 104.28.106.228/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6AE8 /* 104.28.106.232/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6AEC /* 104.28.106.236/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6AF0 /* 104.28.106.240/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6AF8 /* 104.28.106.248/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6AFA /* 104.28.106.250/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6AFD /* 104.28.106.253/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6AFE /* 104.28.106.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6B00 /* 104.28.107.0/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6B04 /* 104.28.107.4/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6B08 /* 104.28.107.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6B10 /* 104.28.107.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6B20 /* 104.28.107.32/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6B26 /* 104.28.107.38/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6B2A /* 104.28.107.42/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6B2C /* 104.28.107.44/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6B30 /* 104.28.107.48/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6B32 /* 104.28.107.50/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6C00 /* 104.28.108.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6C08 /* 104.28.108.8/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6C0A /* 104.28.108.10/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6D02 /* 104.28.109.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6D04 /* 104.28.109.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6D08 /* 104.28.109.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6D10 /* 104.28.109.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6D20 /* 104.28.109.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6D30 /* 104.28.109.48/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6D38 /* 104.28.109.56/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6D3C /* 104.28.109.60/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6D41 /* 104.28.109.65/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6D42 /* 104.28.109.66/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6D45 /* 104.28.109.69/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6D46 /* 104.28.109.70/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6D48 /* 104.28.109.72/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6D50 /* 104.28.109.80/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6D60 /* 104.28.109.96/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6D80 /* 104.28.109.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6DC0 /* 104.28.109.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6DE0 /* 104.28.109.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6DF0 /* 104.28.109.240/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6DF8 /* 104.28.109.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6DFC /* 104.28.109.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6DFE /* 104.28.109.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6E00 /* 104.28.110.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6E10 /* 104.28.110.16/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6E14 /* 104.28.110.20/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6E16 /* 104.28.110.22/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6E19 /* 104.28.110.25/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6E1A /* 104.28.110.26/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6E1C /* 104.28.110.28/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6E20 /* 104.28.110.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6E40 /* 104.28.110.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6E80 /* 104.28.110.128/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6F00 /* 104.28.111.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6F08 /* 104.28.111.8/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6F0C /* 104.28.111.12/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6F0E /* 104.28.111.14/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6F15 /* 104.28.111.21/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6F16 /* 104.28.111.22/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6F18 /* 104.28.111.24/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6F20 /* 104.28.111.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6F40 /* 104.28.111.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6F80 /* 104.28.111.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6FC0 /* 104.28.111.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6FE0 /* 104.28.111.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6FF0 /* 104.28.111.240/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6FF8 /* 104.28.111.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6FFC /* 104.28.111.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C6FFE /* 104.28.111.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7000 /* 104.28.112.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7100 /* 104.28.113.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7140 /* 104.28.113.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7148 /* 104.28.113.72/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C714E /* 104.28.113.78/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7150 /* 104.28.113.80/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7160 /* 104.28.113.96/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7180 /* 104.28.113.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C71C0 /* 104.28.113.192/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7200 /* 104.28.114.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7220 /* 104.28.114.32/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7224 /* 104.28.114.36/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C722B /* 104.28.114.43/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C722C /* 104.28.114.44/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7231 /* 104.28.114.49/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7232 /* 104.28.114.50/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7234 /* 104.28.114.52/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7238 /* 104.28.114.56/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7240 /* 104.28.114.64/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7300 /* 104.28.115.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7340 /* 104.28.115.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7360 /* 104.28.115.96/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7362 /* 104.28.115.98/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7400 /* 104.28.116.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7480 /* 104.28.116.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C74C0 /* 104.28.116.192/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C74C2 /* 104.28.116.194/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7500 /* 104.28.117.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7510 /* 104.28.117.16/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7512 /* 104.28.117.18/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C751B /* 104.28.117.27/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C751C /* 104.28.117.28/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7520 /* 104.28.117.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7540 /* 104.28.117.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7548 /* 104.28.117.72/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C754C /* 104.28.117.76/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7550 /* 104.28.117.80/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7562 /* 104.28.117.98/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7564 /* 104.28.117.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7568 /* 104.28.117.104/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7572 /* 104.28.117.114/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7577 /* 104.28.117.119/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7578 /* 104.28.117.120/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7580 /* 104.28.117.128/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7583 /* 104.28.117.131/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7584 /* 104.28.117.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7588 /* 104.28.117.136/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7590 /* 104.28.117.144/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C75A0 /* 104.28.117.160/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C75C0 /* 104.28.117.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C75E0 /* 104.28.117.224/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C75E8 /* 104.28.117.232/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C75EC /* 104.28.117.236/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C75EE /* 104.28.117.238/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C75F1 /* 104.28.117.241/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C75F2 /* 104.28.117.242/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C75F4 /* 104.28.117.244/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C75F8 /* 104.28.117.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C75FC /* 104.28.117.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C75FE /* 104.28.117.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7600 /* 104.28.118.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7608 /* 104.28.118.8/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C760B /* 104.28.118.11/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C760C /* 104.28.118.12/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7610 /* 104.28.118.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7620 /* 104.28.118.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7640 /* 104.28.118.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7680 /* 104.28.118.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C76C0 /* 104.28.118.192/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C76D0 /* 104.28.118.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C76E2 /* 104.28.118.226/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C76E4 /* 104.28.118.228/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C76E7 /* 104.28.118.231/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C76E8 /* 104.28.118.232/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C76EA /* 104.28.118.234/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C76ED /* 104.28.118.237/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C76EE /* 104.28.118.238/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C76F0 /* 104.28.118.240/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C76F4 /* 104.28.118.244/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C76F7 /* 104.28.118.247/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C76F8 /* 104.28.118.248/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C76FB /* 104.28.118.251/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C76FC /* 104.28.118.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C76FE /* 104.28.118.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7700 /* 104.28.119.0/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7706 /* 104.28.119.6/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7708 /* 104.28.119.8/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7710 /* 104.28.119.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7720 /* 104.28.119.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7732 /* 104.28.119.50/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7734 /* 104.28.119.52/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7738 /* 104.28.119.56/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7740 /* 104.28.119.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7750 /* 104.28.119.80/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7754 /* 104.28.119.84/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7756 /* 104.28.119.86/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7759 /* 104.28.119.89/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C775A /* 104.28.119.90/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C775C /* 104.28.119.92/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7760 /* 104.28.119.96/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7780 /* 104.28.119.128/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7790 /* 104.28.119.144/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7798 /* 104.28.119.152/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C779C /* 104.28.119.156/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C779F /* 104.28.119.159/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C77A0 /* 104.28.119.160/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C77A4 /* 104.28.119.164/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7800 /* 104.28.120.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7808 /* 104.28.120.8/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C780A /* 104.28.120.10/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C780D /* 104.28.120.13/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C780E /* 104.28.120.14/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7810 /* 104.28.120.16/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C781B /* 104.28.120.27/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C781C /* 104.28.120.28/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7820 /* 104.28.120.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7840 /* 104.28.120.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7848 /* 104.28.120.72/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C784C /* 104.28.120.76/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7850 /* 104.28.120.80/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7862 /* 104.28.120.98/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7864 /* 104.28.120.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7868 /* 104.28.120.104/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7872 /* 104.28.120.114/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7877 /* 104.28.120.119/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7878 /* 104.28.120.120/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7880 /* 104.28.120.128/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7883 /* 104.28.120.131/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7884 /* 104.28.120.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7888 /* 104.28.120.136/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7890 /* 104.28.120.144/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C78A0 /* 104.28.120.160/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C78C0 /* 104.28.120.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C78E0 /* 104.28.120.224/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C78E8 /* 104.28.120.232/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C78EC /* 104.28.120.236/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C78EE /* 104.28.120.238/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C78F1 /* 104.28.120.241/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C78F2 /* 104.28.120.242/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C78F4 /* 104.28.120.244/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C78F8 /* 104.28.120.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C78FC /* 104.28.120.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C78FE /* 104.28.120.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7900 /* 104.28.121.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7908 /* 104.28.121.8/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C790B /* 104.28.121.11/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C790C /* 104.28.121.12/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7910 /* 104.28.121.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7920 /* 104.28.121.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7940 /* 104.28.121.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7980 /* 104.28.121.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C79C0 /* 104.28.121.192/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C79D0 /* 104.28.121.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C79E2 /* 104.28.121.226/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C79E4 /* 104.28.121.228/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C79E7 /* 104.28.121.231/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C79E8 /* 104.28.121.232/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C79EA /* 104.28.121.234/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C79ED /* 104.28.121.237/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C79EE /* 104.28.121.238/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C79F0 /* 104.28.121.240/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C79F4 /* 104.28.121.244/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C79F7 /* 104.28.121.247/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C79F8 /* 104.28.121.248/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C79FB /* 104.28.121.251/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C79FC /* 104.28.121.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C79FE /* 104.28.121.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7A00 /* 104.28.122.0/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7A06 /* 104.28.122.6/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7A08 /* 104.28.122.8/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7A10 /* 104.28.122.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7A20 /* 104.28.122.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7A32 /* 104.28.122.50/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7A34 /* 104.28.122.52/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7A38 /* 104.28.122.56/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7A40 /* 104.28.122.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7A50 /* 104.28.122.80/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7A54 /* 104.28.122.84/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7A56 /* 104.28.122.86/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7A59 /* 104.28.122.89/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7A5A /* 104.28.122.90/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7A5C /* 104.28.122.92/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7A60 /* 104.28.122.96/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7A80 /* 104.28.122.128/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7A90 /* 104.28.122.144/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7A98 /* 104.28.122.152/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7A9C /* 104.28.122.156/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7A9F /* 104.28.122.159/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7AA0 /* 104.28.122.160/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7AA4 /* 104.28.122.164/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7B00 /* 104.28.123.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7B10 /* 104.28.123.16/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7B14 /* 104.28.123.20/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7B18 /* 104.28.123.24/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7B20 /* 104.28.123.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7B40 /* 104.28.123.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7B80 /* 104.28.123.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7BC0 /* 104.28.123.192/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7BD0 /* 104.28.123.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7BD8 /* 104.28.123.216/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7C00 /* 104.28.124.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7C10 /* 104.28.124.16/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7C18 /* 104.28.124.24/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7C20 /* 104.28.124.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7C40 /* 104.28.124.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7C80 /* 104.28.124.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7CC0 /* 104.28.124.192/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7CD0 /* 104.28.124.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7CD8 /* 104.28.124.216/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7D00 /* 104.28.125.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7D40 /* 104.28.125.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7D50 /* 104.28.125.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7D58 /* 104.28.125.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7D5C /* 104.28.125.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7D60 /* 104.28.125.96/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7E02 /* 104.28.126.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7E04 /* 104.28.126.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7E08 /* 104.28.126.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7E10 /* 104.28.126.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7E20 /* 104.28.126.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7E40 /* 104.28.126.64/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7E46 /* 104.28.126.70/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7E48 /* 104.28.126.72/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7E50 /* 104.28.126.80/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7E60 /* 104.28.126.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7E70 /* 104.28.126.112/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7E74 /* 104.28.126.116/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7E78 /* 104.28.126.120/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7E7C /* 104.28.126.124/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7E80 /* 104.28.126.128/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7E84 /* 104.28.126.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7E8A /* 104.28.126.138/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7E8C /* 104.28.126.140/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7E90 /* 104.28.126.144/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7EA0 /* 104.28.126.160/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7EC0 /* 104.28.126.192/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7ED0 /* 104.28.126.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7ED8 /* 104.28.126.216/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7EDC /* 104.28.126.220/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7EDF /* 104.28.126.223/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7EE0 /* 104.28.126.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7EF0 /* 104.28.126.240/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7EF8 /* 104.28.126.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7EFC /* 104.28.126.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7EFE /* 104.28.126.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7F00 /* 104.28.127.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7F20 /* 104.28.127.32/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7F26 /* 104.28.127.38/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7F28 /* 104.28.127.40/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7F30 /* 104.28.127.48/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C7F40 /* 104.28.127.64/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8006 /* 104.28.128.6/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C800B /* 104.28.128.11/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C800C /* 104.28.128.12/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8010 /* 104.28.128.16/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8014 /* 104.28.128.20/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8100 /* 104.28.129.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8120 /* 104.28.129.32/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8124 /* 104.28.129.36/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8126 /* 104.28.129.38/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C812D /* 104.28.129.45/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C812E /* 104.28.129.46/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8133 /* 104.28.129.51/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8134 /* 104.28.129.52/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8138 /* 104.28.129.56/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C813C /* 104.28.129.60/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8200 /* 104.28.130.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8210 /* 104.28.130.16/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8213 /* 104.28.130.19/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8214 /* 104.28.130.20/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8218 /* 104.28.130.24/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8220 /* 104.28.130.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8230 /* 104.28.130.48/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8238 /* 104.28.130.56/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C823C /* 104.28.130.60/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C823F /* 104.28.130.63/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8240 /* 104.28.130.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8250 /* 104.28.130.80/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8254 /* 104.28.130.84/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8256 /* 104.28.130.86/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8259 /* 104.28.130.89/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C825A /* 104.28.130.90/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C825C /* 104.28.130.92/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8260 /* 104.28.130.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8268 /* 104.28.130.104/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8272 /* 104.28.130.114/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8274 /* 104.28.130.116/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C827A /* 104.28.130.122/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C827E /* 104.28.130.126/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8280 /* 104.28.130.128/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8284 /* 104.28.130.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8288 /* 104.28.130.136/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8290 /* 104.28.130.144/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C82A0 /* 104.28.130.160/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C82A8 /* 104.28.130.168/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C82AB /* 104.28.130.171/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C82AC /* 104.28.130.172/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C82B0 /* 104.28.130.176/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C82C0 /* 104.28.130.192/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8300 /* 104.28.131.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8310 /* 104.28.131.16/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8318 /* 104.28.131.24/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8320 /* 104.28.131.32/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8328 /* 104.28.131.40/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C832A /* 104.28.131.42/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C832D /* 104.28.131.45/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C832E /* 104.28.131.46/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8331 /* 104.28.131.49/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8332 /* 104.28.131.50/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8334 /* 104.28.131.52/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8338 /* 104.28.131.56/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8340 /* 104.28.131.64/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8343 /* 104.28.131.67/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8344 /* 104.28.131.68/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8348 /* 104.28.131.72/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8350 /* 104.28.131.80/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8352 /* 104.28.131.82/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8355 /* 104.28.131.85/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8356 /* 104.28.131.86/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8358 /* 104.28.131.88/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8360 /* 104.28.131.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8368 /* 104.28.131.104/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8370 /* 104.28.131.112/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8376 /* 104.28.131.118/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8378 /* 104.28.131.120/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C837C /* 104.28.131.124/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8380 /* 104.28.131.128/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8392 /* 104.28.131.146/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8394 /* 104.28.131.148/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8398 /* 104.28.131.152/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C83A0 /* 104.28.131.160/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C83A8 /* 104.28.131.168/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C83AA /* 104.28.131.170/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C83AD /* 104.28.131.173/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C83AE /* 104.28.131.174/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C83B0 /* 104.28.131.176/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C83B4 /* 104.28.131.180/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C83B7 /* 104.28.131.183/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C83B8 /* 104.28.131.184/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C83C0 /* 104.28.131.192/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C83C8 /* 104.28.131.200/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8400 /* 104.28.132.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8480 /* 104.28.132.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C84A0 /* 104.28.132.160/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8500 /* 104.28.133.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8580 /* 104.28.133.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C85C0 /* 104.28.133.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C85E0 /* 104.28.133.224/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C85E4 /* 104.28.133.228/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C85E7 /* 104.28.133.231/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C85E8 /* 104.28.133.232/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C85F0 /* 104.28.133.240/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C85F8 /* 104.28.133.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C85FC /* 104.28.133.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C85FE /* 104.28.133.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8600 /* 104.28.134.0/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8700 /* 104.28.135.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8740 /* 104.28.135.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8750 /* 104.28.135.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9001 /* 104.28.144.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9002 /* 104.28.144.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9004 /* 104.28.144.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9008 /* 104.28.144.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9010 /* 104.28.144.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9020 /* 104.28.144.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9040 /* 104.28.144.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9080 /* 104.28.144.128/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9101 /* 104.28.145.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9102 /* 104.28.145.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9104 /* 104.28.145.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9108 /* 104.28.145.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9110 /* 104.28.145.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9120 /* 104.28.145.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9140 /* 104.28.145.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9180 /* 104.28.145.128/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9201 /* 104.28.146.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9202 /* 104.28.146.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9204 /* 104.28.146.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9208 /* 104.28.146.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9210 /* 104.28.146.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9220 /* 104.28.146.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9240 /* 104.28.146.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9280 /* 104.28.146.128/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9301 /* 104.28.147.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9302 /* 104.28.147.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9304 /* 104.28.147.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9308 /* 104.28.147.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9310 /* 104.28.147.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9320 /* 104.28.147.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9340 /* 104.28.147.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9380 /* 104.28.147.128/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9401 /* 104.28.148.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9402 /* 104.28.148.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9404 /* 104.28.148.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9408 /* 104.28.148.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9410 /* 104.28.148.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9420 /* 104.28.148.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9440 /* 104.28.148.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9480 /* 104.28.148.128/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9501 /* 104.28.149.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9502 /* 104.28.149.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9504 /* 104.28.149.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9508 /* 104.28.149.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9510 /* 104.28.149.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9520 /* 104.28.149.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9540 /* 104.28.149.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9580 /* 104.28.149.128/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9601 /* 104.28.150.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9602 /* 104.28.150.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9604 /* 104.28.150.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9608 /* 104.28.150.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9610 /* 104.28.150.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9620 /* 104.28.150.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9640 /* 104.28.150.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9680 /* 104.28.150.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C96C0 /* 104.28.150.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C96E0 /* 104.28.150.224/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C96E8 /* 104.28.150.232/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C96EA /* 104.28.150.234/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF80000 /* 140.248.0.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF80400 /* 140.248.4.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF80600 /* 140.248.6.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF80640 /* 140.248.6.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF80650 /* 140.248.6.80/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF80800 /* 140.248.8.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF80820 /* 140.248.8.32/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF80824 /* 140.248.8.36/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF80A00 /* 140.248.10.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF80B00 /* 140.248.11.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF80B08 /* 140.248.11.8/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81000 /* 140.248.16.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81010 /* 140.248.16.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81018 /* 140.248.16.24/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81100 /* 140.248.17.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81140 /* 140.248.17.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81150 /* 140.248.17.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81158 /* 140.248.17.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF8115C /* 140.248.17.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81200 /* 140.248.18.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81300 /* 140.248.19.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81308 /* 140.248.19.8/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81400 /* 140.248.20.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81500 /* 140.248.21.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81600 /* 140.248.22.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81700 /* 140.248.23.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81720 /* 140.248.23.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81800 /* 140.248.24.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81840 /* 140.248.24.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81850 /* 140.248.24.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81858 /* 140.248.24.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF8185C /* 140.248.24.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81900 /* 140.248.25.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81920 /* 140.248.25.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81930 /* 140.248.25.48/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81A00 /* 140.248.26.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81B00 /* 140.248.27.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81B20 /* 140.248.27.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81C00 /* 140.248.28.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81C10 /* 140.248.28.16/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81C14 /* 140.248.28.20/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81D00 /* 140.248.29.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81D08 /* 140.248.29.8/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81E00 /* 140.248.30.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81F00 /* 140.248.31.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF81F20 /* 140.248.31.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF82000 /* 140.248.32.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF82008 /* 140.248.32.8/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF8200C /* 140.248.32.12/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF82100 /* 140.248.33.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF82120 /* 140.248.33.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF82130 /* 140.248.33.48/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF82138 /* 140.248.33.56/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF82200 /* 140.248.34.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF82280 /* 140.248.34.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF822C0 /* 140.248.34.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF822E0 /* 140.248.34.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF822F0 /* 140.248.34.240/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF82400 /* 140.248.36.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF82500 /* 140.248.37.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF82540 /* 140.248.37.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF82550 /* 140.248.37.80/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF82600 /* 140.248.38.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF82620 /* 140.248.38.32/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF82628 /* 140.248.38.40/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF82700 /* 140.248.39.0/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF82800 /* 140.248.40.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF82880 /* 140.248.40.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF828C0 /* 140.248.40.192/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B8400 /* 146.75.132.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B8500 /* 146.75.133.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B8540 /* 146.75.133.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B8550 /* 146.75.133.80/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B8600 /* 146.75.134.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B8800 /* 146.75.136.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B8900 /* 146.75.137.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B8C00 /* 146.75.140.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B8C80 /* 146.75.140.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B8CC0 /* 146.75.140.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B8CE0 /* 146.75.140.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B8E00 /* 146.75.142.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B8F00 /* 146.75.143.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B8F10 /* 146.75.143.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B9000 /* 146.75.144.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B9100 /* 146.75.145.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B9120 /* 146.75.145.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B9130 /* 146.75.145.48/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B9138 /* 146.75.145.56/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B913C /* 146.75.145.60/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B9200 /* 146.75.146.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B9300 /* 146.75.147.0/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B9800 /* 146.75.152.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B9900 /* 146.75.153.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B9A00 /* 146.75.154.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B9B00 /* 146.75.155.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B9E00 /* 146.75.158.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B9F00 /* 146.75.159.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B9F20 /* 146.75.159.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BA000 /* 146.75.160.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BA080 /* 146.75.160.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BA0A0 /* 146.75.160.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BA0B0 /* 146.75.160.176/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BA0B4 /* 146.75.160.180/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BA200 /* 146.75.162.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BA240 /* 146.75.162.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BA260 /* 146.75.162.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BA270 /* 146.75.162.112/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BA400 /* 146.75.164.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BA500 /* 146.75.165.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BA520 /* 146.75.165.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BA530 /* 146.75.165.48/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BA538 /* 146.75.165.56/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BA53C /* 146.75.165.60/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BA600 /* 146.75.166.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BA680 /* 146.75.166.128/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BA690 /* 146.75.166.144/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BA700 /* 146.75.167.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BA780 /* 146.75.167.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BA7C0 /* 146.75.167.192/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BA800 /* 146.75.168.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BA880 /* 146.75.168.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BA900 /* 146.75.169.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BA980 /* 146.75.169.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BA9C0 /* 146.75.169.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BA9E0 /* 146.75.169.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BA9F0 /* 146.75.169.240/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BAA00 /* 146.75.170.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BAB00 /* 146.75.171.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BAC00 /* 146.75.172.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BAD00 /* 146.75.173.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BAD20 /* 146.75.173.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BAE00 /* 146.75.174.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BAE80 /* 146.75.174.128/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BAE88 /* 146.75.174.136/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BAF00 /* 146.75.175.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BAF40 /* 146.75.175.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BAF50 /* 146.75.175.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BB000 /* 146.75.176.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BB100 /* 146.75.177.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BB21A /* 146.75.178.26/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BB21C /* 146.75.178.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BB300 /* 146.75.179.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BB340 /* 146.75.179.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BB350 /* 146.75.179.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BB358 /* 146.75.179.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BB35C /* 146.75.179.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BB400 /* 146.75.180.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BB440 /* 146.75.180.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BB448 /* 146.75.180.72/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BB500 /* 146.75.181.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BB540 /* 146.75.181.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BB550 /* 146.75.181.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BB558 /* 146.75.181.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BB600 /* 146.75.182.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BB640 /* 146.75.182.64/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BB700 /* 146.75.183.0/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BB704 /* 146.75.183.4/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BB800 /* 146.75.184.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BB880 /* 146.75.184.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BB8C0 /* 146.75.184.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BB8E0 /* 146.75.184.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BBA00 /* 146.75.186.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BBA20 /* 146.75.186.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BBB00 /* 146.75.187.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BBB20 /* 146.75.187.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BBB30 /* 146.75.187.48/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BBB38 /* 146.75.187.56/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BBC00 /* 146.75.188.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BBC40 /* 146.75.188.64/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BBC44 /* 146.75.188.68/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BBD00 /* 146.75.189.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BBD20 /* 146.75.189.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BBD30 /* 146.75.189.48/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BBE00 /* 146.75.190.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BBE20 /* 146.75.190.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BBE30 /* 146.75.190.48/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BBF00 /* 146.75.191.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BBF20 /* 146.75.191.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BBF30 /* 146.75.191.48/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BC000 /* 146.75.192.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BC100 /* 146.75.193.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BC120 /* 146.75.193.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BC200 /* 146.75.194.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BC240 /* 146.75.194.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BC300 /* 146.75.195.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BC400 /* 146.75.196.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BC420 /* 146.75.196.32/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BC428 /* 146.75.196.40/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BC42C /* 146.75.196.44/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BC500 /* 146.75.197.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BC520 /* 146.75.197.32/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BC528 /* 146.75.197.40/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BC52C /* 146.75.197.44/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BC600 /* 146.75.198.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BC620 /* 146.75.198.32/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BC800 /* 146.75.200.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BC820 /* 146.75.200.32/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BC900 /* 146.75.201.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BC920 /* 146.75.201.32/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BC924 /* 146.75.201.36/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BCA00 /* 146.75.202.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BCA08 /* 146.75.202.8/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BCA0C /* 146.75.202.12/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BCB00 /* 146.75.203.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BCB40 /* 146.75.203.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BCB50 /* 146.75.203.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BCD00 /* 146.75.205.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BCD20 /* 146.75.205.32/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BCD28 /* 146.75.205.40/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BCE00 /* 146.75.206.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BCE10 /* 146.75.206.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BCE18 /* 146.75.206.24/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BCF00 /* 146.75.207.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BCF40 /* 146.75.207.64/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BCF44 /* 146.75.207.68/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BD000 /* 146.75.208.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BD100 /* 146.75.209.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BD110 /* 146.75.209.16/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BD300 /* 146.75.211.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BD310 /* 146.75.211.16/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BD314 /* 146.75.211.20/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BD400 /* 146.75.212.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BD440 /* 146.75.212.64/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BD444 /* 146.75.212.68/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BD500 /* 146.75.213.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BD510 /* 146.75.213.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BD600 /* 146.75.214.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BD620 /* 146.75.214.32/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BD628 /* 146.75.214.40/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BD62C /* 146.75.214.44/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BD700 /* 146.75.215.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BD708 /* 146.75.215.8/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BD800 /* 146.75.216.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BD808 /* 146.75.216.8/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BD900 /* 146.75.217.0/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BDA00 /* 146.75.218.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BDA08 /* 146.75.218.8/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BDB00 /* 146.75.219.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BDB08 /* 146.75.219.8/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BDC00 /* 146.75.220.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BDC10 /* 146.75.220.16/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BDD00 /* 146.75.221.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BDD08 /* 146.75.221.8/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BDE00 /* 146.75.222.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BE000 /* 146.75.224.0/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BE100 /* 146.75.225.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BE110 /* 146.75.225.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BE118 /* 146.75.225.24/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BE200 /* 146.75.226.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BE300 /* 146.75.227.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BE320 /* 146.75.227.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BE400 /* 146.75.228.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BE600 /* 146.75.230.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BE640 /* 146.75.230.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BE660 /* 146.75.230.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BE670 /* 146.75.230.112/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BE678 /* 146.75.230.120/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BE67C /* 146.75.230.124/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BE800 /* 146.75.232.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BEA00 /* 146.75.234.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BEA20 /* 146.75.234.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BEC00 /* 146.75.236.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BEE00 /* 146.75.238.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BEE10 /* 146.75.238.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BEE18 /* 146.75.238.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BEE1C /* 146.75.238.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BF000 /* 146.75.240.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BF200 /* 146.75.242.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BF210 /* 146.75.242.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BF400 /* 146.75.244.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BF600 /* 146.75.246.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BF610 /* 146.75.246.16/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BF614 /* 146.75.246.20/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BF800 /* 146.75.248.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BFA00 /* 146.75.250.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BFA10 /* 146.75.250.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BFC00 /* 146.75.252.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E000 /* 172.224.224.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E040 /* 172.224.224.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E050 /* 172.224.224.80/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E058 /* 172.224.224.88/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E200 /* 172.224.226.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E240 /* 172.224.226.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E250 /* 172.224.226.80/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E258 /* 172.224.226.88/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E260 /* 172.224.226.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E270 /* 172.224.226.112/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E280 /* 172.224.226.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E300 /* 172.224.227.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E340 /* 172.224.227.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E350 /* 172.224.227.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E358 /* 172.224.227.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E400 /* 172.224.228.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E410 /* 172.224.228.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E418 /* 172.224.228.24/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E420 /* 172.224.228.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E440 /* 172.224.228.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E500 /* 172.224.229.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E540 /* 172.224.229.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E550 /* 172.224.229.80/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E560 /* 172.224.229.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E600 /* 172.224.230.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E640 /* 172.224.230.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E660 /* 172.224.230.96/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E668 /* 172.224.230.104/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E670 /* 172.224.230.112/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E680 /* 172.224.230.128/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E700 /* 172.224.231.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E780 /* 172.224.231.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E7C0 /* 172.224.231.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E7E0 /* 172.224.231.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E7F0 /* 172.224.231.240/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E800 /* 172.224.232.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E820 /* 172.224.232.32/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E824 /* 172.224.232.36/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E828 /* 172.224.232.40/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0E830 /* 172.224.232.48/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0EA00 /* 172.224.234.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0EA40 /* 172.224.234.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0EA48 /* 172.224.234.72/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0EA50 /* 172.224.234.80/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0EA60 /* 172.224.234.96/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0EA80 /* 172.224.234.128/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0EC00 /* 172.224.236.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0EC10 /* 172.224.236.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0EC18 /* 172.224.236.24/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0EC20 /* 172.224.236.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0EC40 /* 172.224.236.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0ED00 /* 172.224.237.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0EE00 /* 172.224.238.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0EE40 /* 172.224.238.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0EE50 /* 172.224.238.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0EE58 /* 172.224.238.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0EF00 /* 172.224.239.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0EF40 /* 172.224.239.64/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0F000 /* 172.224.240.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0F020 /* 172.224.240.32/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0F030 /* 172.224.240.48/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0F040 /* 172.224.240.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0F060 /* 172.224.240.96/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0F080 /* 172.224.240.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0F100 /* 172.224.241.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0F200 /* 172.224.242.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0F280 /* 172.224.242.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0F2C0 /* 172.224.242.192/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0F2D0 /* 172.224.242.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0F2D8 /* 172.224.242.216/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0F300 /* 172.224.243.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0F380 /* 172.224.243.128/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0F388 /* 172.224.243.136/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0F400 /* 172.224.244.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0F408 /* 172.224.244.8/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0F600 /* 172.224.246.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0F620 /* 172.224.246.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0F630 /* 172.224.246.48/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0F638 /* 172.224.246.56/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0F63C /* 172.224.246.60/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0F700 /* 172.224.247.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0F740 /* 172.224.247.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0F760 /* 172.224.247.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0F770 /* 172.224.247.112/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0F774 /* 172.224.247.116/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0F800 /* 172.224.248.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0F900 /* 172.224.249.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0F920 /* 172.224.249.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0FA00 /* 172.224.250.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0FA80 /* 172.224.250.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0FAC0 /* 172.224.250.192/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0FAE0 /* 172.224.250.224/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0FC00 /* 172.224.252.0/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0FC10 /* 172.224.252.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0FE00 /* 172.224.254.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0FE40 /* 172.224.254.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10000 /* 172.225.0.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10020 /* 172.225.0.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10040 /* 172.225.0.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10200 /* 172.225.2.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10400 /* 172.225.4.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10480 /* 172.225.4.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE104A0 /* 172.225.4.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10500 /* 172.225.5.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10600 /* 172.225.6.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10640 /* 172.225.6.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10660 /* 172.225.6.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10668 /* 172.225.6.104/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1066C /* 172.225.6.108/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10670 /* 172.225.6.112/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10700 /* 172.225.7.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10800 /* 172.225.8.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10900 /* 172.225.9.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10940 /* 172.225.9.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10960 /* 172.225.9.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10970 /* 172.225.9.112/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10980 /* 172.225.9.128/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10A00 /* 172.225.10.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10A40 /* 172.225.10.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10A50 /* 172.225.10.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10A58 /* 172.225.10.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10C00 /* 172.225.12.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10D00 /* 172.225.13.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10D40 /* 172.225.13.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10D60 /* 172.225.13.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10E00 /* 172.225.14.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10E80 /* 172.225.14.128/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10E90 /* 172.225.14.144/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10E98 /* 172.225.14.152/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10EA0 /* 172.225.14.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10EC0 /* 172.225.14.192/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE10F00 /* 172.225.15.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE11000 /* 172.225.16.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE11100 /* 172.225.17.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE11140 /* 172.225.17.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE11160 /* 172.225.17.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE11200 /* 172.225.18.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE11400 /* 172.225.20.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE11500 /* 172.225.21.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE11540 /* 172.225.21.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE11560 /* 172.225.21.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE11600 /* 172.225.22.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE11640 /* 172.225.22.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE11650 /* 172.225.22.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE11800 /* 172.225.24.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE11900 /* 172.225.25.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE11940 /* 172.225.25.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE11960 /* 172.225.25.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE11A00 /* 172.225.26.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE11B00 /* 172.225.27.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE11B40 /* 172.225.27.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE11B50 /* 172.225.27.80/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE11B60 /* 172.225.27.96/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE11C00 /* 172.225.28.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE11C80 /* 172.225.28.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE11D00 /* 172.225.29.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE11E00 /* 172.225.30.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12000 /* 172.225.32.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12200 /* 172.225.34.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12240 /* 172.225.34.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12260 /* 172.225.34.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12280 /* 172.225.34.128/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12300 /* 172.225.35.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12340 /* 172.225.35.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12350 /* 172.225.35.80/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12360 /* 172.225.35.96/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12368 /* 172.225.35.104/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12370 /* 172.225.35.112/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12380 /* 172.225.35.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12400 /* 172.225.36.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12480 /* 172.225.36.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE124C0 /* 172.225.36.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12500 /* 172.225.37.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12550 /* 172.225.37.80/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12600 /* 172.225.38.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12680 /* 172.225.38.128/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12690 /* 172.225.38.144/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE126A0 /* 172.225.38.160/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE126C0 /* 172.225.38.192/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12800 /* 172.225.40.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12A00 /* 172.225.42.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12B00 /* 172.225.43.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12B80 /* 172.225.43.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12BC0 /* 172.225.43.192/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12C00 /* 172.225.44.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12D00 /* 172.225.45.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12D80 /* 172.225.45.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12DC0 /* 172.225.45.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12DE0 /* 172.225.45.224/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12DE8 /* 172.225.45.232/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12DEC /* 172.225.45.236/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12E00 /* 172.225.46.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12E80 /* 172.225.46.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12EC0 /* 172.225.46.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12EE0 /* 172.225.46.224/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE12EE8 /* 172.225.46.232/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE13000 /* 172.225.48.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE13080 /* 172.225.48.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE130A0 /* 172.225.48.160/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE130A8 /* 172.225.48.168/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE13300 /* 172.225.51.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE13320 /* 172.225.51.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE13340 /* 172.225.51.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE13400 /* 172.225.52.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE13480 /* 172.225.52.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE134C0 /* 172.225.52.192/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE134D0 /* 172.225.52.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE134D8 /* 172.225.52.216/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE134E0 /* 172.225.52.224/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE13600 /* 172.225.54.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE13800 /* 172.225.56.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE13900 /* 172.225.57.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE13940 /* 172.225.57.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE13950 /* 172.225.57.80/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE13958 /* 172.225.57.88/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE13960 /* 172.225.57.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE13A00 /* 172.225.58.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE13C00 /* 172.225.60.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE13C80 /* 172.225.60.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE13CC0 /* 172.225.60.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE13E00 /* 172.225.62.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE13F00 /* 172.225.63.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE13F40 /* 172.225.63.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE13F60 /* 172.225.63.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE13F70 /* 172.225.63.112/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE13F80 /* 172.225.63.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE13FA0 /* 172.225.63.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE13FC0 /* 172.225.63.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE14000 /* 172.225.64.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE14200 /* 172.225.66.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE14300 /* 172.225.67.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE14340 /* 172.225.67.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE14360 /* 172.225.67.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE14400 /* 172.225.68.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE14500 /* 172.225.69.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE14540 /* 172.225.69.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE14560 /* 172.225.69.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE14570 /* 172.225.69.112/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE14580 /* 172.225.69.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE14600 /* 172.225.70.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE14800 /* 172.225.72.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE14910 /* 172.225.73.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE14920 /* 172.225.73.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE14940 /* 172.225.73.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE14980 /* 172.225.73.128/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE14A00 /* 172.225.74.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE14A80 /* 172.225.74.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE14AC0 /* 172.225.74.192/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE14AD0 /* 172.225.74.208/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE14AD4 /* 172.225.74.212/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE14AD8 /* 172.225.74.216/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE14AE0 /* 172.225.74.224/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE14B00 /* 172.225.75.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE14C00 /* 172.225.76.0/22 */, 22, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE15000 /* 172.225.80.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE15200 /* 172.225.82.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE15300 /* 172.225.83.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE15320 /* 172.225.83.32/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE15328 /* 172.225.83.40/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE15330 /* 172.225.83.48/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE15340 /* 172.225.83.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE15400 /* 172.225.84.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE15480 /* 172.225.84.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE154A0 /* 172.225.84.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE154B0 /* 172.225.84.176/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE154B8 /* 172.225.84.184/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE154C0 /* 172.225.84.192/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE15600 /* 172.225.86.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE15680 /* 172.225.86.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE156C0 /* 172.225.86.192/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE156D0 /* 172.225.86.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE156D8 /* 172.225.86.216/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE156E0 /* 172.225.86.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE156F0 /* 172.225.86.240/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE15700 /* 172.225.87.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE15720 /* 172.225.87.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE15730 /* 172.225.87.48/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE15800 /* 172.225.88.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE15900 /* 172.225.89.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE15980 /* 172.225.89.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE159C0 /* 172.225.89.192/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE159D0 /* 172.225.89.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE159D8 /* 172.225.89.216/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE159E0 /* 172.225.89.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE159F0 /* 172.225.89.240/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE15A00 /* 172.225.90.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE15C00 /* 172.225.92.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE15E00 /* 172.225.94.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE15E40 /* 172.225.94.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE15E50 /* 172.225.94.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE15E58 /* 172.225.94.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE16000 /* 172.225.96.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE16080 /* 172.225.96.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE160C0 /* 172.225.96.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE160E0 /* 172.225.96.224/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE160E8 /* 172.225.96.232/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE16100 /* 172.225.97.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE16200 /* 172.225.98.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE16400 /* 172.225.100.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE16480 /* 172.225.100.128/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE16490 /* 172.225.100.144/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE16498 /* 172.225.100.152/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE16600 /* 172.225.102.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE16680 /* 172.225.102.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE166A0 /* 172.225.102.160/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE166A8 /* 172.225.102.168/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE166AC /* 172.225.102.172/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE166B0 /* 172.225.102.176/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE16700 /* 172.225.103.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE16720 /* 172.225.103.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE16730 /* 172.225.103.48/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE16738 /* 172.225.103.56/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE16800 /* 172.225.104.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE16880 /* 172.225.104.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE168C0 /* 172.225.104.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE168E0 /* 172.225.104.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE168F0 /* 172.225.104.240/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE168F8 /* 172.225.104.248/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE16900 /* 172.225.105.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE16A00 /* 172.225.106.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE16A80 /* 172.225.106.128/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE16A88 /* 172.225.106.136/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE16C00 /* 172.225.108.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE16E00 /* 172.225.110.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE16F00 /* 172.225.111.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE16F80 /* 172.225.111.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE16FC0 /* 172.225.111.192/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE17000 /* 172.225.112.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE17200 /* 172.225.114.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE17240 /* 172.225.114.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE17400 /* 172.225.116.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE17600 /* 172.225.118.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE17800 /* 172.225.120.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE17A00 /* 172.225.122.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE17B00 /* 172.225.123.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE17B80 /* 172.225.123.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE17BC0 /* 172.225.123.192/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE17C00 /* 172.225.124.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE17C80 /* 172.225.124.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE17CC0 /* 172.225.124.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE17CE0 /* 172.225.124.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE17CF0 /* 172.225.124.240/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE17CF4 /* 172.225.124.244/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE17E00 /* 172.225.126.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18000 /* 172.225.128.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18100 /* 172.225.129.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18180 /* 172.225.129.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18200 /* 172.225.130.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18300 /* 172.225.131.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18340 /* 172.225.131.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18360 /* 172.225.131.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18400 /* 172.225.132.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18500 /* 172.225.133.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18580 /* 172.225.133.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18600 /* 172.225.134.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18700 /* 172.225.135.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18720 /* 172.225.135.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18730 /* 172.225.135.48/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18738 /* 172.225.135.56/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18740 /* 172.225.135.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18760 /* 172.225.135.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18770 /* 172.225.135.112/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18800 /* 172.225.136.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18900 /* 172.225.137.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18980 /* 172.225.137.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE189C0 /* 172.225.137.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE189E0 /* 172.225.137.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE189F0 /* 172.225.137.240/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE189F8 /* 172.225.137.248/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18A00 /* 172.225.138.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18B00 /* 172.225.139.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18B80 /* 172.225.139.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18BC0 /* 172.225.139.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18BE0 /* 172.225.139.224/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18BE4 /* 172.225.139.228/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18C00 /* 172.225.140.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18D00 /* 172.225.141.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18D80 /* 172.225.141.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18DA0 /* 172.225.141.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18E00 /* 172.225.142.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18E20 /* 172.225.142.32/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18E30 /* 172.225.142.48/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18E40 /* 172.225.142.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18E80 /* 172.225.142.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE18EA0 /* 172.225.142.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19000 /* 172.225.144.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19100 /* 172.225.145.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19180 /* 172.225.145.128/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19188 /* 172.225.145.136/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19190 /* 172.225.145.144/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE191A0 /* 172.225.145.160/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19200 /* 172.225.146.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19400 /* 172.225.148.0/22 */, 22, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19800 /* 172.225.152.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19A00 /* 172.225.154.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19A80 /* 172.225.154.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19AC0 /* 172.225.154.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19AE0 /* 172.225.154.224/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19AE8 /* 172.225.154.232/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19AF0 /* 172.225.154.240/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19B00 /* 172.225.155.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19B20 /* 172.225.155.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19B30 /* 172.225.155.48/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19B38 /* 172.225.155.56/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19B40 /* 172.225.155.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19B50 /* 172.225.155.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19C00 /* 172.225.156.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19C80 /* 172.225.156.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19CA0 /* 172.225.156.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19CB0 /* 172.225.156.176/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19CC0 /* 172.225.156.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19E00 /* 172.225.158.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19E80 /* 172.225.158.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19EC0 /* 172.225.158.192/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19ED0 /* 172.225.158.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19ED8 /* 172.225.158.216/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19EE0 /* 172.225.158.224/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19EF0 /* 172.225.158.240/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19F00 /* 172.225.159.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE19F40 /* 172.225.159.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1A000 /* 172.225.160.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1A200 /* 172.225.162.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1A300 /* 172.225.163.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1A340 /* 172.225.163.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1A350 /* 172.225.163.80/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1A354 /* 172.225.163.84/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1A358 /* 172.225.163.88/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1A360 /* 172.225.163.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1A800 /* 172.225.168.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1A880 /* 172.225.168.128/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1A890 /* 172.225.168.144/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1A96C /* 172.225.169.108/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1A970 /* 172.225.169.112/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1A980 /* 172.225.169.128/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1AA00 /* 172.225.170.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1AA40 /* 172.225.170.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1AA60 /* 172.225.170.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1AA70 /* 172.225.170.112/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1AE00 /* 172.225.174.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1B000 /* 172.225.176.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1B200 /* 172.225.178.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1B300 /* 172.225.179.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1B340 /* 172.225.179.64/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1B350 /* 172.225.179.80/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1B400 /* 172.225.180.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1B500 /* 172.225.181.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1B580 /* 172.225.181.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1B5A0 /* 172.225.181.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1B5B0 /* 172.225.181.176/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1B5B8 /* 172.225.181.184/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1B5BC /* 172.225.181.188/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1B5C0 /* 172.225.181.192/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1B800 /* 172.225.184.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1B880 /* 172.225.184.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1B8A0 /* 172.225.184.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1B8B0 /* 172.225.184.176/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1B8B8 /* 172.225.184.184/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1B8C0 /* 172.225.184.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1B8E0 /* 172.225.184.224/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1B8F0 /* 172.225.184.240/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1BB00 /* 172.225.187.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1BB80 /* 172.225.187.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1BBC0 /* 172.225.187.192/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1BC00 /* 172.225.188.0/22 */, 22, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1C000 /* 172.225.192.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1C100 /* 172.225.193.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1C140 /* 172.225.193.64/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1C148 /* 172.225.193.72/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1C150 /* 172.225.193.80/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1C160 /* 172.225.193.96/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1C200 /* 172.225.194.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1C300 /* 172.225.195.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1C310 /* 172.225.195.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1C318 /* 172.225.195.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1C320 /* 172.225.195.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1C340 /* 172.225.195.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1C350 /* 172.225.195.80/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1C360 /* 172.225.195.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1C400 /* 172.225.196.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1C480 /* 172.225.196.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1C4C0 /* 172.225.196.192/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1C600 /* 172.225.198.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1C680 /* 172.225.198.128/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1C690 /* 172.225.198.144/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1C700 /* 172.225.199.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1C740 /* 172.225.199.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1C760 /* 172.225.199.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1C770 /* 172.225.199.112/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1C774 /* 172.225.199.116/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1C800 /* 172.225.200.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1C900 /* 172.225.201.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1C980 /* 172.225.201.128/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1CA00 /* 172.225.202.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1CC00 /* 172.225.204.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1CD00 /* 172.225.205.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1CD40 /* 172.225.205.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1CD60 /* 172.225.205.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1CE00 /* 172.225.206.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1CE40 /* 172.225.206.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1CE60 /* 172.225.206.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1CE70 /* 172.225.206.112/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1CE78 /* 172.225.206.120/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1D000 /* 172.225.208.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1D020 /* 172.225.208.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1D200 /* 172.225.210.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1D280 /* 172.225.210.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1D2C0 /* 172.225.210.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1D2E0 /* 172.225.210.224/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1D500 /* 172.225.213.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1D580 /* 172.225.213.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1D5A0 /* 172.225.213.160/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1D600 /* 172.225.214.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1D700 /* 172.225.215.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1D780 /* 172.225.215.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1D7C0 /* 172.225.215.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1D7E0 /* 172.225.215.224/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1D7E4 /* 172.225.215.228/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1D7E8 /* 172.225.215.232/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1D7F0 /* 172.225.215.240/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1D800 /* 172.225.216.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1DA00 /* 172.225.218.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1DA40 /* 172.225.218.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1DA60 /* 172.225.218.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1DA68 /* 172.225.218.104/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1DA6C /* 172.225.218.108/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1DA70 /* 172.225.218.112/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1DA80 /* 172.225.218.128/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1DB00 /* 172.225.219.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1DB40 /* 172.225.219.64/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1DC00 /* 172.225.220.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1DE00 /* 172.225.222.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1DE80 /* 172.225.222.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1E000 /* 172.225.224.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1E040 /* 172.225.224.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1E060 /* 172.225.224.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1E070 /* 172.225.224.112/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1E074 /* 172.225.224.116/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1E078 /* 172.225.224.120/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1E080 /* 172.225.224.128/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1E100 /* 172.225.225.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1E120 /* 172.225.225.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1E200 /* 172.225.226.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1E400 /* 172.225.228.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1E500 /* 172.225.229.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1E540 /* 172.225.229.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1E550 /* 172.225.229.80/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1E560 /* 172.225.229.96/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1E580 /* 172.225.229.128/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1E600 /* 172.225.230.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1E700 /* 172.225.231.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1E780 /* 172.225.231.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1E7A0 /* 172.225.231.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1E7B0 /* 172.225.231.176/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1E7B8 /* 172.225.231.184/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1E7C0 /* 172.225.231.192/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1E7D0 /* 172.225.231.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1E7E0 /* 172.225.231.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1E800 /* 172.225.232.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1E880 /* 172.225.232.128/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1E888 /* 172.225.232.136/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1EB00 /* 172.225.235.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1EB80 /* 172.225.235.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1EBC0 /* 172.225.235.192/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1EBD0 /* 172.225.235.208/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1EC00 /* 172.225.236.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1EE00 /* 172.225.238.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1EF00 /* 172.225.239.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1EF80 /* 172.225.239.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1EFC0 /* 172.225.239.192/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1EFD0 /* 172.225.239.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1EFD8 /* 172.225.239.216/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1EFE0 /* 172.225.239.224/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1F000 /* 172.225.240.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1F080 /* 172.225.240.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1F0A0 /* 172.225.240.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1F0B0 /* 172.225.240.176/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1F0B8 /* 172.225.240.184/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1F0C0 /* 172.225.240.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1F0E0 /* 172.225.240.224/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1F200 /* 172.225.242.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1F300 /* 172.225.243.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1F380 /* 172.225.243.128/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1F390 /* 172.225.243.144/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1F394 /* 172.225.243.148/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1F3A0 /* 172.225.243.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1F400 /* 172.225.244.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1F500 /* 172.225.245.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1F540 /* 172.225.245.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1F560 /* 172.225.245.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1F568 /* 172.225.245.104/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1F600 /* 172.225.246.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1F700 /* 172.225.247.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1F780 /* 172.225.247.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1F7C0 /* 172.225.247.192/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1F7D0 /* 172.225.247.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1F7D8 /* 172.225.247.216/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1F7E0 /* 172.225.247.224/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1F800 /* 172.225.248.0/22 */, 22, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1FC00 /* 172.225.252.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1FD00 /* 172.225.253.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1FD40 /* 172.225.253.64/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1FD50 /* 172.225.253.80/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1FD60 /* 172.225.253.96/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1FD80 /* 172.225.253.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1FE00 /* 172.225.254.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1FE40 /* 172.225.254.64/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1FE48 /* 172.225.254.72/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20000 /* 172.226.0.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20040 /* 172.226.0.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20050 /* 172.226.0.80/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20058 /* 172.226.0.88/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20200 /* 172.226.2.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20280 /* 172.226.2.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE202C0 /* 172.226.2.192/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE202C8 /* 172.226.2.200/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE202D0 /* 172.226.2.208/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20300 /* 172.226.3.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20400 /* 172.226.4.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20420 /* 172.226.4.32/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20430 /* 172.226.4.48/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20440 /* 172.226.4.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20500 /* 172.226.5.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20580 /* 172.226.5.128/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20588 /* 172.226.5.136/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20600 /* 172.226.6.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20680 /* 172.226.6.128/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20688 /* 172.226.6.136/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20700 /* 172.226.7.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20780 /* 172.226.7.128/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20788 /* 172.226.7.136/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20800 /* 172.226.8.0/22 */, 22, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20C00 /* 172.226.12.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20D00 /* 172.226.13.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20D40 /* 172.226.13.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20D60 /* 172.226.13.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20D70 /* 172.226.13.112/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20D78 /* 172.226.13.120/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20D7C /* 172.226.13.124/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20D80 /* 172.226.13.128/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20E00 /* 172.226.14.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20E20 /* 172.226.14.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20E30 /* 172.226.14.48/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20E38 /* 172.226.14.56/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20F00 /* 172.226.15.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20F20 /* 172.226.15.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20F30 /* 172.226.15.48/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20F38 /* 172.226.15.56/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE21000 /* 172.226.16.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE21040 /* 172.226.16.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE21050 /* 172.226.16.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE21200 /* 172.226.18.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE21300 /* 172.226.19.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE21380 /* 172.226.19.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE21400 /* 172.226.20.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE21500 /* 172.226.21.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE21580 /* 172.226.21.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE215A0 /* 172.226.21.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE21600 /* 172.226.22.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE21700 /* 172.226.23.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE21780 /* 172.226.23.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE21800 /* 172.226.24.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE21880 /* 172.226.24.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE218C0 /* 172.226.24.192/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE21A00 /* 172.226.26.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE21A10 /* 172.226.26.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE21A40 /* 172.226.26.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE21C00 /* 172.226.28.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE21D00 /* 172.226.29.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE21D20 /* 172.226.29.32/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE21D28 /* 172.226.29.40/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE21E00 /* 172.226.30.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22000 /* 172.226.32.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22080 /* 172.226.32.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE220C0 /* 172.226.32.192/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE220D0 /* 172.226.32.208/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22100 /* 172.226.33.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22180 /* 172.226.33.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22200 /* 172.226.34.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22210 /* 172.226.34.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22400 /* 172.226.36.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22480 /* 172.226.36.128/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22488 /* 172.226.36.136/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22600 /* 172.226.38.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22620 /* 172.226.38.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22630 /* 172.226.38.48/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22800 /* 172.226.40.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22880 /* 172.226.40.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE228A0 /* 172.226.40.160/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE228A8 /* 172.226.40.168/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22900 /* 172.226.41.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22980 /* 172.226.41.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE229C0 /* 172.226.41.192/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE229C8 /* 172.226.41.200/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22A00 /* 172.226.42.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22A80 /* 172.226.42.128/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22A88 /* 172.226.42.136/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22A8C /* 172.226.42.140/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22A90 /* 172.226.42.144/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22AA0 /* 172.226.42.160/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22AC0 /* 172.226.42.192/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22B00 /* 172.226.43.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22C00 /* 172.226.44.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22D00 /* 172.226.45.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22D80 /* 172.226.45.128/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22D90 /* 172.226.45.144/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22DA0 /* 172.226.45.160/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22DC0 /* 172.226.45.192/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22E00 /* 172.226.46.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE22F00 /* 172.226.47.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23000 /* 172.226.48.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23020 /* 172.226.48.32/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23024 /* 172.226.48.36/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23028 /* 172.226.48.40/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23030 /* 172.226.48.48/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23040 /* 172.226.48.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23100 /* 172.226.49.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23120 /* 172.226.49.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23200 /* 172.226.50.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23210 /* 172.226.50.16/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23214 /* 172.226.50.20/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23218 /* 172.226.50.24/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23220 /* 172.226.50.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23400 /* 172.226.52.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23410 /* 172.226.52.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23420 /* 172.226.52.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23600 /* 172.226.54.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23640 /* 172.226.54.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23660 /* 172.226.54.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23668 /* 172.226.54.104/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23800 /* 172.226.56.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23840 /* 172.226.56.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23860 /* 172.226.56.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23868 /* 172.226.56.104/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23A00 /* 172.226.58.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23A40 /* 172.226.58.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23A60 /* 172.226.58.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23A68 /* 172.226.58.104/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23C00 /* 172.226.60.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23C20 /* 172.226.60.32/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23C28 /* 172.226.60.40/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23E00 /* 172.226.62.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE23E10 /* 172.226.62.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE24000 /* 172.226.64.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE24010 /* 172.226.64.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE24200 /* 172.226.66.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE24300 /* 172.226.67.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE24380 /* 172.226.67.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE243C0 /* 172.226.67.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE243E0 /* 172.226.67.224/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE243E4 /* 172.226.67.228/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE243E8 /* 172.226.67.232/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE243F0 /* 172.226.67.240/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE24400 /* 172.226.68.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE24600 /* 172.226.70.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE24C00 /* 172.226.76.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE24C80 /* 172.226.76.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE24CA0 /* 172.226.76.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE24CB0 /* 172.226.76.176/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE24CC0 /* 172.226.76.192/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE24D00 /* 172.226.77.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE24D20 /* 172.226.77.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE24E00 /* 172.226.78.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE24E20 /* 172.226.78.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE24E30 /* 172.226.78.48/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE24E40 /* 172.226.78.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE24E60 /* 172.226.78.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE24F00 /* 172.226.79.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE25000 /* 172.226.80.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE25010 /* 172.226.80.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE25018 /* 172.226.80.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2501C /* 172.226.80.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE25100 /* 172.226.81.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE25200 /* 172.226.82.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE25240 /* 172.226.82.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE25400 /* 172.226.84.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE25480 /* 172.226.84.128/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE25600 /* 172.226.86.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE25620 /* 172.226.86.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE25700 /* 172.226.87.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE25800 /* 172.226.88.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE25900 /* 172.226.89.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE25A00 /* 172.226.90.0/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE25A04 /* 172.226.90.4/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE25C00 /* 172.226.92.0/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE25C04 /* 172.226.92.4/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE25D00 /* 172.226.93.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE25D80 /* 172.226.93.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE25E00 /* 172.226.94.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE25E20 /* 172.226.94.32/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE25E28 /* 172.226.94.40/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE25F00 /* 172.226.95.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE25F20 /* 172.226.95.32/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE25F28 /* 172.226.95.40/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE26000 /* 172.226.96.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE26020 /* 172.226.96.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE26200 /* 172.226.98.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE26220 /* 172.226.98.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE26230 /* 172.226.98.48/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE26400 /* 172.226.100.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE26420 /* 172.226.100.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE26600 /* 172.226.102.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE26620 /* 172.226.102.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE26630 /* 172.226.102.48/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE26800 /* 172.226.104.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE26840 /* 172.226.104.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE26850 /* 172.226.104.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE26858 /* 172.226.104.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2685C /* 172.226.104.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE26860 /* 172.226.104.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE26A00 /* 172.226.106.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE26A20 /* 172.226.106.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE26A30 /* 172.226.106.48/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE26A40 /* 172.226.106.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE26C00 /* 172.226.108.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE26C40 /* 172.226.108.64/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE26E00 /* 172.226.110.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE26E40 /* 172.226.110.64/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE27000 /* 172.226.112.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE27040 /* 172.226.112.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE27050 /* 172.226.112.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE27058 /* 172.226.112.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2705C /* 172.226.112.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE27060 /* 172.226.112.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE27200 /* 172.226.114.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE27240 /* 172.226.114.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE27250 /* 172.226.114.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE27258 /* 172.226.114.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE27400 /* 172.226.116.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE27420 /* 172.226.116.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE27430 /* 172.226.116.48/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE27438 /* 172.226.116.56/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE27440 /* 172.226.116.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE27600 /* 172.226.118.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE27620 /* 172.226.118.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE27800 /* 172.226.120.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE27820 /* 172.226.120.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE27830 /* 172.226.120.48/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE27A00 /* 172.226.122.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE27A20 /* 172.226.122.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE27A30 /* 172.226.122.48/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE27A38 /* 172.226.122.56/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE27C00 /* 172.226.124.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE27C20 /* 172.226.124.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE27C30 /* 172.226.124.48/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE27E00 /* 172.226.126.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE27E20 /* 172.226.126.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28000 /* 172.226.128.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28020 /* 172.226.128.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28030 /* 172.226.128.48/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28200 /* 172.226.130.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28210 /* 172.226.130.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28300 /* 172.226.131.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28320 /* 172.226.131.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28400 /* 172.226.132.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28420 /* 172.226.132.32/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28428 /* 172.226.132.40/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28430 /* 172.226.132.48/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28600 /* 172.226.134.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28640 /* 172.226.134.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28650 /* 172.226.134.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28658 /* 172.226.134.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28800 /* 172.226.136.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28840 /* 172.226.136.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28860 /* 172.226.136.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28870 /* 172.226.136.112/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28874 /* 172.226.136.116/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28900 /* 172.226.137.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28940 /* 172.226.137.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28960 /* 172.226.137.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28970 /* 172.226.137.112/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28974 /* 172.226.137.116/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28A00 /* 172.226.138.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28A20 /* 172.226.138.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28A40 /* 172.226.138.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28C00 /* 172.226.140.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28C40 /* 172.226.140.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28C50 /* 172.226.140.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28C58 /* 172.226.140.88/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28C60 /* 172.226.140.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28E00 /* 172.226.142.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28E80 /* 172.226.142.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28EC0 /* 172.226.142.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28EE0 /* 172.226.142.224/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28EE4 /* 172.226.142.228/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28EF0 /* 172.226.142.240/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28F00 /* 172.226.143.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE29000 /* 172.226.144.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE29100 /* 172.226.145.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE29180 /* 172.226.145.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE291C0 /* 172.226.145.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE291E0 /* 172.226.145.224/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE291E4 /* 172.226.145.228/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE29200 /* 172.226.146.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE29220 /* 172.226.146.32/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE29224 /* 172.226.146.36/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE29228 /* 172.226.146.40/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE29230 /* 172.226.146.48/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE29400 /* 172.226.148.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE29440 /* 172.226.148.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE29460 /* 172.226.148.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE29480 /* 172.226.148.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE29600 /* 172.226.150.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE29700 /* 172.226.151.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE29780 /* 172.226.151.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE29800 /* 172.226.152.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE29900 /* 172.226.153.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE29980 /* 172.226.153.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE29A00 /* 172.226.154.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE29B00 /* 172.226.155.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE29B80 /* 172.226.155.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE29C00 /* 172.226.156.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE29C20 /* 172.226.156.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE29C40 /* 172.226.156.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE29E00 /* 172.226.158.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE29E20 /* 172.226.158.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2A000 /* 172.226.160.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2A020 /* 172.226.160.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2A200 /* 172.226.162.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2A240 /* 172.226.162.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2A250 /* 172.226.162.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2A300 /* 172.226.163.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2A340 /* 172.226.163.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2A350 /* 172.226.163.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2A400 /* 172.226.164.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2A600 /* 172.226.166.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2A680 /* 172.226.166.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2A6C0 /* 172.226.166.192/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2A700 /* 172.226.167.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2A740 /* 172.226.167.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2A800 /* 172.226.168.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2A900 /* 172.226.169.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2A980 /* 172.226.169.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2AA00 /* 172.226.170.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2AB00 /* 172.226.171.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2AB80 /* 172.226.171.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2AC00 /* 172.226.172.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2AE00 /* 172.226.174.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2AE40 /* 172.226.174.64/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2AE44 /* 172.226.174.68/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2AF00 /* 172.226.175.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2B000 /* 172.226.176.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2B100 /* 172.226.177.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2B140 /* 172.226.177.64/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2B144 /* 172.226.177.68/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2B200 /* 172.226.178.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2B300 /* 172.226.179.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2B340 /* 172.226.179.64/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2B344 /* 172.226.179.68/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2B400 /* 172.226.180.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2B420 /* 172.226.180.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2B440 /* 172.226.180.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2B480 /* 172.226.180.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2B600 /* 172.226.182.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2B640 /* 172.226.182.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2B650 /* 172.226.182.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2B658 /* 172.226.182.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2B700 /* 172.226.183.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2B740 /* 172.226.183.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2B750 /* 172.226.183.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2B758 /* 172.226.183.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2B800 /* 172.226.184.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2B880 /* 172.226.184.128/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2B888 /* 172.226.184.136/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2BA00 /* 172.226.186.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2BA80 /* 172.226.186.128/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2BA88 /* 172.226.186.136/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2BC00 /* 172.226.188.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2BD00 /* 172.226.189.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2BD80 /* 172.226.189.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2BE00 /* 172.226.190.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2BF00 /* 172.226.191.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2BF80 /* 172.226.191.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2C000 /* 172.226.192.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2C100 /* 172.226.193.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2C140 /* 172.226.193.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2C160 /* 172.226.193.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2C200 /* 172.226.194.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2C300 /* 172.226.195.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2C400 /* 172.226.196.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2C500 /* 172.226.197.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2C600 /* 172.226.198.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2C700 /* 172.226.199.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2C800 /* 172.226.200.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2C900 /* 172.226.201.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2CA00 /* 172.226.202.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2CB00 /* 172.226.203.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2CC00 /* 172.226.204.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2CD00 /* 172.226.205.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2CE00 /* 172.226.206.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2CE40 /* 172.226.206.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2CE50 /* 172.226.206.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2CE58 /* 172.226.206.88/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2CE60 /* 172.226.206.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2D000 /* 172.226.208.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2D200 /* 172.226.210.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2D300 /* 172.226.211.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2D380 /* 172.226.211.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2D3C0 /* 172.226.211.192/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2D3C8 /* 172.226.211.200/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2D3D0 /* 172.226.211.208/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2D400 /* 172.226.212.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2D480 /* 172.226.212.128/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2D488 /* 172.226.212.136/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2D600 /* 172.226.214.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2D620 /* 172.226.214.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2D640 /* 172.226.214.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2D800 /* 172.226.216.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2D840 /* 172.226.216.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2D850 /* 172.226.216.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2D858 /* 172.226.216.88/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2D860 /* 172.226.216.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2DA00 /* 172.226.218.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2DA20 /* 172.226.218.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2DA30 /* 172.226.218.48/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2DA34 /* 172.226.218.52/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2DA38 /* 172.226.218.56/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2DC00 /* 172.226.220.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2DC40 /* 172.226.220.64/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2DC44 /* 172.226.220.68/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2DE00 /* 172.226.222.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2E000 /* 172.226.224.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2E010 /* 172.226.224.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2E200 /* 172.226.226.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2E220 /* 172.226.226.32/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2E224 /* 172.226.226.36/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_ms_office365_match.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_ms_office365_match.c new file mode 100644 index 0000000000..b2f2d07126 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_ms_office365_match.c @@ -0,0 +1,34 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_microsoft_365_protocol_list[] = { + { 0x0D6B8C06 /* 13.107.140.6/32 */, 32, NDPI_PROTOCOL_MICROSOFT_365 }, + { 0x0D6B120F /* 13.107.18.15/32 */, 32, NDPI_PROTOCOL_MICROSOFT_365 }, + { 0x0D6B06AB /* 13.107.6.171/32 */, 32, NDPI_PROTOCOL_MICROSOFT_365 }, + { 0x14BE8000 /* 20.190.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_365 }, + { 0x287E0000 /* 40.126.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_365 }, + { 0x346C0000 /* 52.108.0.0/14 */, 14, NDPI_PROTOCOL_MICROSOFT_365 }, + { 0x34F425A8 /* 52.244.37.168/32 */, 32, NDPI_PROTOCOL_MICROSOFT_365 }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_ms_onedrive_match.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_ms_onedrive_match.c new file mode 100644 index 0000000000..300fc15924 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_ms_onedrive_match.c @@ -0,0 +1,32 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_ms_one_drive_protocol_list[] = { + { 0x68928000 /* 104.146.128.0/17 */, 17, NDPI_PROTOCOL_MS_ONE_DRIVE }, + { 0x0D6B8800 /* 13.107.136.0/22 */, 22, NDPI_PROTOCOL_MS_ONE_DRIVE }, + { 0x96AB2800 /* 150.171.40.0/22 */, 22, NDPI_PROTOCOL_MS_ONE_DRIVE }, + { 0x286C8000 /* 40.108.128.0/17 */, 17, NDPI_PROTOCOL_MS_ONE_DRIVE }, + { 0x34680000 /* 52.104.0.0/14 */, 14, NDPI_PROTOCOL_MS_ONE_DRIVE }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_ms_outlook_match.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_ms_outlook_match.c new file mode 100644 index 0000000000..32e78a727d --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_ms_outlook_match.c @@ -0,0 +1,43 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_ms_outlook_protocol_list[] = { + { 0x682F0000 /* 104.47.0.0/17 */, 17, NDPI_PROTOCOL_MS_OUTLOOK }, + { 0x0D6B8000 /* 13.107.128.0/22 */, 22, NDPI_PROTOCOL_MS_OUTLOOK }, + { 0x0D6B120A /* 13.107.18.10/31 */, 31, NDPI_PROTOCOL_MS_OUTLOOK }, + { 0x0D6B0698 /* 13.107.6.152/31 */, 31, NDPI_PROTOCOL_MS_OUTLOOK }, + { 0x83FD21D7 /* 131.253.33.215/32 */, 32, NDPI_PROTOCOL_MS_OUTLOOK }, + { 0x84F50000 /* 132.245.0.0/16 */, 16, NDPI_PROTOCOL_MS_OUTLOOK }, + { 0x96AB2000 /* 150.171.32.0/22 */, 22, NDPI_PROTOCOL_MS_OUTLOOK }, + { 0xCC4FC5D7 /* 204.79.197.215/32 */, 32, NDPI_PROTOCOL_MS_OUTLOOK }, + { 0x1767A000 /* 23.103.160.0/20 */, 20, NDPI_PROTOCOL_MS_OUTLOOK }, + { 0x28680000 /* 40.104.0.0/15 */, 15, NDPI_PROTOCOL_MS_OUTLOOK }, + { 0x286B0000 /* 40.107.0.0/16 */, 16, NDPI_PROTOCOL_MS_OUTLOOK }, + { 0x285C0000 /* 40.92.0.0/15 */, 15, NDPI_PROTOCOL_MS_OUTLOOK }, + { 0x28600000 /* 40.96.0.0/13 */, 13, NDPI_PROTOCOL_MS_OUTLOOK }, + { 0x34640000 /* 52.100.0.0/14 */, 14, NDPI_PROTOCOL_MS_OUTLOOK }, + { 0x34EE4E58 /* 52.238.78.88/32 */, 32, NDPI_PROTOCOL_MS_OUTLOOK }, + { 0x34600000 /* 52.96.0.0/14 */, 14, NDPI_PROTOCOL_MS_OUTLOOK }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_ms_skype_teams_match.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_ms_skype_teams_match.c new file mode 100644 index 0000000000..eefb2ac102 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_ms_skype_teams_match.c @@ -0,0 +1,32 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_skype_teams_protocol_list[] = { + { 0x0D6B4000 /* 13.107.64.0/18 */, 18, NDPI_PROTOCOL_SKYPE_TEAMS }, + { 0x34700000 /* 52.112.0.0/14 */, 14, NDPI_PROTOCOL_SKYPE_TEAMS }, + { 0x347A0000 /* 52.122.0.0/15 */, 15, NDPI_PROTOCOL_SKYPE_TEAMS }, + { 0x34EE778D /* 52.238.119.141/32 */, 32, NDPI_PROTOCOL_SKYPE_TEAMS }, + { 0x34F4A0CF /* 52.244.160.207/32 */, 32, NDPI_PROTOCOL_SKYPE_TEAMS }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_tor_match.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_tor_match.c new file mode 100644 index 0000000000..b4f2549576 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_tor_match.c @@ -0,0 +1,1314 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_tor_protocol_list[] = { + { 0xB9F4C367 /* 185.244.195.103/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6512 /* 185.220.101.18/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9C28E5A /* 185.194.142.90/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D466458 /* 109.70.100.88/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC66FE /* 185.220.102.254/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A740D /* 192.42.116.13/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BAE8AAC /* 107.174.138.172/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC4438AF /* 188.68.56.175/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2EA68B6F /* 46.166.139.111/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x59A38F08 /* 89.163.143.8/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC66F8 /* 185.220.102.248/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB330FBBC /* 179.48.251.188/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD9BAD0 /* 95.217.186.208/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9C17F99 /* 185.193.127.153/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D46641B /* 109.70.100.27/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E653 /* 199.249.230.83/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9C347F4 /* 185.195.71.244/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x179AB102 /* 23.154.177.2/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6517 /* 185.220.101.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0C58 /* 107.189.12.88/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F44B21 /* 104.244.75.33/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD1DCF /* 107.189.29.207/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x52DD8305 /* 82.221.131.5/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF6297 /* 5.255.98.151/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D46641C /* 109.70.100.28/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD18D2286 /* 209.141.34.134/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F3D85C /* 185.243.216.92/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E6BB /* 199.249.230.187/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2578BAD0 /* 37.120.186.208/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1DA76B6 /* 193.218.118.182/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x57EDA51F /* 87.237.165.31/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BCB0592 /* 91.203.5.146/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAC6BC986 /* 172.107.201.134/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC653B /* 185.220.101.59/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC64F5 /* 185.220.100.245/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5A4CE7C /* 213.164.206.124/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05024D16 /* 5.2.77.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC64F6 /* 185.220.100.246/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6514 /* 185.220.101.20/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9AA7219 /* 185.170.114.25/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9C28EE2 /* 185.194.142.226/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x67D607FB /* 103.214.7.251/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E64A /* 199.249.230.74/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6511 /* 185.220.101.17/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5A4CC92 /* 213.164.204.146/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6539 /* 185.220.101.57/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6707 /* 185.220.103.7/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F44CAA /* 104.244.76.170/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC64F7 /* 185.220.100.247/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2143710 /* 178.20.55.16/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D97A70C /* 45.151.167.12/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9C28D6B /* 185.194.141.107/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x179AB104 /* 23.154.177.4/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x7DD4F183 /* 125.212.241.131/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4E82806A /* 78.130.128.106/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D444BAD /* 77.68.75.173/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6529 /* 185.220.101.41/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D466413 /* 109.70.100.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D46641A /* 109.70.100.26/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25E48185 /* 37.228.129.133/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC44282E /* 188.68.40.46/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5DB1420F /* 93.177.66.15/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6520 /* 185.220.101.32/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D97A70B /* 45.151.167.11/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6528 /* 185.220.101.40/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC653D /* 185.220.101.61/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB96B4638 /* 185.107.70.56/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6502 /* 185.220.101.2/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E8EF410 /* 94.142.244.16/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD025B /* 107.189.2.91/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6503 /* 185.220.101.3/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC63280ED /* 198.50.128.237/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD80AF792 /* 216.10.247.146/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9CF6ADE /* 185.207.106.222/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F44D50 /* 104.244.77.80/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD9920229 /* 217.146.2.41/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5F802BA4 /* 95.128.43.164/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x67ECC958 /* 103.236.201.88/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E645 /* 199.249.230.69/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1EFE866 /* 193.239.232.102/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x58D0D740 /* 88.208.215.64/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x050243E2 /* 5.2.67.226/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E68E /* 199.249.230.142/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8DEF955E /* 141.239.149.94/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x877DCD19 /* 135.125.205.25/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9CF6B82 /* 185.207.107.130/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD18D39B2 /* 209.141.57.178/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D466455 /* 109.70.100.85/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6522 /* 185.220.101.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x53611458 /* 83.97.20.88/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD94FB235 /* 217.79.178.53/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0E7B /* 107.189.14.123/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A7418 /* 192.42.116.24/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x66827109 /* 102.130.113.9/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2FB0598 /* 162.251.5.152/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC6623C5A /* 198.98.60.90/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D466419 /* 109.70.100.25/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD18D371A /* 209.141.55.26/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D454311 /* 109.69.67.17/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1F189425 /* 31.24.148.37/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF6217 /* 5.255.98.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB938AB5E /* 185.56.171.94/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E6AF /* 199.249.230.175/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9813D81 /* 185.129.61.129/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E6A6 /* 199.249.230.166/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E677 /* 199.249.230.119/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x671C345D /* 103.28.52.93/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC21AC04D /* 194.26.192.77/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9CF68E1 /* 185.207.104.225/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6507 /* 185.220.101.7/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F4492B /* 104.244.73.43/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D466415 /* 109.70.100.21/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC653F /* 185.220.101.63/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8499F65 /* 216.73.159.101/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD026F /* 107.189.2.111/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC64F4 /* 185.220.100.244/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9CF697C /* 185.207.105.124/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC3B00313 /* 195.176.3.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25E4816D /* 37.228.129.109/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D466416 /* 109.70.100.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4713906A /* 71.19.144.106/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC3B00318 /* 195.176.3.24/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6527 /* 185.220.101.39/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9B9AA1B /* 185.185.170.27/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD1E56 /* 107.189.30.86/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2F748C7 /* 162.247.72.199/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB211AA17 /* 178.17.170.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5B84903B /* 91.132.144.59/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB96457FD /* 185.100.87.253/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC66F0 /* 185.220.102.240/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x179AB109 /* 23.154.177.9/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x052D6261 /* 5.45.98.97/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A378D /* 89.58.55.141/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB96457C0 /* 185.100.87.192/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E666 /* 199.249.230.102/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6777 /* 185.220.103.119/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6506 /* 185.220.101.6/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68959BE2 /* 104.149.155.226/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F4C0B8 /* 185.244.192.184/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC442065 /* 188.68.32.101/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6510 /* 185.220.101.16/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD1D67 /* 107.189.29.103/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8085F2 /* 45.128.133.242/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D466452 /* 109.70.100.82/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D5FE4CD /* 93.95.228.205/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC66F3 /* 185.220.102.243/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E6B0 /* 199.249.230.176/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E6BA /* 199.249.230.186/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x48A72F45 /* 72.167.47.69/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x47139059 /* 71.19.144.89/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6708 /* 185.220.103.8/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A1B54 /* 89.58.27.84/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6775 /* 185.220.103.117/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0A3F /* 107.189.10.63/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x54EF2E07 /* 84.239.46.7/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E652 /* 199.249.230.82/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F7E259 /* 185.247.226.89/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E693 /* 199.249.230.147/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E66D /* 199.249.230.109/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCDB97723 /* 205.185.119.35/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC652D /* 185.220.101.45/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x179AB108 /* 23.154.177.8/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC4422E7 /* 188.68.34.231/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2AF94C3 /* 178.175.148.195/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6521 /* 185.220.101.33/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A7419 /* 192.42.116.25/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC64FF /* 185.220.100.255/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E6B9 /* 199.249.230.185/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC64FC /* 185.220.100.252/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCDB978CE /* 205.185.120.206/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC650C /* 185.220.101.12/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BAEF466 /* 107.174.244.102/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x59EC7064 /* 89.236.112.100/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F3DA1B /* 185.243.218.27/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCCC21D04 /* 204.194.29.4/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5F8FC17D /* 95.143.193.125/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB21F4F54 /* 178.31.79.84/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4F669E3C /* 79.102.158.60/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2EC36BB9 /* 46.195.107.185/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB21E4F9A /* 178.30.79.154/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4F66166F /* 79.102.22.111/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4F66D7F3 /* 79.102.215.243/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB21E4AF8 /* 178.30.74.248/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2EC34362 /* 46.195.67.98/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB21E9A65 /* 178.30.154.101/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB21F3211 /* 178.31.50.17/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC650B /* 185.220.101.11/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x052D6299 /* 5.45.98.153/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC650F /* 185.220.101.15/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D441AEE /* 77.68.26.238/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D440385 /* 77.68.3.133/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F44A1C /* 104.244.74.28/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC4429BF /* 188.68.41.191/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1698696 /* 193.105.134.150/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF64DB /* 5.255.100.219/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2578B997 /* 37.120.185.151/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A740F /* 192.42.116.15/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC650D /* 185.220.101.13/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB97DA8D2 /* 185.125.168.210/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5A4CDA9 /* 213.164.205.169/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8EF5A13 /* 216.239.90.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9B79F6B /* 185.183.159.107/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3EAB89A9 /* 62.171.137.169/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D466459 /* 109.70.100.89/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6537 /* 185.220.101.55/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9822F3A /* 185.130.47.58/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC653A /* 185.220.101.58/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6772 /* 185.220.103.114/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6515 /* 185.220.101.21/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9222102 /* 185.34.33.2/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB964578B /* 185.100.87.139/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9CF6B6A /* 185.207.107.106/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9C28EC2 /* 185.194.142.194/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E64F /* 199.249.230.79/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC66F7 /* 185.220.102.247/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D466453 /* 109.70.100.83/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB96457FA /* 185.100.87.250/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC650A /* 185.220.101.10/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6530 /* 185.220.101.48/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D3DBC90 /* 45.61.188.144/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E26FEF6 /* 46.38.254.246/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6518 /* 185.220.101.24/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2F749C0 /* 162.247.73.192/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9C402FB /* 185.196.2.251/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E68C /* 199.249.230.140/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB910266E /* 185.16.38.110/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC442444 /* 188.68.36.68/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x179AB107 /* 23.154.177.7/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D466414 /* 109.70.100.20/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD18D32B2 /* 209.141.50.178/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F44884 /* 104.244.72.132/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F4C09B /* 185.244.192.155/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB90E61B0 /* 185.14.97.176/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E96417 /* 185.233.100.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC3B00314 /* 195.176.3.20/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC3B00317 /* 195.176.3.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E48948 /* 185.228.137.72/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D97A70A /* 45.151.167.10/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9813D08 /* 185.129.61.8/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC66F5 /* 185.220.102.245/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB910266F /* 185.16.38.111/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5F8EA13F /* 95.142.161.63/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB90484B7 /* 185.4.132.183/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x179AB105 /* 23.154.177.5/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A741A /* 192.42.116.26/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA646CF02 /* 166.70.207.2/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC66FD /* 185.220.102.253/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D46641D /* 109.70.100.29/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC66FB /* 185.220.102.251/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6526 /* 185.220.101.38/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB923CADE /* 185.35.202.222/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC652C /* 185.220.101.44/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F44C0D /* 104.244.76.13/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD18D2DBD /* 209.141.45.189/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x58D0F0BC /* 88.208.240.188/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E675 /* 199.249.230.117/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E651 /* 199.249.230.81/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E26ECCA /* 46.38.236.202/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD18D2ECB /* 209.141.46.203/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E6A5 /* 199.249.230.165/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E107451 /* 94.16.116.81/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E6A9 /* 199.249.230.169/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0D5B /* 107.189.13.91/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6505 /* 185.220.101.5/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2EB615F8 /* 46.182.21.248/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F44A61 /* 104.244.74.97/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5360D53F /* 83.96.213.63/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x57767A1E /* 87.118.122.30/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9675C506 /* 150.117.197.6/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x179AB10B /* 23.154.177.11/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E6A7 /* 199.249.230.167/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB926AF82 /* 185.38.175.130/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D46641E /* 109.70.100.30/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x42DCF2DE /* 66.220.242.222/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D466454 /* 109.70.100.84/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x83FF0460 /* 131.255.4.96/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F44B4A /* 104.244.75.74/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB496E263 /* 180.150.226.99/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA3AC29E4 /* 163.172.41.228/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0A8F /* 107.189.10.143/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D51F748 /* 77.81.247.72/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2578BE86 /* 37.120.190.134/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9C28EF1 /* 185.194.142.241/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E66C /* 199.249.230.108/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2F74AC9 /* 162.247.74.201/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D3DBACB /* 45.61.186.203/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x330FFA5D /* 51.15.250.93/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x052D68B0 /* 5.45.104.176/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB32B9FC4 /* 179.43.159.196/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCC55BF08 /* 204.85.191.8/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6DC98564 /* 109.201.133.100/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6538 /* 185.220.101.56/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8B63AC0B /* 139.99.172.11/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E6B1 /* 199.249.230.177/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x179AB103 /* 23.154.177.3/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E10795B /* 94.16.121.91/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2F74AD5 /* 162.247.74.213/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6778 /* 185.220.103.120/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2F74AD8 /* 162.247.74.216/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9C923F9B /* 156.146.63.155/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9C923F8A /* 156.146.63.138/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD18D331E /* 209.141.51.30/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x023A386A /* 2.58.56.106/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x052D631A /* 5.45.99.26/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E1440D /* 185.225.68.13/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x052D6870 /* 5.45.104.112/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6533 /* 185.220.101.51/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05024FB3 /* 5.2.79.179/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F3D85B /* 185.243.216.91/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x179AB106 /* 23.154.177.6/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD1EE6 /* 107.189.30.230/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E670 /* 199.249.230.112/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6774 /* 185.220.103.116/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E679 /* 199.249.230.121/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB32B9FC5 /* 179.43.159.197/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F4C28B /* 185.244.194.139/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC443A83 /* 188.68.58.131/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC66F4 /* 185.220.102.244/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2EE8FBBF /* 46.232.251.191/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D4FB115 /* 45.79.177.21/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2F74ACE /* 162.247.74.206/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9B79E39 /* 185.183.158.57/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6536 /* 185.220.101.54/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9645516 /* 185.100.85.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA077F9F0 /* 160.119.249.240/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC66239BF /* 198.98.57.191/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8A3B126E /* 138.59.18.110/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6776 /* 185.220.103.118/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9102670 /* 185.16.38.112/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D466421 /* 109.70.100.33/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x52DF0EF5 /* 82.223.14.245/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6525 /* 185.220.101.37/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x50F13CCF /* 80.241.60.207/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F680A1 /* 185.246.128.161/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9813D03 /* 185.129.61.3/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xADEDCE44 /* 173.237.206.68/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC652A /* 185.220.101.42/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC66233BD /* 198.98.51.189/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC64F8 /* 185.220.100.248/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A1EA4 /* 89.58.30.164/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E68D /* 199.249.230.141/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC64FE /* 185.220.100.254/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E67B /* 199.249.230.123/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F4487B /* 104.244.72.123/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25DDC603 /* 37.221.198.3/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E107561 /* 94.16.117.97/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB07EFDBE /* 176.126.253.190/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x52DD80BF /* 82.221.128.191/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB03A6462 /* 176.58.100.98/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9645517 /* 185.100.85.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC64FD /* 185.220.100.253/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5043ACA2 /* 80.67.172.162/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB00A6BB4 /* 176.10.107.180/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F3DA29 /* 185.243.218.41/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC66F2 /* 185.220.102.242/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A7416 /* 192.42.116.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E664 /* 199.249.230.100/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x0502486E /* 5.2.72.110/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB211ABC5 /* 178.17.171.197/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6534 /* 185.220.101.52/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB90A44C3 /* 185.10.68.195/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x052D6644 /* 5.45.102.68/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB96457AE /* 185.100.87.174/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB211AE0E /* 178.17.174.14/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6771 /* 185.220.103.113/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D4414D9 /* 77.68.20.217/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E6A8 /* 199.249.230.168/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9813D0A /* 185.129.61.10/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E690 /* 199.249.230.144/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D466456 /* 109.70.100.86/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB32B9FC3 /* 179.43.159.195/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6DA921A3 /* 109.169.33.163/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E669 /* 199.249.230.105/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9435272 /* 185.67.82.114/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF6393 /* 5.255.99.147/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E48AF0 /* 185.228.138.240/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0C94 /* 107.189.12.148/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF637C /* 5.255.99.124/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x57767A33 /* 87.118.122.51/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D466451 /* 109.70.100.81/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E48AEA /* 185.228.138.234/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC4434E7 /* 188.68.52.231/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB211AEA4 /* 178.17.174.164/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BCB05A5 /* 91.203.5.165/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5EE6D094 /* 94.230.208.148/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3626B765 /* 54.38.183.101/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC443103 /* 188.68.49.3/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA7565E6B /* 167.86.94.107/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D466418 /* 109.70.100.24/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x052D6AC5 /* 5.45.106.197/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF61DD /* 5.255.97.221/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A7413 /* 192.42.116.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x58D0D441 /* 88.208.212.65/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCC55BF09 /* 204.85.191.9/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2578BBA1 /* 37.120.187.161/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6516 /* 185.220.101.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC66239CF /* 198.98.57.207/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9813D06 /* 185.129.61.6/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D466450 /* 109.70.100.80/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC66F6 /* 185.220.102.246/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC66FA /* 185.220.102.250/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9645729 /* 185.100.87.41/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A741B /* 192.42.116.27/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x334B4017 /* 51.75.64.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC650E /* 185.220.101.14/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D46641F /* 109.70.100.31/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x330F3B0F /* 51.15.59.15/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2F74A4A /* 162.247.74.74/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D466417 /* 109.70.100.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D466420 /* 109.70.100.32/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD18D2967 /* 209.141.41.103/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05024FBE /* 5.2.79.190/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD01A0 /* 107.189.1.160/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25BB60B7 /* 37.187.96.183/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2F74ACC /* 162.247.74.204/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC652B /* 185.220.101.43/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9A5AB54 /* 185.165.171.84/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD1E16 /* 107.189.30.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5EE6D093 /* 94.230.208.147/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9645518 /* 185.100.85.24/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A7414 /* 192.42.116.20/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2F74A1B /* 162.247.74.27/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5A4CDA7 /* 213.164.205.167/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E3444E /* 185.227.68.78/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC653E /* 185.220.101.62/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6504 /* 185.220.101.4/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E8EF1C2 /* 94.142.241.194/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC64FA /* 185.220.100.250/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x58501456 /* 88.80.20.86/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E695 /* 199.249.230.149/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E668 /* 199.249.230.104/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCC0B3283 /* 204.11.50.131/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA3ACD5D4 /* 163.172.213.212/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BF4B555 /* 91.244.181.85/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6524 /* 185.220.101.36/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F44A17 /* 104.244.74.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E678 /* 199.249.230.120/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E64C /* 199.249.230.76/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB992E8BF /* 185.146.232.191/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E676 /* 199.249.230.118/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC2206B3C /* 194.32.107.60/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x052D620C /* 5.45.98.12/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E67A /* 199.249.230.122/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC442A8B /* 188.68.42.139/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E64D /* 199.249.230.77/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D466457 /* 109.70.100.87/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD18D255E /* 209.141.37.94/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC64F9 /* 185.220.100.249/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB211AB66 /* 178.17.171.102/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E6B2 /* 199.249.230.178/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x57767467 /* 87.118.116.103/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9AA716D /* 185.170.113.109/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB952DB6D /* 185.82.219.109/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3351FE11 /* 51.81.254.17/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5B5C6D2B /* 91.92.109.43/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x330FE36D /* 51.15.227.109/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4292C121 /* 66.146.193.33/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E64E /* 199.249.230.78/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9C28DB2 /* 185.194.141.178/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC6609B03 /* 198.96.155.3/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB956945A /* 185.86.148.90/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9813D05 /* 185.129.61.5/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A7410 /* 192.42.116.16/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2AA250B /* 178.170.37.11/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9BFCCFE /* 185.191.204.254/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D97A70D /* 45.151.167.13/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9813D01 /* 185.129.61.1/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2F74ACA /* 162.247.74.202/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5776745A /* 87.118.116.90/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9645519 /* 185.100.85.25/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC66F9 /* 185.220.102.249/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7C3FD9C /* 199.195.253.156/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD18D36C3 /* 209.141.54.195/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F4485B /* 104.244.72.91/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD55F9516 /* 213.95.149.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9CF6812 /* 185.207.104.18/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9813D04 /* 185.129.61.4/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E649 /* 199.249.230.73/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E6A4 /* 199.249.230.164/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A740E /* 192.42.116.14/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9813D02 /* 185.129.61.2/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x67FBA714 /* 103.251.167.20/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC66FC /* 185.220.102.252/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC4431EB /* 188.68.49.235/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E20420F /* 94.32.66.15/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E667 /* 199.249.230.103/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCB1CF6BD /* 203.28.246.189/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC652F /* 185.220.101.47/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x67FBA70A /* 103.251.167.10/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCC089C8E /* 204.8.156.142/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E674 /* 199.249.230.116/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCAA5E4E1 /* 202.165.228.225/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB211AE44 /* 178.17.174.68/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A7411 /* 192.42.116.17/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x57766E1B /* 87.118.110.27/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x53611454 /* 83.97.20.84/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCDB97CC8 /* 205.185.124.200/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB95697A8 /* 185.86.151.168/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5A4CCB1 /* 213.164.204.177/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BCB90C2 /* 91.203.144.194/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB98EEF31 /* 185.142.239.49/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x052D688D /* 5.45.104.141/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD90CDD83 /* 217.12.221.131/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6508 /* 185.220.101.8/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E665 /* 199.249.230.101/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC64FB /* 185.220.100.251/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E673 /* 199.249.230.115/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBE0A08A6 /* 190.10.8.166/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB23EDC5D /* 178.62.220.93/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6523 /* 185.220.101.35/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F3DA2E /* 185.243.218.46/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0DFB /* 107.189.13.251/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x0502468C /* 5.2.70.140/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E692 /* 199.249.230.146/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD18D36CB /* 209.141.54.203/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB926AF83 /* 185.38.175.131/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A7412 /* 192.42.116.18/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD86B94 /* 95.216.107.148/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E6BD /* 199.249.230.189/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6509 /* 185.220.101.9/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F44DD0 /* 104.244.77.208/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC653C /* 185.220.101.60/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC2588F42 /* 194.88.143.66/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E691 /* 199.249.230.145/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E64B /* 199.249.230.75/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x53611497 /* 83.97.20.151/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x59EA9DFE /* 89.234.157.254/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x052D6B6B /* 5.45.107.107/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC652E /* 185.220.101.46/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9645680 /* 185.100.86.128/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5A4CDA8 /* 213.164.205.168/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB32B8010 /* 179.43.128.16/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6531 /* 185.220.101.49/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9813D07 /* 185.129.61.7/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC11F189A /* 193.31.24.154/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCC55BF07 /* 204.85.191.7/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x90AC7604 /* 144.172.118.4/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB32B9FC2 /* 179.43.159.194/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E8C72D2 /* 94.140.114.210/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x555DDACC /* 85.93.218.204/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E66B /* 199.249.230.107/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6773 /* 185.220.103.115/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC87AB502 /* 200.122.181.2/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB99A6E8E /* 185.154.110.142/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB5771E1A /* 181.119.30.26/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6532 /* 185.220.101.50/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F44C7F /* 104.244.76.127/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E694 /* 199.249.230.148/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9813D09 /* 185.129.61.9/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF6583 /* 5.255.101.131/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x179AB10A /* 23.154.177.10/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAC5183A8 /* 172.81.131.168/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9048487 /* 185.4.132.135/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6513 /* 185.220.101.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD1F66 /* 107.189.31.102/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC66F1 /* 185.220.102.241/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA9EF80B3 /* 169.239.128.179/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2EE269A8 /* 46.226.105.168/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9EB921D /* 185.235.146.29/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5A4CE7B /* 213.164.206.123/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x480EB30A /* 72.14.179.10/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E66E /* 199.249.230.110/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2F74A07 /* 162.247.74.7/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9822C6C /* 185.130.44.108/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D4F90DE /* 45.79.144.222/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F7E225 /* 185.247.226.37/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0888 /* 107.189.8.136/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E68F /* 199.249.230.143/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6535 /* 185.220.101.53/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E66F /* 199.249.230.111/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x330F7FE3 /* 51.15.127.227/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E66A /* 199.249.230.106/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F44D35 /* 104.244.77.53/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A7417 /* 192.42.116.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCDB97595 /* 205.185.117.149/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E650 /* 199.249.230.80/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0758 /* 107.189.7.88/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC44381B /* 188.68.56.27/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC44369E /* 188.68.54.158/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9CF6BE3 /* 185.207.107.227/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9813E3F /* 185.129.62.63/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB992E8A8 /* 185.146.232.168/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D9A62AD /* 45.154.98.173/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D9A62B0 /* 45.154.98.176/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xADF939FD /* 173.249.57.253/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0841 /* 107.189.8.65/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x504E1B79 /* 80.78.27.121/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6B98D904 /* 107.152.217.4/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40057B42 /* 64.5.123.66/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC44332C /* 188.68.51.44/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x90AC4910 /* 144.172.73.16/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x54EF2E90 /* 84.239.46.144/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x67FBA715 /* 103.251.167.21/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9C134B4 /* 185.193.52.180/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x052D6ACF /* 5.45.106.207/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9AA727D /* 185.170.114.125/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x58D0E21A /* 88.208.226.26/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF634A /* 5.255.99.74/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9645584 /* 185.100.85.132/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E48892 /* 185.228.136.146/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB971801E /* 185.113.128.30/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF67BE /* 5.255.103.190/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF62E7 /* 5.255.98.231/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x52DD8BBE /* 82.221.139.190/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4154206 /* 212.21.66.6/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BE825F1 /* 91.232.37.241/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9A3CC2C /* 185.163.204.44/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA0CAA2BA /* 160.202.162.186/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5FC8C76 /* 213.252.140.118/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD1F86 /* 107.189.31.134/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD18D22EF /* 209.141.34.239/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9B79D7F /* 185.183.157.127/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD1C9D /* 107.189.28.157/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF63CD /* 5.255.99.205/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F44A39 /* 104.244.74.57/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC4425EC /* 188.68.37.236/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF6305 /* 5.255.99.5/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BCB0576 /* 91.203.5.118/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x052D6677 /* 5.45.102.119/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC442388 /* 188.68.35.136/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9CF6860 /* 185.207.104.96/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2578A5E8 /* 37.120.165.232/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC6623BF3 /* 198.98.59.243/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2578B9B1 /* 37.120.185.177/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9CF6BD8 /* 185.207.107.216/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x052D665D /* 5.45.102.93/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x052D669B /* 5.45.102.155/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4F89C292 /* 79.137.194.146/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC64F3 /* 185.220.100.243/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC64F2 /* 185.220.100.242/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC64F1 /* 185.220.100.241/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68C0018A /* 104.192.1.138/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC64F0 /* 185.220.100.240/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x052D62A2 /* 5.45.98.162/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F4C0AF /* 185.244.192.175/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x023A3865 /* 2.58.56.101/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F4C39D /* 185.244.195.157/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A34BD /* 89.58.52.189/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x052D6788 /* 5.45.103.136/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4F6E3EF4 /* 79.110.62.244/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC443867 /* 188.68.56.103/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F1D0CE /* 185.241.208.206/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F1D0CC /* 185.241.208.204/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F1D0CA /* 185.241.208.202/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x052D60B1 /* 5.45.96.177/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC443219 /* 188.68.50.25/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2AF8707 /* 178.175.135.7/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x52DD8347 /* 82.221.131.71/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x59936C3E /* 89.147.108.62/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC651C /* 185.220.101.28/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC651B /* 185.220.101.27/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC651A /* 185.220.101.26/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6519 /* 185.220.101.25/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x58D0E1D1 /* 88.208.225.209/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D5FA9FF /* 45.95.169.255/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAC6BF16E /* 172.107.241.110/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8D620636 /* 141.98.6.54/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9B79DD6 /* 185.183.157.214/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD04368A1 /* 208.67.104.161/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD043689E /* 208.67.104.158/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1BFF4BC6 /* 27.255.75.198/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6501 /* 185.220.101.1/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05C45F22 /* 5.196.95.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9072192 /* 185.7.33.146/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2EA7F406 /* 46.167.244.6/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCDB97CC1 /* 205.185.124.193/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1F8500B6 /* 31.133.0.182/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB926AF85 /* 185.38.175.133/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x178140FA /* 23.129.64.250/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC651F /* 185.220.101.31/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6500 /* 185.220.101.0/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC651E /* 185.220.101.30/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC651D /* 185.220.101.29/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x90D9566D /* 144.217.86.109/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8B63EDCD /* 139.99.237.205/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF64F5 /* 5.255.100.245/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0B50 /* 107.189.11.80/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAB19C114 /* 171.25.193.20/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAB19C14D /* 171.25.193.77/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC6623B78 /* 198.98.59.120/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC0630474 /* 192.99.4.116/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x36246CA2 /* 54.36.108.162/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC063204A /* 192.99.32.74/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x179AB10C /* 23.154.177.12/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8DFFA1A6 /* 141.255.161.166/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAB19C14E /* 171.25.193.78/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x179AB10D /* 23.154.177.13/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BD04B03 /* 91.208.75.3/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F6BC4A /* 185.246.188.74/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBE67B362 /* 190.103.179.98/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB32B9FC6 /* 179.43.159.198/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD634D0 /* 95.214.52.208/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD6349C /* 95.214.52.156/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD634BD /* 95.214.52.189/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD634BB /* 95.214.52.187/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F44873 /* 104.244.72.115/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F44804 /* 104.244.72.4/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8B1C248E /* 139.28.36.142/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1FAB9AA6 /* 31.171.154.166/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB32B9FC8 /* 179.43.159.200/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB32B9FC7 /* 179.43.159.199/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF680E /* 5.255.104.14/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9B53D17 /* 185.181.61.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1789F9F0 /* 23.137.249.240/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB32B9FC9 /* 179.43.159.201/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25E48118 /* 37.228.129.24/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBFFC6F37 /* 191.252.111.55/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD0440781 /* 208.68.7.129/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF67EB /* 5.255.103.235/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0E2B /* 107.189.14.43/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBE67B34C /* 190.103.179.76/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7C3F8AC /* 199.195.248.172/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9385353 /* 185.56.83.83/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9FE4B37 /* 185.254.75.55/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5CCD8107 /* 92.205.129.7/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9645788 /* 185.100.87.136/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BD04B04 /* 91.208.75.4/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD08B5 /* 107.189.8.181/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF61AA /* 5.255.97.170/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAB19C14F /* 171.25.193.79/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAB19C150 /* 171.25.193.80/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8E2CAA88 /* 142.44.170.136/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD18D3B74 /* 209.141.59.116/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC350971E /* 195.80.151.30/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D0B3930 /* 45.11.57.48/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9B79F28 /* 185.183.159.40/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF68EF /* 5.255.104.239/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAB19C1EB /* 171.25.193.235/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBCD66815 /* 188.214.104.21/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2FF3678C /* 47.243.103.140/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9709C48 /* 185.112.156.72/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD1E45 /* 107.189.30.69/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD6372B /* 95.214.55.43/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F6BC43 /* 185.246.188.67/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2F74AD9 /* 162.247.74.217/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E4BE146 /* 94.75.225.70/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC3584ACE /* 195.88.74.206/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x67A3DA0B /* 103.163.218.11/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BCB0573 /* 91.203.5.115/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x7223F596 /* 114.35.245.150/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD07B9 /* 107.189.7.185/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D6368C2 /* 93.99.104.194/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8499F4B /* 216.73.159.75/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBE78E562 /* 190.120.229.98/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB992E8F3 /* 185.146.232.243/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4C0F637 /* 212.192.246.55/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4C0F64A /* 212.192.246.74/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4C0F636 /* 212.192.246.54/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33C3A6C3 /* 51.195.166.195/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68C0034A /* 104.192.3.74/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x573E637A /* 87.62.99.122/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E14A22 /* 185.225.74.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB90E6125 /* 185.14.97.37/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB90E6193 /* 185.14.97.147/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BACD71D /* 91.172.215.29/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB99A6E8F /* 185.154.110.143/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D301CED /* 77.48.28.237/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D301CEC /* 77.48.28.236/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x676D6569 /* 103.109.101.105/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x877D806F /* 135.125.128.111/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x67FD1812 /* 103.253.24.18/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7C3FBBB /* 199.195.251.187/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBED3FE61 /* 190.211.254.97/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5C5706C2 /* 92.87.6.194/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F3DA6E /* 185.243.218.110/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F1D0E8 /* 185.241.208.232/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D9A62E1 /* 45.154.98.225/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8138CF /* 45.129.56.207/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC6623C6B /* 198.98.60.107/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E145E8 /* 185.225.69.232/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x36246515 /* 54.36.101.21/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D422323 /* 45.66.35.35/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x50524E0E /* 80.82.78.14/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1DA7697 /* 193.218.118.151/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4F89C4DF /* 79.137.196.223/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FC7613 /* 5.252.118.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17AF200B /* 23.175.32.11/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4273BD95 /* 66.115.189.149/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF6787 /* 5.255.103.135/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2B80C9EF /* 43.128.201.239/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x54F34255 /* 84.243.66.85/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05BB35C2 /* 5.187.53.194/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD6EB87 /* 95.214.235.135/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3EB656EF /* 62.182.86.239/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D301CCE /* 77.48.28.206/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC8191B08 /* 200.25.27.8/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9246921A /* 146.70.146.26/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2FF34A88 /* 47.243.74.136/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x923B2C2D /* 146.59.44.45/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33599970 /* 51.89.153.112/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D301CCC /* 77.48.28.204/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A362E /* 89.58.54.46/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1789F996 /* 23.137.249.150/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BD04B99 /* 91.208.75.153/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAC6BE3F6 /* 172.107.227.246/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB32BBB2B /* 179.43.187.43/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9709C33 /* 185.112.156.51/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9645679 /* 185.100.86.121/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FC171E /* 5.252.23.30/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1789FB3D /* 23.137.251.61/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC443856 /* 188.68.56.86/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D5B7B88 /* 77.91.123.136/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD9AAC579 /* 217.170.197.121/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4DDCC4FD /* 77.220.196.253/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2AF94D1 /* 178.175.148.209/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68958DE5 /* 104.149.141.229/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB07DEB5F /* 176.125.235.95/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x66827FEE /* 102.130.127.238/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1789F970 /* 23.137.249.112/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD45F324D /* 212.95.50.77/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4E373EF /* 212.227.115.239/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD067C /* 107.189.6.124/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2DA9012 /* 178.218.144.18/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x7AFE6BAA /* 122.254.107.170/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2EA7F486 /* 46.167.244.134/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F80B /* 23.128.248.11/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F80A /* 23.128.248.10/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F80E /* 23.128.248.14/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F80D /* 23.128.248.13/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D9A6221 /* 45.154.98.33/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F80C /* 23.128.248.12/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F817 /* 23.128.248.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F815 /* 23.128.248.21/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F80F /* 23.128.248.15/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F811 /* 23.128.248.17/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F818 /* 23.128.248.24/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F813 /* 23.128.248.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F810 /* 23.128.248.16/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F814 /* 23.128.248.20/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F812 /* 23.128.248.18/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F819 /* 23.128.248.25/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F816 /* 23.128.248.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2FF2C5E /* 178.255.44.94/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB96456F5 /* 185.100.86.245/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB964567A /* 185.100.86.122/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB96457EE /* 185.100.87.238/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D466423 /* 109.70.100.35/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D466422 /* 109.70.100.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D466424 /* 109.70.100.36/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BD04B9C /* 91.208.75.156/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF650A /* 5.255.101.10/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5C570675 /* 92.87.6.117/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25E48168 /* 37.228.129.104/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F865D7 /* 185.248.101.215/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5110212A /* 81.16.33.42/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9822E8D /* 185.130.46.141/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x179AB10F /* 23.154.177.15/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x179AB111 /* 23.154.177.17/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x179AB10E /* 23.154.177.14/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x179AB110 /* 23.154.177.16/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9B53D8E /* 185.181.61.142/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8DFFA2DA /* 141.255.162.218/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A741C /* 192.42.116.28/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x178140D4 /* 23.129.64.212/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17814086 /* 23.129.64.134/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17814084 /* 23.129.64.132/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x178140E2 /* 23.129.64.226/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17814087 /* 23.129.64.135/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x178140E4 /* 23.129.64.228/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1781408C /* 23.129.64.140/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x178140D9 /* 23.129.64.217/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x178140DA /* 23.129.64.218/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x178140DD /* 23.129.64.221/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x178140E1 /* 23.129.64.225/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x178140D8 /* 23.129.64.216/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x178140D6 /* 23.129.64.214/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x178140E5 /* 23.129.64.229/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x178140DB /* 23.129.64.219/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x178140D3 /* 23.129.64.211/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17814089 /* 23.129.64.137/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x178140D5 /* 23.129.64.213/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17814095 /* 23.129.64.149/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17814093 /* 23.129.64.147/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17814094 /* 23.129.64.148/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x178140E0 /* 23.129.64.224/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1781408E /* 23.129.64.142/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17814092 /* 23.129.64.146/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1781408F /* 23.129.64.143/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x178140D7 /* 23.129.64.215/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x178140D2 /* 23.129.64.210/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17814082 /* 23.129.64.130/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x178140DC /* 23.129.64.220/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x178140DE /* 23.129.64.222/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17814091 /* 23.129.64.145/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17814085 /* 23.129.64.133/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17814083 /* 23.129.64.131/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1781408D /* 23.129.64.141/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1781408B /* 23.129.64.139/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x178140DF /* 23.129.64.223/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17814088 /* 23.129.64.136/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1781408A /* 23.129.64.138/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x178140E3 /* 23.129.64.227/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17814090 /* 23.129.64.144/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2D2AD11 /* 162.210.173.17/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F3DA59 /* 185.243.218.89/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9709C44 /* 185.112.156.68/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FA8AD8F /* 95.168.173.143/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x67C4256F /* 103.196.37.111/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F44F28 /* 104.244.79.40/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25E48105 /* 37.228.129.5/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCDB97422 /* 205.185.116.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x923BE921 /* 146.59.233.33/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF692E /* 5.255.105.46/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAC51838B /* 172.81.131.139/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC3DA1088 /* 195.218.16.136/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9645781 /* 185.100.87.129/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4B3F4321 /* 75.63.67.33/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D099667 /* 45.9.150.103/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2EB615FA /* 46.182.21.250/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7C3FC05 /* 199.195.252.5/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9C34703 /* 185.195.71.3/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBE67B358 /* 190.103.179.88/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD420E2E6 /* 212.32.226.230/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4B3F4323 /* 75.63.67.35/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9246A171 /* 146.70.161.113/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F3DA99 /* 185.243.218.153/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2DA9063 /* 178.218.144.99/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E6A3 /* 199.249.230.163/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC8191B0C /* 200.25.27.12/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BD04BEF /* 91.208.75.239/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x82C10F4F /* 130.193.15.79/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E69B /* 199.249.230.155/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6709 /* 185.220.103.9/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBB142065 /* 187.20.32.101/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68DBEC64 /* 104.219.236.100/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC37BD112 /* 195.123.209.18/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74D2 /* 192.42.116.210/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1789F98F /* 23.137.249.143/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3EB65492 /* 62.182.84.146/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB965226C /* 185.101.34.108/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x59936F7C /* 89.147.111.124/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E696 /* 199.249.230.150/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D42230A /* 45.66.35.10/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4A522FC2 /* 74.82.47.194/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x92B9FD82 /* 146.185.253.130/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68958869 /* 104.149.136.105/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD18D3417 /* 209.141.52.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F44988 /* 104.244.73.136/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD18D292A /* 209.141.41.42/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E69F /* 199.249.230.159/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB99B631C /* 185.155.99.28/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D5FA973 /* 45.95.169.115/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F3DA98 /* 185.243.218.152/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD9AACC6E /* 217.170.204.110/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E6A1 /* 199.249.230.161/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74D7 /* 192.42.116.215/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD1F21 /* 107.189.31.33/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC819104D /* 200.25.16.77/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D385B29 /* 45.56.91.41/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1DA7648 /* 193.218.118.72/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D62D036 /* 109.98.208.54/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BD0A2C5 /* 91.208.162.197/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74D8 /* 192.42.116.216/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB99B634D /* 185.155.99.77/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E6A2 /* 199.249.230.162/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E69C /* 199.249.230.156/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E6A0 /* 199.249.230.160/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74C7 /* 192.42.116.199/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74D6 /* 192.42.116.214/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D7B0C70 /* 93.123.12.112/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2DA9033 /* 178.218.144.51/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF6F40 /* 5.255.111.64/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D3DBCDF /* 45.61.188.223/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74C3 /* 192.42.116.195/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB965224A /* 185.101.34.74/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74C4 /* 192.42.116.196/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB03A59B6 /* 176.58.89.182/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC2A9AF96 /* 194.169.175.150/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E698 /* 199.249.230.152/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74BF /* 192.42.116.191/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC66230C0 /* 198.98.48.192/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74D1 /* 192.42.116.209/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74D0 /* 192.42.116.208/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F3DA3D /* 185.243.218.61/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E69D /* 199.249.230.157/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F449C1 /* 104.244.73.193/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E69E /* 199.249.230.158/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAC51836E /* 172.81.131.110/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D5FA991 /* 45.95.169.145/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74C2 /* 192.42.116.194/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBB143778 /* 187.20.55.120/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5B5C6D7E /* 91.92.109.126/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E69A /* 199.249.230.154/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74D9 /* 192.42.116.217/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E697 /* 199.249.230.151/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F9E699 /* 199.249.230.153/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74C6 /* 192.42.116.198/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9709C6D /* 185.112.156.109/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74C8 /* 192.42.116.200/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74C0 /* 192.42.116.192/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74C1 /* 192.42.116.193/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74C5 /* 192.42.116.197/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74D5 /* 192.42.116.213/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF60F5 /* 5.255.96.245/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD01AF /* 107.189.1.175/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74D4 /* 192.42.116.212/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74D3 /* 192.42.116.211/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BD04BB2 /* 91.208.75.178/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x59936F6A /* 89.147.111.106/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x85826B05 /* 133.130.107.5/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB99A6E11 /* 185.154.110.17/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAC51836F /* 172.81.131.111/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1789FA1E /* 23.137.250.30/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD18D3366 /* 209.141.51.102/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9541FFE /* 185.84.31.254/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x82C10FBA /* 130.193.15.186/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x82C10A15 /* 130.193.10.21/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1789F908 /* 23.137.249.8/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F41E14 /* 185.244.30.20/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F41E21 /* 185.244.30.33/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F41E0B /* 185.244.30.11/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F41E1C /* 185.244.30.28/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F41E27 /* 185.244.30.39/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F41E1E /* 185.244.30.30/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F41E20 /* 185.244.30.32/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F41E24 /* 185.244.30.36/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F41E1B /* 185.244.30.27/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F41E29 /* 185.244.30.41/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E669CC4 /* 46.102.156.196/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D9BA8CE /* 45.155.168.206/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05BDD98F /* 5.189.217.143/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D0892D5 /* 45.8.146.213/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x66827FEF /* 102.130.127.239/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74CB /* 192.42.116.203/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74DA /* 192.42.116.218/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74C9 /* 192.42.116.201/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74DD /* 192.42.116.221/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74DE /* 192.42.116.222/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74CC /* 192.42.116.204/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74CD /* 192.42.116.205/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74CA /* 192.42.116.202/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74DC /* 192.42.116.220/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74DB /* 192.42.116.219/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D3DBCB6 /* 45.61.188.182/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x894AA9F1 /* 137.74.169.241/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74BC /* 192.42.116.188/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB96B2FAB /* 185.107.47.171/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74BD /* 192.42.116.189/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74DF /* 192.42.116.223/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D46645A /* 109.70.100.90/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D46645B /* 109.70.100.91/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D46645C /* 109.70.100.92/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D46645E /* 109.70.100.94/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74CE /* 192.42.116.206/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D46645D /* 109.70.100.93/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8D620B83 /* 141.98.11.131/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5EB0020A /* 94.176.2.10/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BDA14C6 /* 91.218.20.198/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D9BADC2 /* 45.155.173.194/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD90CD7A7 /* 217.12.215.167/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6546 /* 185.220.101.70/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6554 /* 185.220.101.84/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6551 /* 185.220.101.81/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6540 /* 185.220.101.64/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6548 /* 185.220.101.72/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6552 /* 185.220.101.82/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6541 /* 185.220.101.65/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC654E /* 185.220.101.78/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6547 /* 185.220.101.71/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6545 /* 185.220.101.69/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC654B /* 185.220.101.75/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6544 /* 185.220.101.68/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6543 /* 185.220.101.67/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC654F /* 185.220.101.79/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC654A /* 185.220.101.74/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6550 /* 185.220.101.80/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6549 /* 185.220.101.73/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6542 /* 185.220.101.66/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC654D /* 185.220.101.77/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC654C /* 185.220.101.76/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6553 /* 185.220.101.83/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD05F1 /* 107.189.5.241/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCDB97FE2 /* 205.185.127.226/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD04A9 /* 107.189.4.169/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCB1CF665 /* 203.28.246.101/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x179AB115 /* 23.154.177.21/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x179AB117 /* 23.154.177.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x179AB112 /* 23.154.177.18/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x179AB118 /* 23.154.177.24/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x179AB119 /* 23.154.177.25/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x179AB116 /* 23.154.177.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x179AB114 /* 23.154.177.20/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x179AB113 /* 23.154.177.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0C07 /* 107.189.12.7/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x90D95050 /* 144.217.80.80/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D5FE256 /* 93.95.226.86/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC62EA69D /* 198.46.166.157/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x054F6D30 /* 5.79.109.48/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4E8749B6 /* 78.135.73.182/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F8D0 /* 23.128.248.208/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F8D6 /* 23.128.248.214/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F8CA /* 23.128.248.202/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F8CF /* 23.128.248.207/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F8CB /* 23.128.248.203/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F8D5 /* 23.128.248.213/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F8D1 /* 23.128.248.209/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F8D2 /* 23.128.248.210/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F8D3 /* 23.128.248.211/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F8CC /* 23.128.248.204/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D5FE6D8 /* 93.95.230.216/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F8D4 /* 23.128.248.212/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F8CE /* 23.128.248.206/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F8C9 /* 23.128.248.201/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F8CD /* 23.128.248.205/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1798E108 /* 23.152.225.8/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1798E109 /* 23.152.225.9/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1798E105 /* 23.152.225.5/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1798E104 /* 23.152.225.4/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1798E103 /* 23.152.225.3/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1798E102 /* 23.152.225.2/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1798E107 /* 23.152.225.7/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1798E106 /* 23.152.225.6/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9813E3E /* 185.129.62.62/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x674BBE39 /* 103.75.190.57/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA07764BC /* 160.119.100.188/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05BDD999 /* 5.189.217.153/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x66827F75 /* 102.130.127.117/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D49476E /* 77.73.71.110/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F44D05 /* 104.244.77.5/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x829550C7 /* 130.149.80.199/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB8693028 /* 184.105.48.40/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD18D22A7 /* 209.141.34.167/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F6BC49 /* 185.246.188.73/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC12A2171 /* 193.42.33.113/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F81B /* 23.128.248.27/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F81C /* 23.128.248.28/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F820 /* 23.128.248.32/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F81F /* 23.128.248.31/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F81D /* 23.128.248.29/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F81A /* 23.128.248.26/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F81E /* 23.128.248.30/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F822 /* 23.128.248.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F823 /* 23.128.248.35/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7C3F836 /* 199.195.248.54/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D671EA7 /* 93.103.30.167/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD9853B89 /* 217.133.59.137/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D62D02A /* 109.98.208.42/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8B1CDAEB /* 139.28.218.235/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB84BDDC3 /* 184.75.221.195/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCDB9755B /* 205.185.117.91/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1BD64C5 /* 193.189.100.197/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1BD64C7 /* 193.189.100.199/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1BD64C2 /* 193.189.100.194/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1BD64CB /* 193.189.100.203/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1BD64C4 /* 193.189.100.196/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1BD64C9 /* 193.189.100.201/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1BD64C8 /* 193.189.100.200/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1BD64CD /* 193.189.100.205/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1BD64C3 /* 193.189.100.195/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1BD64CC /* 193.189.100.204/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1BD64CE /* 193.189.100.206/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1BD64CA /* 193.189.100.202/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1BD64C6 /* 193.189.100.198/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCA454C24 /* 202.69.76.36/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x90AC7622 /* 144.172.118.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC051DFB1 /* 192.81.223.177/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBCF0D214 /* 188.240.210.20/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4F7C3CAE /* 79.124.60.174/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x98209609 /* 152.32.150.9/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC2B649E0 /* 194.182.73.224/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65BF /* 185.220.101.191/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6598 /* 185.220.101.152/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65B6 /* 185.220.101.182/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65AD /* 185.220.101.173/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC659C /* 185.220.101.156/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC658E /* 185.220.101.142/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65B5 /* 185.220.101.181/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65BA /* 185.220.101.186/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6587 /* 185.220.101.135/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65BE /* 185.220.101.190/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65B0 /* 185.220.101.176/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6589 /* 185.220.101.137/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65A4 /* 185.220.101.164/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65B9 /* 185.220.101.185/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65AB /* 185.220.101.171/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65A9 /* 185.220.101.169/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65AC /* 185.220.101.172/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6588 /* 185.220.101.136/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65A3 /* 185.220.101.163/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65BB /* 185.220.101.187/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC659D /* 185.220.101.157/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65B1 /* 185.220.101.177/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6586 /* 185.220.101.134/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65A5 /* 185.220.101.165/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65A0 /* 185.220.101.160/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6581 /* 185.220.101.129/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65B7 /* 185.220.101.183/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65A2 /* 185.220.101.162/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65BC /* 185.220.101.188/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC659E /* 185.220.101.158/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65A6 /* 185.220.101.166/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6599 /* 185.220.101.153/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC659F /* 185.220.101.159/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65A7 /* 185.220.101.167/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6594 /* 185.220.101.148/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6582 /* 185.220.101.130/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6592 /* 185.220.101.146/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC658F /* 185.220.101.143/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC659B /* 185.220.101.155/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65BD /* 185.220.101.189/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65B4 /* 185.220.101.180/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6597 /* 185.220.101.151/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6590 /* 185.220.101.144/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC658C /* 185.220.101.140/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6580 /* 185.220.101.128/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC658B /* 185.220.101.139/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6585 /* 185.220.101.133/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65B8 /* 185.220.101.184/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC658A /* 185.220.101.138/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC659A /* 185.220.101.154/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65AE /* 185.220.101.174/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6593 /* 185.220.101.147/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65A8 /* 185.220.101.168/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6596 /* 185.220.101.150/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65A1 /* 185.220.101.161/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6595 /* 185.220.101.149/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC658D /* 185.220.101.141/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6583 /* 185.220.101.131/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6584 /* 185.220.101.132/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65B2 /* 185.220.101.178/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65B3 /* 185.220.101.179/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6591 /* 185.220.101.145/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65AA /* 185.220.101.170/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65AF /* 185.220.101.175/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCB1CF68D /* 203.28.246.141/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA45CDA8B /* 164.92.218.139/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5EB10983 /* 94.177.9.131/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9C17D2A /* 185.193.125.42/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x054F4213 /* 5.79.66.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9750949F /* 151.80.148.159/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5043A751 /* 80.67.167.81/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8FF425C0 /* 143.244.37.192/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5B5A78C4 /* 91.90.120.196/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC7E5EAD /* 188.126.94.173/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E4BE151 /* 94.75.225.81/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F7E262 /* 185.247.226.98/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6DCEF391 /* 109.206.243.145/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5C57066B /* 92.87.6.107/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC21AC08E /* 194.26.192.142/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05B55077 /* 5.181.80.119/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB00A77D5 /* 176.10.119.213/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D9FFA3E /* 45.159.250.62/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF6707 /* 5.255.103.7/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17B8306C /* 23.184.48.108/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x801F000D /* 128.31.0.13/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E836526 /* 94.131.101.38/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAB19C1EA /* 171.25.193.234/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAB19C119 /* 171.25.193.25/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x023A38D4 /* 2.58.56.212/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D4C4EE9 /* 45.76.78.233/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB0795133 /* 176.121.81.51/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD63661 /* 95.214.54.97/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BCB9174 /* 91.203.145.116/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB991F51A /* 185.145.245.26/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8D5F948D /* 141.95.148.141/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC0C3500A /* 192.195.80.10/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC63A6B35 /* 198.58.107.53/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9A5A9EF /* 185.165.169.239/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA549F2A3 /* 165.73.242.163/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x59BB8F1F /* 89.187.143.31/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8B7AF1 /* 45.139.122.241/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17B83064 /* 23.184.48.100/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1F2AB038 /* 31.42.176.56/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33DE564F /* 51.222.86.79/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68958375 /* 104.149.131.117/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6704 /* 185.220.103.4/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6706 /* 185.220.103.6/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2F74AC8 /* 162.247.74.200/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6705 /* 185.220.103.5/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x92468175 /* 146.70.129.117/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x92468173 /* 146.70.129.115/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6DE4281D /* 109.228.40.29/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1798E10A /* 23.152.225.10/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1798E10B /* 23.152.225.11/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD05D9 /* 107.189.5.217/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB970930A /* 185.112.147.10/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF695C /* 5.255.105.92/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D5C014A /* 45.92.1.74/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCDB97321 /* 205.185.115.33/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8BA2F3F4 /* 139.162.243.244/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F829 /* 23.128.248.41/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F824 /* 23.128.248.36/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F827 /* 23.128.248.39/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F828 /* 23.128.248.40/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F821 /* 23.128.248.33/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F826 /* 23.128.248.38/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1780F825 /* 23.128.248.37/32 */, 32, NDPI_PROTOCOL_TOR }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_whatsapp_match.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_whatsapp_match.c new file mode 100644 index 0000000000..ff533fb665 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_whatsapp_match.c @@ -0,0 +1,256 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_whatsapp_protocol_list[] = { + { 0x0321DD30 /* 3.33.221.48/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x0321FC3D /* 3.33.252.61/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x0FC5CED9 /* 15.197.206.217/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x0FC5D2D0 /* 15.197.210.208/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D403C /* 31.13.64.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D4131 /* 31.13.65.49/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D4132 /* 31.13.65.50/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D4233 /* 31.13.66.51/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D4238 /* 31.13.66.56/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D4334 /* 31.13.67.52/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D443C /* 31.13.68.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D453C /* 31.13.69.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D4631 /* 31.13.70.49/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D4632 /* 31.13.70.50/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D4731 /* 31.13.71.49/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D4732 /* 31.13.71.50/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D4830 /* 31.13.72.48/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D4834 /* 31.13.72.52/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D4934 /* 31.13.73.52/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D4A34 /* 31.13.74.52/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D4B3C /* 31.13.75.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D4C3C /* 31.13.76.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D4D3C /* 31.13.77.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D4E3C /* 31.13.78.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D4F35 /* 31.13.79.53/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D4F36 /* 31.13.79.54/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D5030 /* 31.13.80.48/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D5035 /* 31.13.80.53/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D5130 /* 31.13.81.48/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D5135 /* 31.13.81.53/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D5233 /* 31.13.82.51/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D5237 /* 31.13.82.55/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D5331 /* 31.13.83.49/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D5333 /* 31.13.83.51/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D5431 /* 31.13.84.49/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D5433 /* 31.13.84.51/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D5531 /* 31.13.85.49/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D5533 /* 31.13.85.51/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D5631 /* 31.13.86.49/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D5633 /* 31.13.86.51/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D5730 /* 31.13.87.48/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D5733 /* 31.13.87.51/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D583C /* 31.13.88.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D5935 /* 31.13.89.53/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D5936 /* 31.13.89.54/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D5A3C /* 31.13.90.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D5B3C /* 31.13.91.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D5C30 /* 31.13.92.48/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D5C34 /* 31.13.92.52/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D5D35 /* 31.13.93.53/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D5D36 /* 31.13.93.54/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D5E34 /* 31.13.94.52/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D5E36 /* 31.13.94.54/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D5F3C /* 31.13.95.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x22C0B50C /* 34.192.181.12/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x22C12670 /* 34.193.38.112/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x22C247D9 /* 34.194.71.217/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x22C2FFE6 /* 34.194.255.230/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x45ABFA3C /* 69.171.250.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x66846036 /* 102.132.96.54/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x66846136 /* 102.132.97.54/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x6684623C /* 102.132.98.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x6684633C /* 102.132.99.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x6684643C /* 102.132.100.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x6684653C /* 102.132.101.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x6684663C /* 102.132.102.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x6684673C /* 102.132.103.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x6684683C /* 102.132.104.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x6684693C /* 102.132.105.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x66846A3C /* 102.132.106.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x66846B3C /* 102.132.107.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x66846C3C /* 102.132.108.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x66846D3C /* 102.132.109.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x66846E3C /* 102.132.110.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x66846F3C /* 102.132.111.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0003C /* 157.240.0.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0013C /* 157.240.1.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF00235 /* 157.240.2.53/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF00236 /* 157.240.2.54/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF00336 /* 157.240.3.54/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0043C /* 157.240.4.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0053C /* 157.240.5.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF00635 /* 157.240.6.53/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF00636 /* 157.240.6.54/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF00735 /* 157.240.7.53/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF00736 /* 157.240.7.54/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF00835 /* 157.240.8.53/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF00836 /* 157.240.8.54/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF00935 /* 157.240.9.53/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF00936 /* 157.240.9.54/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF00A35 /* 157.240.10.53/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF00A36 /* 157.240.10.54/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF00B35 /* 157.240.11.53/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF00B36 /* 157.240.11.54/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF00C35 /* 157.240.12.53/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF00C36 /* 157.240.12.54/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF00D36 /* 157.240.13.54/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF00E34 /* 157.240.14.52/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF00F3C /* 157.240.15.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF01034 /* 157.240.16.52/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0113C /* 157.240.17.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF01234 /* 157.240.18.52/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF01335 /* 157.240.19.53/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF01336 /* 157.240.19.54/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF01434 /* 157.240.20.52/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF01534 /* 157.240.21.52/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF01635 /* 157.240.22.53/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF01636 /* 157.240.22.54/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF01735 /* 157.240.23.53/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF01736 /* 157.240.23.54/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0183C /* 157.240.24.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0193C /* 157.240.25.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF01A36 /* 157.240.26.54/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF01B36 /* 157.240.27.54/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF01C33 /* 157.240.28.51/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF01C37 /* 157.240.28.55/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF01D3C /* 157.240.29.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF01E36 /* 157.240.30.54/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF01F3C /* 157.240.31.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0C034 /* 157.240.192.52/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0C037 /* 157.240.192.55/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0C13C /* 157.240.193.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0C236 /* 157.240.194.54/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0C336 /* 157.240.195.54/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0C338 /* 157.240.195.56/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0C43C /* 157.240.196.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0C53C /* 157.240.197.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0C63C /* 157.240.198.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0C73C /* 157.240.199.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0C83C /* 157.240.200.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0C93C /* 157.240.201.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0CA3C /* 157.240.202.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0CB3C /* 157.240.203.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0CC3C /* 157.240.204.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0CD3C /* 157.240.205.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0CE3C /* 157.240.206.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0CF3C /* 157.240.207.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0D03C /* 157.240.208.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0D13C /* 157.240.209.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0D23C /* 157.240.210.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0D33C /* 157.240.211.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0D43C /* 157.240.212.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0D53C /* 157.240.213.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0D63C /* 157.240.214.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0D73C /* 157.240.215.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0D83C /* 157.240.216.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0D93C /* 157.240.217.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0DA3C /* 157.240.218.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0DB3C /* 157.240.219.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0DC3C /* 157.240.220.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0DD3C /* 157.240.221.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0DE3C /* 157.240.222.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0DF3C /* 157.240.223.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0E03C /* 157.240.224.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0E13C /* 157.240.225.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0E23C /* 157.240.226.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0E33C /* 157.240.227.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0E43C /* 157.240.228.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0E53C /* 157.240.229.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0E73C /* 157.240.231.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0E83C /* 157.240.232.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0E93C /* 157.240.233.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0EA3C /* 157.240.234.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0EB3C /* 157.240.235.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0EC3C /* 157.240.236.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0ED3C /* 157.240.237.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0EE3C /* 157.240.238.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0EF3C /* 157.240.239.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0F03C /* 157.240.240.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0F13C /* 157.240.241.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0F23C /* 157.240.242.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0F33C /* 157.240.243.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0F43C /* 157.240.244.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0F53C /* 157.240.245.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0F63C /* 157.240.246.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0F73C /* 157.240.247.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0F83C /* 157.240.248.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0F93C /* 157.240.249.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0FA3C /* 157.240.250.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0FB3C /* 157.240.251.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0FC3C /* 157.240.252.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0FD3C /* 157.240.253.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0x9DF0FE3C /* 157.240.254.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA346803C /* 163.70.128.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA346813C /* 163.70.129.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA346823C /* 163.70.130.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA346833C /* 163.70.131.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA346843C /* 163.70.132.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA346853C /* 163.70.133.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA346863C /* 163.70.134.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA346873C /* 163.70.135.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA346883C /* 163.70.136.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA346893C /* 163.70.137.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA3468A3C /* 163.70.138.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA3468B3C /* 163.70.139.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA3468C3C /* 163.70.140.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA3468D3C /* 163.70.141.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA3468E3C /* 163.70.142.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA3468F3C /* 163.70.143.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA346903C /* 163.70.144.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA346913C /* 163.70.145.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA346923C /* 163.70.146.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA346933C /* 163.70.147.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA346943C /* 163.70.148.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA346953C /* 163.70.149.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA346963C /* 163.70.150.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA346973C /* 163.70.151.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA346983C /* 163.70.152.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA346993C /* 163.70.153.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA3469A3C /* 163.70.154.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA3469B3C /* 163.70.155.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA3469C3C /* 163.70.156.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA3469D3C /* 163.70.157.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA3469E3C /* 163.70.158.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xA3469F3C /* 163.70.159.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xB33CC031 /* 179.60.192.49/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0xB33CC033 /* 179.60.192.51/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0xB33CC13C /* 179.60.193.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + { 0xB33CC235 /* 179.60.194.53/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0xB33CC236 /* 179.60.194.54/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0xB33CC331 /* 179.60.195.49/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0xB33CC333 /* 179.60.195.51/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0xB93CD835 /* 185.60.216.53/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0xB93CD836 /* 185.60.216.54/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0xB93CD935 /* 185.60.217.53/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0xB93CD936 /* 185.60.217.54/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0xB93CDA35 /* 185.60.218.53/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0xB93CDA36 /* 185.60.218.54/32 */, 32, NDPI_PROTOCOL_WHATSAPP }, + { 0xB93CDB3C /* 185.60.219.60/31 */, 31, NDPI_PROTOCOL_WHATSAPP }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_zoom_match.c b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_zoom_match.c new file mode 100644 index 0000000000..f3898811ba --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/inc_generated/ndpi_zoom_match.c @@ -0,0 +1,337 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +/* ****************************************************** */ +#include "../ndpi_typedefs.h" +#include "../ndpi_protocol_ids.h" + +static ndpi_network ndpi_protocol_zoom_protocol_list[] = { + { 0x03072300 /* 3.7.35.0/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x03158980 /* 3.21.137.128/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x03160B00 /* 3.22.11.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0x03175D00 /* 3.23.93.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0x03192980 /* 3.25.41.128/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x03192A00 /* 3.25.42.0/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x03193100 /* 3.25.49.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0x03501480 /* 3.80.20.128/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x03601300 /* 3.96.19.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0x03652080 /* 3.101.32.128/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x03653400 /* 3.101.52.0/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x03682280 /* 3.104.34.128/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x03787900 /* 3.120.121.0/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x037FC280 /* 3.127.194.128/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x03D04800 /* 3.208.72.0/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x03D3F100 /* 3.211.241.0/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x03EB4500 /* 3.235.69.0/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x03EB4780 /* 3.235.71.128/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x03EB4880 /* 3.235.72.128/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x03EB4900 /* 3.235.73.0/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x03EB5200 /* 3.235.82.0/23 */, 23, NDPI_PROTOCOL_ZOOM }, + { 0x03EB6000 /* 3.235.96.0/23 */, 23, NDPI_PROTOCOL_ZOOM }, + { 0x04227D80 /* 4.34.125.128/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x04234080 /* 4.35.64.128/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x08058000 /* 8.5.128.0/23 */, 23, NDPI_PROTOCOL_ZOOM }, + { 0x0D340680 /* 13.52.6.128/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x0D349200 /* 13.52.146.0/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x0FDC5000 /* 15.220.80.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0x0FDC5100 /* 15.220.81.0/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x129D5800 /* 18.157.88.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0x12CD5D80 /* 18.205.93.128/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x12FE1780 /* 18.254.23.128/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x12FE3D00 /* 18.254.61.0/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x14CB9E50 /* 20.203.158.80/28 */, 28, NDPI_PROTOCOL_ZOOM }, + { 0x14CBBEC0 /* 20.203.190.192/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0x32EFCA00 /* 50.239.202.0/23 */, 23, NDPI_PROTOCOL_ZOOM }, + { 0x32EFCC00 /* 50.239.204.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0x343D6480 /* 52.61.100.128/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x34549700 /* 52.84.151.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0x34CA3EC0 /* 52.202.62.192/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0x34D7A800 /* 52.215.168.0/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x407D3E00 /* 64.125.62.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0x40D39000 /* 64.211.144.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0x40E02000 /* 64.224.32.0/19 */, 19, NDPI_PROTOCOL_ZOOM }, + { 0x41279800 /* 65.39.152.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0x45AE3900 /* 69.174.57.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0x45AE6C00 /* 69.174.108.0/22 */, 22, NDPI_PROTOCOL_ZOOM }, + { 0x634F1400 /* 99.79.20.0/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x6524A700 /* 101.36.167.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0x6524AA00 /* 101.36.170.0/23 */, 23, NDPI_PROTOCOL_ZOOM }, + { 0x677AA600 /* 103.122.166.0/23 */, 23, NDPI_PROTOCOL_ZOOM }, + { 0x6F217300 /* 111.33.115.0/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x6F21B500 /* 111.33.181.0/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x736E9AC0 /* 115.110.154.192/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0x737238C0 /* 115.114.56.192/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0x73727300 /* 115.114.115.0/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0x73728300 /* 115.114.131.0/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0x781D9400 /* 120.29.148.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0x79F49200 /* 121.244.146.0/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x81970180 /* 129.151.1.128/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x819701C0 /* 129.151.1.192/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x81970200 /* 129.151.2.0/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x819703A0 /* 129.151.3.160/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x81970760 /* 129.151.7.96/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x81970B40 /* 129.151.11.64/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x81970B80 /* 129.151.11.128/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x81970C00 /* 129.151.12.0/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x81970D40 /* 129.151.13.64/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x81970FE0 /* 129.151.15.224/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x81971000 /* 129.151.16.0/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x81971FE0 /* 129.151.31.224/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x81972800 /* 129.151.40.0/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x819728A0 /* 129.151.40.160/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x819728C0 /* 129.151.40.192/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x81972900 /* 129.151.41.0/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x819729C0 /* 129.151.41.192/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0x81972A00 /* 129.151.42.0/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x81972A40 /* 129.151.42.64/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x81972A80 /* 129.151.42.128/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0x81972AE0 /* 129.151.42.224/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x81972B00 /* 129.151.43.0/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x81972B40 /* 129.151.43.64/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0x81973000 /* 129.151.48.0/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x819730A0 /* 129.151.48.160/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x81973100 /* 129.151.49.0/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0x81973160 /* 129.151.49.96/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x81973180 /* 129.151.49.128/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x819731C0 /* 129.151.49.192/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0x81973200 /* 129.151.50.0/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x81973240 /* 129.151.50.64/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x81973480 /* 129.151.52.128/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0x81973520 /* 129.151.53.32/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x819735E0 /* 129.151.53.224/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x81973720 /* 129.151.55.32/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x81973820 /* 129.151.56.32/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x81973920 /* 129.151.57.32/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x81973CC0 /* 129.151.60.192/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x819F0220 /* 129.159.2.32/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x819F02C0 /* 129.159.2.192/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x819F0300 /* 129.159.3.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0x819F0400 /* 129.159.4.0/23 */, 23, NDPI_PROTOCOL_ZOOM }, + { 0x819F0600 /* 129.159.6.0/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x819F0660 /* 129.159.6.96/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x819F0680 /* 129.159.6.128/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0x819F06C0 /* 129.159.6.192/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x819FA000 /* 129.159.160.0/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0x819FA040 /* 129.159.160.64/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x819FA300 /* 129.159.163.0/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0x819FA3A0 /* 129.159.163.160/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x819FD000 /* 129.159.208.0/21 */, 21, NDPI_PROTOCOL_ZOOM }, + { 0x819FD800 /* 129.159.216.0/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0x819FD840 /* 129.159.216.64/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x819FD880 /* 129.159.216.128/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0x823DA400 /* 130.61.164.0/22 */, 22, NDPI_PROTOCOL_ZOOM }, + { 0x84E2B000 /* 132.226.176.0/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x84E2B080 /* 132.226.176.128/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0x84E2B160 /* 132.226.177.96/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x84E2B180 /* 132.226.177.128/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x84E2B200 /* 132.226.178.0/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x84E2B280 /* 132.226.178.128/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x84E2B2E0 /* 132.226.178.224/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x84E2B300 /* 132.226.179.0/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x84E2B340 /* 132.226.179.64/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x84E2B480 /* 132.226.180.128/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x84E2B7A0 /* 132.226.183.160/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x84E2B9C0 /* 132.226.185.192/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x86E00000 /* 134.224.0.0/16 */, 16, NDPI_PROTOCOL_ZOOM }, + { 0x8CEE8000 /* 140.238.128.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0x8CEEE800 /* 140.238.232.0/22 */, 22, NDPI_PROTOCOL_ZOOM }, + { 0x90C30000 /* 144.195.0.0/16 */, 16, NDPI_PROTOCOL_ZOOM }, + { 0x937C6000 /* 147.124.96.0/19 */, 19, NDPI_PROTOCOL_ZOOM }, + { 0x95890000 /* 149.137.0.0/17 */, 17, NDPI_PROTOCOL_ZOOM }, + { 0x96E6E000 /* 150.230.224.0/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x96E6E080 /* 150.230.224.128/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0x96E6E0E0 /* 150.230.224.224/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x98431400 /* 152.67.20.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0x98437600 /* 152.67.118.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0x9843A800 /* 152.67.168.0/22 */, 22, NDPI_PROTOCOL_ZOOM }, + { 0x9843B400 /* 152.67.180.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0x9843B820 /* 152.67.184.32/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x9843F000 /* 152.67.240.0/21 */, 21, NDPI_PROTOCOL_ZOOM }, + { 0x98460000 /* 152.70.0.0/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x98460080 /* 152.70.0.128/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0x984600E0 /* 152.70.0.224/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x98460100 /* 152.70.1.0/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x98460180 /* 152.70.1.128/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0x984601C0 /* 152.70.1.192/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x98460200 /* 152.70.2.0/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0x984607C0 /* 152.70.7.192/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x98460A20 /* 152.70.10.32/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x9846E020 /* 152.70.224.32/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x9846E040 /* 152.70.224.64/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0x9846E0A0 /* 152.70.224.160/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x9846E0C0 /* 152.70.224.192/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x9846E100 /* 152.70.225.0/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x9846E1A0 /* 152.70.225.160/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x9846E1C0 /* 152.70.225.192/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x9846E200 /* 152.70.226.0/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x9846E360 /* 152.70.227.96/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x9846E3C0 /* 152.70.227.192/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x9846E400 /* 152.70.228.0/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x9846E440 /* 152.70.228.64/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x9846E480 /* 152.70.228.128/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x9C2D0000 /* 156.45.0.0/17 */, 17, NDPI_PROTOCOL_ZOOM }, + { 0x9E654000 /* 158.101.64.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0x9E65B800 /* 158.101.184.0/23 */, 23, NDPI_PROTOCOL_ZOOM }, + { 0x9E65BA00 /* 158.101.186.0/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x9E65BA80 /* 158.101.186.128/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x9E65BAC0 /* 158.101.186.192/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0x9E65BB00 /* 158.101.187.0/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0x9E65BBA0 /* 158.101.187.160/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0x9E65BBC0 /* 158.101.187.192/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0x9F7C0000 /* 159.124.0.0/16 */, 16, NDPI_PROTOCOL_ZOOM }, + { 0xA0013880 /* 160.1.56.128/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0xA1C78800 /* 161.199.136.0/22 */, 22, NDPI_PROTOCOL_ZOOM }, + { 0xA20CE800 /* 162.12.232.0/22 */, 22, NDPI_PROTOCOL_ZOOM }, + { 0xA2FF2400 /* 162.255.36.0/22 */, 22, NDPI_PROTOCOL_ZOOM }, + { 0xA5FE5800 /* 165.254.88.0/23 */, 23, NDPI_PROTOCOL_ZOOM }, + { 0xA66C4000 /* 166.108.64.0/18 */, 18, NDPI_PROTOCOL_ZOOM }, + { 0xA88A1000 /* 168.138.16.0/22 */, 22, NDPI_PROTOCOL_ZOOM }, + { 0xA88A3000 /* 168.138.48.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0xA88A3800 /* 168.138.56.0/21 */, 21, NDPI_PROTOCOL_ZOOM }, + { 0xA88A4800 /* 168.138.72.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0xA88A4A00 /* 168.138.74.0/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0xA88A5000 /* 168.138.80.0/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0xA88A5080 /* 168.138.80.128/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0xA88A50E0 /* 168.138.80.224/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xA88A5100 /* 168.138.81.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0xA88A5200 /* 168.138.82.0/23 */, 23, NDPI_PROTOCOL_ZOOM }, + { 0xA88A5400 /* 168.138.84.0/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0xA88A5480 /* 168.138.84.128/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xA88A54C0 /* 168.138.84.192/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0xA88A5500 /* 168.138.85.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0xA88A5600 /* 168.138.86.0/23 */, 23, NDPI_PROTOCOL_ZOOM }, + { 0xA88A6000 /* 168.138.96.0/22 */, 22, NDPI_PROTOCOL_ZOOM }, + { 0xA88A7400 /* 168.138.116.0/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xA88A7440 /* 168.138.116.64/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xA88A7480 /* 168.138.116.128/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xA88A74E0 /* 168.138.116.224/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xA88A7500 /* 168.138.117.0/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xA88A7560 /* 168.138.117.96/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xA88A7580 /* 168.138.117.128/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xA88A7600 /* 168.138.118.0/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xA88A76A0 /* 168.138.118.160/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xA88A76E0 /* 168.138.118.224/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xA88A7700 /* 168.138.119.0/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xA88A7780 /* 168.138.119.128/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xA88AF400 /* 168.138.244.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0xAA720000 /* 170.114.0.0/16 */, 16, NDPI_PROTOCOL_ZOOM }, + { 0xADE75000 /* 173.231.80.0/20 */, 20, NDPI_PROTOCOL_ZOOM }, + { 0xC0CC0C00 /* 192.204.12.0/22 */, 22, NDPI_PROTOCOL_ZOOM }, + { 0xC17A1000 /* 193.122.16.0/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0xC17A10C0 /* 193.122.16.192/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17A1100 /* 193.122.17.0/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0xC17A1140 /* 193.122.17.64/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17A11E0 /* 193.122.17.224/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17A1220 /* 193.122.18.32/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17A1240 /* 193.122.18.64/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0xC17A12A0 /* 193.122.18.160/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17A12C0 /* 193.122.18.192/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17A1300 /* 193.122.19.0/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17A13A0 /* 193.122.19.160/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17A13C0 /* 193.122.19.192/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17A14E0 /* 193.122.20.224/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17A1560 /* 193.122.21.96/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17A2000 /* 193.122.32.0/21 */, 21, NDPI_PROTOCOL_ZOOM }, + { 0xC17A2800 /* 193.122.40.0/22 */, 22, NDPI_PROTOCOL_ZOOM }, + { 0xC17A2C00 /* 193.122.44.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0xC17A2D20 /* 193.122.45.32/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17A2D40 /* 193.122.45.64/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0xC17A2D80 /* 193.122.45.128/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0xC17A2E00 /* 193.122.46.0/23 */, 23, NDPI_PROTOCOL_ZOOM }, + { 0xC17AD060 /* 193.122.208.96/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17AD820 /* 193.122.216.32/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17ADE00 /* 193.122.222.0/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17ADF80 /* 193.122.223.128/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17AE2A0 /* 193.122.226.160/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17AE7C0 /* 193.122.231.192/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17AE8A0 /* 193.122.232.160/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17AED40 /* 193.122.237.64/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17AF4A0 /* 193.122.244.160/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17AF4E0 /* 193.122.244.224/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17AF500 /* 193.122.245.0/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17AF760 /* 193.122.247.96/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17AFCC0 /* 193.122.252.192/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17B0000 /* 193.123.0.0/19 */, 19, NDPI_PROTOCOL_ZOOM }, + { 0xC17B2800 /* 193.123.40.0/21 */, 21, NDPI_PROTOCOL_ZOOM }, + { 0xC17B8000 /* 193.123.128.0/19 */, 19, NDPI_PROTOCOL_ZOOM }, + { 0xC17BA800 /* 193.123.168.0/21 */, 21, NDPI_PROTOCOL_ZOOM }, + { 0xC17BC0E0 /* 193.123.192.224/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BC100 /* 193.123.193.0/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BC160 /* 193.123.193.96/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BC260 /* 193.123.194.96/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BC280 /* 193.123.194.128/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BC2E0 /* 193.123.194.224/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BC300 /* 193.123.195.0/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BC400 /* 193.123.196.0/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BC4C0 /* 193.123.196.192/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BC500 /* 193.123.197.0/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BC540 /* 193.123.197.64/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BC640 /* 193.123.198.64/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BC6A0 /* 193.123.198.160/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BC740 /* 193.123.199.64/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BC880 /* 193.123.200.128/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BC920 /* 193.123.201.32/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BC9E0 /* 193.123.201.224/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BCA40 /* 193.123.202.64/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BCA80 /* 193.123.202.128/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0xC17BCB00 /* 193.123.203.0/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BCBA0 /* 193.123.203.160/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BCBC0 /* 193.123.203.192/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BCC00 /* 193.123.204.0/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BCC40 /* 193.123.204.64/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BCD40 /* 193.123.205.64/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0xC17BCD80 /* 193.123.205.128/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BCE20 /* 193.123.206.32/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BCE80 /* 193.123.206.128/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BCF20 /* 193.123.207.32/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BD0A0 /* 193.123.208.160/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BD100 /* 193.123.209.0/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BD160 /* 193.123.209.96/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BD240 /* 193.123.210.64/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BD3E0 /* 193.123.211.224/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BD480 /* 193.123.212.128/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BD7C0 /* 193.123.215.192/26 */, 26, NDPI_PROTOCOL_ZOOM }, + { 0xC17BD840 /* 193.123.216.64/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BD880 /* 193.123.216.128/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BD9A0 /* 193.123.217.160/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BDB40 /* 193.123.219.64/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BDCE0 /* 193.123.220.224/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BDE40 /* 193.123.222.64/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC17BDEE0 /* 193.123.222.224/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xC6FB8000 /* 198.251.128.0/17 */, 17, NDPI_PROTOCOL_ZOOM }, + { 0xCAB1CF80 /* 202.177.207.128/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xCBC8DB80 /* 203.200.219.128/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xCC506800 /* 204.80.104.0/21 */, 21, NDPI_PROTOCOL_ZOOM }, + { 0xCC8D1C00 /* 204.141.28.0/22 */, 22, NDPI_PROTOCOL_ZOOM }, + { 0xCEF70000 /* 206.247.0.0/16 */, 16, NDPI_PROTOCOL_ZOOM }, + { 0xCFE28400 /* 207.226.132.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0xD109D300 /* 209.9.211.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0xD109D700 /* 209.9.215.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0xD5139000 /* 213.19.144.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0xD5139900 /* 213.19.153.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0xD5F48C00 /* 213.244.140.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0xDD7A3F00 /* 221.122.63.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0xDD7A4000 /* 221.122.64.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, + { 0xDD7A5840 /* 221.122.88.64/27 */, 27, NDPI_PROTOCOL_ZOOM }, + { 0xDD7A5880 /* 221.122.88.128/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0xDD7A5980 /* 221.122.89.128/25 */, 25, NDPI_PROTOCOL_ZOOM }, + { 0xDD7B8BC0 /* 221.123.139.192/27 */, 27, NDPI_PROTOCOL_ZOOM }, + /* End */ + { 0x0, 0, 0 } +}; diff --git a/src/components/implementation/simple_nf/ndpi/ipp.c b/src/components/implementation/simple_nf/ndpi/ipp.c new file mode 100644 index 0000000000..5ff17c7568 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/ipp.c @@ -0,0 +1,68 @@ +/* + * ipp.c + * + * Copyright (C) 2009-11 - ipoque GmbH + * Copyright (C) 2011-22 - ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_IPP + +#include "ndpi_api.h" + + +static void ndpi_int_ipp_add_connection(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_IPP, NDPI_PROTOCOL_HTTP, NDPI_CONFIDENCE_DPI); +} + +static void ndpi_search_ipp(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search ipp\n"); + + /* Treat IPP as a HTTP sub-protocol */ + + if(flow->detected_protocol_stack[0] == NDPI_PROTOCOL_HTTP && + flow->http.method == NDPI_HTTP_METHOD_POST && + LINE_STARTS(packet->http_url_name, "/ipp/") == 1) { + NDPI_LOG_INFO(ndpi_struct, "found ipp\n"); + ndpi_int_ipp_add_connection(ndpi_struct, flow); + return; + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + + +void init_ipp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("IPP", ndpi_struct, *id, + NDPI_PROTOCOL_IPP, + ndpi_search_ipp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/ipsec.c b/src/components/implementation/simple_nf/ndpi/ipsec.c new file mode 100644 index 0000000000..1e49d6ef4d --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/ipsec.c @@ -0,0 +1,198 @@ +/* + * ipsec.c + * + * Copyright (C) 2022-23 - ntop.org + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_IPSEC + +#include "ndpi_api.h" + +enum isakmp_type { + ISAKMP_INVALID = 0, + ISAKMP_MALFORMED, + ISAKMP_V1, + ISAKMP_V2, +}; + +static void ndpi_int_ipsec_add_connection(struct ndpi_detection_module_struct * const ndpi_struct, + struct ndpi_flow_struct * const flow, + enum isakmp_type isakmp_type) +{ + switch (isakmp_type) + { + case ISAKMP_INVALID: + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + case ISAKMP_MALFORMED: + NDPI_LOG_INFO(ndpi_struct, "found malformed ISAKMP (UDP)\n"); + ndpi_set_risk(ndpi_struct, flow, NDPI_MALFORMED_PACKET, "Invalid IPSec/ISAKMP Header"); + break; + case ISAKMP_V1: + NDPI_LOG_INFO(ndpi_struct, "found ISAKMPv1 (UDP)\n"); + break; + case ISAKMP_V2: + NDPI_LOG_INFO(ndpi_struct, "found ISAKMPv2 (UDP)\n"); + break; + } + + ndpi_set_detected_protocol(ndpi_struct, flow, + NDPI_PROTOCOL_IPSEC, + NDPI_PROTOCOL_UNKNOWN, + NDPI_CONFIDENCE_DPI); +} + +static enum isakmp_type ndpi_int_check_ports(struct ndpi_packet_struct const * const packet) +{ + u_int16_t sport = ntohs(packet->udp->source); + u_int16_t dport = ntohs(packet->udp->dest); + + /* + * If packet matches default IPSec/ISAKMP ports, it is most likely malformed, + * not IPSec/ISAKMP otherwise. + */ + if (sport == 500 || dport == 500 || + sport == 4500 || dport == 4500) + { + return ISAKMP_MALFORMED; + } + + return ISAKMP_INVALID; +} + +static enum isakmp_type ndpi_int_check_isakmp_v1(struct ndpi_packet_struct const * const packet, + u_int16_t isakmp_offset, enum isakmp_type isakmp_type) +{ + /* Next payload type */ + if (packet->payload[isakmp_offset + 16] >= 14 && packet->payload[isakmp_offset + 16] <= 127) + { + return ndpi_int_check_ports(packet); + } + + /* Exchange Type */ + if (packet->payload[isakmp_offset + 18] >= 6 && packet->payload[isakmp_offset + 18] < 31) + { + return ndpi_int_check_ports(packet); + } + + /* Flags */ + if (packet->payload[isakmp_offset + 19] >= 8) + { + return ndpi_int_check_ports(packet); + } + + return isakmp_type; +} + +static enum isakmp_type ndpi_int_check_isakmp_v2(struct ndpi_packet_struct const * const packet, + u_int16_t isakmp_offset, enum isakmp_type isakmp_type) +{ + /* Next payload type */ + if ((packet->payload[isakmp_offset + 16] > 0 && packet->payload[isakmp_offset + 16] <= 32) || + (packet->payload[isakmp_offset + 16] >= 49 && packet->payload[isakmp_offset + 16] <= 127)) + { + return ndpi_int_check_ports(packet); + } + + /* Exchange Type */ + if ((packet->payload[isakmp_offset + 18] <= 33) || + (packet->payload[isakmp_offset + 18] >= 38 && packet->payload[isakmp_offset + 18] <= 239)) + { + return ndpi_int_check_ports(packet); + } + + /* Flags */ + if ((packet->payload[isakmp_offset + 19] & 0xC7) != 0) + { + return ndpi_int_check_ports(packet); + } + + return isakmp_type; +} + +static void ndpi_search_ipsec(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct * const packet = &ndpi_struct->packet; + u_int16_t isakmp_offset = 0; + enum isakmp_type isakmp_type = ISAKMP_INVALID; + + NDPI_LOG_DBG(ndpi_struct, "search IPSEC (UDP)\n"); + + if (packet->payload_packet_len < 28) + { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + /* check for non-ESP marker required for ISAKMP over UDP */ + if (get_u_int32_t(packet->payload, 0) == 0x00000000) + { + isakmp_offset = 4; + if (packet->payload_packet_len < 32) + { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + } + + if (packet->payload[isakmp_offset + 17] != 0x20 /* Major Version 2 */) + { + if (packet->payload[isakmp_offset + 17] != 0x10 /* Major Version 1 */) + { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } else { + /* Version 1 is obsolete, but still used by some embedded devices. */ + isakmp_type = ISAKMP_V1; + } + } else { + isakmp_type = ISAKMP_V2; + } + + if (ntohl(get_u_int32_t(packet->payload, isakmp_offset + 24)) != (u_int32_t)packet->payload_packet_len - isakmp_offset) + { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + if (isakmp_type == ISAKMP_V1) + { + isakmp_type = ndpi_int_check_isakmp_v1(packet, isakmp_offset, isakmp_type); + } else { + isakmp_type = ndpi_int_check_isakmp_v2(packet, isakmp_offset, isakmp_type); + } + + ndpi_int_ipsec_add_connection(ndpi_struct, flow, isakmp_type); +} + +void init_ipsec_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("IPSec", ndpi_struct, *id, + NDPI_PROTOCOL_IPSEC, + ndpi_search_ipsec, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK + ); + + *id += 1; +} + diff --git a/src/components/implementation/simple_nf/ndpi/irc.c b/src/components/implementation/simple_nf/ndpi/irc.c new file mode 100644 index 0000000000..db73553e28 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/irc.c @@ -0,0 +1,630 @@ +/* + * irc.c + * + * Copyright (C) 2009-11 - ipoque GmbH + * Copyright (C) 2011-22 - ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_IRC + +#include "ndpi_api.h" + +static void ndpi_int_irc_add_connection(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow, ndpi_confidence_t confidence) +{ + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_IRC, NDPI_PROTOCOL_UNKNOWN, confidence); +} + +static u_int8_t ndpi_check_for_NOTICE_or_PRIVMSG(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + // + u_int16_t i; + u_int8_t number_of_lines_to_be_searched_for = 0; + for (i = 0; i < packet->payload_packet_len - 7; i++) { + if (packet->payload[i] == 'N' || packet->payload[i] == 'P') { + if (memcmp(&packet->payload[i + 1], "OTICE ", 6) == 0 || memcmp(&packet->payload[i + 1], "RIVMSG ", 7) == 0) { + NDPI_LOG_DBG2(ndpi_struct, "found NOTICE or PRIVMSG\n"); + return 1; + } + } + if (packet->payload[i] == 0x0a) { + number_of_lines_to_be_searched_for++; + if (number_of_lines_to_be_searched_for == 2) { + return 0; + } + } + } + return 0; + +} + +static u_int8_t ndpi_check_for_Nickname(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + u_int16_t i, packetl = packet->payload_packet_len; + + if (packetl < 4) { + return 0; + } + + for (i = 0; i < (packetl - 4); i++) { + if (packet->payload[i] == 'N' || packet->payload[i] == 'n') { + if ((((packetl - (i + 1)) >= 4) && memcmp(&packet->payload[i + 1], "ick=", 4) == 0) + || (((packetl - (i + 1)) >= 8) && (memcmp(&packet->payload[i + 1], "ickname=", 8) == 0)) + || (((packetl - (i + 1)) >= 8) && (memcmp(&packet->payload[i + 1], "ickName=", 8) == 0))) { + NDPI_LOG_DBG2(ndpi_struct, "found HTTP IRC Nickname pattern\n"); + return 1; + } + } + } + return 0; +} + +static u_int8_t ndpi_check_for_cmd(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + u_int16_t i; + + if (packet->payload_packet_len < 4) { + return 0; + } + + for (i = 0; i < packet->payload_packet_len - 4; i++) { + if (packet->payload[i] == 'c') { + if (memcmp(&packet->payload[i + 1], "md=", 3) == 0) { + NDPI_LOG_DBG2(ndpi_struct, "found HTTP IRC cmd pattern \n"); + return 1; + } + } + } + return 0; +} + +static u_int8_t ndpi_check_for_IRC_traces(const u_int8_t * ptr, u_int16_t len) +{ + u_int16_t i; + + if (len < 4) { + return 0; + } + + for (i = 0; i < len - 4; i++) { + if (ptr[i] == 'i') { + if (memcmp(&ptr[i + 1], "rc.", 3) == 0) { + return 1; + } + } + } + return 0; +} + + +static u_int8_t ndpi_search_irc_ssl_detect_ninety_percent_but_very_fast(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + + NDPI_LOG_DBG(ndpi_struct, "start fast detect\n"); + + /* case 1: len 1460, len 1460, len 1176 several times in one direction, than len = 4, 4096, 8192 in the other direction */ + if (packet->payload_packet_len == 1460 + && ((flow->l4.tcp.irc_stage2 == 0 && flow->l4.tcp.irc_direction == 0) || (flow->l4.tcp.irc_stage2 == 3 + && flow->l4.tcp.irc_direction == + 1 + packet->packet_direction))) { + flow->l4.tcp.irc_stage2 = 1; + flow->l4.tcp.irc_direction = 1 + packet->packet_direction; + return 1; + } + if (packet->payload_packet_len == 1460 && flow->l4.tcp.irc_stage2 == 1 + && flow->l4.tcp.irc_direction == 1 + packet->packet_direction) { + flow->l4.tcp.irc_stage2 = 2; + return 1; + } + if (packet->payload_packet_len == 1176 && flow->l4.tcp.irc_stage2 == 2 + && flow->l4.tcp.irc_direction == 1 + packet->packet_direction) { + flow->l4.tcp.irc_stage2 = 3; + flow->l4.tcp.irc_0x1000_full = 1; + return 1; + } + if (packet->payload_packet_len == 4 && (flow->l4.tcp.irc_stage2 == 3 || flow->l4.tcp.irc_0x1000_full == 1) + && flow->l4.tcp.irc_direction == 2 - packet->packet_direction && (ntohs(get_u_int16_t(packet->payload, 2)) == 0x1000 + || ntohs(get_u_int16_t(packet->payload, 2)) == + 0x2000)) { + NDPI_LOG_INFO(ndpi_struct, "found IRC SSL: ->1460,1460,1176,<-4096||8192"); + ndpi_int_irc_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return 1; + } + /* case 2: len 1448, len 1448, len 1200 several times in one direction, than len = 4, 4096, 8192 in the other direction */ + if (packet->payload_packet_len == 1448 + && ((flow->l4.tcp.irc_stage2 == 0 && flow->l4.tcp.irc_direction == 0) || (flow->l4.tcp.irc_stage2 == 6 + && flow->l4.tcp.irc_direction == + 1 + packet->packet_direction))) { + flow->l4.tcp.irc_stage2 = 4; + flow->l4.tcp.irc_direction = 1 + packet->packet_direction; + NDPI_LOG_DBG2(ndpi_struct, "len = 1448 first\n"); + return 1; + } + if (packet->payload_packet_len == 1448 && flow->l4.tcp.irc_stage2 == 4 + && flow->l4.tcp.irc_direction == 1 + packet->packet_direction) { + flow->l4.tcp.irc_stage2 = 5; + NDPI_LOG_DBG2(ndpi_struct, "len = 1448 second \n"); + return 1; + } + if (packet->payload_packet_len == 1200 && flow->l4.tcp.irc_stage2 == 5 + && flow->l4.tcp.irc_direction == 1 + packet->packet_direction) { + flow->l4.tcp.irc_stage2 = 6; + flow->l4.tcp.irc_0x1000_full = 1; + NDPI_LOG_DBG2(ndpi_struct, "len = 1200 \n"); + return 1; + } + if (packet->payload_packet_len == 4 && (flow->l4.tcp.irc_stage2 == 6 || flow->l4.tcp.irc_0x1000_full == 1) + && flow->l4.tcp.irc_direction == 2 - packet->packet_direction && (ntohs(get_u_int16_t(packet->payload, 2)) == 0x1000 + || ntohs(get_u_int16_t(packet->payload, 2)) == + 0x2000)) { + NDPI_LOG_INFO(ndpi_struct, "found IRC SSL: ->1448,1448,1200,<-4096||8192"); + ndpi_int_irc_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return 1; + } + /* case 3: several packets with len 1380, 1200, 1024, 1448, 1248, + * than one packet in the other direction with the len or two times the len. */ + if (packet->payload_packet_len == 1380 && ((flow->l4.tcp.irc_stage2 == 0 && flow->l4.tcp.irc_direction == 0) + || (flow->l4.tcp.irc_stage2 == 7 + && flow->l4.tcp.irc_direction == 1 + packet->packet_direction))) { + flow->l4.tcp.irc_stage2 = 7; + flow->l4.tcp.irc_direction = 1 + packet->packet_direction; + return 1; + } + if (packet->payload_packet_len == 4 && flow->l4.tcp.irc_stage2 == 7 + && flow->l4.tcp.irc_direction == 2 - packet->packet_direction && (ntohs(get_u_int16_t(packet->payload, 2)) == 1380 + || ntohs(get_u_int16_t(packet->payload, 2)) == + 2760)) { + NDPI_LOG_INFO(ndpi_struct, "found IRC SSL: ->1380,<-1380||2760"); + ndpi_int_irc_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return 1; + } + if (packet->payload_packet_len == 1200 && ((flow->l4.tcp.irc_stage2 == 0 && flow->l4.tcp.irc_direction == 0) + || (flow->l4.tcp.irc_stage2 == 8 + && flow->l4.tcp.irc_direction == 1 + packet->packet_direction))) { + flow->l4.tcp.irc_stage2 = 8; + flow->l4.tcp.irc_direction = 1 + packet->packet_direction; + return 1; + } + if (packet->payload_packet_len == 4 && flow->l4.tcp.irc_stage2 == 8 + && flow->l4.tcp.irc_direction == 2 - packet->packet_direction && (ntohs(get_u_int16_t(packet->payload, 2)) == 1200 + || ntohs(get_u_int16_t(packet->payload, 2)) == + 2400)) { + NDPI_LOG_INFO(ndpi_struct, "found IRC SSL: ->1200,<-1200||2400"); + ndpi_int_irc_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return 1; + } + if (packet->payload_packet_len == 1024 && ((flow->l4.tcp.irc_stage2 == 0 && flow->l4.tcp.irc_direction == 0) + || (flow->l4.tcp.irc_stage2 == 9 + && flow->l4.tcp.irc_direction == 1 + packet->packet_direction))) { + flow->l4.tcp.irc_stage2 = 9; + flow->l4.tcp.irc_direction = 1 + packet->packet_direction; + return 1; + } + if (packet->payload_packet_len == 4 && (flow->l4.tcp.irc_stage2 == 9 || flow->l4.tcp.irc_stage2 == 15) + && flow->l4.tcp.irc_direction == 2 - packet->packet_direction && (ntohs(get_u_int16_t(packet->payload, 2)) == 1024 + || ntohs(get_u_int16_t(packet->payload, 2)) == + 2048)) { + NDPI_LOG_INFO(ndpi_struct, "found IRC SSL: ->1024,<-1024||2048"); + ndpi_int_irc_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return 1; + } + if (packet->payload_packet_len == 1248 && ((flow->l4.tcp.irc_stage2 == 0 && flow->l4.tcp.irc_direction == 0) + || (flow->l4.tcp.irc_stage2 == 10 + && flow->l4.tcp.irc_direction == 1 + packet->packet_direction))) { + flow->l4.tcp.irc_stage2 = 10; + flow->l4.tcp.irc_direction = 1 + packet->packet_direction; + return 1; + } + if (packet->payload_packet_len == 4 && flow->l4.tcp.irc_stage2 == 10 + && flow->l4.tcp.irc_direction == 2 - packet->packet_direction && (ntohs(get_u_int16_t(packet->payload, 2)) == 1248 + || ntohs(get_u_int16_t(packet->payload, 2)) == + 2496)) { + NDPI_LOG_INFO(ndpi_struct, "found IRC SSL: ->1248,<-1248||2496"); + ndpi_int_irc_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return 1; + } + if (packet->payload_packet_len == 1448 + && (flow->l4.tcp.irc_stage2 == 5 && flow->l4.tcp.irc_direction == 1 + packet->packet_direction)) { + flow->l4.tcp.irc_stage2 = 11; + return 1; + } + if (packet->payload_packet_len == 4 + && (flow->l4.tcp.irc_stage2 == 4 || flow->l4.tcp.irc_stage2 == 5 || flow->l4.tcp.irc_stage2 == 11 + || flow->l4.tcp.irc_stage2 == 13) + && flow->l4.tcp.irc_direction == 2 - packet->packet_direction && (ntohs(get_u_int16_t(packet->payload, 2)) == 1448 + || ntohs(get_u_int16_t(packet->payload, 2)) == + 2896)) { + NDPI_LOG_INFO(ndpi_struct, "found IRC SSL: ->1448,<-1448||2896"); + ndpi_int_irc_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return 1; + } + /* case 4 : five packets with len = 1448, one with len 952, than one packet from other direction len = 8192 */ + if (packet->payload_packet_len == 1448 + && (flow->l4.tcp.irc_stage2 == 11 && flow->l4.tcp.irc_direction == 1 + packet->packet_direction)) { + flow->l4.tcp.irc_stage2 = 12; + return 1; + } + if (packet->payload_packet_len == 1448 + && (flow->l4.tcp.irc_stage2 == 12 && flow->l4.tcp.irc_direction == 1 + packet->packet_direction)) { + flow->l4.tcp.irc_stage2 = 13; + return 1; + } + if (packet->payload_packet_len == 952 + && (flow->l4.tcp.irc_stage2 == 13 && flow->l4.tcp.irc_direction == 1 + packet->packet_direction)) { + flow->l4.tcp.irc_stage2 = 14; + return 1; + } + if (packet->payload_packet_len == 4 + && flow->l4.tcp.irc_stage2 == 14 + && flow->l4.tcp.irc_direction == 2 - packet->packet_direction && ntohs(get_u_int16_t(packet->payload, 2)) == 8192) { + NDPI_LOG_INFO(ndpi_struct, "found IRC SSL: ->1448,1448,1448,1448,1448,952,<-8192"); + ndpi_int_irc_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return 1; + } + /* case 5: len 1024, len 1448, len 1448, len 1200, len 1448, len 600 */ + if (packet->payload_packet_len == 1448 + && (flow->l4.tcp.irc_stage2 == 9 && flow->l4.tcp.irc_direction == 1 + packet->packet_direction)) { + flow->l4.tcp.irc_stage2 = 15; + return 1; + } + if (packet->payload_packet_len == 1448 + && (flow->l4.tcp.irc_stage2 == 15 && flow->l4.tcp.irc_direction == 1 + packet->packet_direction)) { + flow->l4.tcp.irc_stage2 = 16; + return 1; + } + if (packet->payload_packet_len == 1200 + && (flow->l4.tcp.irc_stage2 == 16 && flow->l4.tcp.irc_direction == 1 + packet->packet_direction)) { + flow->l4.tcp.irc_stage2 = 17; + return 1; + } + if (packet->payload_packet_len == 1448 + && (flow->l4.tcp.irc_stage2 == 17 && flow->l4.tcp.irc_direction == 1 + packet->packet_direction)) { + flow->l4.tcp.irc_stage2 = 18; + return 1; + } + if (packet->payload_packet_len == 600 + && (flow->l4.tcp.irc_stage2 == 18 && flow->l4.tcp.irc_direction == 1 + packet->packet_direction)) { + flow->l4.tcp.irc_stage2 = 19; + return 1; + } + if (packet->payload_packet_len == 4 + && flow->l4.tcp.irc_stage2 == 19 + && flow->l4.tcp.irc_direction == 2 - packet->packet_direction && ntohs(get_u_int16_t(packet->payload, 2)) == 7168) { + NDPI_LOG_INFO(ndpi_struct, "found IRC SSL: ->1024,1448,1448,1200,1448,600,<-7168"); + ndpi_int_irc_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return 1; + } + /* -> 1024, 1380, -> 2404 */ + if (packet->payload_packet_len == 1380 + && (flow->l4.tcp.irc_stage2 == 9 && flow->l4.tcp.irc_direction == 1 + packet->packet_direction)) { + flow->l4.tcp.irc_stage2 = 20; + return 1; + } + if (packet->payload_packet_len == 4 + && flow->l4.tcp.irc_stage2 == 20 + && flow->l4.tcp.irc_direction == 2 - packet->packet_direction && ntohs(get_u_int16_t(packet->payload, 2)) == 2404) { + NDPI_LOG_INFO(ndpi_struct, "found IRC SSL: ->1024,1380 <-2404"); + ndpi_int_irc_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return 1; + + } + return 0; +} + + +static void ndpi_search_irc_tcp(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + u_int16_t c = 0; + u_int16_t i = 0; + u_int16_t j = 0; + u_int16_t h; + u_int16_t http_content_ptr_len = 0; + u_int8_t space = 0; + + NDPI_LOG_DBG(ndpi_struct, "search irc\n"); + if (flow->detected_protocol_stack[0] != NDPI_PROTOCOL_IRC && (flow->packet_counter > 10)) { + NDPI_LOG_DBG(ndpi_struct, "exclude irc, packet_counter > 70\n"); + NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_IRC); + return; + } + + if (flow->detected_protocol_stack[0] != NDPI_PROTOCOL_IRC && + ndpi_search_irc_ssl_detect_ninety_percent_but_very_fast(ndpi_struct, flow) != 0) { + return; + } + + if (flow->detected_protocol_stack[0] != NDPI_PROTOCOL_IRC && flow->packet_counter < 20 + && packet->payload_packet_len >= 8) { + if (get_u_int8_t(packet->payload, packet->payload_packet_len - 1) == 0x0a + || (ntohs(get_u_int16_t(packet->payload, packet->payload_packet_len - 2)) == 0x0a00)) { + if (memcmp(packet->payload, ":", 1) == 0) { + if (packet->payload[packet->payload_packet_len - 2] != 0x0d + && packet->payload[packet->payload_packet_len - 1] == 0x0a) { + ndpi_parse_packet_line_info_any(ndpi_struct, flow); + } else if (packet->payload[packet->payload_packet_len - 2] == 0x0d) { + ndpi_parse_packet_line_info(ndpi_struct, flow); + } else { + flow->l4.tcp.irc_3a_counter++; + packet->parsed_lines = 0; + } + for (i = 0; i < packet->parsed_lines; i++) { + if ((packet->line[i].len > 0) && packet->line[i].ptr[0] == ':') { + flow->l4.tcp.irc_3a_counter++; + if (flow->l4.tcp.irc_3a_counter == 7) { /* ':' == 0x3a */ + NDPI_LOG_INFO(ndpi_struct, "found irc. 0x3a. seven times."); + ndpi_int_irc_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + goto detected_irc; + } + } + } + if (flow->l4.tcp.irc_3a_counter == 7) { /* ':' == 0x3a */ + NDPI_LOG_INFO(ndpi_struct, "found irc. 0x3a. seven times."); + ndpi_int_irc_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + goto detected_irc; + } + } + + if ((memcmp(packet->payload, "USER ", 5) == 0) + || (memcmp(packet->payload, "NICK ", 5) == 0) + || (memcmp(packet->payload, "PASS ", 5) == 0) + || (memcmp(packet->payload, ":", 1) == 0 && ndpi_check_for_NOTICE_or_PRIVMSG(ndpi_struct, flow) != 0) + || (memcmp(packet->payload, "PONG ", 5) == 0) + || (memcmp(packet->payload, "PING ", 5) == 0) + || (memcmp(packet->payload, "JOIN ", 5) == 0) + || (memcmp(packet->payload, "MODE ", 5) == 0) + || (memcmp(packet->payload, "NOTICE ", 7) == 0) + || (memcmp(packet->payload, "PRIVMSG ", 8) == 0) + || (memcmp(packet->payload, "VERSION ", 8) == 0)) { + char *user = ndpi_strnstr((char*)packet->payload, "USER ", packet->payload_packet_len); + + if(user) { + char buf[32], msg[64], *sp; + + snprintf(buf, sizeof(buf), "%.*s", (int)(packet->payload_packet_len - (user + 5 - (char *)packet->payload)), user + 5); + if((sp = strchr(buf, ' ')) != NULL) + sp[0] = '\0'; + + snprintf(msg, sizeof(msg), "Found IRC username (%s)", buf); + ndpi_set_risk(ndpi_struct, flow, NDPI_CLEAR_TEXT_CREDENTIALS, msg); + } + + NDPI_LOG_DBG2(ndpi_struct, + "USER, NICK, PASS, NOTICE, PRIVMSG one time"); + if (flow->l4.tcp.irc_stage == 2) { + NDPI_LOG_INFO(ndpi_struct, "found irc"); + ndpi_int_irc_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + flow->l4.tcp.irc_stage = 3; + } + if (flow->l4.tcp.irc_stage == 1) { + NDPI_LOG_DBG2(ndpi_struct, "second time, stage=2"); + flow->l4.tcp.irc_stage = 2; + } + if (flow->l4.tcp.irc_stage == 0) { + NDPI_LOG_DBG2(ndpi_struct, "first time, stage=1"); + flow->l4.tcp.irc_stage = 1; + } + /* irc packets can have either windows line breaks (0d0a) or unix line breaks (0a) */ + if (packet->payload[packet->payload_packet_len - 2] == 0x0d + && packet->payload[packet->payload_packet_len - 1] == 0x0a) { + ndpi_parse_packet_line_info(ndpi_struct, flow); + if (packet->parsed_lines > 1) { + NDPI_LOG_DBG2(ndpi_struct, "packet contains more than one line"); + for (c = 1; c < packet->parsed_lines; c++) { + if (packet->line[c].len > 4 && (memcmp(packet->line[c].ptr, "NICK ", 5) == 0 + || memcmp(packet->line[c].ptr, "USER ", 5) == 0)) { + NDPI_LOG_INFO(ndpi_struct, "found IRC: two icq signal words in the same packet"); + ndpi_int_irc_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + flow->l4.tcp.irc_stage = 3; + return; + } + } + } + + } else if (packet->payload[packet->payload_packet_len - 1] == 0x0a) { + ndpi_parse_packet_line_info_any(ndpi_struct, flow); + if (packet->parsed_lines > 1) { + NDPI_LOG_DBG2(ndpi_struct, "packet contains more than one line"); + for (c = 1; c < packet->parsed_lines; c++) { + if (packet->line[c].len > 4 && (memcmp(packet->line[c].ptr, "NICK ", 5) == 0 + || memcmp(packet->line[c].ptr, "USER ", + 5) == 0)) { + NDPI_LOG_INFO(ndpi_struct, "found IRC: two icq signal words in the same packet"); + ndpi_int_irc_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + flow->l4.tcp.irc_stage = 3; + return; + } + } + } + } + } + } + } + + /** + * Trying to primarily detect the HTTP Web based IRC chat patterns based on the HTTP headers + * during the User login time.When the HTTP data gets posted using the POST method ,patterns + * will be searched in the HTTP content. + */ + if ((flow->detected_protocol_stack[0] != NDPI_PROTOCOL_IRC) && (flow->l4.tcp.irc_stage == 0) + && (packet->payload_packet_len > 5)) { + //HTTP POST Method being employed + if (memcmp(packet->payload, "POST ", 5) == 0) { + ndpi_parse_packet_line_info(ndpi_struct, flow); + if (packet->parsed_lines) { + u_int16_t http_header_len = (u_int16_t)((packet->line[packet->parsed_lines - 1].ptr - packet->payload) + 2); + if (packet->payload_packet_len > http_header_len) { + http_content_ptr_len = packet->payload_packet_len - http_header_len; + } + if ((ndpi_check_for_IRC_traces(packet->line[0].ptr, packet->line[0].len)) + || ((packet->http_url_name.ptr) + && (ndpi_check_for_IRC_traces(packet->http_url_name.ptr, packet->http_url_name.len))) + || ((packet->referer_line.ptr) + && (ndpi_check_for_IRC_traces(packet->referer_line.ptr, packet->referer_line.len)))) { + NDPI_LOG_DBG2(ndpi_struct, + "IRC detected from the Http URL/ Referer header "); + flow->l4.tcp.irc_stage = 1; + // HTTP POST Request body is not in the same packet. + if (!http_content_ptr_len) { + return; + } + } + } + } + } + + if ((flow->detected_protocol_stack[0] != NDPI_PROTOCOL_IRC) && (flow->l4.tcp.irc_stage == 1)) { + if ((((packet->payload_packet_len - http_content_ptr_len) > 10) + && (memcmp(packet->payload + http_content_ptr_len, "interface=", 10) == 0) + && (ndpi_check_for_Nickname(ndpi_struct, flow) != 0)) + || (((packet->payload_packet_len - http_content_ptr_len) > 5) + && (memcmp(packet->payload + http_content_ptr_len, "item=", 5) == 0) + && (ndpi_check_for_cmd(ndpi_struct, flow) != 0))) { + NDPI_LOG_INFO(ndpi_struct, "found IRC: Nickname, cmd, one time"); + ndpi_int_irc_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return; + } + } + + detected_irc: + NDPI_LOG_DBG2(ndpi_struct, "detected_irc:"); + + if (flow->detected_protocol_stack[0] == NDPI_PROTOCOL_IRC) { + /* maybe this can be deleted at the end */ + + if (packet->payload[packet->payload_packet_len - 2] != 0x0d + && packet->payload[packet->payload_packet_len - 1] == 0x0a) { + NDPI_LOG_DBG2(ndpi_struct, "ndpi_parse_packet_line_info_any(ndpi_struct, flow);"); + ndpi_parse_packet_line_info_any(ndpi_struct, flow); + } else if (packet->payload[packet->payload_packet_len - 2] == 0x0d) { + ndpi_parse_packet_line_info(ndpi_struct, flow); + } else { + return; + } + for (i = 0; i < packet->parsed_lines; i++) { + if (packet->line[i].len > 6 && memcmp(packet->line[i].ptr, "NOTICE ", 7) == 0) { + NDPI_LOG_DBG2(ndpi_struct, "NOTICE"); + for (j = 7; j < packet->line[i].len - 9; j++) { + if (packet->line[i].ptr[j] == ':') { + if (memcmp(&packet->line[i].ptr[j + 1], "DCC SEND ", 9) == 0 + || memcmp(&packet->line[i].ptr[j + 1], "DCC CHAT ", 9) == 0) { + NDPI_LOG_INFO(ndpi_struct, + "found NOTICE and DCC CHAT or DCC SEND."); + } + } + } + } + if (packet->payload_packet_len > 0 && packet->payload[0] == 0x3a /* 0x3a = ':' */ ) { + NDPI_LOG_DBG2(ndpi_struct, "3a"); + for (j = 1; j < packet->line[i].len - 9; j++) { + if (packet->line[i].ptr[j] == ' ') { + j++; + if (packet->line[i].ptr[j] == 'P') { + NDPI_LOG_DBG2(ndpi_struct, "P"); + j++; + if (memcmp(&packet->line[i].ptr[j], "RIVMSG ", 7) == 0) + NDPI_LOG_DBG2(ndpi_struct, "RIVMSG"); + h = j + 7; + goto read_privmsg; + } + } + } + } + if (packet->line[i].len > 7 && (memcmp(packet->line[i].ptr, "PRIVMSG ", 8) == 0)) { + NDPI_LOG_DBG2(ndpi_struct, "PRIVMSG "); + h = 7; + read_privmsg: + for (j = h; j < packet->line[i].len - 9; j++) { + if (packet->line[i].ptr[j] == ':') { + if (memcmp(&packet->line[i].ptr[j + 1], "xdcc ", 5) == 0) { + NDPI_LOG_DBG2(ndpi_struct, "xdcc should match."); + } + j += 2; + if (j + 4 < packet->line[i].len && + memcmp(&packet->line[i].ptr[j], "DCC ", 4) == 0) { + j += 4; + NDPI_LOG_DBG2(ndpi_struct, "found DCC."); + if ((j + 5 < packet->line[i].len && + memcmp(&packet->line[i].ptr[j], "SEND ", 5) == 0) || + (j + 4 < packet->line[i].len && + memcmp(&packet->line[i].ptr[j], "CHAT", 4) == 0) || + (j + 4 < packet->line[i].len && + memcmp(&packet->line[i].ptr[j], "chat", 4) == 0) || + (j + 7 < packet->line[i].len && + memcmp(&packet->line[i].ptr[j], "sslchat", 7) == 0) || + (j + 5 < packet->line[i].len && + memcmp(&packet->line[i].ptr[j], "TSEND", 5) == 0)) { + NDPI_LOG_DBG2(ndpi_struct, "found CHAT,chat,sslchat,TSEND."); + j += 4; + + while (packet->line[i].len > j && + ((packet->line[i].ptr[j] >= 'a' && packet->line[i].ptr[j] <= 'z') + || (packet->line[i].ptr[j] >= 'A' && packet->line[i].ptr[j] <= 'Z') + || (packet->line[i].ptr[j] >= '0' && packet->line[i].ptr[j] <= '9') + || (packet->line[i].ptr[j] >= ' ') + || (packet->line[i].ptr[j] >= '.') + || (packet->line[i].ptr[j] >= '-'))) { + + if (packet->line[i].ptr[j] == ' ') { + space++; + NDPI_LOG_DBG2(ndpi_struct, "space %u.", space); + } + if (space == 3) { + j++; + NDPI_LOG_DBG2(ndpi_struct, "read port."); + } + + + j++; + } + + } + } + } + } + + } + } + } +} + +void init_irc_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("IRC", ndpi_struct, *id, + NDPI_PROTOCOL_IRC, + ndpi_search_irc_tcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} + diff --git a/src/components/implementation/simple_nf/ndpi/jabber.c b/src/components/implementation/simple_nf/ndpi/jabber.c new file mode 100644 index 0000000000..df286f1719 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/jabber.c @@ -0,0 +1,154 @@ +/* + * jabber.c + * + * Copyright (C) 2009-11 - ipoque GmbH + * Copyright (C) 2011-22 - ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_JABBER + +#include "ndpi_api.h" + +struct jabber_string { + char *string; + u_int ndpi_protocol; +}; + +static struct jabber_string jabber_strings[] = { + { "='im.truphone.com'", NDPI_PROTOCOL_TRUPHONE }, + { "=\"im.truphone.com\"", NDPI_PROTOCOL_TRUPHONE }, + { NULL, 0 } +}; + +static void ndpi_int_jabber_add_connection(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, + u_int32_t protocol, ndpi_confidence_t confidence) +{ + ndpi_set_detected_protocol(ndpi_struct, flow, protocol, NDPI_PROTOCOL_UNKNOWN, confidence); +} + +static void check_content_type_and_change_protocol(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, u_int16_t x) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + int i, left = packet->payload_packet_len-x; + + if(left <= 0) return; + + for(i=0; jabber_strings[i].string != NULL; i++) { + if(ndpi_strnstr((const char*)&packet->payload[x], jabber_strings[i].string, left) != NULL) { + ndpi_int_jabber_add_connection(ndpi_struct, flow, jabber_strings[i].ndpi_protocol, NDPI_CONFIDENCE_DPI); + return; + } + } +} + +static void ndpi_search_jabber_tcp(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + u_int16_t const max_packets = 4; + size_t i; + static uint8_t const valid_patterns[] = { 0x25, 0x26, 0x30 }; + + NDPI_LOG_DBG(ndpi_struct, "search JABBER\n"); + + if (packet->payload_packet_len >= 3 && + packet->payload[1] == 0x00 && packet->payload[2] == packet->payload_packet_len) + { + /* Old style Jabber/XMPP SSL. */ + if (flow->packet_counter > max_packets - 1) + { + ndpi_int_jabber_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_JABBER, NDPI_CONFIDENCE_DPI); + return; + } + for (i = 0; i < NDPI_ARRAY_LENGTH(valid_patterns); ++i) + { + if (packet->payload[0] == valid_patterns[i]) + { + return; + } + } + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + /* search for jabber here */ + /* this part is working asymmetrically */ + if (packet->payload_packet_len >= NDPI_STATICSTRING_LEN("payload, "payload[0], + "xmlns='http://jabber.org/protocol/", packet->payload_packet_len) != NULL) + { + ndpi_int_jabber_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_JABBER, NDPI_CONFIDENCE_DPI); + return; + } + + if (packet->payload_packet_len >= NDPI_STATICSTRING_LEN("payload_packet_len) != NULL) + { + ndpi_int_jabber_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_JABBER, NDPI_CONFIDENCE_DPI); + return; + } + + if (packet->payload_packet_len == NDPI_STATICSTRING_LEN("") && + memcmp(packet->payload, "", NDPI_STATICSTRING_LEN("")) == 0) + { + ndpi_int_jabber_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_JABBER, NDPI_CONFIDENCE_DPI); + return; + } + + if ((packet->payload_packet_len > 13 && memcmp(packet->payload, "payload_packet_len >= NDPI_STATICSTRING_LEN("payload, "payload_packet_len-13; + + if(ndpi_strnstr((const char *)&packet->payload[13], "xmlns:stream='http://etherx.jabber.org/streams'", start) + || ndpi_strnstr((const char *)&packet->payload[13], "xmlns:stream=\"http://etherx.jabber.org/streams\"", start)) { + + /* Protocol family */ + ndpi_int_jabber_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_JABBER, NDPI_CONFIDENCE_DPI); + + /* search for subprotocols */ + check_content_type_and_change_protocol(ndpi_struct, flow, 13); + } + return; + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; +} + + +void init_jabber_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("Jabber", ndpi_struct, *id, + NDPI_PROTOCOL_JABBER, + ndpi_search_jabber_tcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} + diff --git a/src/components/implementation/simple_nf/ndpi/kakaotalk_voice.c b/src/components/implementation/simple_nf/ndpi/kakaotalk_voice.c new file mode 100644 index 0000000000..dde13cde7d --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/kakaotalk_voice.c @@ -0,0 +1,78 @@ +/* + * kakaotalk_voice.c + * + * Copyright (C) 2015-22 - ntop.org + * + * This module is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This module is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License. + * If not, see . + * + */ + + +/* + KakaoTalk (call only) + + http://www.kakao.com/services/talk/voices +*/ +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_KAKAOTALK_VOICE + +#include "ndpi_api.h" + + +static void ndpi_search_kakaotalk_voice(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search kakaotalk_voice\n"); + + if(packet->iph + && packet->udp + && (packet->payload_packet_len >= 4) + ) { + if((packet->payload[0] == 0x81) + || (packet->payload[1] == 0xC8) + || (packet->payload[2] == 0x00) + || (packet->payload[3] == 0x0C)) { + /* Looks good so far */ + + /* + inetnum: 1.201.0.0 - 1.201.255.255 + netname: KINXINC-KR + */ + + if(((ntohl(packet->iph->saddr) & 0xFFFF0000 /* 255.255.0.0 */) == 0x01C90000 /* 1.201.0.0/16 */) + || ((ntohl(packet->iph->daddr) & 0xFFFF0000 /* 255.255.0.0 */) == 0x01C90000 /* 1.201.0.0/16 */)) { + NDPI_LOG_INFO(ndpi_struct, "found kakaotalk_voice\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_KAKAOTALK_VOICE, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } + } + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + + +void init_kakaotalk_voice_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("KakaoTalk_Voice", ndpi_struct, *id, + NDPI_PROTOCOL_KAKAOTALK_VOICE, + ndpi_search_kakaotalk_voice, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + *id += 1; +} + diff --git a/src/components/implementation/simple_nf/ndpi/kerberos.c b/src/components/implementation/simple_nf/ndpi/kerberos.c new file mode 100644 index 0000000000..68dda46c95 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/kerberos.c @@ -0,0 +1,709 @@ +/* + * kerberos.c + * + * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2009-11 - ipoque GmbH + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_KERBEROS + +#include "ndpi_api.h" + +/* #define KERBEROS_DEBUG 1 */ + +#define KERBEROS_PORT 88 + +static int ndpi_search_kerberos_extra(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow); + + +/* Reference: https://en.wikipedia.org/wiki/X.690#Length_octets */ +static int krb_decode_asn1_length(struct ndpi_detection_module_struct *ndpi_struct, + size_t * const kasn1_offset) +{ + struct ndpi_packet_struct * const packet = &ndpi_struct->packet; + int64_t length; + u_int16_t value_len; + + length = ndpi_asn1_ber_decode_length(&packet->payload[*kasn1_offset], + packet->payload_packet_len - *kasn1_offset, + &value_len); + + if (length == -1 || + packet->payload_packet_len < *kasn1_offset + value_len + length) + { + return -1; + } + + *kasn1_offset += value_len; + + return length; +} + +/* Reference: https://en.wikipedia.org/wiki/X.690#Identifier_octets */ +static int krb_decode_asn1_sequence_type(struct ndpi_detection_module_struct *ndpi_struct, + size_t * const kasn1_offset) +{ + struct ndpi_packet_struct * const packet = &ndpi_struct->packet; + + if (packet->payload_packet_len <= *kasn1_offset + 1 /* length octet */ || + packet->payload[*kasn1_offset] != 0x30 /* Universal Constructed Tag Type: Sequence */) + { + return -1; + } + + (*kasn1_offset)++; + + return krb_decode_asn1_length(ndpi_struct, kasn1_offset); +} + +/* Reference: https://en.wikipedia.org/wiki/X.690#Identifier_octets */ +static int krb_decode_asn1_string_type(struct ndpi_detection_module_struct *ndpi_struct, + size_t * const kasn1_offset, + char const ** const out) +{ + struct ndpi_packet_struct * const packet = &ndpi_struct->packet; + int length; + + if (packet->payload_packet_len <= *kasn1_offset + 1 /* length octet */ || + (packet->payload[*kasn1_offset] != 0xA3 /* Context-specific Constructed Tag Type: Bit String */ && + packet->payload[*kasn1_offset] != 0xA4 /* Context-specific Constructed Tag Type: Octect String */ && + packet->payload[*kasn1_offset] != 0x30 /* Sequence Of */)) + { + return -1; + } + + (*kasn1_offset)++; + + length = krb_decode_asn1_length(ndpi_struct, kasn1_offset); + if (length <= 0) + { + return -1; + } + + if (out != NULL) + { + *out = (char *)&packet->payload[*kasn1_offset]; + } + + return length; +} + +/* Reference: https://en.wikipedia.org/wiki/X.690#Identifier_octets */ +static int krb_decode_asn1_int_type(struct ndpi_detection_module_struct *ndpi_struct, + size_t * const kasn1_offset, + int * const out) +{ + struct ndpi_packet_struct * const packet = &ndpi_struct->packet; + int length; + + if (packet->payload_packet_len <= *kasn1_offset + 1 /* length octet */ || + packet->payload[*kasn1_offset] != 0x02) + { + return -1; + } + + (*kasn1_offset)++; + + length = krb_decode_asn1_length(ndpi_struct, kasn1_offset); + if (length <= 0 || length > 4) + { + return -1; + } + + if (out != NULL) + { + int i = 0; + *out = 0; + for (; i < length; ++i) + { + *out |= (unsigned int)packet->payload[*kasn1_offset + i] << (length - i - 1) * 8; + } + *kasn1_offset += i; + } + + return length; +} + +/* Tags in which we are not interested. */ +static int krb_decode_asn1_blocks_skip(struct ndpi_detection_module_struct *ndpi_struct, + size_t * const kasn1_offset) +{ + struct ndpi_packet_struct * const packet = &ndpi_struct->packet; + int length; + + if (packet->payload_packet_len <= *kasn1_offset + 1 /* length octet */ || + (packet->payload[*kasn1_offset] != 0xA0 /* Constructed Context-specific NULL */ && + packet->payload[*kasn1_offset] != 0xA1 /* Constructed Context-specific BOOLEAN */ && + packet->payload[*kasn1_offset] != 0xA2 /* Constructed Context-specific INTEGER */)) + { + return -1; + } + + (*kasn1_offset)++; + + length = krb_decode_asn1_length(ndpi_struct, kasn1_offset); + if (length < 0) + { + return -1; + } + + return length; +} + +static void krb_strncpy_lower(char * const dst, size_t dst_siz, + char const * const src, size_t src_siz) +{ + int i, dst_len = ndpi_min(src_siz, dst_siz - 1); + + dst[dst_len] = '\0'; + + for(i = 0; i < dst_len; ++i) + { + if (ndpi_isprint(src[i]) == 0) + { + dst[i] = '?'; + } else { + dst[i] = tolower(src[i]); + } + } +} + +/* Reference: https://datatracker.ietf.org/doc/html/rfc4120 */ +static int krb_parse(struct ndpi_detection_module_struct * const ndpi_struct, + struct ndpi_flow_struct * const flow, + size_t payload_offset) +{ + size_t kasn1_offset = payload_offset; + int length, krb_version, msg_type; + char const * text; + + length = krb_decode_asn1_sequence_type(ndpi_struct, &kasn1_offset); + if (length < 0) + { + return -1; + } + + length = krb_decode_asn1_blocks_skip(ndpi_struct, &kasn1_offset); + if (length < 0) + { + return -1; + } + + length = krb_decode_asn1_int_type(ndpi_struct, &kasn1_offset, &krb_version); /* pvno */ + if (length != 1 || krb_version != 5) + { + return -1; + } + + length = krb_decode_asn1_blocks_skip(ndpi_struct, &kasn1_offset); + if (length < 0) + { + return -1; + } + + length = krb_decode_asn1_int_type(ndpi_struct, &kasn1_offset, &msg_type); /* msg-type */ + if (length != 1 || msg_type != 0x0d /* TGS-REP */) + { + return -1; + } + + krb_decode_asn1_blocks_skip(ndpi_struct, &kasn1_offset); + + length = krb_decode_asn1_sequence_type(ndpi_struct, &kasn1_offset); /* Optional PADATA */ + if (length > 0) + { + kasn1_offset += length; + } + + length = krb_decode_asn1_string_type(ndpi_struct, &kasn1_offset, &text); + if (length < 3) + { + return -1; + } + + kasn1_offset += length; + text += 2; + length -= 2; + if (flow->protos.kerberos.domain[0] == '\0') + { + krb_strncpy_lower(flow->protos.kerberos.domain, sizeof(flow->protos.kerberos.domain), + text, length); + } + + length = krb_decode_asn1_string_type(ndpi_struct, &kasn1_offset, NULL); + if (length < 0) + { + return -1; + } + + length = krb_decode_asn1_sequence_type(ndpi_struct, &kasn1_offset); + if (length < 0) + { + return -1; + } + + length = krb_decode_asn1_blocks_skip(ndpi_struct, &kasn1_offset); + if (length < 0) + { + return -1; + } + kasn1_offset += length; + + length = krb_decode_asn1_blocks_skip(ndpi_struct, &kasn1_offset); + if (length < 0) + { + return -1; + } + + length = krb_decode_asn1_string_type(ndpi_struct, &kasn1_offset, &text); + if (length < 3) + { + return -1; + } + + kasn1_offset += length; + text += 2; + length -= 2; + if (flow->protos.kerberos.hostname[0] == '\0' && text[length - 1] != '$') + { + krb_strncpy_lower(flow->protos.kerberos.hostname, sizeof(flow->protos.kerberos.hostname), + text, length); + } else if (flow->protos.kerberos.username[0] == '\0') { + krb_strncpy_lower(flow->protos.kerberos.username, sizeof(flow->protos.kerberos.username), + text, length - 1); + } + + return 0; +} + +static void ndpi_int_kerberos_add_connection(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_KERBEROS, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + NDPI_LOG_DBG(ndpi_struct, "trace KERBEROS\n"); +} + +/* ************************************************* */ + +static void ndpi_search_kerberos(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + u_int16_t sport = packet->tcp ? ntohs(packet->tcp->source) : ntohs(packet->udp->source); + u_int16_t dport = packet->tcp ? ntohs(packet->tcp->dest) : ntohs(packet->udp->dest); + const u_int8_t *original_packet_payload = NULL; + u_int16_t original_payload_packet_len = 0; + + if((sport != KERBEROS_PORT) && (dport != KERBEROS_PORT)) { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + NDPI_LOG_DBG(ndpi_struct, "search KERBEROS\n"); + +#ifdef KERBEROS_DEBUG + printf("\n[Kerberos] Process packet [len: %u]\n", packet->payload_packet_len); +#endif + + if(flow->kerberos_buf.pktbuf != NULL) { + u_int missing = flow->kerberos_buf.pktbuf_maxlen - flow->kerberos_buf.pktbuf_currlen; + + if(packet->payload_packet_len <= missing) { + memcpy(&flow->kerberos_buf.pktbuf[flow->kerberos_buf.pktbuf_currlen], packet->payload, packet->payload_packet_len); + flow->kerberos_buf.pktbuf_currlen += packet->payload_packet_len; + + if(flow->kerberos_buf.pktbuf_currlen == flow->kerberos_buf.pktbuf_maxlen) { + original_packet_payload = packet->payload; + original_payload_packet_len = packet->payload_packet_len; + packet->payload = (u_int8_t *)flow->kerberos_buf.pktbuf; + packet->payload_packet_len = flow->kerberos_buf.pktbuf_currlen; +#ifdef KERBEROS_DEBUG + printf("[Kerberos] Packet is now full: processing\n"); +#endif + } else { +#ifdef KERBEROS_DEBUG + printf("[Kerberos] Missing %u bytes: skipping\n", + flow->kerberos_buf.pktbuf_maxlen - flow->kerberos_buf.pktbuf_currlen); +#endif + + return; + } + } + } + + /* I have observed 0a,0c,0d,0e at packet->payload[19/21], maybe there are other possibilities */ + if(packet->payload_packet_len >= 4) { + u_int32_t kerberos_len, expected_len; + u_int16_t base_offset = 0; + + if(packet->tcp) { + kerberos_len = ntohl(get_u_int32_t(packet->payload, 0)), + expected_len = packet->payload_packet_len - 4; + base_offset = 4; + } else + base_offset = 0, kerberos_len = expected_len = packet->payload_packet_len; + +#ifdef KERBEROS_DEBUG + printf("[Kerberos] [Kerberos len: %u][expected_len: %u]\n", kerberos_len, expected_len); +#endif + + if(kerberos_len < 12000) { + /* + Kerberos packets might be too long for a TCP packet + so it could be split across two packets. Instead of + rebuilding the stream we use a heuristic approach + */ + if(kerberos_len > expected_len) { + if(packet->tcp) { + if(flow->kerberos_buf.pktbuf == NULL) { + flow->kerberos_buf.pktbuf = (char*)ndpi_malloc(kerberos_len+4); + + if(flow->kerberos_buf.pktbuf != NULL) { + flow->kerberos_buf.pktbuf_maxlen = kerberos_len+4; +#ifdef KERBEROS_DEBUG + printf("[Kerberos] Allocated %u bytes\n", flow->kerberos_buf.pktbuf_maxlen); +#endif + } + } + + if(flow->kerberos_buf.pktbuf != NULL) { + if(packet->payload_packet_len <= flow->kerberos_buf.pktbuf_maxlen) { + memcpy(flow->kerberos_buf.pktbuf, packet->payload, packet->payload_packet_len); + flow->kerberos_buf.pktbuf_currlen = packet->payload_packet_len; + } + } + } + + return; + } else if(kerberos_len == expected_len) { + if(packet->payload_packet_len > 64) { + u_int16_t koffset, i; + + for(i=8; i<16; i++) + if((packet->payload[base_offset+i] == 0x03) + && (packet->payload[base_offset+i+1] == 0x02) + && (packet->payload[base_offset+i+2] == 0x01) + && (packet->payload[base_offset+i+3] != 0x05) + ) + break; + + koffset = base_offset + i + 3; + +#ifdef KERBEROS_DEBUG + printf("[Kerberos] [msg-type: 0x%02X/%u][koffset: %u]\n", + packet->payload[koffset], packet->payload[koffset], koffset); +#endif + + if(((packet->payload[koffset] == 0x0A) + || (packet->payload[koffset] == 0x0C) + || (packet->payload[koffset] == 0x1E) + || (packet->payload[koffset] == 0x0D) + || (packet->payload[koffset] == 0x0E))) { + u_int16_t koffsetp, body_offset = 0, pad_len; + u_int8_t msg_type = packet->payload[koffset]; + +#ifdef KERBEROS_DEBUG + printf("[Kerberos] Packet found 0x%02X/%u\n", msg_type, msg_type); +#endif + + ndpi_int_kerberos_add_connection(ndpi_struct, flow); + + if(msg_type != 0x0d) /* TGS-REP */ { + /* Process only on requests */ + if(packet->payload[koffset+1] == 0xA3) { + if(packet->payload[koffset+3] == 0x30) + pad_len = packet->payload[koffset+4]; + else { + /* Long pad */ + pad_len = packet->payload[koffset+2]; + for(i=3; i<10; i++) if(packet->payload[koffset+i] == pad_len) break; + + pad_len = (packet->payload[koffset+i+1] << 8) + packet->payload[koffset+i+2]; + koffset += i-2; + } + } else + pad_len = 0; + +#ifdef KERBEROS_DEBUG + printf("pad_len=0x%02X/%u\n", pad_len, pad_len); +#endif + + if(pad_len > 0) { + koffsetp = koffset + 2; + for(i=0; i<4; i++) if(packet->payload[koffsetp] != 0x30) koffsetp++; /* ASN.1 */ +#ifdef KERBEROS_DEBUG + printf("koffsetp=%u [%02X %02X] [byte 0 must be 0x30]\n", koffsetp, packet->payload[koffsetp], packet->payload[koffsetp+1]); +#endif + } else + koffsetp = koffset; + + body_offset = koffsetp + 1 + pad_len; + + for(i=0; i<10; i++) if(body_offsetpayload_packet_len && packet->payload[body_offset] != 0x05) body_offset++; /* ASN.1 */ +#ifdef KERBEROS_DEBUG + printf("body_offset=%u [%02X %02X] [byte 0 must be 0x05]\n", body_offset, packet->payload[body_offset], packet->payload[body_offset+1]); +#endif + } + + if(msg_type == 0x0A) /* AS-REQ */ { +#ifdef KERBEROS_DEBUG + printf("[Kerberos] Processing AS-REQ\n"); +#endif + + + if(body_offset < packet->payload_packet_len) { + u_int16_t name_offset = body_offset + 13; + + for(i=0; (i<20) && (name_offset < packet->payload_packet_len); i++) { + if(packet->payload[name_offset] != 0x1b) + name_offset++; /* ASN.1 */ + } + +#ifdef KERBEROS_DEBUG + printf("name_offset=%u [%02X %02X] [byte 0 must be 0x1b]\n", name_offset, packet->payload[name_offset], packet->payload[name_offset+1]); +#endif + + if(name_offset < packet->payload_packet_len - 1) { + u_int cname_len = 0; + + name_offset += 1; + if(name_offset < packet->payload_packet_len - 1 && + isprint(packet->payload[name_offset+1]) == 0) /* Isn't printable ? */ + { + name_offset++; + } + + if(name_offset < packet->payload_packet_len - 3 && + packet->payload[name_offset+1] == 0x1b) + { + name_offset += 2; + } + + cname_len = packet->payload[name_offset]; + + if((cname_len+name_offset) < packet->payload_packet_len) { + u_int realm_len, realm_offset; + char cname_str[48]; + u_int8_t num_cname = 0; + + cname_str[0] = '\0'; // required, because cname_len + + while(++num_cname <= 2) { + if (name_offset + cname_len + 1 >= packet->payload_packet_len) + cname_len = 0; + krb_strncpy_lower(cname_str, sizeof(cname_str), (char*)&packet->payload[name_offset+1], cname_len); + +#ifdef KERBEROS_DEBUG + printf("[AS-REQ][s/dport: %u/%u][Kerberos Cname][len: %u][%s]\n", sport, dport, cname_len, cname_str); +#endif + + if(((strcmp(cname_str, "host") == 0) || (strcmp(cname_str, "ldap") == 0)) && (packet->payload[name_offset+1+cname_len] == 0x1b) && num_cname == 1) { + name_offset += cname_len + 2; + if (name_offset < packet->payload_packet_len) + cname_len = packet->payload[name_offset]; + } else{ + break; + } + } + + realm_offset = cname_len + name_offset + 3; + + /* if cname does not end with a $ then it's a username */ + if(cname_len > 0 && name_offset + cname_len + 1 < packet->payload_packet_len + && (cname_len < sizeof(cname_str)) + && (cname_str[cname_len-1] == '$')) { + cname_str[cname_len-1] = '\0'; + ndpi_snprintf(flow->protos.kerberos.hostname, sizeof(flow->protos.kerberos.hostname), "%s", cname_str); + } else + ndpi_snprintf(flow->protos.kerberos.username, sizeof(flow->protos.kerberos.username), "%s", cname_str); + + for(i=0; (i < 14) && (realm_offset < packet->payload_packet_len); i++) { + if(packet->payload[realm_offset] != 0x1b) + realm_offset++; /* ASN.1 */ + } + +#ifdef KERBEROS_DEBUG + printf("realm_offset=%u [%02X %02X] [byte 0 must be 0x1b]\n", realm_offset, + packet->payload[realm_offset], packet->payload[realm_offset+1]); +#endif + + realm_offset += 1; + //if(num_cname == 2) realm_offset++; + if(realm_offset < packet->payload_packet_len) { + realm_len = packet->payload[realm_offset]; + + if((realm_offset+realm_len) < packet->payload_packet_len) { + char realm_str[48]; + + realm_offset += 1; + krb_strncpy_lower(realm_str, sizeof(realm_str), (char*)&packet->payload[realm_offset], realm_len); + +#ifdef KERBEROS_DEBUG + printf("[AS-REQ][Kerberos Realm][len: %u][%s]\n", realm_len, realm_str); +#endif + ndpi_snprintf(flow->protos.kerberos.domain, sizeof(flow->protos.kerberos.domain), "%s", realm_str); + } + } + } + } + } +#ifdef KERBEROS_DEBUG + printf("[Kerberos] Setting extra func from AS-REQ\n"); +#endif + flow->max_extra_packets_to_check = 5; /* Reply may be split into multiple segments */ + flow->extra_packets_func = ndpi_search_kerberos_extra; + } else if(msg_type == 0x0e) /* AS-REQ */ { +#ifdef KERBEROS_DEBUG + printf("[Kerberos] Processing AS-REQ\n"); +#endif + /* Nothing specific to do; stop dissecting this flow */ + flow->extra_packets_func = NULL; + + } else if(msg_type == 0x0c) /* TGS-REQ */ { +#ifdef KERBEROS_DEBUG + printf("[Kerberos] Processing TGS-REQ\n"); +#endif + + if(body_offset < packet->payload_packet_len) { + u_int16_t name_offset, padding_offset = body_offset + 4; + + name_offset = padding_offset; + for(i=0; i<14 && name_offset < packet->payload_packet_len; i++) if(packet->payload[name_offset] != 0x1b) name_offset++; /* ASN.1 */ + +#ifdef KERBEROS_DEBUG + printf("name_offset=%u [%02X %02X] [byte 0 must be 0x1b]\n", name_offset, packet->payload[name_offset], packet->payload[name_offset+1]); +#endif + + if(name_offset < (packet->payload_packet_len - 1)) { + u_int realm_len; + + name_offset++; + realm_len = packet->payload[name_offset]; + + if((realm_len+name_offset) < packet->payload_packet_len) { + char realm_str[48]; + + name_offset += 1; + krb_strncpy_lower(realm_str, sizeof(realm_str), (char*)&packet->payload[name_offset], realm_len); + +#ifdef KERBEROS_DEBUG + printf("[TGS-REQ][s/dport: %u/%u][Kerberos Realm][len: %u][%s]\n", sport, dport, realm_len, realm_str); +#endif + ndpi_snprintf(flow->protos.kerberos.domain, sizeof(flow->protos.kerberos.domain), "%s", realm_str); + + /* If necessary we can decode sname */ + if(flow->kerberos_buf.pktbuf) { + ndpi_free(flow->kerberos_buf.pktbuf); + packet->payload = original_packet_payload; + packet->payload_packet_len = original_payload_packet_len; + } + flow->kerberos_buf.pktbuf = NULL; + } + } + } +#ifdef KERBEROS_DEBUG + printf("[Kerberos] Setting extra func from TGS-REQ\n"); +#endif + if(!packet->udp) { + flow->max_extra_packets_to_check = 5; /* Reply may be split into multiple segments */ + flow->extra_packets_func = ndpi_search_kerberos_extra; + } + + if(flow->kerberos_buf.pktbuf != NULL) { + ndpi_free(flow->kerberos_buf.pktbuf); + packet->payload = original_packet_payload; + packet->payload_packet_len = original_payload_packet_len; + flow->kerberos_buf.pktbuf = NULL; + } + + return; + } else if(msg_type == 0x0d) /* TGS-REP */ { + NDPI_LOG_DBG(ndpi_struct, "[Kerberos] Processing TGS-REP\n"); + + if (krb_parse(ndpi_struct, flow, 8) != 0) + { + NDPI_LOG_DBG(ndpi_struct, "[TGS-REP] Invalid packet received\n"); + return; + } + NDPI_LOG_DBG(ndpi_struct, + "[TGS-REP][s/dport: %u/%u][Kerberos Hostname,Domain,Username][%s,%s,%s]\n", + sport, dport, flow->protos.kerberos.hostname, flow->protos.kerberos.domain, + flow->protos.kerberos.username); + flow->extra_packets_func = NULL; + } else if(msg_type == 0x1e) /* Error */ { +#ifdef KERBEROS_DEBUG + printf("[Kerberos] Processing KRB-Error\n"); +#endif + /* Nothing specific to do; stop dissecting this flow */ + flow->extra_packets_func = NULL; + } + + return; + } + } + } + } else { +#ifdef KERBEROS_DEBUG + printf("[Kerberos][s/dport: %u/%u] Skipping packet: too long [kerberos_len: %u]\n", + sport, dport, kerberos_len); +#endif + + if(flow->protos.kerberos.domain[0] != '\0') + return; + } + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + +static int ndpi_search_kerberos_extra(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + +#ifdef KERBEROS_DEBUG + printf("[Kerberos] Extra function\n"); +#endif + + /* Unfortunately, generic "extra function" code doesn't honour protocol bitmask */ + /* TODO: handle that in ndpi_main.c for all the protocols */ + if(packet->payload_packet_len == 0 || + packet->tcp_retransmission) + return 1; + + /* Possibly dissect the reply */ + ndpi_search_kerberos(ndpi_struct, flow); + + /* Possibly more processing */ + return flow->extra_packets_func != NULL; +} + +void init_kerberos_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id) { + ndpi_set_bitmask_protocol_detection("Kerberos", ndpi_struct, *id, + NDPI_PROTOCOL_KERBEROS, + ndpi_search_kerberos, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/kismet.c b/src/components/implementation/simple_nf/ndpi/kismet.c new file mode 100644 index 0000000000..4d4f3dae49 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/kismet.c @@ -0,0 +1,72 @@ +/* + * kismet.c + * + * Copyright (C) 2022-23 - ntop.org + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_KISMET + +#include "ndpi_api.h" + +static void ndpi_int_kismet_add_connection(struct ndpi_detection_module_struct * const ndpi_struct, + struct ndpi_flow_struct * const flow) +{ + NDPI_LOG_INFO(ndpi_struct, "found kismet\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, + NDPI_PROTOCOL_KISMET, + NDPI_PROTOCOL_UNKNOWN, + NDPI_CONFIDENCE_DPI); +} + +static void ndpi_search_kismet(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct const * const packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search kismet\n"); + + if (packet->payload_packet_len < NDPI_STATICSTRING_LEN("*KISMET: ")) + { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + if (strncmp((char const *)packet->payload, "*KISMET: ", NDPI_STATICSTRING_LEN("*KISMET: ")) == 0) + { + ndpi_int_kismet_add_connection(ndpi_struct, flow); + return; + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + +void init_kismet_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("kismet", ndpi_struct, *id, + NDPI_PROTOCOL_KISMET, + ndpi_search_kismet, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK + ); + + *id += 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/kontiki.c b/src/components/implementation/simple_nf/ndpi/kontiki.c new file mode 100644 index 0000000000..2186bde405 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/kontiki.c @@ -0,0 +1,79 @@ +/* + * kontiki.c + * + * Copyright (C) 2009-11 - ipoque GmbH + * Copyright (C) 2011-22 - ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_KONTIKI + +#include "ndpi_api.h" + + +static void ndpi_int_kontiki_add_connection(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_KONTIKI, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + NDPI_LOG_INFO(ndpi_struct, "found Kontiki UDP\n"); +} + +static void ndpi_search_kontiki(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search Kontiki\n"); + + if (packet->payload_packet_len == 4 && (get_u_int32_t(packet->payload, 0) == htonl(0x02010100))) { + ndpi_int_kontiki_add_connection(ndpi_struct, flow); + return; + } + + if (packet->payload_packet_len > 0 && packet->payload[0] == 0x02) { + + if (packet->payload_packet_len == 20 && (get_u_int32_t(packet->payload, 16) == htonl(0x02040100))) { + ndpi_int_kontiki_add_connection(ndpi_struct, flow); + return; + } + if (packet->payload_packet_len == 16 && (get_u_int32_t(packet->payload, 12) == htonl(0x000004e4))) { + ndpi_int_kontiki_add_connection(ndpi_struct, flow); + return; + } + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + + +void init_kontiki_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("Kontiki", ndpi_struct, *id, + NDPI_PROTOCOL_KONTIKI, + ndpi_search_kontiki, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} + diff --git a/src/components/implementation/simple_nf/ndpi/ldap.c b/src/components/implementation/simple_nf/ndpi/ldap.c new file mode 100644 index 0000000000..a7c64807eb --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/ldap.c @@ -0,0 +1,83 @@ +/* + * ldap.c + * + * Copyright (C) 2009-11 - ipoque GmbH + * Copyright (C) 2011-22 - ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_LDAP + +#include "ndpi_api.h" + + +static void ndpi_int_ldap_add_connection(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_LDAP, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + +static void ndpi_search_ldap(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + int64_t length; + u_int16_t length_len = 0, msg_id_len; + u_int8_t op; + + NDPI_LOG_DBG(ndpi_struct, "search ldap\n"); + + if(packet->payload_packet_len > 1 && + packet->payload[0] == 0x30) { + length = ndpi_asn1_ber_decode_length(&packet->payload[1], packet->payload_packet_len - 1, &length_len); + NDPI_LOG_DBG(ndpi_struct, "length %d (%d bytes)\n", length, length_len); + if(length > 0 && + packet->payload_packet_len > 1 + length_len + 1 && + packet->payload[1 + length_len] == 0x02 /* Integer */) { + msg_id_len = packet->payload[1 + length_len + 1]; + if(packet->payload_packet_len > 1 + length_len + 1 + msg_id_len + 1) { + op = packet->payload[1 + length_len + 1 + msg_id_len + 1]; + NDPI_LOG_DBG(ndpi_struct, "Op 0x%x\n", op); + if((op & 0x60) == 0x60 && /* Application */ + (op & 0x1F) <= 25) { + NDPI_LOG_INFO(ndpi_struct, "found ldap\n"); + ndpi_int_ldap_add_connection(ndpi_struct, flow); + return; + } + } + } + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + + +void init_ldap_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +{ + ndpi_set_bitmask_protocol_detection("LDAP", ndpi_struct, *id, + NDPI_PROTOCOL_LDAP, + ndpi_search_ldap, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} + diff --git a/src/components/implementation/simple_nf/ndpi/libcache.c b/src/components/implementation/simple_nf/ndpi/libcache.c new file mode 100644 index 0000000000..f6a12aa383 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/libcache.c @@ -0,0 +1,329 @@ +/** + * libcache.c + * +Copyright (c) 2017 William Guglielmo + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + * + */ + + +#include +#include +#include +#include + +#include "libcache.h" +#include "ndpi_api.h" + + +// https://en.wikipedia.org/wiki/Jenkins_hash_function +#define HASH_FUNCTION jenkins_one_at_a_time_hash +uint32_t jenkins_one_at_a_time_hash(const uint8_t* key, size_t length) { + size_t i = 0; + uint32_t hash = 0; + while (i != length) { + hash += key[i++]; + hash += hash << 10; + hash ^= hash >> 6; + } + hash += hash << 3; + hash ^= hash >> 11; + hash += hash << 15; + return hash; +} + + +struct cache { + uint32_t size; + uint32_t max_size; + cache_entry head; + cache_entry tail; + cache_entry_map *map; +}; + +struct cache_entry_map_ { + cache_entry entry; + cache_entry_map next; +}; + +struct cache_entry_ { + void *item; + uint32_t item_size; + cache_entry prev; + cache_entry next; +}; + + +void cache_touch_entry(cache_t cache, cache_entry entry) { + if(entry->prev) { + if(entry->next) { + entry->prev->next = entry->next; + entry->next->prev = entry->prev; + } else { + entry->prev->next = NULL; + cache->tail = entry->prev; + } + entry->prev = NULL; + entry->next = cache->head; + cache->head->prev = entry; + cache->head = entry; + } +} + + +cache_entry cache_entry_new(void) { + return (cache_entry) ndpi_calloc(sizeof(struct cache_entry_), 1); +} +cache_entry_map cache_entry_map_new(void) { + return (cache_entry_map) ndpi_calloc(sizeof(struct cache_entry_map_), 1); +} + +cache_t cache_new(uint32_t cache_max_size) { + cache_t cache; + if(!cache_max_size) { + return NULL; + } + + cache = (cache_t) ndpi_calloc(sizeof(struct cache), 1); + if(!cache) { + return NULL; + } + + cache->size = 0; + cache->max_size = cache_max_size; + + cache->map = (cache_entry_map *) ndpi_calloc(sizeof(cache_entry_map ), cache->max_size); + + if(!cache->map) { + ndpi_free(cache); + return NULL; + } + + return cache; +} + +cache_result cache_add(cache_t cache, void *item, uint32_t item_size) { + uint32_t hash; + cache_entry entry; + cache_entry_map map_entry; + + if(!cache || !item || !item_size) { + return CACHE_INVALID_INPUT; + } + + hash = HASH_FUNCTION(item, item_size) % cache->max_size; + + if((cache->map)[hash]) { + cache_entry_map hash_entry_map = cache->map[hash]; + + while(hash_entry_map) { + if(item_size == hash_entry_map->entry->item_size && + !memcmp(hash_entry_map->entry->item, item, item_size)) { + break; + } + + hash_entry_map = hash_entry_map->next; + } + + if(hash_entry_map) { + cache_touch_entry(cache, hash_entry_map->entry); + return CACHE_NO_ERROR; + } + } + + entry = cache_entry_new(); + if(!entry) { + return CACHE_MALLOC_ERROR; + } + + map_entry = cache_entry_map_new(); + if(!map_entry) { + ndpi_free(entry); + return CACHE_MALLOC_ERROR; + } + + + entry->item = ndpi_malloc(item_size); + if(!entry->item) { + ndpi_free(entry); + ndpi_free(map_entry); + return CACHE_MALLOC_ERROR; + } + memcpy(entry->item, item, item_size); + entry->item_size = item_size; + + entry->prev = NULL; + entry->next = cache->head; + if(cache->head) cache->head->prev = entry; + cache->head = entry; + + map_entry->entry = entry; + map_entry->next = cache->map[hash]; + cache->map[hash] = map_entry; + + if(cache->max_size > cache->size) { + (cache->size)++; + if(cache->size == 1) { + cache->tail = entry; + } + } else { + cache_entry tail = cache->tail; + + uint32_t hash = HASH_FUNCTION(tail->item, tail->item_size) % cache->max_size; + if(cache->map[hash]) { + cache_entry_map hash_entry_map_prev = NULL; + cache_entry_map hash_entry_map = cache->map[hash]; + while(hash_entry_map) { + if(tail->item_size == hash_entry_map->entry->item_size && + !memcmp(tail->item, hash_entry_map->entry->item, tail->item_size)) { + break; + } + + hash_entry_map_prev = hash_entry_map; + hash_entry_map = hash_entry_map->next; + } + + if(hash_entry_map_prev) { + if (hash_entry_map) { + hash_entry_map_prev->next = hash_entry_map->next; + } else { + hash_entry_map_prev->next = NULL; + } + } else { + cache->map[hash] = hash_entry_map->next; + } + + tail->prev->next = NULL; + cache->tail = tail->prev; + + ndpi_free(tail->item); + ndpi_free(tail); + ndpi_free(hash_entry_map); + } + } + + return CACHE_NO_ERROR; +} + +cache_result cache_contains(cache_t cache, void *item, uint32_t item_size) { + uint32_t hash; + + if(!cache || !item || !item_size) { + return CACHE_INVALID_INPUT; + } + + hash = HASH_FUNCTION(item, item_size) % cache->max_size; + + if(cache->map[hash]) { + cache_entry_map hash_entry_map = cache->map[hash]; + while(hash_entry_map) { + if(item_size == hash_entry_map->entry->item_size && + !memcmp(hash_entry_map->entry->item, item, item_size)) { + cache_touch_entry(cache, hash_entry_map->entry); + + return CACHE_CONTAINS_TRUE; + } + + hash_entry_map = hash_entry_map->next; + } + } + + return CACHE_CONTAINS_FALSE; +} + +cache_result cache_remove(cache_t cache, void *item, uint32_t item_size) { + uint32_t hash; + + if(!cache || !item || !item_size) { + return CACHE_INVALID_INPUT; + } + + hash = HASH_FUNCTION(item, item_size) % cache->max_size; + + if(cache->map[hash]) { + cache_entry_map hash_entry_map_prev = NULL; + cache_entry_map hash_entry_map = cache->map[hash]; + while(hash_entry_map) { + if(item_size == hash_entry_map->entry->item_size && + !memcmp(hash_entry_map->entry->item, item, item_size)) { + break; + } + + hash_entry_map_prev = hash_entry_map; + hash_entry_map = hash_entry_map->next; + } + + if(hash_entry_map) { + cache_entry entry; + + if(hash_entry_map_prev) { + hash_entry_map_prev->next = hash_entry_map->next; + } else { + cache->map[hash] = hash_entry_map->next; + } + + entry = hash_entry_map->entry; + + if(entry->prev) { + entry->prev->next = entry->next; + } else { + cache->head = entry->next; + } + if(entry->next) { + entry->next->prev = entry->prev; + } else { + cache->tail = entry->prev; + } + + ndpi_free(entry->item); + ndpi_free(entry); + ndpi_free(hash_entry_map); + + (cache->size)--; + return CACHE_NO_ERROR; + } + } + + return CACHE_REMOVE_NOT_FOUND; +} + +void cache_free(cache_t cache) { + uint32_t i; + if(!cache) { + return; + } + + for(i = 0; i < cache->max_size; i++) { + cache_entry_map prev = NULL; + cache_entry_map curr = cache->map[i]; + while(curr) { + prev = curr; + curr = curr->next; + ndpi_free(prev->entry->item); + ndpi_free(prev->entry); + ndpi_free(prev); + } + } + + ndpi_free(cache->map); + ndpi_free(cache); + + return; +} diff --git a/src/components/implementation/simple_nf/ndpi/libcache.h b/src/components/implementation/simple_nf/ndpi/libcache.h new file mode 100644 index 0000000000..98e1e74608 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/libcache.h @@ -0,0 +1,117 @@ +/** + * libcache.h + * +Copyright (c) 2017 William Guglielmo + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + * + */ + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifndef __DESELMO_LIBCACHE_H__ +#define __DESELMO_LIBCACHE_H__ + +#include + +typedef struct cache_entry_ *cache_entry; + +typedef struct cache_entry_map_ *cache_entry_map; + +/** + * @brief Codes representing the result of some functions + * + */ +typedef enum cache_result { + CACHE_NO_ERROR = 0, /**< Returned by a function if no error occurs. */ + CACHE_CONTAINS_FALSE = 0, /**< Returned by function cache_contains if item is not present. */ + CACHE_CONTAINS_TRUE, /**< Returned by function cache_contains if item is present. */ + CACHE_INVALID_INPUT, /**< Returned by a function if it is called with invalid input parameters. */ + CACHE_REMOVE_NOT_FOUND, /**< Returned by function cache_remove if item is not present. */ + CACHE_MALLOC_ERROR /**< Returned by a function if a malloc fail. */ +} cache_result; + + +typedef struct cache *cache_t; + + +/** + * @brief Returns a new cache_t + * + * @par cache_max_size = max number of item that the new cache_t can contain + * @return a new cache_t, or NULL if an error occurred + * + */ +cache_t cache_new(uint32_t cache_max_size); + + +/** + * @brief Add an item in the specified cache_t + * + * @par cache = the cache_t + * @par item = pointer to the item to add + * @par item_size = size of the item + * @return a code representing the result of the function + * + */ +cache_result cache_add(cache_t cache, void *item, uint32_t item_size); + + +/** + * @brief Check if an item is in the specified cache_t + * + * @par cache = the cache_t + * @par item = pointer to the item to check + * @par item_size = size of the item + * @return a code representing the result of the function + * + */ +cache_result cache_contains(cache_t cache, void *item, uint32_t item_size); + + +/** + * @brief Remove an item in the specified cache_t + * + * @par cache = the cache_t + * @par item = pointer to the item to remove + * @par item_size = size of the item + * @return a code representing the result of the function + * + */ +cache_result cache_remove(cache_t cache, void *item, uint32_t item_size); + +/** + * @brief Free the specified cache_t + * + * @par alist = the cache + * + */ +void cache_free(cache_t cache); + +cache_entry cache_entry_new(void); +cache_entry_map cache_entry_map_new(void); + +#endif + +#ifdef __cplusplus +} +#endif diff --git a/src/components/implementation/simple_nf/ndpi/libinjection.h b/src/components/implementation/simple_nf/ndpi/libinjection.h new file mode 100644 index 0000000000..6b40b1df6a --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/libinjection.h @@ -0,0 +1,65 @@ +/** + * Copyright 2012-2016 Nick Galbreath + * nickg@client9.com + * BSD License -- see COPYING.txt for details + * + * https://libinjection.client9.com/ + * + */ + +#ifndef LIBINJECTION_H +#define LIBINJECTION_H + +#ifdef __cplusplus +# define LIBINJECTION_BEGIN_DECLS extern "C" { +# define LIBINJECTION_END_DECLS } +#else +# define LIBINJECTION_BEGIN_DECLS +# define LIBINJECTION_END_DECLS +#endif + +LIBINJECTION_BEGIN_DECLS + +/* + * Pull in size_t + */ +#include + +/* + * Version info. + * + * This is moved into a function to allow SWIG and other auto-generated + * binding to not be modified during minor release changes. We change + * change the version number in the c source file, and not regenerated + * the binding + * + * See python's normalized version + * http://www.python.org/dev/peps/pep-0386/#normalizedversion + */ +const char* libinjection_version(void); + +/** + * Simple API for SQLi detection - returns a SQLi fingerprint or NULL + * is benign input + * + * \param[in] s input string, may contain nulls, does not need to be null-terminated + * \param[in] slen input string length + * \param[out] fingerprint buffer of 8+ characters. c-string, + * \return 1 if SQLi, 0 if benign. fingerprint will be set or set to empty string. + */ +int libinjection_sqli(const char* s, size_t slen, char fingerprint[]); + +/** ALPHA version of xss detector. + * + * NOT DONE. + * + * \param[in] s input string, may contain nulls, does not need to be null-terminated + * \param[in] slen input string length + * \return 1 if XSS found, 0 if benign + * + */ +int libinjection_xss(const char* s, size_t slen); + +LIBINJECTION_END_DECLS + +#endif /* LIBINJECTION_H */ diff --git a/src/components/implementation/simple_nf/ndpi/libinjection_html5.c b/src/components/implementation/simple_nf/ndpi/libinjection_html5.c new file mode 100644 index 0000000000..a380ca0ad6 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/libinjection_html5.c @@ -0,0 +1,850 @@ +#include "libinjection_html5.h" + +#include +#include + +#ifdef DEBUG +#include +#define TRACE() printf("%s:%d\n", __FUNCTION__, __LINE__) +#else +#define TRACE() +#endif + + +#define CHAR_EOF -1 +#define CHAR_NULL 0 +#define CHAR_BANG 33 +#define CHAR_DOUBLE 34 +#define CHAR_PERCENT 37 +#define CHAR_SINGLE 39 +#define CHAR_DASH 45 +#define CHAR_SLASH 47 +#define CHAR_LT 60 +#define CHAR_EQUALS 61 +#define CHAR_GT 62 +#define CHAR_QUESTION 63 +#define CHAR_RIGHTB 93 +#define CHAR_TICK 96 + +/* prototypes */ + +static int h5_skip_white(h5_state_t* hs); +static int h5_is_white(char c); +static int h5_state_eof(h5_state_t* hs); +static int h5_state_data(h5_state_t* hs); +static int h5_state_tag_open(h5_state_t* hs); +static int h5_state_tag_name(h5_state_t* hs); +static int h5_state_tag_name_close(h5_state_t* hs); +static int h5_state_end_tag_open(h5_state_t* hs); +static int h5_state_self_closing_start_tag(h5_state_t* hs); +static int h5_state_attribute_name(h5_state_t* hs); +static int h5_state_after_attribute_name(h5_state_t* hs); +static int h5_state_before_attribute_name(h5_state_t* hs); +static int h5_state_before_attribute_value(h5_state_t* hs); +static int h5_state_attribute_value_double_quote(h5_state_t* hs); +static int h5_state_attribute_value_single_quote(h5_state_t* hs); +static int h5_state_attribute_value_back_quote(h5_state_t* hs); +static int h5_state_attribute_value_no_quote(h5_state_t* hs); +static int h5_state_after_attribute_value_quoted_state(h5_state_t* hs); +static int h5_state_comment(h5_state_t* hs); +static int h5_state_cdata(h5_state_t* hs); + + +/* 12.2.4.44 */ +static int h5_state_bogus_comment(h5_state_t* hs); +static int h5_state_bogus_comment2(h5_state_t* hs); + +/* 12.2.4.45 */ +static int h5_state_markup_declaration_open(h5_state_t* hs); + +/* 8.2.4.52 */ +static int h5_state_doctype(h5_state_t* hs); + +/** + * public function + */ +void libinjection_h5_init(h5_state_t* hs, const char* s, size_t len, enum html5_flags flags) +{ + memset(hs, 0, sizeof(h5_state_t)); + hs->s = s; + hs->len = len; + + switch (flags) { + case DATA_STATE: + hs->state = h5_state_data; + break; + case VALUE_NO_QUOTE: + hs->state = h5_state_before_attribute_name; + break; + case VALUE_SINGLE_QUOTE: + hs->state = h5_state_attribute_value_single_quote; + break; + case VALUE_DOUBLE_QUOTE: + hs->state = h5_state_attribute_value_double_quote; + break; + case VALUE_BACK_QUOTE: + hs->state = h5_state_attribute_value_back_quote; + break; + } +} + +/** + * public function + */ +int libinjection_h5_next(h5_state_t* hs) +{ + assert(hs->state != NULL); + return (*hs->state)(hs); +} + +/** + * Everything below here is private + * + */ + + +static int h5_is_white(char ch) +{ + /* + * \t = horizontal tab = 0x09 + * \n = newline = 0x0A + * \v = vertical tab = 0x0B + * \f = form feed = 0x0C + * \r = cr = 0x0D + */ + return strchr(" \t\n\v\f\r", ch) != NULL; +} + +static int h5_skip_white(h5_state_t* hs) +{ + char ch; + while (hs->pos < hs->len) { + ch = hs->s[hs->pos]; + switch (ch) { + case 0x00: /* IE only */ + case 0x20: + case 0x09: + case 0x0A: + case 0x0B: /* IE only */ + case 0x0C: + case 0x0D: /* IE only */ + hs->pos += 1; + break; + default: + return ch; + } + } + return CHAR_EOF; +} + +static int h5_state_eof(h5_state_t* hs) +{ + /* eliminate unused function argument warning */ + (void)hs; + return 0; +} + +static int h5_state_data(h5_state_t* hs) +{ + const char* idx; + + TRACE(); + assert(hs->len >= hs->pos); + idx = (const char*) memchr(hs->s + hs->pos, CHAR_LT, hs->len - hs->pos); + if (idx == NULL) { + hs->token_start = hs->s + hs->pos; + hs->token_len = hs->len - hs->pos; + hs->token_type = DATA_TEXT; + hs->state = h5_state_eof; + if (hs->token_len == 0) { + return 0; + } + } else { + hs->token_start = hs->s + hs->pos; + hs->token_type = DATA_TEXT; + hs->token_len = (size_t)(idx - hs->s) - hs->pos; + hs->pos = (size_t)(idx - hs->s) + 1; + hs->state = h5_state_tag_open; + if (hs->token_len == 0) { + return h5_state_tag_open(hs); + } + } + return 1; +} + +/** + * 12 2.4.8 + */ +static int h5_state_tag_open(h5_state_t* hs) +{ + char ch; + + TRACE(); + if (hs->pos >= hs->len) { + return 0; + } + ch = hs->s[hs->pos]; + if (ch == CHAR_BANG) { + hs->pos += 1; + return h5_state_markup_declaration_open(hs); + } else if (ch == CHAR_SLASH) { + hs->pos += 1; + hs->is_close = 1; + return h5_state_end_tag_open(hs); + } else if (ch == CHAR_QUESTION) { + hs->pos += 1; + return h5_state_bogus_comment(hs); + } else if (ch == CHAR_PERCENT) { + /* this is not in spec.. alternative comment format used + by IE <= 9 and Safari < 4.0.3 */ + hs->pos += 1; + return h5_state_bogus_comment2(hs); + } else if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) { + return h5_state_tag_name(hs); + } else if (ch == CHAR_NULL) { + /* IE-ism NULL characters are ignored */ + return h5_state_tag_name(hs); + } else { + /* user input mistake in configuring state */ + if (hs->pos == 0) { + return h5_state_data(hs); + } + hs->token_start = hs->s + hs->pos - 1; + hs->token_len = 1; + hs->token_type = DATA_TEXT; + hs->state = h5_state_data; + return 1; + } +} +/** + * 12.2.4.9 + */ +static int h5_state_end_tag_open(h5_state_t* hs) +{ + char ch; + + TRACE(); + + if (hs->pos >= hs->len) { + return 0; + } + ch = hs->s[hs->pos]; + if (ch == CHAR_GT) { + return h5_state_data(hs); + } else if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) { + return h5_state_tag_name(hs); + } + + hs->is_close = 0; + return h5_state_bogus_comment(hs); +} +/* + * + */ +static int h5_state_tag_name_close(h5_state_t* hs) +{ + TRACE(); + hs->is_close = 0; + hs->token_start = hs->s + hs->pos; + hs->token_len = 1; + hs->token_type = TAG_NAME_CLOSE; + hs->pos += 1; + if (hs->pos < hs->len) { + hs->state = h5_state_data; + } else { + hs->state = h5_state_eof; + } + + return 1; +} + +/** + * 12.2.4.10 + */ +static int h5_state_tag_name(h5_state_t* hs) +{ + char ch; + size_t pos; + + TRACE(); + pos = hs->pos; + while (pos < hs->len) { + ch = hs->s[pos]; + if (ch == 0) { + /* special non-standard case */ + /* allow nulls in tag name */ + /* some old browsers apparently allow and ignore them */ + pos += 1; + } else if (h5_is_white(ch)) { + hs->token_start = hs->s + hs->pos; + hs->token_len = pos - hs->pos; + hs->token_type = TAG_NAME_OPEN; + hs->pos = pos + 1; + hs->state = h5_state_before_attribute_name; + return 1; + } else if (ch == CHAR_SLASH) { + hs->token_start = hs->s + hs->pos; + hs->token_len = pos - hs->pos; + hs->token_type = TAG_NAME_OPEN; + hs->pos = pos + 1; + hs->state = h5_state_self_closing_start_tag; + return 1; + } else if (ch == CHAR_GT) { + hs->token_start = hs->s + hs->pos; + hs->token_len = pos - hs->pos; + if (hs->is_close) { + hs->pos = pos + 1; + hs->is_close = 0; + hs->token_type = TAG_CLOSE; + hs->state = h5_state_data; + } else { + hs->pos = pos; + hs->token_type = TAG_NAME_OPEN; + hs->state = h5_state_tag_name_close; + } + return 1; + } else { + pos += 1; + } + } + + hs->token_start = hs->s + hs->pos; + hs->token_len = hs->len - hs->pos; + hs->token_type = TAG_NAME_OPEN; + hs->state = h5_state_eof; + return 1; +} + +/** + * 12.2.4.34 + */ +static int h5_state_before_attribute_name(h5_state_t* hs) +{ + int ch; + + TRACE(); + ch = h5_skip_white(hs); + switch (ch) { + case CHAR_EOF: { + return 0; + } + case CHAR_SLASH: { + hs->pos += 1; + return h5_state_self_closing_start_tag(hs); + } + case CHAR_GT: { + hs->state = h5_state_data; + hs->token_start = hs->s + hs->pos; + hs->token_len = 1; + hs->token_type = TAG_NAME_CLOSE; + hs->pos += 1; + return 1; + } + default: { + return h5_state_attribute_name(hs); + } + } +} + +static int h5_state_attribute_name(h5_state_t* hs) +{ + char ch; + size_t pos; + + TRACE(); + pos = hs->pos + 1; + while (pos < hs->len) { + ch = hs->s[pos]; + if (h5_is_white(ch)) { + hs->token_start = hs->s + hs->pos; + hs->token_len = pos - hs->pos; + hs->token_type = ATTR_NAME; + hs->state = h5_state_after_attribute_name; + hs->pos = pos + 1; + return 1; + } else if (ch == CHAR_SLASH) { + hs->token_start = hs->s + hs->pos; + hs->token_len = pos - hs->pos; + hs->token_type = ATTR_NAME; + hs->state = h5_state_self_closing_start_tag; + hs->pos = pos + 1; + return 1; + } else if (ch == CHAR_EQUALS) { + hs->token_start = hs->s + hs->pos; + hs->token_len = pos - hs->pos; + hs->token_type = ATTR_NAME; + hs->state = h5_state_before_attribute_value; + hs->pos = pos + 1; + return 1; + } else if (ch == CHAR_GT) { + hs->token_start = hs->s + hs->pos; + hs->token_len = pos - hs->pos; + hs->token_type = ATTR_NAME; + hs->state = h5_state_tag_name_close; + hs->pos = pos; + return 1; + } else { + pos += 1; + } + } + /* EOF */ + hs->token_start = hs->s + hs->pos; + hs->token_len = hs->len - hs->pos; + hs->token_type = ATTR_NAME; + hs->state = h5_state_eof; + hs->pos = hs->len; + return 1; +} + +/** + * 12.2.4.36 + */ +static int h5_state_after_attribute_name(h5_state_t* hs) +{ + int c; + + TRACE(); + c = h5_skip_white(hs); + switch (c) { + case CHAR_EOF: { + return 0; + } + case CHAR_SLASH: { + hs->pos += 1; + return h5_state_self_closing_start_tag(hs); + } + case CHAR_EQUALS: { + hs->pos += 1; + return h5_state_before_attribute_value(hs); + } + case CHAR_GT: { + return h5_state_tag_name_close(hs); + } + default: { + return h5_state_attribute_name(hs); + } + } +} + +/** + * 12.2.4.37 + */ +static int h5_state_before_attribute_value(h5_state_t* hs) +{ + int c; + TRACE(); + + c = h5_skip_white(hs); + + if (c == CHAR_EOF) { + hs->state = h5_state_eof; + return 0; + } + + if (c == CHAR_DOUBLE) { + return h5_state_attribute_value_double_quote(hs); + } else if (c == CHAR_SINGLE) { + return h5_state_attribute_value_single_quote(hs); + } else if (c == CHAR_TICK) { + /* NON STANDARD IE */ + return h5_state_attribute_value_back_quote(hs); + } else { + return h5_state_attribute_value_no_quote(hs); + } +} + + +static int h5_state_attribute_value_quote(h5_state_t* hs, char qchar) +{ + const char* idx; + + TRACE(); + + /* skip initial quote in normal case. + * don't do this "if (pos == 0)" since it means we have started + * in a non-data state. given an input of '>pos > 0) { + hs->pos += 1; + } + + + idx = (const char*) memchr(hs->s + hs->pos, qchar, hs->len - hs->pos); + if (idx == NULL) { + hs->token_start = hs->s + hs->pos; + hs->token_len = hs->len - hs->pos; + hs->token_type = ATTR_VALUE; + hs->state = h5_state_eof; + } else { + hs->token_start = hs->s + hs->pos; + hs->token_len = (size_t)(idx - hs->s) - hs->pos; + hs->token_type = ATTR_VALUE; + hs->state = h5_state_after_attribute_value_quoted_state; + hs->pos += hs->token_len + 1; + } + return 1; +} + +static +int h5_state_attribute_value_double_quote(h5_state_t* hs) +{ + TRACE(); + return h5_state_attribute_value_quote(hs, CHAR_DOUBLE); +} + +static +int h5_state_attribute_value_single_quote(h5_state_t* hs) +{ + TRACE(); + return h5_state_attribute_value_quote(hs, CHAR_SINGLE); +} + +static +int h5_state_attribute_value_back_quote(h5_state_t* hs) +{ + TRACE(); + return h5_state_attribute_value_quote(hs, CHAR_TICK); +} + +static int h5_state_attribute_value_no_quote(h5_state_t* hs) +{ + char ch; + size_t pos; + + TRACE(); + pos = hs->pos; + while (pos < hs->len) { + ch = hs->s[pos]; + if (h5_is_white(ch)) { + hs->token_type = ATTR_VALUE; + hs->token_start = hs->s + hs->pos; + hs->token_len = pos - hs->pos; + hs->pos = pos + 1; + hs->state = h5_state_before_attribute_name; + return 1; + } else if (ch == CHAR_GT) { + hs->token_type = ATTR_VALUE; + hs->token_start = hs->s + hs->pos; + hs->token_len = pos - hs->pos; + hs->pos = pos; + hs->state = h5_state_tag_name_close; + return 1; + } + pos += 1; + } + TRACE(); + /* EOF */ + hs->state = h5_state_eof; + hs->token_start = hs->s + hs->pos; + hs->token_len = hs->len - hs->pos; + hs->token_type = ATTR_VALUE; + return 1; +} + +/** + * 12.2.4.41 + */ +static int h5_state_after_attribute_value_quoted_state(h5_state_t* hs) +{ + char ch; + + TRACE(); + if (hs->pos >= hs->len) { + return 0; + } + ch = hs->s[hs->pos]; + if (h5_is_white(ch)) { + hs->pos += 1; + return h5_state_before_attribute_name(hs); + } else if (ch == CHAR_SLASH) { + hs->pos += 1; + return h5_state_self_closing_start_tag(hs); + } else if (ch == CHAR_GT) { + hs->token_start = hs->s + hs->pos; + hs->token_len = 1; + hs->token_type = TAG_NAME_CLOSE; + hs->pos += 1; + hs->state = h5_state_data; + return 1; + } else { + return h5_state_before_attribute_name(hs); + } +} + +/** + * 12.2.4.43 + */ +static int h5_state_self_closing_start_tag(h5_state_t* hs) +{ + char ch; + + TRACE(); + if (hs->pos >= hs->len) { + return 0; + } + ch = hs->s[hs->pos]; + if (ch == CHAR_GT) { + assert(hs->pos > 0); + hs->token_start = hs->s + hs->pos -1; + hs->token_len = 2; + hs->token_type = TAG_NAME_SELFCLOSE; + hs->state = h5_state_data; + hs->pos += 1; + return 1; + } else { + return h5_state_before_attribute_name(hs); + } +} + +/** + * 12.2.4.44 + */ +static int h5_state_bogus_comment(h5_state_t* hs) +{ + const char* idx; + + TRACE(); + idx = (const char*) memchr(hs->s + hs->pos, CHAR_GT, hs->len - hs->pos); + if (idx == NULL) { + hs->token_start = hs->s + hs->pos; + hs->token_len = hs->len - hs->pos; + hs->pos = hs->len; + hs->state = h5_state_eof; + } else { + hs->token_start = hs->s + hs->pos; + hs->token_len = (size_t)(idx - hs->s) - hs->pos; + hs->pos = (size_t)(idx - hs->s) + 1; + hs->state = h5_state_data; + } + + hs->token_type = TAG_COMMENT; + return 1; +} + +/** + * 12.2.4.44 ALT + */ +static int h5_state_bogus_comment2(h5_state_t* hs) +{ + const char* idx; + size_t pos; + + TRACE(); + pos = hs->pos; + while (1) { + idx = (const char*) memchr(hs->s + pos, CHAR_PERCENT, hs->len - pos); + if (idx == NULL || (idx + 1 >= hs->s + hs->len)) { + hs->token_start = hs->s + hs->pos; + hs->token_len = hs->len - hs->pos; + hs->pos = hs->len; + hs->token_type = TAG_COMMENT; + hs->state = h5_state_eof; + return 1; + } + + if (*(idx +1) != CHAR_GT) { + pos = (size_t)(idx - hs->s) + 1; + continue; + } + + /* ends in %> */ + hs->token_start = hs->s + hs->pos; + hs->token_len = (size_t)(idx - hs->s) - hs->pos; + hs->pos = (size_t)(idx - hs->s) + 2; + hs->state = h5_state_data; + hs->token_type = TAG_COMMENT; + return 1; + } +} + +/** + * 8.2.4.45 + */ +static int h5_state_markup_declaration_open(h5_state_t* hs) +{ + size_t remaining; + + TRACE(); + remaining = hs->len - hs->pos; + if (remaining >= 7 && + /* case insensitive */ + (hs->s[hs->pos + 0] == 'D' || hs->s[hs->pos + 0] == 'd') && + (hs->s[hs->pos + 1] == 'O' || hs->s[hs->pos + 1] == 'o') && + (hs->s[hs->pos + 2] == 'C' || hs->s[hs->pos + 2] == 'c') && + (hs->s[hs->pos + 3] == 'T' || hs->s[hs->pos + 3] == 't') && + (hs->s[hs->pos + 4] == 'Y' || hs->s[hs->pos + 4] == 'y') && + (hs->s[hs->pos + 5] == 'P' || hs->s[hs->pos + 5] == 'p') && + (hs->s[hs->pos + 6] == 'E' || hs->s[hs->pos + 6] == 'e') + ) { + return h5_state_doctype(hs); + } else if (remaining >= 7 && + /* upper case required */ + hs->s[hs->pos + 0] == '[' && + hs->s[hs->pos + 1] == 'C' && + hs->s[hs->pos + 2] == 'D' && + hs->s[hs->pos + 3] == 'A' && + hs->s[hs->pos + 4] == 'T' && + hs->s[hs->pos + 5] == 'A' && + hs->s[hs->pos + 6] == '[' + ) { + hs->pos += 7; + return h5_state_cdata(hs); + } else if (remaining >= 2 && + hs->s[hs->pos + 0] == '-' && + hs->s[hs->pos + 1] == '-') { + hs->pos += 2; + return h5_state_comment(hs); + } + + return h5_state_bogus_comment(hs); +} + +/** + * 12.2.4.48 + * 12.2.4.49 + * 12.2.4.50 + * 12.2.4.51 + * state machine spec is confusing since it can only look + * at one character at a time but simply it's comments end by: + * 1) EOF + * 2) ending in --> + * 3) ending in -!> + */ +static int h5_state_comment(h5_state_t* hs) +{ + char ch; + const char* idx; + size_t pos; + size_t offset; + const char* end = hs->s + hs->len; + + TRACE(); + pos = hs->pos; + while (1) { + + idx = (const char*) memchr(hs->s + pos, CHAR_DASH, hs->len - pos); + + /* did not find anything or has less than 3 chars left */ + if (idx == NULL || idx > hs->s + hs->len - 3) { + hs->state = h5_state_eof; + hs->token_start = hs->s + hs->pos; + hs->token_len = hs->len - hs->pos; + hs->token_type = TAG_COMMENT; + return 1; + } + offset = 1; + + /* skip all nulls */ + while (idx + offset < end && *(idx + offset) == 0) { + offset += 1; + } + if (idx + offset == end) { + hs->state = h5_state_eof; + hs->token_start = hs->s + hs->pos; + hs->token_len = hs->len - hs->pos; + hs->token_type = TAG_COMMENT; + return 1; + } + + ch = *(idx + offset); + if (ch != CHAR_DASH && ch != CHAR_BANG) { + pos = (size_t)(idx - hs->s) + 1; + continue; + } + + /* need to test */ +#if 0 + /* skip all nulls */ + while (idx + offset < end && *(idx + offset) == 0) { + offset += 1; + } + if (idx + offset == end) { + hs->state = h5_state_eof; + hs->token_start = hs->s + hs->pos; + hs->token_len = hs->len - hs->pos; + hs->token_type = TAG_COMMENT; + return 1; + } +#endif + + offset += 1; + if (idx + offset == end) { + hs->state = h5_state_eof; + hs->token_start = hs->s + hs->pos; + hs->token_len = hs->len - hs->pos; + hs->token_type = TAG_COMMENT; + return 1; + } + + + ch = *(idx + offset); + if (ch != CHAR_GT) { + pos = (size_t)(idx - hs->s) + 1; + continue; + } + offset += 1; + + /* ends in --> or -!> */ + hs->token_start = hs->s + hs->pos; + hs->token_len = (size_t)(idx - hs->s) - hs->pos; + hs->pos = (size_t)(idx + offset - hs->s); + hs->state = h5_state_data; + hs->token_type = TAG_COMMENT; + return 1; + } +} + +static int h5_state_cdata(h5_state_t* hs) +{ + const char* idx; + size_t pos; + + TRACE(); + pos = hs->pos; + while (1) { + idx = (const char*) memchr(hs->s + pos, CHAR_RIGHTB, hs->len - pos); + + /* did not find anything or has less than 3 chars left */ + if (idx == NULL || idx > hs->s + hs->len - 3) { + hs->state = h5_state_eof; + hs->token_start = hs->s + hs->pos; + hs->token_len = hs->len - hs->pos; + hs->token_type = DATA_TEXT; + return 1; + } else if ( *(idx+1) == CHAR_RIGHTB && *(idx+2) == CHAR_GT) { + hs->state = h5_state_data; + hs->token_start = hs->s + hs->pos; + hs->token_len = (size_t)(idx - hs->s) - hs->pos; + hs->pos = (size_t)(idx - hs->s) + 3; + hs->token_type = DATA_TEXT; + return 1; + } else { + pos = (size_t)(idx - hs->s) + 1; + } + } +} + +/** + * 8.2.4.52 + * http://www.w3.org/html/wg/drafts/html/master/syntax.html#doctype-state + */ +static int h5_state_doctype(h5_state_t* hs) +{ + const char* idx; + + TRACE(); + hs->token_start = hs->s + hs->pos; + hs->token_type = DOCTYPE; + + idx = (const char*) memchr(hs->s + hs->pos, CHAR_GT, hs->len - hs->pos); + if (idx == NULL) { + hs->state = h5_state_eof; + hs->token_len = hs->len - hs->pos; + } else { + hs->state = h5_state_data; + hs->token_len = (size_t)(idx - hs->s) - hs->pos; + hs->pos = (size_t)(idx - hs->s) + 1; + } + return 1; +} diff --git a/src/components/implementation/simple_nf/ndpi/libinjection_html5.h b/src/components/implementation/simple_nf/ndpi/libinjection_html5.h new file mode 100644 index 0000000000..29a1459684 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/libinjection_html5.h @@ -0,0 +1,54 @@ +#ifndef LIBINJECTION_HTML5 +#define LIBINJECTION_HTML5 + +#ifdef __cplusplus +extern "C" { +#endif + +/* pull in size_t */ + +#include + +enum html5_type { + DATA_TEXT + , TAG_NAME_OPEN + , TAG_NAME_CLOSE + , TAG_NAME_SELFCLOSE + , TAG_DATA + , TAG_CLOSE + , ATTR_NAME + , ATTR_VALUE + , TAG_COMMENT + , DOCTYPE +}; + +enum html5_flags { + DATA_STATE + , VALUE_NO_QUOTE + , VALUE_SINGLE_QUOTE + , VALUE_DOUBLE_QUOTE + , VALUE_BACK_QUOTE +}; + +struct h5_state; +typedef int (*ptr_html5_state)(struct h5_state*); + +typedef struct h5_state { + const char* s; + size_t len; + size_t pos; + int is_close; + ptr_html5_state state; + const char* token_start; + size_t token_len; + enum html5_type token_type; +} h5_state_t; + + +void libinjection_h5_init(h5_state_t* hs, const char* s, size_t len, enum html5_flags); +int libinjection_h5_next(h5_state_t* hs); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/components/implementation/simple_nf/ndpi/libinjection_sqli.c b/src/components/implementation/simple_nf/ndpi/libinjection_sqli.c new file mode 100644 index 0000000000..c411677347 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/libinjection_sqli.c @@ -0,0 +1,2325 @@ +/** + * Copyright 2012,2016 Nick Galbreath + * nickg@client9.com + * BSD License -- see COPYING.txt for details + * + * https://libinjection.client9.com/ + * + */ + +#include +#include +#include +#include +#include +#include + +#include "libinjection.h" +#include "libinjection_sqli.h" +#include "libinjection_sqli_data.h" + +#define LIBINJECTION_VERSION "3.9.2" + +#define LIBINJECTION_SQLI_TOKEN_SIZE sizeof(((stoken_t*)(0))->val) +#define LIBINJECTION_SQLI_MAX_TOKENS 5 + +#ifndef TRUE +#define TRUE 1 +#endif +#ifndef FALSE +#define FALSE 0 +#endif + +#define CHAR_NULL '\0' +#define CHAR_SINGLE '\'' +#define CHAR_DOUBLE '"' +#define CHAR_TICK '`' + +/* faster than calling out to libc isdigit */ +#define ISDIGIT(a) ((unsigned)((a) - '0') <= 9) + +#if 0 +#define FOLD_DEBUG printf("%d \t more=%d pos=%d left=%d\n", __LINE__, more, (int)pos, (int)left); +#else +#define FOLD_DEBUG +#endif + +/* + * not making public just yet + */ +typedef enum { + TYPE_NONE = 0 + , TYPE_KEYWORD = (int)'k' + , TYPE_UNION = (int)'U' + , TYPE_GROUP = (int)'B' + , TYPE_EXPRESSION = (int)'E' + , TYPE_SQLTYPE = (int)'t' + , TYPE_FUNCTION = (int)'f' + , TYPE_BAREWORD = (int)'n' + , TYPE_NUMBER = (int)'1' + , TYPE_VARIABLE = (int)'v' + , TYPE_STRING = (int)'s' + , TYPE_OPERATOR = (int)'o' + , TYPE_LOGIC_OPERATOR = (int)'&' + , TYPE_COMMENT = (int)'c' + , TYPE_COLLATE = (int)'A' + , TYPE_LEFTPARENS = (int)'(' + , TYPE_RIGHTPARENS = (int)')' /* not used? */ + , TYPE_LEFTBRACE = (int)'{' + , TYPE_RIGHTBRACE = (int)'}' + , TYPE_DOT = (int)'.' + , TYPE_COMMA = (int)',' + , TYPE_COLON = (int)':' + , TYPE_SEMICOLON = (int)';' + , TYPE_TSQL = (int)'T' /* TSQL start */ + , TYPE_UNKNOWN = (int)'?' + , TYPE_EVIL = (int)'X' /* unparsable, abort */ + , TYPE_FINGERPRINT = (int)'F' /* not really a token */ + , TYPE_BACKSLASH = (int)'\\' +} sqli_token_types; + +/** + * Initializes parsing state + * + */ +static char flag2delim(int flag) +{ + if (flag & FLAG_QUOTE_SINGLE) { + return CHAR_SINGLE; + } else if (flag & FLAG_QUOTE_DOUBLE) { + return CHAR_DOUBLE; + } else { + return CHAR_NULL; + } +} + +/* memchr2 finds a string of 2 characters inside another string + * This a specialized version of "memmem" or "memchr". + * 'memmem' doesn't exist on all platforms + * + * Porting notes: this is just a special version of + * astring.find("AB") + * + */ +static const char * +memchr2(const char *haystack, size_t haystack_len, char c0, char c1) +{ + const char *cur = haystack; + const char *last = haystack + haystack_len - 1; + + if (haystack_len < 2) { + return NULL; + } + + while (cur < last) { + /* safe since cur < len - 1 always */ + if (cur[0] == c0 && cur[1] == c1) { + return cur; + } + cur += 1; + } + + return NULL; +} + +/** + * memmem might not exist on some systems + */ +static const char * +my_memmem(const char* haystack, size_t hlen, const char* needle, size_t nlen) +{ + const char* cur; + const char* last; + assert(haystack); + assert(needle); + assert(nlen > 1); + last = haystack + hlen - nlen; + for (cur = haystack; cur <= last; ++cur) { + if (cur[0] == needle[0] && memcmp(cur, needle, nlen) == 0) { + return cur; + } + } + return NULL; +} + +/** Find largest string containing certain characters. + * + * C Standard library 'strspn' only works for 'c-strings' (null terminated) + * This works on arbitrary length. + * + * Performance notes: + * not critical + * + * Porting notes: + * if accept is 'ABC', then this function would be similar to + * a_regexp.match(a_str, '[ABC]*'), + */ +static size_t +strlenspn(const char *s, size_t len, const char *accept) +{ + size_t i; + for (i = 0; i < len; ++i) { + /* likely we can do better by inlining this function + * but this works for now + */ + if (strchr(accept, s[i]) == NULL) { + return i; + } + } + return len; +} + +static size_t +strlencspn(const char *s, size_t len, const char *accept) +{ + size_t i; + for (i = 0; i < len; ++i) { + /* likely we can do better by inlining this function + * but this works for now + */ + if (strchr(accept, s[i]) != NULL) { + return i; + } + } + return len; +} +static int char_is_white(char ch) { + /* ' ' space is 0x32 + '\t 0x09 \011 horizontal tab + '\n' 0x0a \012 new line + '\v' 0x0b \013 vertical tab + '\f' 0x0c \014 new page + '\r' 0x0d \015 carriage return + 0x00 \000 null (oracle) + 0xa0 \240 is Latin-1 + */ + return strchr(" \t\n\v\f\r\240\000", ch) != NULL; +} + +/* DANGER DANGER + * This is -very specialized function- + * + * this compares a ALL_UPPER CASE C STRING + * with a *arbitrary memory* + length + * + * Sane people would just make a copy, up-case + * and use a hash table. + * + * Required since libc version uses the current locale + * and is much slower. + */ +static int cstrcasecmp(const char *a, const char *b, size_t n) +{ + char cb; + + for (; n > 0; a++, b++, n--) { + cb = *b; + if (cb >= 'a' && cb <= 'z') { + cb -= 0x20; + } + if (*a != cb) { + return *a - cb; + } else if (*a == '\0') { + return -1; + } + } + + return (*a == 0) ? 0 : 1; +} + +/** + * Case sensitive string compare. + * Here only to make code more readable + */ +static int streq(const char *a, const char *b) +{ + return strcmp(a, b) == 0; +} + +/** + * + * + * + * Porting Notes: + * given a mapping/hash of string to char + * this is just + * typecode = mapping[key.upper()] + */ + +static char bsearch_keyword_type(const char *key, size_t len, + const keyword_t * keywords, size_t numb) +{ + size_t pos; + size_t left = 0; + size_t right = numb - 1; + + while (left < right) { + pos = (left + right) >> 1; + + /* arg0 = upper case only, arg1 = mixed case */ + if (cstrcasecmp(keywords[pos].word, key, len) < 0) { + left = pos + 1; + } else { + right = pos; + } + } + if ((left == right) && cstrcasecmp(keywords[left].word, key, len) == 0) { + return keywords[left].type; + } else { + return CHAR_NULL; + } +} + +static char is_keyword(const char* key, size_t len) +{ + return bsearch_keyword_type(key, len, sql_keywords, sql_keywords_sz); +} + +/* st_token methods + * + * The following functions manipulates the stoken_t type + * + * + */ + +static void st_clear(stoken_t * st) +{ + memset(st, 0, sizeof(stoken_t)); +} + +static void st_assign_char(stoken_t * st, const char stype, size_t pos, size_t len, + const char value) +{ + /* done to eliminate unused warning */ + (void)len; + st->type = (char) stype; + st->pos = pos; + st->len = 1; + st->val[0] = value; + st->val[1] = CHAR_NULL; +} + +static void st_assign(stoken_t * st, const char stype, + size_t pos, size_t len, const char* value) +{ + const size_t MSIZE = LIBINJECTION_SQLI_TOKEN_SIZE; + size_t last = len < MSIZE ? len : (MSIZE - 1); + st->type = (char) stype; + st->pos = pos; + st->len = last; + memcpy(st->val, value, last); + st->val[last] = CHAR_NULL; +} + +static void st_copy(stoken_t * dest, const stoken_t * src) +{ + memcpy(dest, src, sizeof(stoken_t)); +} + +static int st_is_arithmetic_op(const stoken_t* st) +{ + const char ch = st->val[0]; + return (st->type == TYPE_OPERATOR && st->len == 1 && + (ch == '*' || ch == '/' || ch == '-' || ch == '+' || ch == '%')); +} + +static int st_is_unary_op(const stoken_t * st) +{ + const char* str = st->val; + const size_t len = st->len; + + if (st->type != TYPE_OPERATOR) { + return FALSE; + } + + switch (len) { + case 1: + return *str == '+' || *str == '-' || *str == '!' || *str == '~'; + case 2: + return str[0] == '!' && str[1] == '!'; + case 3: + return cstrcasecmp("NOT", str, 3) == 0; + default: + return FALSE; + } +} + +/* Parsers + * + * + */ + +static size_t parse_white(struct libinjection_sqli_state * sf) +{ + return sf->pos + 1; +} + +static size_t parse_operator1(struct libinjection_sqli_state * sf) +{ + const char *cs = sf->s; + size_t pos = sf->pos; + + st_assign_char(sf->current, TYPE_OPERATOR, pos, 1, cs[pos]); + return pos + 1; +} + +static size_t parse_other(struct libinjection_sqli_state * sf) +{ + const char *cs = sf->s; + size_t pos = sf->pos; + + st_assign_char(sf->current, TYPE_UNKNOWN, pos, 1, cs[pos]); + return pos + 1; +} + +static size_t parse_char(struct libinjection_sqli_state * sf) +{ + const char *cs = sf->s; + size_t pos = sf->pos; + + st_assign_char(sf->current, cs[pos], pos, 1, cs[pos]); + return pos + 1; +} + +static size_t parse_eol_comment(struct libinjection_sqli_state * sf) +{ + const char *cs = sf->s; + const size_t slen = sf->slen; + size_t pos = sf->pos; + + const char *endpos = + (const char *) memchr((const void *) (cs + pos), '\n', slen - pos); + if (endpos == NULL) { + st_assign(sf->current, TYPE_COMMENT, pos, slen - pos, cs + pos); + return slen; + } else { + st_assign(sf->current, TYPE_COMMENT, pos, (size_t)(endpos - cs) - pos, cs + pos); + return (size_t)((endpos - cs) + 1); + } +} + +/** In ANSI mode, hash is an operator + * In MYSQL mode, it's a EOL comment like '--' + */ +static size_t parse_hash(struct libinjection_sqli_state * sf) +{ + sf->stats_comment_hash += 1; + if (sf->flags & FLAG_SQL_MYSQL) { + sf->stats_comment_hash += 1; + return parse_eol_comment(sf); + } else { + st_assign_char(sf->current, TYPE_OPERATOR, sf->pos, 1, '#'); + return sf->pos + 1; + } +} + +static size_t parse_dash(struct libinjection_sqli_state * sf) +{ + const char *cs = sf->s; + const size_t slen = sf->slen; + size_t pos = sf->pos; + + /* + * five cases + * 1) --[white] this is always a SQL comment + * 2) --[EOF] this is a comment + * 3) --[notwhite] in MySQL this is NOT a comment but two unary operators + * 4) --[notwhite] everyone else thinks this is a comment + * 5) -[not dash] '-' is a unary operator + */ + + if (pos + 2 < slen && cs[pos + 1] == '-' && char_is_white(cs[pos+2]) ) { + return parse_eol_comment(sf); + } else if (pos +2 == slen && cs[pos + 1] == '-') { + return parse_eol_comment(sf); + } else if (pos + 1 < slen && cs[pos + 1] == '-' && (sf->flags & FLAG_SQL_ANSI)) { + /* --[not-white] not-white case: + * + */ + sf->stats_comment_ddx += 1; + return parse_eol_comment(sf); + } else { + st_assign_char(sf->current, TYPE_OPERATOR, pos, 1, '-'); + return pos + 1; + } +} + + +/** This detects MySQL comments, comments that + * start with /x! We just ban these now but + * previously we attempted to parse the inside + * + * For reference: + * the form of /x![anything]x/ or /x!12345[anything] x/ + * + * Mysql 3 (maybe 4), allowed this: + * /x!0selectx/ 1; + * where 0 could be any number. + * + * The last version of MySQL 3 was in 2003. + + * It is unclear if the MySQL 3 syntax was allowed + * in MySQL 4. The last version of MySQL 4 was in 2008 + * + */ +static size_t is_mysql_comment(const char *cs, const size_t len, size_t pos) +{ + /* so far... + * cs[pos] == '/' && cs[pos+1] == '*' + */ + + if (pos + 2 >= len) { + /* not a mysql comment */ + return 0; + } + + if (cs[pos + 2] != '!') { + /* not a mysql comment */ + return 0; + } + + /* + * this is a mysql comment + * got "/x!" + */ + return 1; +} + +static size_t parse_slash(struct libinjection_sqli_state * sf) +{ + const char* ptr; + size_t clen; + const char *cs = sf->s; + const size_t slen = sf->slen; + size_t pos = sf->pos; + const char* cur = cs + pos; + char ctype = TYPE_COMMENT; + size_t pos1 = pos + 1; + if (pos1 == slen || cs[pos1] != '*') { + return parse_operator1(sf); + } + + /* + * skip over initial '/x' + */ + ptr = memchr2(cur + 2, slen - (pos + 2), '*', '/'); + + /* + * (ptr == NULL) causes false positive in cppcheck 1.61 + * casting to type seems to fix it + */ + if (ptr == (const char*) NULL) { + /* till end of line */ + clen = slen - pos; + } else { + clen = (size_t)(ptr + 2 - cur); + } + + /* + * postgresql allows nested comments which makes + * this is incompatible with parsing so + * if we find a '/x' inside the coment, then + * make a new token. + * + * Also, Mysql's "conditional" comments for version + * are an automatic black ban! + */ + + if(ptr && (memchr2(cur + 2, (size_t)(ptr - (cur + 1)), '/', '*') != NULL)) { + ctype = TYPE_EVIL; + } else if (is_mysql_comment(cs, slen, pos)) { + ctype = TYPE_EVIL; + } + + st_assign(sf->current, ctype, pos, clen, cs + pos); + return pos + clen; +} + + +static size_t parse_backslash(struct libinjection_sqli_state * sf) +{ + const char *cs = sf->s; + const size_t slen = sf->slen; + size_t pos = sf->pos; + + /* + * Weird MySQL alias for NULL, "\N" (capital N only) + */ + if (pos + 1 < slen && cs[pos +1] == 'N') { + st_assign(sf->current, TYPE_NUMBER, pos, 2, cs + pos); + return pos + 2; + } else { + st_assign_char(sf->current, TYPE_BACKSLASH, pos, 1, cs[pos]); + return pos + 1; + } +} + +static size_t parse_operator2(struct libinjection_sqli_state * sf) +{ + char ch; + const char *cs = sf->s; + const size_t slen = sf->slen; + size_t pos = sf->pos; + + if (pos + 1 >= slen) { + return parse_operator1(sf); + } + + if (pos + 2 < slen && + cs[pos] == '<' && + cs[pos + 1] == '=' && + cs[pos + 2] == '>') { + /* + * special 3-char operator + */ + st_assign(sf->current, TYPE_OPERATOR, pos, 3, cs + pos); + return pos + 3; + } + + ch = sf->lookup(sf, LOOKUP_OPERATOR, cs + pos, 2); + if (ch != CHAR_NULL) { + st_assign(sf->current, ch, pos, 2, cs+pos); + return pos + 2; + } + + /* + * not an operator.. what to do with the two + * characters we got? + */ + + if (cs[pos] == ':') { + /* ':' is not an operator */ + st_assign(sf->current, TYPE_COLON, pos, 1, cs+pos); + return pos + 1; + } else { + /* + * must be a single char operator + */ + return parse_operator1(sf); + } +} + +/* + * Ok! " \" " one backslash = escaped! + * " \\" " two backslash = not escaped! + * "\\\" " three backslash = escaped! + */ +static int is_backslash_escaped(const char* end, const char* start) +{ + const char* ptr; + for (ptr = end; ptr >= start; ptr--) { + if (*ptr != '\\') { + break; + } + } + /* if number of backslashes is odd, it is escaped */ + + return (end - ptr) & 1; +} + +static size_t is_double_delim_escaped(const char* cur, const char* end) +{ + return ((cur + 1) < end) && *(cur+1) == *cur; +} + +/* Look forward for doubling of delimiter + * + * case 'foo''bar' --> foo''bar + * + * ending quote isn't duplicated (i.e. escaped) + * since it's the wrong char or EOL + * + */ +static size_t parse_string_core(const char *cs, const size_t len, size_t pos, + stoken_t * st, char delim, size_t offset) +{ + /* + * offset is to skip the perhaps first quote char + */ + const char *qpos = + (const char *) memchr((const void *) (cs + pos + offset), delim, + len - pos - offset); + + /* + * then keep string open/close info + */ + if (offset > 0) { + /* + * this is real quote + */ + st->str_open = delim; + } else { + /* + * this was a simulated quote + */ + st->str_open = CHAR_NULL; + } + + while (TRUE) { + if (qpos == NULL) { + /* + * string ended with no trailing quote + * assign what we have + */ + st_assign(st, TYPE_STRING, pos + offset, len - pos - offset, cs + pos + offset); + st->str_close = CHAR_NULL; + return len; + } else if ( is_backslash_escaped(qpos - 1, cs + pos + offset)) { + /* keep going, move ahead one character */ + qpos = + (const char *) memchr((const void *) (qpos + 1), delim, + (size_t)((cs + len) - (qpos + 1))); + continue; + } else if (is_double_delim_escaped(qpos, cs + len)) { + /* keep going, move ahead two characters */ + qpos = + (const char *) memchr((const void *) (qpos + 2), delim, + (size_t)((cs + len) - (qpos + 2))); + continue; + } else { + /* hey it's a normal string */ + st_assign(st, TYPE_STRING, pos + offset, + (size_t)(qpos - (cs + pos + offset)), cs + pos + offset); + st->str_close = delim; + return (size_t)(qpos - cs + 1); + } + } +} + +/** + * Used when first char is a ' or " + */ +static size_t parse_string(struct libinjection_sqli_state * sf) +{ + const char *cs = sf->s; + const size_t slen = sf->slen; + size_t pos = sf->pos; + + /* + * assert cs[pos] == single or double quote + */ + return parse_string_core(cs, slen, pos, sf->current, cs[pos], 1); +} + +/** + * Used when first char is: + * N or n: mysql "National Character set" + * E : psql "Escaped String" + */ +static size_t parse_estring(struct libinjection_sqli_state * sf) +{ + const char *cs = sf->s; + const size_t slen = sf->slen; + size_t pos = sf->pos; + + if (pos + 2 >= slen || cs[pos+1] != CHAR_SINGLE) { + return parse_word(sf); + } + return parse_string_core(cs, slen, pos, sf->current, CHAR_SINGLE, 2); +} + +static size_t parse_ustring(struct libinjection_sqli_state * sf) +{ + const char *cs = sf->s; + size_t slen = sf->slen; + size_t pos = sf->pos; + + if (pos + 2 < slen && cs[pos+1] == '&' && cs[pos+2] == '\'') { + sf->pos += 2; + pos = parse_string(sf); + sf->current->str_open = 'u'; + if (sf->current->str_close == '\'') { + sf->current->str_close = 'u'; + } + return pos; + } else { + return parse_word(sf); + } +} + +static size_t parse_qstring_core(struct libinjection_sqli_state * sf, size_t offset) +{ + char ch; + const char *strend; + const char *cs = sf->s; + size_t slen = sf->slen; + size_t pos = sf->pos + offset; + + /* if we are already at end of string.. + if current char is not q or Q + if we don't have 2 more chars + if char2 != a single quote + then, just treat as word + */ + if (pos >= slen || + (cs[pos] != 'q' && cs[pos] != 'Q') || + pos + 2 >= slen || + cs[pos + 1] != '\'') { + return parse_word(sf); + } + + ch = cs[pos + 2]; + + /* the ch > 127 is un-needed since + * we assume char is signed + */ + if (ch < 33 /* || ch > 127 */) { + return parse_word(sf); + } + switch (ch) { + case '(' : ch = ')'; break; + case '[' : ch = ']'; break; + case '{' : ch = '}'; break; + case '<' : ch = '>'; break; + } + + strend = memchr2(cs + pos + 3, slen - pos - 3, ch, '\''); + if (strend == NULL) { + st_assign(sf->current, TYPE_STRING, pos + 3, slen - pos - 3, cs + pos + 3); + sf->current->str_open = 'q'; + sf->current->str_close = CHAR_NULL; + return slen; + } else { + st_assign(sf->current, TYPE_STRING, pos + 3, (size_t)(strend - cs) - pos - 3, cs + pos + 3); + sf->current->str_open = 'q'; + sf->current->str_close = 'q'; + return (size_t)(strend - cs + 2); + } +} + +/* + * Oracle's q string + */ +static size_t parse_qstring(struct libinjection_sqli_state * sf) +{ + return parse_qstring_core(sf, 0); +} + +/* + * mysql's N'STRING' or + * ... Oracle's nq string + */ +static size_t parse_nqstring(struct libinjection_sqli_state * sf) +{ + size_t slen = sf->slen; + size_t pos = sf->pos; + if (pos + 2 < slen && sf->s[pos+1] == CHAR_SINGLE) { + return parse_estring(sf); + } + return parse_qstring_core(sf, 1); +} + +/* + * binary literal string + * re: [bB]'[01]*' + */ +static size_t parse_bstring(struct libinjection_sqli_state *sf) +{ + size_t wlen; + const char *cs = sf->s; + size_t pos = sf->pos; + size_t slen = sf->slen; + + /* need at least 2 more characters + * if next char isn't a single quote, then + * continue as normal word + */ + if (pos + 2 >= slen || cs[pos+1] != '\'') { + return parse_word(sf); + } + + wlen = strlenspn(cs + pos + 2, sf->slen - pos - 2, "01"); + if (pos + 2 + wlen >= slen || cs[pos + 2 + wlen] != '\'') { + return parse_word(sf); + } + st_assign(sf->current, TYPE_NUMBER, pos, wlen + 3, cs + pos); + return pos + 2 + wlen + 1; +} + +/* + * hex literal string + * re: [xX]'[0123456789abcdefABCDEF]*' + * mysql has requirement of having EVEN number of chars, + * but pgsql does not + */ +static size_t parse_xstring(struct libinjection_sqli_state *sf) +{ + size_t wlen; + const char *cs = sf->s; + size_t pos = sf->pos; + size_t slen = sf->slen; + + /* need at least 2 more characters + * if next char isn't a single quote, then + * continue as normal word + */ + if (pos + 2 >= slen || cs[pos+1] != '\'') { + return parse_word(sf); + } + + wlen = strlenspn(cs + pos + 2, sf->slen - pos - 2, "0123456789ABCDEFabcdef"); + if (pos + 2 + wlen >= slen || cs[pos + 2 + wlen] != '\'') { + return parse_word(sf); + } + st_assign(sf->current, TYPE_NUMBER, pos, wlen + 3, cs + pos); + return pos + 2 + wlen + 1; +} + +/** + * This handles MS SQLSERVER bracket words + * http://stackoverflow.com/questions/3551284/sql-serverwhat-do-brackets-mean-around-column-name + * + */ +static size_t parse_bword(struct libinjection_sqli_state * sf) +{ + const char *cs = sf->s; + size_t pos = sf->pos; + const char* endptr = (const char*) memchr(cs + pos, ']', sf->slen - pos); + if (endptr == NULL) { + st_assign(sf->current, TYPE_BAREWORD, pos, sf->slen - pos, cs + pos); + return sf->slen; + } else { + st_assign(sf->current, TYPE_BAREWORD, pos, (size_t)(endptr - cs) - pos + 1, cs + pos); + return (size_t)((endptr - cs) + 1); + } +} + +static size_t parse_word(struct libinjection_sqli_state * sf) +{ + char ch; + char delim; + size_t i; + const char *cs = sf->s; + size_t pos = sf->pos; + size_t wlen = strlencspn(cs + pos, sf->slen - pos, + " []{}<>:\\?=@!#~+-*/&|^%(),';\t\n\v\f\r\"\240\000"); + + st_assign(sf->current, TYPE_BAREWORD, pos, wlen, cs + pos); + + /* now we need to look inside what we good for "." and "`" + * and see if what is before is a keyword or not + */ + for (i =0; i < sf->current->len; ++i) { + delim = sf->current->val[i]; + if (delim == '.' || delim == '`') { + ch = sf->lookup(sf, LOOKUP_WORD, sf->current->val, i); + if (ch != TYPE_NONE && ch != TYPE_BAREWORD) { + /* needed for swig */ + st_clear(sf->current); + /* + * we got something like "SELECT.1" + * or SELECT`column` + */ + st_assign(sf->current, ch, pos, i, cs + pos); + return pos + i; + } + } + } + + /* + * do normal lookup with word including '.' + */ + if (wlen < LIBINJECTION_SQLI_TOKEN_SIZE) { + + ch = sf->lookup(sf, LOOKUP_WORD, sf->current->val, wlen); + if (ch == CHAR_NULL) { + ch = TYPE_BAREWORD; + } + sf->current->type = ch; + } + return pos + wlen; +} + +/* MySQL backticks are a cross between string and + * and a bare word. + * + */ +static size_t parse_tick(struct libinjection_sqli_state* sf) +{ + size_t pos = parse_string_core(sf->s, sf->slen, sf->pos, sf->current, CHAR_TICK, 1); + + /* we could check to see if start and end of + * of string are both "`", i.e. make sure we have + * matching set. `foo` vs. `foo + * but I don't think it matters much + */ + + /* check value of string to see if it's a keyword, + * function, operator, etc + */ + char ch = sf->lookup(sf, LOOKUP_WORD, sf->current->val, sf->current->len); + if (ch == TYPE_FUNCTION) { + /* if it's a function, then convert token */ + sf->current->type = TYPE_FUNCTION; + } else { + /* otherwise it's a 'n' type -- mysql treats + * everything as a bare word + */ + sf->current->type = TYPE_BAREWORD; + } + return pos; +} + +static size_t parse_var(struct libinjection_sqli_state * sf) +{ + size_t xlen; + const char *cs = sf->s; + const size_t slen = sf->slen; + size_t pos = sf->pos + 1; + + /* + * var_count is only used to reconstruct + * the input. It counts the number of '@' + * seen 0 in the case of NULL, 1 or 2 + */ + + /* + * move past optional other '@' + */ + if (pos < slen && cs[pos] == '@') { + pos += 1; + sf->current->count = 2; + } else { + sf->current->count = 1; + } + + /* + * MySQL allows @@`version` + */ + if (pos < slen) { + if (cs[pos] == '`') { + sf->pos = pos; + pos = parse_tick(sf); + sf->current->type = TYPE_VARIABLE; + return pos; + } else if (cs[pos] == CHAR_SINGLE || cs[pos] == CHAR_DOUBLE) { + sf->pos = pos; + pos = parse_string(sf); + sf->current->type = TYPE_VARIABLE; + return pos; + } + } + + + xlen = strlencspn(cs + pos, slen - pos, + " <>:\\?=@!#~+-*/&|^%(),';\t\n\v\f\r'`\""); + if (xlen == 0) { + st_assign(sf->current, TYPE_VARIABLE, pos, 0, cs + pos); + return pos; + } else { + st_assign(sf->current, TYPE_VARIABLE, pos, xlen, cs + pos); + return pos + xlen; + } +} + +static size_t parse_money(struct libinjection_sqli_state *sf) +{ + size_t xlen; + const char* strend; + const char *cs = sf->s; + const size_t slen = sf->slen; + size_t pos = sf->pos; + + if (pos + 1 == slen) { + /* end of line */ + st_assign_char(sf->current, TYPE_BAREWORD, pos, 1, '$'); + return slen; + } + + /* + * $1,000.00 or $1.000,00 ok! + * This also parses $....,,,111 but that's ok + */ + + xlen = strlenspn(cs + pos + 1, slen - pos - 1, "0123456789.,"); + if (xlen == 0) { + if (cs[pos + 1] == '$') { + /* we have $$ .. find ending $$ and make string */ + strend = memchr2(cs + pos + 2, slen - pos -2, '$', '$'); + if (strend == NULL) { + /* fell off edge */ + st_assign(sf->current, TYPE_STRING, pos + 2, slen - (pos + 2), cs + pos + 2); + sf->current->str_open = '$'; + sf->current->str_close = CHAR_NULL; + return slen; + } else { + st_assign(sf->current, TYPE_STRING, pos + 2, + (size_t)(strend - (cs + pos + 2)), cs + pos + 2); + sf->current->str_open = '$'; + sf->current->str_close = '$'; + return (size_t)(strend - cs + 2); + } + } else { + /* ok it's not a number or '$$', but maybe it's pgsql "$ quoted strings" */ + xlen = strlenspn(cs + pos + 1, slen - pos - 1, "abcdefghjiklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"); + if (xlen == 0) { + /* hmm it's "$" _something_ .. just add $ and keep going*/ + st_assign_char(sf->current, TYPE_BAREWORD, pos, 1, '$'); + return pos + 1; + } + /* we have $foobar????? */ + /* is it $foobar$ */ + if (pos + xlen + 1 == slen || cs[pos+xlen+1] != '$') { + /* not $foobar$, or fell off edge */ + st_assign_char(sf->current, TYPE_BAREWORD, pos, 1, '$'); + return pos + 1; + } + + /* we have $foobar$ ... find it again */ + strend = my_memmem(cs+xlen+2, slen - (pos+xlen+2), cs + pos, xlen+2); + + if (strend == NULL || ((size_t)(strend - cs) < (pos+xlen+2))) { + /* fell off edge */ + st_assign(sf->current, TYPE_STRING, pos+xlen+2, slen - pos - xlen - 2, cs+pos+xlen+2); + sf->current->str_open = '$'; + sf->current->str_close = CHAR_NULL; + return slen; + } else { + /* got one */ + st_assign(sf->current, TYPE_STRING, pos+xlen+2, + (size_t)(strend - (cs + pos + xlen + 2)), cs+pos+xlen+2); + sf->current->str_open = '$'; + sf->current->str_close = '$'; + return (size_t)((strend + xlen + 2) - cs); + } + } + } else if (xlen == 1 && cs[pos + 1] == '.') { + /* $. should parsed as a word */ + return parse_word(sf); + } else { + st_assign(sf->current, TYPE_NUMBER, pos, 1 + xlen, cs + pos); + return pos + 1 + xlen; + } +} + +static size_t parse_number(struct libinjection_sqli_state * sf) +{ + size_t xlen; + size_t start; + const char* digits = NULL; + const char *cs = sf->s; + const size_t slen = sf->slen; + size_t pos = sf->pos; + int have_e = 0; + int have_exp = 0; + + /* cs[pos] == '0' has 1/10 chance of being true, + * while pos+1< slen is almost always true + */ + if (cs[pos] == '0' && pos + 1 < slen) { + if (cs[pos + 1] == 'X' || cs[pos + 1] == 'x') { + digits = "0123456789ABCDEFabcdef"; + } else if (cs[pos + 1] == 'B' || cs[pos + 1] == 'b') { + digits = "01"; + } + + if (digits) { + xlen = strlenspn(cs + pos + 2, slen - pos - 2, digits); + if (xlen == 0) { + st_assign(sf->current, TYPE_BAREWORD, pos, 2, cs + pos); + return pos + 2; + } else { + st_assign(sf->current, TYPE_NUMBER, pos, 2 + xlen, cs + pos); + return pos + 2 + xlen; + } + } + } + + start = pos; + while (pos < slen && ISDIGIT(cs[pos])) { + pos += 1; + } + + if (pos < slen && cs[pos] == '.') { + pos += 1; + while (pos < slen && ISDIGIT(cs[pos])) { + pos += 1; + } + if (pos - start == 1) { + /* only one character read so far */ + st_assign_char(sf->current, TYPE_DOT, start, 1, '.'); + return pos; + } + } + + if (pos < slen) { + if (cs[pos] == 'E' || cs[pos] == 'e') { + have_e = 1; + pos += 1; + if (pos < slen && (cs[pos] == '+' || cs[pos] == '-')) { + pos += 1; + } + while (pos < slen && ISDIGIT(cs[pos])) { + have_exp = 1; + pos += 1; + } + } + } + + /* oracle's ending float or double suffix + * http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements003.htm#i139891 + */ + if (pos < slen && (cs[pos] == 'd' || cs[pos] == 'D' || cs[pos] == 'f' || cs[pos] == 'F')) { + if (pos + 1 == slen) { + /* line ends evaluate "... 1.2f$" as '1.2f' */ + pos += 1; + } else if ((char_is_white(cs[pos+1]) || cs[pos+1] == ';')) { + /* + * easy case, evaluate "... 1.2f ... as '1.2f' + */ + pos += 1; + } else if (cs[pos+1] == 'u' || cs[pos+1] == 'U') { + /* + * a bit of a hack but makes '1fUNION' parse as '1f UNION' + */ + pos += 1; + } else { + /* it's like "123FROM" */ + /* parse as "123" only */ + } + } + + if (have_e == 1 && have_exp == 0) { + /* very special form of + * "1234.e" + * "10.10E" + * ".E" + * this is a WORD not a number!! */ + st_assign(sf->current, TYPE_BAREWORD, start, pos - start, cs + start); + } else { + st_assign(sf->current, TYPE_NUMBER, start, pos - start, cs + start); + } + return pos; +} + +/* + * API to return version. This allows us to increment the version + * without having to regenerated the SWIG (or other binding) in minor + * releases. + */ +const char* libinjection_version() +{ + return LIBINJECTION_VERSION; +} + +int libinjection_sqli_tokenize(struct libinjection_sqli_state * sf) +{ + pt2Function fnptr; + size_t *pos = &sf->pos; + stoken_t *current = sf->current; + const char *s = sf->s; + const size_t slen = sf->slen; + + if (slen == 0) { + return FALSE; + } + + st_clear(current); + sf->current = current; + + /* + * if we are at beginning of string + * and in single-quote or double quote mode + * then pretend the input starts with a quote + */ + if (*pos == 0 && (sf->flags & (FLAG_QUOTE_SINGLE | FLAG_QUOTE_DOUBLE))) { + *pos = parse_string_core(s, slen, 0, current, flag2delim(sf->flags), 0); + sf->stats_tokens += 1; + return TRUE; + } + + while (*pos < slen) { + + /* + * get current character + */ + const unsigned char ch = (unsigned char) (s[*pos]); + + /* + * look up the parser, and call it + * + * Porting Note: this is mapping of char to function + * charparsers[ch]() + */ + fnptr = char_parse_map[ch]; + + *pos = (*fnptr) (sf); + + /* + * + */ + if (current->type != CHAR_NULL) { + sf->stats_tokens += 1; + return TRUE; + } + } + return FALSE; +} + +void libinjection_sqli_init(struct libinjection_sqli_state * sf, const char *s, size_t len, int flags) +{ + if (flags == 0) { + flags = FLAG_QUOTE_NONE | FLAG_SQL_ANSI; + } + + memset(sf, 0, sizeof(struct libinjection_sqli_state)); + sf->s = s; + sf->slen = len; + sf->lookup = libinjection_sqli_lookup_word; + sf->userdata = 0; + sf->flags = flags; + sf->current = &(sf->tokenvec[0]); +} + +void libinjection_sqli_reset(struct libinjection_sqli_state * sf, int flags) +{ + void *userdata = sf->userdata; + ptr_lookup_fn lookup = sf->lookup;; + + if (flags == 0) { + flags = FLAG_QUOTE_NONE | FLAG_SQL_ANSI; + } + libinjection_sqli_init(sf, sf->s, sf->slen, flags); + sf->lookup = lookup; + sf->userdata = userdata; +} + +void libinjection_sqli_callback(struct libinjection_sqli_state * sf, ptr_lookup_fn fn, void* userdata) +{ + if (fn == NULL) { + sf->lookup = libinjection_sqli_lookup_word; + sf->userdata = (void*)(NULL); + } else { + sf->lookup = fn; + sf->userdata = userdata; + } +} + +/** See if two tokens can be merged since they are compound SQL phrases. + * + * This takes two tokens, and, if they are the right type, + * merges their values together. Then checks to see if the + * new value is special using the PHRASES mapping. + * + * Example: "UNION" + "ALL" ==> "UNION ALL" + * + * C Security Notes: this is safe to use C-strings (null-terminated) + * since the types involved by definition do not have embedded nulls + * (e.g. there is no keyword with embedded null) + * + * Porting Notes: since this is C, it's oddly complicated. + * This is just: multikeywords[token.value + ' ' + token2.value] + * + */ +static int syntax_merge_words(struct libinjection_sqli_state * sf,stoken_t * a, stoken_t * b) +{ + size_t sz1; + size_t sz2; + size_t sz3; + char tmp[LIBINJECTION_SQLI_TOKEN_SIZE]; + char ch; + + /* first token is of right type? */ + if (! + (a->type == TYPE_KEYWORD || + a->type == TYPE_BAREWORD || + a->type == TYPE_OPERATOR || + a->type == TYPE_UNION || + a->type == TYPE_FUNCTION || + a->type == TYPE_EXPRESSION || + a->type == TYPE_TSQL || + a->type == TYPE_SQLTYPE)) { + return FALSE; + } + + if (! + (b->type == TYPE_KEYWORD || + b->type == TYPE_BAREWORD || + b->type == TYPE_OPERATOR || + b->type == TYPE_UNION || + b->type == TYPE_FUNCTION || + b->type == TYPE_EXPRESSION || + b->type == TYPE_TSQL || + b->type == TYPE_SQLTYPE || + b->type == TYPE_LOGIC_OPERATOR)) { + return FALSE; + } + + sz1 = a->len; + sz2 = b->len; + sz3 = sz1 + sz2 + 1; /* +1 for space in the middle */ + if (sz3 >= LIBINJECTION_SQLI_TOKEN_SIZE) { /* make sure there is room for ending null */ + return FALSE; + } + /* + * oddly annoying last.val + ' ' + current.val + */ + memcpy(tmp, a->val, sz1); + tmp[sz1] = ' '; + memcpy(tmp + sz1 + 1, b->val, sz2); + tmp[sz3] = CHAR_NULL; + ch = sf->lookup(sf, LOOKUP_WORD, tmp, sz3); + + if (ch != CHAR_NULL) { + st_assign(a, ch, a->pos, sz3, tmp); + return TRUE; + } else { + return FALSE; + } +} + +int libinjection_sqli_fold(struct libinjection_sqli_state * sf) +{ + stoken_t last_comment; + + /* POS is the position of where the NEXT token goes */ + size_t pos = 0; + + /* LEFT is a count of how many tokens that are already + folded or processed (i.e. part of the fingerprint) */ + size_t left = 0; + + int more = 1; + + st_clear(&last_comment); + + /* Skip all initial comments, right-parens ( and unary operators + * + */ + sf->current = &(sf->tokenvec[0]); + while (more) { + more = libinjection_sqli_tokenize(sf); + if ( ! (sf->current->type == TYPE_COMMENT || + sf->current->type == TYPE_LEFTPARENS || + sf->current->type == TYPE_SQLTYPE || + st_is_unary_op(sf->current))) { + break; + } + } + + if (! more) { + /* If input was only comments, unary or (, then exit */ + return 0; + } else { + /* it's some other token */ + pos += 1; + } + + while (1) { + FOLD_DEBUG; + + /* do we have all the max number of tokens? if so do + * some special cases for 5 tokens + */ + if (pos >= LIBINJECTION_SQLI_MAX_TOKENS) { + if ( + ( + sf->tokenvec[0].type == TYPE_NUMBER && + (sf->tokenvec[1].type == TYPE_OPERATOR || sf->tokenvec[1].type == TYPE_COMMA) && + sf->tokenvec[2].type == TYPE_LEFTPARENS && + sf->tokenvec[3].type == TYPE_NUMBER && + sf->tokenvec[4].type == TYPE_RIGHTPARENS + ) || + ( + sf->tokenvec[0].type == TYPE_BAREWORD && + sf->tokenvec[1].type == TYPE_OPERATOR && + sf->tokenvec[2].type == TYPE_LEFTPARENS && + (sf->tokenvec[3].type == TYPE_BAREWORD || sf->tokenvec[3].type == TYPE_NUMBER) && + sf->tokenvec[4].type == TYPE_RIGHTPARENS + ) || + ( + sf->tokenvec[0].type == TYPE_NUMBER && + sf->tokenvec[1].type == TYPE_RIGHTPARENS && + sf->tokenvec[2].type == TYPE_COMMA && + sf->tokenvec[3].type == TYPE_LEFTPARENS && + sf->tokenvec[4].type == TYPE_NUMBER + ) || + ( + sf->tokenvec[0].type == TYPE_BAREWORD && + sf->tokenvec[1].type == TYPE_RIGHTPARENS && + sf->tokenvec[2].type == TYPE_OPERATOR && + sf->tokenvec[3].type == TYPE_LEFTPARENS && + sf->tokenvec[4].type == TYPE_BAREWORD + ) + ) + { + if (pos > LIBINJECTION_SQLI_MAX_TOKENS) { + st_copy(&(sf->tokenvec[1]), &(sf->tokenvec[LIBINJECTION_SQLI_MAX_TOKENS])); + pos = 2; + left = 0; + } else { + pos = 1; + left = 0; + } + } + } + + if (! more || left >= LIBINJECTION_SQLI_MAX_TOKENS) { + left = pos; + break; + } + + /* get up to two tokens */ + while (more && pos <= LIBINJECTION_SQLI_MAX_TOKENS && (pos - left) < 2) { + sf->current = &(sf->tokenvec[pos]); + more = libinjection_sqli_tokenize(sf); + if (more) { + if (sf->current->type == TYPE_COMMENT) { + st_copy(&last_comment, sf->current); + } else { + last_comment.type = CHAR_NULL; + pos += 1; + } + } + } + FOLD_DEBUG; + /* did we get 2 tokens? if not then we are done */ + if (pos - left < 2) { + left = pos; + continue; + } + + /* FOLD: "ss" -> "s" + * "foo" "bar" is valid SQL + * just ignore second string + */ + if (sf->tokenvec[left].type == TYPE_STRING && sf->tokenvec[left+1].type == TYPE_STRING) { + pos -= 1; + sf->stats_folds += 1; + continue; + } else if (sf->tokenvec[left].type == TYPE_SEMICOLON && sf->tokenvec[left+1].type == TYPE_SEMICOLON) { + /* not sure how various engines handle + * 'select 1;;drop table foo' or + * 'select 1; /x foo x/; drop table foo' + * to prevent surprises, just fold away repeated semicolons + */ + pos -= 1; + sf->stats_folds += 1; + continue; + } else if ((sf->tokenvec[left].type == TYPE_OPERATOR || + sf->tokenvec[left].type == TYPE_LOGIC_OPERATOR) && + (st_is_unary_op(&sf->tokenvec[left+1]) || + sf->tokenvec[left+1].type == TYPE_SQLTYPE)) { + pos -= 1; + sf->stats_folds += 1; + left = 0; + continue; + } else if (sf->tokenvec[left].type == TYPE_LEFTPARENS && + st_is_unary_op(&sf->tokenvec[left+1])) { + pos -= 1; + sf->stats_folds += 1; + if (left > 0) { + left -= 1; + } + continue; + } else if (syntax_merge_words(sf, &sf->tokenvec[left], &sf->tokenvec[left+1])) { + pos -= 1; + sf->stats_folds += 1; + if (left > 0) { + left -= 1; + } + continue; + } else if (sf->tokenvec[left].type == TYPE_SEMICOLON && + sf->tokenvec[left+1].type == TYPE_FUNCTION && + (sf->tokenvec[left+1].val[0] == 'I' || + sf->tokenvec[left+1].val[0] == 'i' ) && + (sf->tokenvec[left+1].val[1] == 'F' || + sf->tokenvec[left+1].val[1] == 'f' )) { + /* IF is normally a function, except in Transact-SQL where it can be used as a + * standalone control flow operator, e.g. ; IF 1=1 ... + * if found after a semicolon, convert from 'f' type to 'T' type + */ + sf->tokenvec[left+1].type = TYPE_TSQL; + /* left += 2; */ + continue; /* reparse everything, but we probably can advance left, and pos */ + } else if ((sf->tokenvec[left].type == TYPE_BAREWORD || sf->tokenvec[left].type == TYPE_VARIABLE) && + sf->tokenvec[left+1].type == TYPE_LEFTPARENS && ( + /* TSQL functions but common enough to be column names */ + cstrcasecmp("USER_ID", sf->tokenvec[left].val, sf->tokenvec[left].len) == 0 || + cstrcasecmp("USER_NAME", sf->tokenvec[left].val, sf->tokenvec[left].len) == 0 || + + /* Function in MYSQL */ + cstrcasecmp("DATABASE", sf->tokenvec[left].val, sf->tokenvec[left].len) == 0 || + cstrcasecmp("PASSWORD", sf->tokenvec[left].val, sf->tokenvec[left].len) == 0 || + cstrcasecmp("USER", sf->tokenvec[left].val, sf->tokenvec[left].len) == 0 || + + /* Mysql words that act as a variable and are a function */ + + /* TSQL current_users is fake-variable */ + /* http://msdn.microsoft.com/en-us/library/ms176050.aspx */ + cstrcasecmp("CURRENT_USER", sf->tokenvec[left].val, sf->tokenvec[left].len) == 0 || + cstrcasecmp("CURRENT_DATE", sf->tokenvec[left].val, sf->tokenvec[left].len) == 0 || + cstrcasecmp("CURRENT_TIME", sf->tokenvec[left].val, sf->tokenvec[left].len) == 0 || + cstrcasecmp("CURRENT_TIMESTAMP", sf->tokenvec[left].val, sf->tokenvec[left].len) == 0 || + cstrcasecmp("LOCALTIME", sf->tokenvec[left].val, sf->tokenvec[left].len) == 0 || + cstrcasecmp("LOCALTIMESTAMP", sf->tokenvec[left].val, sf->tokenvec[left].len) == 0 + )) { + + /* pos is the same + * other conversions need to go here... for instance + * password CAN be a function, coalesce CAN be a function + */ + sf->tokenvec[left].type = TYPE_FUNCTION; + continue; + } else if (sf->tokenvec[left].type == TYPE_KEYWORD && ( + cstrcasecmp("IN", sf->tokenvec[left].val, sf->tokenvec[left].len) == 0 || + cstrcasecmp("NOT IN", sf->tokenvec[left].val, sf->tokenvec[left].len) == 0 + )) { + + if (sf->tokenvec[left+1].type == TYPE_LEFTPARENS) { + /* got .... IN ( ... (or 'NOT IN') + * it's an operator + */ + sf->tokenvec[left].type = TYPE_OPERATOR; + } else { + /* + * it's a nothing + */ + sf->tokenvec[left].type = TYPE_BAREWORD; + } + + /* "IN" can be used as "IN BOOLEAN MODE" for mysql + * in which case merging of words can be done later + * other wise it acts as an equality operator __ IN (values..) + * + * here we got "IN" "(" so it's an operator. + * also back track to handle "NOT IN" + * might need to do the same with like + * two use cases "foo" LIKE "BAR" (normal operator) + * "foo" = LIKE(1,2) + */ + continue; + } else if ((sf->tokenvec[left].type == TYPE_OPERATOR) && ( + cstrcasecmp("LIKE", sf->tokenvec[left].val, sf->tokenvec[left].len) == 0 || + cstrcasecmp("NOT LIKE", sf->tokenvec[left].val, sf->tokenvec[left].len) == 0)) { + if (sf->tokenvec[left+1].type == TYPE_LEFTPARENS) { + /* SELECT LIKE(... + * it's a function + */ + sf->tokenvec[left].type = TYPE_FUNCTION; + } + } else if (sf->tokenvec[left].type == TYPE_SQLTYPE && + (sf->tokenvec[left+1].type == TYPE_BAREWORD || + sf->tokenvec[left+1].type == TYPE_NUMBER || + sf->tokenvec[left+1].type == TYPE_SQLTYPE || + sf->tokenvec[left+1].type == TYPE_LEFTPARENS || + sf->tokenvec[left+1].type == TYPE_FUNCTION || + sf->tokenvec[left+1].type == TYPE_VARIABLE || + sf->tokenvec[left+1].type == TYPE_STRING)) { + st_copy(&sf->tokenvec[left], &sf->tokenvec[left+1]); + pos -= 1; + sf->stats_folds += 1; + left = 0; + continue; + } else if (sf->tokenvec[left].type == TYPE_COLLATE && + sf->tokenvec[left+1].type == TYPE_BAREWORD) { + /* + * there are too many collation types.. so if the bareword has a "_" + * then it's TYPE_SQLTYPE + */ + if (strchr(sf->tokenvec[left+1].val, '_') != NULL) { + sf->tokenvec[left+1].type = TYPE_SQLTYPE; + left = 0; + } + } else if (sf->tokenvec[left].type == TYPE_BACKSLASH) { + if (st_is_arithmetic_op(&(sf->tokenvec[left+1]))) { + /* very weird case in TSQL where '\%1' is parsed as '0 % 1', etc */ + sf->tokenvec[left].type = TYPE_NUMBER; + } else { + /* just ignore it.. Again T-SQL seems to parse \1 as "1" */ + st_copy(&sf->tokenvec[left], &sf->tokenvec[left+1]); + pos -= 1; + sf->stats_folds += 1; + } + left = 0; + continue; + } else if (sf->tokenvec[left].type == TYPE_LEFTPARENS && + sf->tokenvec[left+1].type == TYPE_LEFTPARENS) { + pos -= 1; + left = 0; + sf->stats_folds += 1; + continue; + } else if (sf->tokenvec[left].type == TYPE_RIGHTPARENS && + sf->tokenvec[left+1].type == TYPE_RIGHTPARENS) { + pos -= 1; + left = 0; + sf->stats_folds += 1; + continue; + } else if (sf->tokenvec[left].type == TYPE_LEFTBRACE && + sf->tokenvec[left+1].type == TYPE_BAREWORD) { + + /* + * MySQL Degenerate case -- + * + * select { ``.``.id }; -- valid !!! + * select { ``.``.``.id }; -- invalid + * select ``.``.id; -- invalid + * select { ``.id }; -- invalid + * + * so it appears {``.``.id} is a magic case + * I suspect this is "current database, current table, field id" + * + * The folding code can't look at more than 3 tokens, and + * I don't want to make two passes. + * + * Since "{ ``" so rare, we are just going to blacklist it. + * + * Highly likely this will need revisiting! + * + * CREDIT @rsalgado 2013-11-25 + */ + if (sf->tokenvec[left+1].len == 0) { + sf->tokenvec[left+1].type = TYPE_EVIL; + return (int)(left+2); + } + /* weird ODBC / MYSQL {foo expr} --> expr + * but for this rule we just strip away the "{ foo" part + */ + left = 0; + pos -= 2; + sf->stats_folds += 2; + continue; + } else if (sf->tokenvec[left+1].type == TYPE_RIGHTBRACE) { + pos -= 1; + left = 0; + sf->stats_folds += 1; + continue; + } + + /* all cases of handing 2 tokens is done + and nothing matched. Get one more token + */ + FOLD_DEBUG; + while (more && pos <= LIBINJECTION_SQLI_MAX_TOKENS && pos - left < 3) { + sf->current = &(sf->tokenvec[pos]); + more = libinjection_sqli_tokenize(sf); + if (more) { + if (sf->current->type == TYPE_COMMENT) { + st_copy(&last_comment, sf->current); + } else { + last_comment.type = CHAR_NULL; + pos += 1; + } + } + } + + /* do we have three tokens? If not then we are done */ + if (pos -left < 3) { + left = pos; + continue; + } + + /* + * now look for three token folding + */ + if (sf->tokenvec[left].type == TYPE_NUMBER && + sf->tokenvec[left+1].type == TYPE_OPERATOR && + sf->tokenvec[left+2].type == TYPE_NUMBER) { + pos -= 2; + left = 0; + continue; + } else if (sf->tokenvec[left].type == TYPE_OPERATOR && + sf->tokenvec[left+1].type != TYPE_LEFTPARENS && + sf->tokenvec[left+2].type == TYPE_OPERATOR) { + left = 0; + pos -= 2; + continue; + } else if (sf->tokenvec[left].type == TYPE_LOGIC_OPERATOR && + sf->tokenvec[left+2].type == TYPE_LOGIC_OPERATOR) { + pos -= 2; + left = 0; + continue; + } else if (sf->tokenvec[left].type == TYPE_VARIABLE && + sf->tokenvec[left+1].type == TYPE_OPERATOR && + (sf->tokenvec[left+2].type == TYPE_VARIABLE || + sf->tokenvec[left+2].type == TYPE_NUMBER || + sf->tokenvec[left+2].type == TYPE_BAREWORD)) { + pos -= 2; + left = 0; + continue; + } else if ((sf->tokenvec[left].type == TYPE_BAREWORD || + sf->tokenvec[left].type == TYPE_NUMBER ) && + sf->tokenvec[left+1].type == TYPE_OPERATOR && + (sf->tokenvec[left+2].type == TYPE_NUMBER || + sf->tokenvec[left+2].type == TYPE_BAREWORD)) { + pos -= 2; + left = 0; + continue; + } else if ((sf->tokenvec[left].type == TYPE_BAREWORD || + sf->tokenvec[left].type == TYPE_NUMBER || + sf->tokenvec[left].type == TYPE_VARIABLE || + sf->tokenvec[left].type == TYPE_STRING) && + sf->tokenvec[left+1].type == TYPE_OPERATOR && + streq(sf->tokenvec[left+1].val, "::") && + sf->tokenvec[left+2].type == TYPE_SQLTYPE) { + pos -= 2; + left = 0; + sf->stats_folds += 2; + continue; + } else if ((sf->tokenvec[left].type == TYPE_BAREWORD || + sf->tokenvec[left].type == TYPE_NUMBER || + sf->tokenvec[left].type == TYPE_STRING || + sf->tokenvec[left].type == TYPE_VARIABLE) && + sf->tokenvec[left+1].type == TYPE_COMMA && + (sf->tokenvec[left+2].type == TYPE_NUMBER || + sf->tokenvec[left+2].type == TYPE_BAREWORD || + sf->tokenvec[left+2].type == TYPE_STRING || + sf->tokenvec[left+2].type == TYPE_VARIABLE)) { + pos -= 2; + left = 0; + continue; + } else if ((sf->tokenvec[left].type == TYPE_EXPRESSION || + sf->tokenvec[left].type == TYPE_GROUP || + sf->tokenvec[left].type == TYPE_COMMA) && + st_is_unary_op(&sf->tokenvec[left+1]) && + sf->tokenvec[left+2].type == TYPE_LEFTPARENS) { + /* got something like SELECT + (, LIMIT + ( + * remove unary operator + */ + st_copy(&sf->tokenvec[left+1], &sf->tokenvec[left+2]); + pos -= 1; + left = 0; + continue; + } else if ((sf->tokenvec[left].type == TYPE_KEYWORD || + sf->tokenvec[left].type == TYPE_EXPRESSION || + sf->tokenvec[left].type == TYPE_GROUP ) && + st_is_unary_op(&sf->tokenvec[left+1]) && + (sf->tokenvec[left+2].type == TYPE_NUMBER || + sf->tokenvec[left+2].type == TYPE_BAREWORD || + sf->tokenvec[left+2].type == TYPE_VARIABLE || + sf->tokenvec[left+2].type == TYPE_STRING || + sf->tokenvec[left+2].type == TYPE_FUNCTION )) { + /* remove unary operators + * select - 1 + */ + st_copy(&sf->tokenvec[left+1], &sf->tokenvec[left+2]); + pos -= 1; + left = 0; + continue; + } else if (sf->tokenvec[left].type == TYPE_COMMA && + st_is_unary_op(&sf->tokenvec[left+1]) && + (sf->tokenvec[left+2].type == TYPE_NUMBER || + sf->tokenvec[left+2].type == TYPE_BAREWORD || + sf->tokenvec[left+2].type == TYPE_VARIABLE || + sf->tokenvec[left+2].type == TYPE_STRING)) { + /* + * interesting case turn ", -1" ->> ",1" PLUS we need to back up + * one token if possible to see if more folding can be done + * "1,-1" --> "1" + */ + st_copy(&sf->tokenvec[left+1], &sf->tokenvec[left+2]); + left = 0; + /* pos is >= 3 so this is safe */ + assert(pos >= 3); + pos -= 3; + continue; + } else if (sf->tokenvec[left].type == TYPE_COMMA && + st_is_unary_op(&sf->tokenvec[left+1]) && + sf->tokenvec[left+2].type == TYPE_FUNCTION) { + + /* Separate case from above since you end up with + * 1,-sin(1) --> 1 (1) + * Here, just do + * 1,-sin(1) --> 1,sin(1) + * just remove unary operator + */ + st_copy(&sf->tokenvec[left+1], &sf->tokenvec[left+2]); + pos -= 1; + left = 0; + continue; + } else if ((sf->tokenvec[left].type == TYPE_BAREWORD) && + (sf->tokenvec[left+1].type == TYPE_DOT) && + (sf->tokenvec[left+2].type == TYPE_BAREWORD)) { + /* ignore the '.n' + * typically is this databasename.table + */ + assert(pos >= 3); + pos -= 2; + left = 0; + continue; + } else if ((sf->tokenvec[left].type == TYPE_EXPRESSION) && + (sf->tokenvec[left+1].type == TYPE_DOT) && + (sf->tokenvec[left+2].type == TYPE_BAREWORD)) { + /* select . `foo` --> select `foo` */ + st_copy(&sf->tokenvec[left+1], &sf->tokenvec[left+2]); + pos -= 1; + left = 0; + continue; + } else if ((sf->tokenvec[left].type == TYPE_FUNCTION) && + (sf->tokenvec[left+1].type == TYPE_LEFTPARENS) && + (sf->tokenvec[left+2].type != TYPE_RIGHTPARENS)) { + /* + * whats going on here + * Some SQL functions like USER() have 0 args + * if we get User(foo), then User is not a function + * This should be expanded since it eliminated a lot of false + * positives. + */ + if (cstrcasecmp("USER", sf->tokenvec[left].val, sf->tokenvec[left].len) == 0) { + sf->tokenvec[left].type = TYPE_BAREWORD; + } + } + + /* no folding -- assume left-most token is + is good, now use the existing 2 tokens -- + do not get another + */ + + left += 1; + + } /* while(1) */ + + /* if we have 4 or less tokens, and we had a comment token + * at the end, add it back + */ + + if (left < LIBINJECTION_SQLI_MAX_TOKENS && last_comment.type == TYPE_COMMENT) { + st_copy(&sf->tokenvec[left], &last_comment); + left += 1; + } + + /* sometimes we grab a 6th token to help + determine the type of token 5. + */ + if (left > LIBINJECTION_SQLI_MAX_TOKENS) { + left = LIBINJECTION_SQLI_MAX_TOKENS; + } + + return (int)left; +} + +/* secondary api: detects SQLi in a string, GIVEN a context. + * + * A context can be: + * * CHAR_NULL (\0), process as is + * * CHAR_SINGLE ('), process pretending input started with a + * single quote. + * * CHAR_DOUBLE ("), process pretending input started with a + * double quote. + * + */ +const char* libinjection_sqli_fingerprint(struct libinjection_sqli_state * sql_state, int flags) +{ + int i; + int tlen = 0; + + libinjection_sqli_reset(sql_state, flags); + + tlen = libinjection_sqli_fold(sql_state); + + /* Check for magic PHP backquote comment + * If: + * * last token is of type "bareword" + * * And is quoted in a backtick + * * And isn't closed + * * And it's empty? + * Then convert it to comment + */ + if (tlen > 2 && + sql_state->tokenvec[tlen-1].type == TYPE_BAREWORD && + sql_state->tokenvec[tlen-1].str_open == CHAR_TICK && + sql_state->tokenvec[tlen-1].len == 0 && + sql_state->tokenvec[tlen-1].str_close == CHAR_NULL) { + sql_state->tokenvec[tlen-1].type = TYPE_COMMENT; + } + + for (i = 0; i < tlen; ++i) { + sql_state->fingerprint[i] = sql_state->tokenvec[i].type; + } + + /* + * make the fingerprint pattern a c-string (null delimited) + */ + sql_state->fingerprint[tlen] = CHAR_NULL; + + /* + * check for 'X' in pattern, and then + * clear out all tokens + * + * this means parsing could not be done + * accurately due to pgsql's double comments + * or other syntax that isn't consistent. + * Should be very rare false positive + */ + if (strchr(sql_state->fingerprint, TYPE_EVIL)) { + /* needed for SWIG */ + memset((void*)sql_state->fingerprint, 0, LIBINJECTION_SQLI_MAX_TOKENS + 1); + memset((void*)sql_state->tokenvec[0].val, 0, LIBINJECTION_SQLI_TOKEN_SIZE); + + sql_state->fingerprint[0] = TYPE_EVIL; + + sql_state->tokenvec[0].type = TYPE_EVIL; + sql_state->tokenvec[0].val[0] = TYPE_EVIL; + sql_state->tokenvec[1].type = CHAR_NULL; + } + + + return sql_state->fingerprint; +} + +int libinjection_sqli_check_fingerprint(struct libinjection_sqli_state* sql_state) +{ + return libinjection_sqli_blacklist(sql_state) && + libinjection_sqli_not_whitelist(sql_state); +} + +char libinjection_sqli_lookup_word(struct libinjection_sqli_state *sql_state, int lookup_type, + const char* str, size_t len) +{ + if (lookup_type == LOOKUP_FINGERPRINT) { + return libinjection_sqli_check_fingerprint(sql_state) ? 'X' : '\0'; + } else { + return bsearch_keyword_type(str, len, sql_keywords, sql_keywords_sz); + } +} + +int libinjection_sqli_blacklist(struct libinjection_sqli_state* sql_state) +{ + /* + * use minimum of 8 bytes to make sure gcc -fstack-protector + * works correctly + */ + char fp2[8]; + char ch; + size_t i; + size_t len = strlen(sql_state->fingerprint); + int patmatch; + + if (len < 1) { + sql_state->reason = __LINE__; + return FALSE; + } + + /* + to keep everything compatible, convert the + v0 fingerprint pattern to v1 + v0: up to 5 chars, mixed case + v1: 1 char is '0', up to 5 more chars, upper case + */ + + fp2[0] = '0'; + for (i = 0; i < len; ++i) { + ch = sql_state->fingerprint[i]; + if (ch >= 'a' && ch <= 'z') { + ch -= 0x20; + } + fp2[i+1] = ch; + } + fp2[i+1] = '\0'; + + patmatch = is_keyword(fp2, len + 1) == TYPE_FINGERPRINT; + + /* + * No match. + * + * Set sql_state->reason to current line number + * only for debugging purposes. + */ + if (!patmatch) { + sql_state->reason = __LINE__; + return FALSE; + } + + return TRUE; +} + +/* + * return TRUE if SQLi, false is benign + */ +int libinjection_sqli_not_whitelist(struct libinjection_sqli_state* sql_state) +{ + /* + * We assume we got a SQLi match + * This next part just helps reduce false positives. + * + */ + char ch; + size_t tlen = strlen(sql_state->fingerprint); + + if (tlen > 1 && sql_state->fingerprint[tlen-1] == TYPE_COMMENT) { + /* + * if ending comment is contains 'sp_password' then it's SQLi! + * MS Audit log apparently ignores anything with + * 'sp_password' in it. Unable to find primary reference to + * this "feature" of SQL Server but seems to be known SQLi + * technique + */ + if (my_memmem(sql_state->s, sql_state->slen, + "sp_password", strlen("sp_password"))) { + sql_state->reason = __LINE__; + return TRUE; + } + } + + switch (tlen) { + case 2:{ + /* + * case 2 are "very small SQLi" which make them + * hard to tell from normal input... + */ + + if (sql_state->fingerprint[1] == TYPE_UNION) { + if (sql_state->stats_tokens == 2) { + /* not sure why but 1U comes up in SQLi attack + * likely part of parameter splitting/etc. + * lots of reasons why "1 union" might be normal + * input, so beep only if other SQLi things are present + */ + /* it really is a number and 'union' + * other wise it has folding or comments + */ + sql_state->reason = __LINE__; + return FALSE; + } else { + sql_state->reason = __LINE__; + return TRUE; + } + } + /* + * if 'comment' is '#' ignore.. too many FP + */ + if (sql_state->tokenvec[1].val[0] == '#') { + sql_state->reason = __LINE__; + return FALSE; + } + + /* + * for fingerprint like 'nc', only comments of /x are treated + * as SQL... ending comments of "--" and "#" are not SQLi + */ + if (sql_state->tokenvec[0].type == TYPE_BAREWORD && + sql_state->tokenvec[1].type == TYPE_COMMENT && + sql_state->tokenvec[1].val[0] != '/') { + sql_state->reason = __LINE__; + return FALSE; + } + + /* + * if '1c' ends with '/x' then it's SQLi + */ + if (sql_state->tokenvec[0].type == TYPE_NUMBER && + sql_state->tokenvec[1].type == TYPE_COMMENT && + sql_state->tokenvec[1].val[0] == '/') { + return TRUE; + } + + /** + * there are some odd base64-looking query string values + * 1234-ABCDEFEhfhihwuefi-- + * which evaluate to "1c"... these are not SQLi + * but 1234-- probably is. + * Make sure the "1" in "1c" is actually a true decimal number + * + * Need to check -original- string since the folding step + * may have merged tokens, e.g. "1+FOO" is folded into "1" + * + * Note: evasion: 1*1-- + */ + if (sql_state->tokenvec[0].type == TYPE_NUMBER && + sql_state->tokenvec[1].type == TYPE_COMMENT) { + if (sql_state->stats_tokens > 2) { + /* we have some folding going on, highly likely SQLi */ + sql_state->reason = __LINE__; + return TRUE; + } + /* + * we check that next character after the number is either whitespace, + * or '/' or a '-' ==> SQLi. + */ + ch = sql_state->s[sql_state->tokenvec[0].len]; + if ( ch <= 32 ) { + /* next char was whitespace,e.g. "1234 --" + * this isn't exactly correct.. ideally we should skip over all whitespace + * but this seems to be ok for now + */ + return TRUE; + } + if (ch == '/' && sql_state->s[sql_state->tokenvec[0].len + 1] == '*') { + return TRUE; + } + if (ch == '-' && sql_state->s[sql_state->tokenvec[0].len + 1] == '-') { + return TRUE; + } + + sql_state->reason = __LINE__; + return FALSE; + } + + /* + * detect obvious SQLi scans.. many people put '--' in plain text + * so only detect if input ends with '--', e.g. 1-- but not 1-- foo + */ + if ((sql_state->tokenvec[1].len > 2) + && sql_state->tokenvec[1].val[0] == '-') { + sql_state->reason = __LINE__; + return FALSE; + } + + break; + } /* case 2 */ + case 3:{ + /* + * ...foo' + 'bar... + * no opening quote, no closing quote + * and each string has data + */ + + if (streq(sql_state->fingerprint, "sos") + || streq(sql_state->fingerprint, "s&s")) { + + if ((sql_state->tokenvec[0].str_open == CHAR_NULL) + && (sql_state->tokenvec[2].str_close == CHAR_NULL) + && (sql_state->tokenvec[0].str_close == sql_state->tokenvec[2].str_open)) { + /* + * if ....foo" + "bar.... + */ + sql_state->reason = __LINE__; + return TRUE; + } + if (sql_state->stats_tokens == 3) { + sql_state->reason = __LINE__; + return FALSE; + } + + /* + * not SQLi + */ + sql_state->reason = __LINE__; + return FALSE; + } else if (streq(sql_state->fingerprint, "s&n") || + streq(sql_state->fingerprint, "n&1") || + streq(sql_state->fingerprint, "1&1") || + streq(sql_state->fingerprint, "1&v") || + streq(sql_state->fingerprint, "1&s")) { + /* 'sexy and 17' not SQLi + * 'sexy and 17<18' SQLi + */ + if (sql_state->stats_tokens == 3) { + sql_state->reason = __LINE__; + return FALSE; + } + } else if (sql_state->tokenvec[1].type == TYPE_KEYWORD) { + if ((sql_state->tokenvec[1].len < 5) || + cstrcasecmp("INTO", sql_state->tokenvec[1].val, 4)) { + /* if it's not "INTO OUTFILE", or "INTO DUMPFILE" (MySQL) + * then treat as safe + */ + sql_state->reason = __LINE__; + return FALSE; + } + } + break; + } /* case 3 */ + case 4: + case 5: { + /* nothing right now */ + break; + } /* case 5 */ + } /* end switch */ + + return TRUE; +} + +/** Main API, detects SQLi in an input. + * + * + */ +static int reparse_as_mysql(struct libinjection_sqli_state * sql_state) +{ + return sql_state->stats_comment_ddx || + sql_state->stats_comment_hash; +} + +/* + * This function is mostly use with SWIG + */ +struct libinjection_sqli_token* +libinjection_sqli_get_token(struct libinjection_sqli_state * sql_state, int i) +{ + if (i < 0 || i > (int)LIBINJECTION_SQLI_MAX_TOKENS) { + return NULL; + } + return &(sql_state->tokenvec[i]); +} + +int libinjection_is_sqli(struct libinjection_sqli_state * sql_state) +{ + const char *s = sql_state->s; + size_t slen = sql_state->slen; + + /* + * no input? not SQLi + */ + if (slen == 0) { + return FALSE; + } + + /* + * test input "as-is" + */ + libinjection_sqli_fingerprint(sql_state, FLAG_QUOTE_NONE | FLAG_SQL_ANSI); + if (sql_state->lookup(sql_state, LOOKUP_FINGERPRINT, + sql_state->fingerprint, strlen(sql_state->fingerprint))) { + return TRUE; + } else if (reparse_as_mysql(sql_state)) { + libinjection_sqli_fingerprint(sql_state, FLAG_QUOTE_NONE | FLAG_SQL_MYSQL); + if (sql_state->lookup(sql_state, LOOKUP_FINGERPRINT, + sql_state->fingerprint, strlen(sql_state->fingerprint))) { + return TRUE; + } + } + + /* + * if input has a single_quote, then + * test as if input was actually ' + * example: if input if "1' = 1", then pretend it's + * "'1' = 1" + * Porting Notes: example the same as doing + * is_string_sqli(sql_state, "'" + s, slen+1, NULL, fn, arg) + * + */ + if (memchr(s, CHAR_SINGLE, slen)) { + libinjection_sqli_fingerprint(sql_state, FLAG_QUOTE_SINGLE | FLAG_SQL_ANSI); + if (sql_state->lookup(sql_state, LOOKUP_FINGERPRINT, + sql_state->fingerprint, strlen(sql_state->fingerprint))) { + return TRUE; + } else if (reparse_as_mysql(sql_state)) { + libinjection_sqli_fingerprint(sql_state, FLAG_QUOTE_SINGLE | FLAG_SQL_MYSQL); + if (sql_state->lookup(sql_state, LOOKUP_FINGERPRINT, + sql_state->fingerprint, strlen(sql_state->fingerprint))) { + return TRUE; + } + } + } + + /* + * same as above but with a double-quote " + */ + if (memchr(s, CHAR_DOUBLE, slen)) { + libinjection_sqli_fingerprint(sql_state, FLAG_QUOTE_DOUBLE | FLAG_SQL_MYSQL); + if (sql_state->lookup(sql_state, LOOKUP_FINGERPRINT, + sql_state->fingerprint, strlen(sql_state->fingerprint))) { + return TRUE; + } + } + + /* + * Hurray, input is not SQLi + */ + return FALSE; +} + +int libinjection_sqli(const char* input, size_t slen, char fingerprint[]) +{ + int issqli; + struct libinjection_sqli_state state; + + libinjection_sqli_init(&state, input, slen, 0); + issqli = libinjection_is_sqli(&state); + if (issqli) { + strcpy(fingerprint, state.fingerprint); + } else { + fingerprint[0] = '\0'; + } + return issqli; +} diff --git a/src/components/implementation/simple_nf/ndpi/libinjection_sqli.h b/src/components/implementation/simple_nf/ndpi/libinjection_sqli.h new file mode 100644 index 0000000000..b9746555a7 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/libinjection_sqli.h @@ -0,0 +1,294 @@ +/** + * Copyright 2012-2016 Nick Galbreath + * nickg@client9.com + * BSD License -- see `COPYING.txt` for details + * + * https://libinjection.client9.com/ + * + */ + +#ifndef LIBINJECTION_SQLI_H +#define LIBINJECTION_SQLI_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Pull in size_t + */ +#include + +enum sqli_flags { + FLAG_NONE = 0 + , FLAG_QUOTE_NONE = 1 /* 1 << 0 */ + , FLAG_QUOTE_SINGLE = 2 /* 1 << 1 */ + , FLAG_QUOTE_DOUBLE = 4 /* 1 << 2 */ + + , FLAG_SQL_ANSI = 8 /* 1 << 3 */ + , FLAG_SQL_MYSQL = 16 /* 1 << 4 */ +}; + +enum lookup_type { + LOOKUP_WORD = 1 + , LOOKUP_TYPE = 2 + , LOOKUP_OPERATOR = 3 + , LOOKUP_FINGERPRINT = 4 +}; + +struct libinjection_sqli_token { +#ifdef SWIG +%immutable; +#endif + /* + * position and length of token + * in original string + */ + size_t pos; + size_t len; + + /* count: + * in type 'v', used for number of opening '@' + * but maybe used in other contexts + */ + int count; + + char type; + char str_open; + char str_close; + char val[32]; +}; + +typedef struct libinjection_sqli_token stoken_t; + +/** + * Pointer to function, takes c-string input, + * returns '\0' for no match, else a char + */ +struct libinjection_sqli_state; +typedef char (*ptr_lookup_fn)(struct libinjection_sqli_state*, int lookuptype, const char* word, size_t len); + +struct libinjection_sqli_state { +#ifdef SWIG +%immutable; +#endif + + /* + * input, does not need to be null terminated. + * it is also not modified. + */ + const char *s; + + /* + * input length + */ + size_t slen; + + /* + * How to lookup a word or fingerprint + */ + ptr_lookup_fn lookup; + void* userdata; + + /* + * + */ + int flags; + + /* + * pos is the index in the string during tokenization + */ + size_t pos; + +#ifndef SWIG + /* for SWIG.. don't use this.. use functional API instead */ + + /* MAX TOKENS + 1 since we use one extra token + * to determine the type of the previous token + */ + struct libinjection_sqli_token tokenvec[8]; +#endif + + /* + * Pointer to token position in tokenvec, above + */ + struct libinjection_sqli_token *current; + + /* + * fingerprint pattern c-string + * +1 for ending null + * Minimum of 8 bytes to add gcc's -fstack-protector to work + */ + char fingerprint[8]; + + /* + * Line number of code that said decided if the input was SQLi or + * not. Most of the time it's line that said "it's not a matching + * fingerprint" but there is other logic that sometimes approves + * an input. This is only useful for debugging. + * + */ + int reason; + + /* Number of ddw (dash-dash-white) comments + * These comments are in the form of + * '--[whitespace]' or '--[EOF]' + * + * All databases treat this as a comment. + */ + int stats_comment_ddw; + + /* Number of ddx (dash-dash-[notwhite]) comments + * + * ANSI SQL treats these are comments, MySQL treats this as + * two unary operators '-' '-' + * + * If you are parsing result returns FALSE and + * stats_comment_dd > 0, you should reparse with + * COMMENT_MYSQL + * + */ + int stats_comment_ddx; + + /* + * c-style comments found /x .. x/ + */ + int stats_comment_c; + + /* '#' operators or MySQL EOL comments found + * + */ + int stats_comment_hash; + + /* + * number of tokens folded away + */ + int stats_folds; + + /* + * total tokens processed + */ + int stats_tokens; + +}; + +typedef struct libinjection_sqli_state sfilter; + +struct libinjection_sqli_token* libinjection_sqli_get_token( + struct libinjection_sqli_state* sqlistate, int i); + +/* + * Version info. + * + * This is moved into a function to allow SWIG and other auto-generated + * binding to not be modified during minor release changes. We change + * change the version number in the c source file, and not regenerated + * the binding + * + * See python's normalized version + * http://www.python.org/dev/peps/pep-0386/#normalizedversion + */ +const char* libinjection_version(void); + +/** + * + */ +void libinjection_sqli_init(struct libinjection_sqli_state* sql_state, + const char* s, size_t slen, + int flags); + +/** + * Main API: tests for SQLi in three possible contexts, no quotes, + * single quote and double quote + * + * \param sql_state core data structure + * + * \return 1 (true) if SQLi, 0 (false) if benign + */ +int libinjection_is_sqli(struct libinjection_sqli_state* sql_state); + +/* FOR HACKERS ONLY + * provides deep hooks into the decision making process + */ +void libinjection_sqli_callback(struct libinjection_sqli_state* sql_state, + ptr_lookup_fn fn, + void* userdata); + + +/* + * Resets state, but keeps initial string and callbacks + */ +void libinjection_sqli_reset(struct libinjection_sqli_state* sql_state, + int flags); + +/** + * + */ + +/** + * This detects SQLi in a single context, mostly useful for custom + * logic and debugging. + * + * \param sql_state Main data structure + * \param flags flags to adjust parsing + * + * \returns a pointer to sfilter.fingerprint as convenience + * do not free! + * + */ +const char* libinjection_sqli_fingerprint(struct libinjection_sqli_state* sql_state, + int flags); + +/** + * The default "word" to token-type or fingerprint function. This + * uses a ASCII case-insensitive binary tree. + */ +char libinjection_sqli_lookup_word(struct libinjection_sqli_state* sql_state, + int lookup_type, + const char* s, + size_t slen); + +/* Streaming tokenization interface. + * + * sql_state->current is updated with the current token. + * + * \returns 1, has a token, keep going, or 0 no tokens + * + */ +int libinjection_sqli_tokenize(struct libinjection_sqli_state * sql_state); + +/** + * parses and folds input, up to 5 tokens + * + */ +int libinjection_sqli_fold(struct libinjection_sqli_state * sql_state); + +/** The built-in default function to match fingerprints + * and do false negative/positive analysis. This calls the following + * two functions. With this, you over-ride one part or the other. + * + * return libinjection_sqli_blacklist(sql_state) && + * libinjection_sqli_not_whitelist(sql_state); + * + * \param sql_state should be filled out after libinjection_sqli_fingerprint is called + */ +int libinjection_sqli_check_fingerprint(struct libinjection_sqli_state * sql_state); + +/* Given a pattern determine if it's a SQLi pattern. + * + * \return TRUE if sqli, false otherwise + */ +int libinjection_sqli_blacklist(struct libinjection_sqli_state* sql_state); + +/* Given a positive match for a pattern (i.e. pattern is SQLi), this function + * does additional analysis to reduce false positives. + * + * \return TRUE if SQLi, false otherwise + */ +int libinjection_sqli_not_whitelist(struct libinjection_sqli_state * sql_state); + +#ifdef __cplusplus +} +#endif + +#endif /* LIBINJECTION_SQLI_H */ diff --git a/src/components/implementation/simple_nf/ndpi/libinjection_sqli_data.h b/src/components/implementation/simple_nf/ndpi/libinjection_sqli_data.h new file mode 100644 index 0000000000..f5e1454143 --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/libinjection_sqli_data.h @@ -0,0 +1,9652 @@ + +#ifndef LIBINJECTION_SQLI_DATA_H +#define LIBINJECTION_SQLI_DATA_H + +#include "libinjection.h" +#include "libinjection_sqli.h" + +typedef struct { + const char *word; + char type; +} keyword_t; + +static size_t parse_money(sfilter * sf); +static size_t parse_other(sfilter * sf); +static size_t parse_white(sfilter * sf); +static size_t parse_operator1(sfilter *sf); +static size_t parse_char(sfilter *sf); +static size_t parse_hash(sfilter *sf); +static size_t parse_dash(sfilter *sf); +static size_t parse_slash(sfilter *sf); +static size_t parse_backslash(sfilter * sf); +static size_t parse_operator2(sfilter *sf); +static size_t parse_string(sfilter *sf); +static size_t parse_word(sfilter * sf); +static size_t parse_var(sfilter * sf); +static size_t parse_number(sfilter * sf); +static size_t parse_tick(sfilter * sf); +static size_t parse_ustring(sfilter * sf); +static size_t parse_qstring(sfilter * sf); +static size_t parse_nqstring(sfilter * sf); +static size_t parse_xstring(sfilter * sf); +static size_t parse_bstring(sfilter * sf); +static size_t parse_estring(sfilter * sf); +static size_t parse_bword(sfilter * sf); + + +typedef size_t (*pt2Function)(sfilter *sf); +static const pt2Function char_parse_map[] = { + &parse_white, /* 0 */ + &parse_white, /* 1 */ + &parse_white, /* 2 */ + &parse_white, /* 3 */ + &parse_white, /* 4 */ + &parse_white, /* 5 */ + &parse_white, /* 6 */ + &parse_white, /* 7 */ + &parse_white, /* 8 */ + &parse_white, /* 9 */ + &parse_white, /* 10 */ + &parse_white, /* 11 */ + &parse_white, /* 12 */ + &parse_white, /* 13 */ + &parse_white, /* 14 */ + &parse_white, /* 15 */ + &parse_white, /* 16 */ + &parse_white, /* 17 */ + &parse_white, /* 18 */ + &parse_white, /* 19 */ + &parse_white, /* 20 */ + &parse_white, /* 21 */ + &parse_white, /* 22 */ + &parse_white, /* 23 */ + &parse_white, /* 24 */ + &parse_white, /* 25 */ + &parse_white, /* 26 */ + &parse_white, /* 27 */ + &parse_white, /* 28 */ + &parse_white, /* 29 */ + &parse_white, /* 30 */ + &parse_white, /* 31 */ + &parse_white, /* 32 */ + &parse_operator2, /* 33 */ + &parse_string, /* 34 */ + &parse_hash, /* 35 */ + &parse_money, /* 36 */ + &parse_operator1, /* 37 */ + &parse_operator2, /* 38 */ + &parse_string, /* 39 */ + &parse_char, /* 40 */ + &parse_char, /* 41 */ + &parse_operator2, /* 42 */ + &parse_operator1, /* 43 */ + &parse_char, /* 44 */ + &parse_dash, /* 45 */ + &parse_number, /* 46 */ + &parse_slash, /* 47 */ + &parse_number, /* 48 */ + &parse_number, /* 49 */ + &parse_number, /* 50 */ + &parse_number, /* 51 */ + &parse_number, /* 52 */ + &parse_number, /* 53 */ + &parse_number, /* 54 */ + &parse_number, /* 55 */ + &parse_number, /* 56 */ + &parse_number, /* 57 */ + &parse_operator2, /* 58 */ + &parse_char, /* 59 */ + &parse_operator2, /* 60 */ + &parse_operator2, /* 61 */ + &parse_operator2, /* 62 */ + &parse_other, /* 63 */ + &parse_var, /* 64 */ + &parse_word, /* 65 */ + &parse_bstring, /* 66 */ + &parse_word, /* 67 */ + &parse_word, /* 68 */ + &parse_estring, /* 69 */ + &parse_word, /* 70 */ + &parse_word, /* 71 */ + &parse_word, /* 72 */ + &parse_word, /* 73 */ + &parse_word, /* 74 */ + &parse_word, /* 75 */ + &parse_word, /* 76 */ + &parse_word, /* 77 */ + &parse_nqstring, /* 78 */ + &parse_word, /* 79 */ + &parse_word, /* 80 */ + &parse_qstring, /* 81 */ + &parse_word, /* 82 */ + &parse_word, /* 83 */ + &parse_word, /* 84 */ + &parse_ustring, /* 85 */ + &parse_word, /* 86 */ + &parse_word, /* 87 */ + &parse_xstring, /* 88 */ + &parse_word, /* 89 */ + &parse_word, /* 90 */ + &parse_bword, /* 91 */ + &parse_backslash, /* 92 */ + &parse_other, /* 93 */ + &parse_operator1, /* 94 */ + &parse_word, /* 95 */ + &parse_tick, /* 96 */ + &parse_word, /* 97 */ + &parse_bstring, /* 98 */ + &parse_word, /* 99 */ + &parse_word, /* 100 */ + &parse_estring, /* 101 */ + &parse_word, /* 102 */ + &parse_word, /* 103 */ + &parse_word, /* 104 */ + &parse_word, /* 105 */ + &parse_word, /* 106 */ + &parse_word, /* 107 */ + &parse_word, /* 108 */ + &parse_word, /* 109 */ + &parse_nqstring, /* 110 */ + &parse_word, /* 111 */ + &parse_word, /* 112 */ + &parse_qstring, /* 113 */ + &parse_word, /* 114 */ + &parse_word, /* 115 */ + &parse_word, /* 116 */ + &parse_ustring, /* 117 */ + &parse_word, /* 118 */ + &parse_word, /* 119 */ + &parse_xstring, /* 120 */ + &parse_word, /* 121 */ + &parse_word, /* 122 */ + &parse_char, /* 123 */ + &parse_operator2, /* 124 */ + &parse_char, /* 125 */ + &parse_operator1, /* 126 */ + &parse_white, /* 127 */ + &parse_word, /* 128 */ + &parse_word, /* 129 */ + &parse_word, /* 130 */ + &parse_word, /* 131 */ + &parse_word, /* 132 */ + &parse_word, /* 133 */ + &parse_word, /* 134 */ + &parse_word, /* 135 */ + &parse_word, /* 136 */ + &parse_word, /* 137 */ + &parse_word, /* 138 */ + &parse_word, /* 139 */ + &parse_word, /* 140 */ + &parse_word, /* 141 */ + &parse_word, /* 142 */ + &parse_word, /* 143 */ + &parse_word, /* 144 */ + &parse_word, /* 145 */ + &parse_word, /* 146 */ + &parse_word, /* 147 */ + &parse_word, /* 148 */ + &parse_word, /* 149 */ + &parse_word, /* 150 */ + &parse_word, /* 151 */ + &parse_word, /* 152 */ + &parse_word, /* 153 */ + &parse_word, /* 154 */ + &parse_word, /* 155 */ + &parse_word, /* 156 */ + &parse_word, /* 157 */ + &parse_word, /* 158 */ + &parse_word, /* 159 */ + &parse_white, /* 160 */ + &parse_word, /* 161 */ + &parse_word, /* 162 */ + &parse_word, /* 163 */ + &parse_word, /* 164 */ + &parse_word, /* 165 */ + &parse_word, /* 166 */ + &parse_word, /* 167 */ + &parse_word, /* 168 */ + &parse_word, /* 169 */ + &parse_word, /* 170 */ + &parse_word, /* 171 */ + &parse_word, /* 172 */ + &parse_word, /* 173 */ + &parse_word, /* 174 */ + &parse_word, /* 175 */ + &parse_word, /* 176 */ + &parse_word, /* 177 */ + &parse_word, /* 178 */ + &parse_word, /* 179 */ + &parse_word, /* 180 */ + &parse_word, /* 181 */ + &parse_word, /* 182 */ + &parse_word, /* 183 */ + &parse_word, /* 184 */ + &parse_word, /* 185 */ + &parse_word, /* 186 */ + &parse_word, /* 187 */ + &parse_word, /* 188 */ + &parse_word, /* 189 */ + &parse_word, /* 190 */ + &parse_word, /* 191 */ + &parse_word, /* 192 */ + &parse_word, /* 193 */ + &parse_word, /* 194 */ + &parse_word, /* 195 */ + &parse_word, /* 196 */ + &parse_word, /* 197 */ + &parse_word, /* 198 */ + &parse_word, /* 199 */ + &parse_word, /* 200 */ + &parse_word, /* 201 */ + &parse_word, /* 202 */ + &parse_word, /* 203 */ + &parse_word, /* 204 */ + &parse_word, /* 205 */ + &parse_word, /* 206 */ + &parse_word, /* 207 */ + &parse_word, /* 208 */ + &parse_word, /* 209 */ + &parse_word, /* 210 */ + &parse_word, /* 211 */ + &parse_word, /* 212 */ + &parse_word, /* 213 */ + &parse_word, /* 214 */ + &parse_word, /* 215 */ + &parse_word, /* 216 */ + &parse_word, /* 217 */ + &parse_word, /* 218 */ + &parse_word, /* 219 */ + &parse_word, /* 220 */ + &parse_word, /* 221 */ + &parse_word, /* 222 */ + &parse_word, /* 223 */ + &parse_word, /* 224 */ + &parse_word, /* 225 */ + &parse_word, /* 226 */ + &parse_word, /* 227 */ + &parse_word, /* 228 */ + &parse_word, /* 229 */ + &parse_word, /* 230 */ + &parse_word, /* 231 */ + &parse_word, /* 232 */ + &parse_word, /* 233 */ + &parse_word, /* 234 */ + &parse_word, /* 235 */ + &parse_word, /* 236 */ + &parse_word, /* 237 */ + &parse_word, /* 238 */ + &parse_word, /* 239 */ + &parse_word, /* 240 */ + &parse_word, /* 241 */ + &parse_word, /* 242 */ + &parse_word, /* 243 */ + &parse_word, /* 244 */ + &parse_word, /* 245 */ + &parse_word, /* 246 */ + &parse_word, /* 247 */ + &parse_word, /* 248 */ + &parse_word, /* 249 */ + &parse_word, /* 250 */ + &parse_word, /* 251 */ + &parse_word, /* 252 */ + &parse_word, /* 253 */ + &parse_word, /* 254 */ + &parse_word, /* 255 */ +}; + +static const keyword_t sql_keywords[] = { + {"!!", 'o'}, + {"!<", 'o'}, + {"!=", 'o'}, + {"!>", 'o'}, + {"%=", 'o'}, + {"&&", '&'}, + {"&=", 'o'}, + {"*=", 'o'}, + {"+=", 'o'}, + {"-=", 'o'}, + {"/=", 'o'}, + {"0&(1)O", 'F'}, + {"0&(1)U", 'F'}, + {"0&(1O(", 'F'}, + {"0&(1OF", 'F'}, + {"0&(1OS", 'F'}, + {"0&(1OV", 'F'}, + {"0&(F()", 'F'}, + {"0&(F(1", 'F'}, + {"0&(F(F", 'F'}, + {"0&(F(N", 'F'}, + {"0&(F(S", 'F'}, + {"0&(F(V", 'F'}, + {"0&(N)O", 'F'}, + {"0&(N)U", 'F'}, + {"0&(NO(", 'F'}, + {"0&(NOF", 'F'}, + {"0&(NOS", 'F'}, + {"0&(NOV", 'F'}, + {"0&(S)O", 'F'}, + {"0&(S)U", 'F'}, + {"0&(SO(", 'F'}, + {"0&(SO1", 'F'}, + {"0&(SOF", 'F'}, + {"0&(SON", 'F'}, + {"0&(SOS", 'F'}, + {"0&(SOV", 'F'}, + {"0&(V)O", 'F'}, + {"0&(V)U", 'F'}, + {"0&(VO(", 'F'}, + {"0&(VOF", 'F'}, + {"0&(VOS", 'F'}, + {"0&1O(1", 'F'}, + {"0&1O(F", 'F'}, + {"0&1O(N", 'F'}, + {"0&1O(S", 'F'}, + {"0&1O(V", 'F'}, + {"0&1OF(", 'F'}, + {"0&1OS(", 'F'}, + {"0&1OS1", 'F'}, + {"0&1OSF", 'F'}, + {"0&1OSU", 'F'}, + {"0&1OSV", 'F'}, + {"0&1OV(", 'F'}, + {"0&1OVF", 'F'}, + {"0&1OVO", 'F'}, + {"0&1OVS", 'F'}, + {"0&1OVU", 'F'}, + {"0&1UE(", 'F'}, + {"0&1UE1", 'F'}, + {"0&1UEF", 'F'}, + {"0&1UEK", 'F'}, + {"0&1UEN", 'F'}, + {"0&1UES", 'F'}, + {"0&1UEV", 'F'}, + {"0&F()O", 'F'}, + {"0&F()U", 'F'}, + {"0&F(1)", 'F'}, + {"0&F(1O", 'F'}, + {"0&F(F(", 'F'}, + {"0&F(N)", 'F'}, + {"0&F(NO", 'F'}, + {"0&F(S)", 'F'}, + {"0&F(SO", 'F'}, + {"0&F(V)", 'F'}, + {"0&F(VO", 'F'}, + {"0&NO(1", 'F'}, + {"0&NO(F", 'F'}, + {"0&NO(N", 'F'}, + {"0&NO(S", 'F'}, + {"0&NO(V", 'F'}, + {"0&NOF(", 'F'}, + {"0&NOS(", 'F'}, + {"0&NOS1", 'F'}, + {"0&NOSF", 'F'}, + {"0&NOSU", 'F'}, + {"0&NOSV", 'F'}, + {"0&NOV(", 'F'}, + {"0&NOVF", 'F'}, + {"0&NOVO", 'F'}, + {"0&NOVS", 'F'}, + {"0&NOVU", 'F'}, + {"0&NUE(", 'F'}, + {"0&NUE1", 'F'}, + {"0&NUEF", 'F'}, + {"0&NUEK", 'F'}, + {"0&NUEN", 'F'}, + {"0&NUES", 'F'}, + {"0&NUEV", 'F'}, + {"0&SO(1", 'F'}, + {"0&SO(F", 'F'}, + {"0&SO(N", 'F'}, + {"0&SO(S", 'F'}, + {"0&SO(V", 'F'}, + {"0&SO1(", 'F'}, + {"0&SO1F", 'F'}, + {"0&SO1N", 'F'}, + {"0&SO1S", 'F'}, + {"0&SO1U", 'F'}, + {"0&SO1V", 'F'}, + {"0&SOF(", 'F'}, + {"0&SON(", 'F'}, + {"0&SON1", 'F'}, + {"0&SONF", 'F'}, + {"0&SONU", 'F'}, + {"0&SOS(", 'F'}, + {"0&SOS1", 'F'}, + {"0&SOSF", 'F'}, + {"0&SOSU", 'F'}, + {"0&SOSV", 'F'}, + {"0&SOV(", 'F'}, + {"0&SOVF", 'F'}, + {"0&SOVO", 'F'}, + {"0&SOVS", 'F'}, + {"0&SOVU", 'F'}, + {"0&SUE(", 'F'}, + {"0&SUE1", 'F'}, + {"0&SUEF", 'F'}, + {"0&SUEK", 'F'}, + {"0&SUEN", 'F'}, + {"0&SUES", 'F'}, + {"0&SUEV", 'F'}, + {"0&VO(1", 'F'}, + {"0&VO(F", 'F'}, + {"0&VO(N", 'F'}, + {"0&VO(S", 'F'}, + {"0&VO(V", 'F'}, + {"0&VOF(", 'F'}, + {"0&VOS(", 'F'}, + {"0&VOS1", 'F'}, + {"0&VOSF", 'F'}, + {"0&VOSU", 'F'}, + {"0&VOSV", 'F'}, + {"0&VUE(", 'F'}, + {"0&VUE1", 'F'}, + {"0&VUEF", 'F'}, + {"0&VUEK", 'F'}, + {"0&VUEN", 'F'}, + {"0&VUES", 'F'}, + {"0&VUEV", 'F'}, + {"0)&(EK", 'F'}, + {"0)&(EN", 'F'}, + {"0)UE(1", 'F'}, + {"0)UE(F", 'F'}, + {"0)UE(N", 'F'}, + {"0)UE(S", 'F'}, + {"0)UE(V", 'F'}, + {"0)UE1K", 'F'}, + {"0)UE1O", 'F'}, + {"0)UEF(", 'F'}, + {"0)UEK(", 'F'}, + {"0)UEK1", 'F'}, + {"0)UEKF", 'F'}, + {"0)UEKN", 'F'}, + {"0)UEKS", 'F'}, + {"0)UEKV", 'F'}, + {"0)UENK", 'F'}, + {"0)UENO", 'F'}, + {"0)UESK", 'F'}, + {"0)UESO", 'F'}, + {"0)UEVK", 'F'}, + {"0)UEVO", 'F'}, + {"01&(1&", 'F'}, + {"01&(1)", 'F'}, + {"01&(1,", 'F'}, + {"01&(1O", 'F'}, + {"01&(E(", 'F'}, + {"01&(E1", 'F'}, + {"01&(EF", 'F'}, + {"01&(EK", 'F'}, + {"01&(EN", 'F'}, + {"01&(EO", 'F'}, + {"01&(ES", 'F'}, + {"01&(EV", 'F'}, + {"01&(F(", 'F'}, + {"01&(N&", 'F'}, + {"01&(N)", 'F'}, + {"01&(N,", 'F'}, + {"01&(NO", 'F'}, + {"01&(S&", 'F'}, + {"01&(S)", 'F'}, + {"01&(S,", 'F'}, + {"01&(SO", 'F'}, + {"01&(V&", 'F'}, + {"01&(V)", 'F'}, + {"01&(V,", 'F'}, + {"01&(VO", 'F'}, + {"01&1", 'F'}, + {"01&1&(", 'F'}, + {"01&1&1", 'F'}, + {"01&1&F", 'F'}, + {"01&1&N", 'F'}, + {"01&1&S", 'F'}, + {"01&1&V", 'F'}, + {"01&1)&", 'F'}, + {"01&1)C", 'F'}, + {"01&1)O", 'F'}, + {"01&1)U", 'F'}, + {"01&1;", 'F'}, + {"01&1;C", 'F'}, + {"01&1;E", 'F'}, + {"01&1;T", 'F'}, + {"01&1B(", 'F'}, + {"01&1B1", 'F'}, + {"01&1BF", 'F'}, + {"01&1BN", 'F'}, + {"01&1BS", 'F'}, + {"01&1BV", 'F'}, + {"01&1C", 'F'}, + {"01&1EK", 'F'}, + {"01&1EN", 'F'}, + {"01&1F(", 'F'}, + {"01&1K(", 'F'}, + {"01&1K1", 'F'}, + {"01&1KF", 'F'}, + {"01&1KN", 'F'}, + {"01&1KS", 'F'}, + {"01&1KV", 'F'}, + {"01&1O(", 'F'}, + {"01&1OF", 'F'}, + {"01&1OS", 'F'}, + {"01&1OV", 'F'}, + {"01&1TN", 'F'}, + {"01&1U", 'F'}, + {"01&1U(", 'F'}, + {"01&1U;", 'F'}, + {"01&1UC", 'F'}, + {"01&1UE", 'F'}, + {"01&E(1", 'F'}, + {"01&E(F", 'F'}, + {"01&E(N", 'F'}, + {"01&E(O", 'F'}, + {"01&E(S", 'F'}, + {"01&E(V", 'F'}, + {"01&E1", 'F'}, + {"01&E1;", 'F'}, + {"01&E1C", 'F'}, + {"01&E1K", 'F'}, + {"01&E1O", 'F'}, + {"01&EF(", 'F'}, + {"01&EK(", 'F'}, + {"01&EK1", 'F'}, + {"01&EKF", 'F'}, + {"01&EKN", 'F'}, + {"01&EKS", 'F'}, + {"01&EKU", 'F'}, + {"01&EKV", 'F'}, + {"01&EN", 'F'}, + {"01&EN;", 'F'}, + {"01&ENC", 'F'}, + {"01&ENK", 'F'}, + {"01&ENO", 'F'}, + {"01&ES", 'F'}, + {"01&ES;", 'F'}, + {"01&ESC", 'F'}, + {"01&ESK", 'F'}, + {"01&ESO", 'F'}, + {"01&EUE", 'F'}, + {"01&EV", 'F'}, + {"01&EV;", 'F'}, + {"01&EVC", 'F'}, + {"01&EVK", 'F'}, + {"01&EVO", 'F'}, + {"01&F()", 'F'}, + {"01&F(1", 'F'}, + {"01&F(E", 'F'}, + {"01&F(F", 'F'}, + {"01&F(N", 'F'}, + {"01&F(S", 'F'}, + {"01&F(V", 'F'}, + {"01&K&(", 'F'}, + {"01&K&1", 'F'}, + {"01&K&F", 'F'}, + {"01&K&N", 'F'}, + {"01&K&S", 'F'}, + {"01&K&V", 'F'}, + {"01&K(1", 'F'}, + {"01&K(F", 'F'}, + {"01&K(N", 'F'}, + {"01&K(S", 'F'}, + {"01&K(V", 'F'}, + {"01&K1O", 'F'}, + {"01&KC", 'F'}, + {"01&KF(", 'F'}, + {"01&KNK", 'F'}, + {"01&KO(", 'F'}, + {"01&KO1", 'F'}, + {"01&KOF", 'F'}, + {"01&KOK", 'F'}, + {"01&KON", 'F'}, + {"01&KOS", 'F'}, + {"01&KOV", 'F'}, + {"01&KSO", 'F'}, + {"01&KVO", 'F'}, + {"01&N&(", 'F'}, + {"01&N&1", 'F'}, + {"01&N&F", 'F'}, + {"01&N&N", 'F'}, + {"01&N&S", 'F'}, + {"01&N&V", 'F'}, + {"01&N)&", 'F'}, + {"01&N)C", 'F'}, + {"01&N)O", 'F'}, + {"01&N)U", 'F'}, + {"01&N;", 'F'}, + {"01&N;C", 'F'}, + {"01&N;E", 'F'}, + {"01&N;T", 'F'}, + {"01&NB(", 'F'}, + {"01&NB1", 'F'}, + {"01&NBF", 'F'}, + {"01&NBN", 'F'}, + {"01&NBS", 'F'}, + {"01&NBV", 'F'}, + {"01&NC", 'F'}, + {"01&NEN", 'F'}, + {"01&NF(", 'F'}, + {"01&NK(", 'F'}, + {"01&NK1", 'F'}, + {"01&NKF", 'F'}, + {"01&NKN", 'F'}, + {"01&NKS", 'F'}, + {"01&NKV", 'F'}, + {"01&NO(", 'F'}, + {"01&NOF", 'F'}, + {"01&NOS", 'F'}, + {"01&NOV", 'F'}, + {"01&NTN", 'F'}, + {"01&NU", 'F'}, + {"01&NU(", 'F'}, + {"01&NU;", 'F'}, + {"01&NUC", 'F'}, + {"01&NUE", 'F'}, + {"01&S", 'F'}, + {"01&S&(", 'F'}, + {"01&S&1", 'F'}, + {"01&S&F", 'F'}, + {"01&S&N", 'F'}, + {"01&S&S", 'F'}, + {"01&S&V", 'F'}, + {"01&S)&", 'F'}, + {"01&S)C", 'F'}, + {"01&S)O", 'F'}, + {"01&S)U", 'F'}, + {"01&S1", 'F'}, + {"01&S1;", 'F'}, + {"01&S1C", 'F'}, + {"01&S;", 'F'}, + {"01&S;C", 'F'}, + {"01&S;E", 'F'}, + {"01&S;T", 'F'}, + {"01&SB(", 'F'}, + {"01&SB1", 'F'}, + {"01&SBF", 'F'}, + {"01&SBN", 'F'}, + {"01&SBS", 'F'}, + {"01&SBV", 'F'}, + {"01&SC", 'F'}, + {"01&SEK", 'F'}, + {"01&SEN", 'F'}, + {"01&SF(", 'F'}, + {"01&SK(", 'F'}, + {"01&SK1", 'F'}, + {"01&SKF", 'F'}, + {"01&SKN", 'F'}, + {"01&SKS", 'F'}, + {"01&SKV", 'F'}, + {"01&SO(", 'F'}, + {"01&SO1", 'F'}, + {"01&SOF", 'F'}, + {"01&SON", 'F'}, + {"01&SOS", 'F'}, + {"01&SOV", 'F'}, + {"01&STN", 'F'}, + {"01&SU", 'F'}, + {"01&SU(", 'F'}, + {"01&SU;", 'F'}, + {"01&SUC", 'F'}, + {"01&SUE", 'F'}, + {"01&SV", 'F'}, + {"01&SV;", 'F'}, + {"01&SVC", 'F'}, + {"01&SVO", 'F'}, + {"01&V", 'F'}, + {"01&V&(", 'F'}, + {"01&V&1", 'F'}, + {"01&V&F", 'F'}, + {"01&V&N", 'F'}, + {"01&V&S", 'F'}, + {"01&V&V", 'F'}, + {"01&V)&", 'F'}, + {"01&V)C", 'F'}, + {"01&V)O", 'F'}, + {"01&V)U", 'F'}, + {"01&V;", 'F'}, + {"01&V;C", 'F'}, + {"01&V;E", 'F'}, + {"01&V;T", 'F'}, + {"01&VB(", 'F'}, + {"01&VB1", 'F'}, + {"01&VBF", 'F'}, + {"01&VBN", 'F'}, + {"01&VBS", 'F'}, + {"01&VBV", 'F'}, + {"01&VC", 'F'}, + {"01&VEK", 'F'}, + {"01&VEN", 'F'}, + {"01&VF(", 'F'}, + {"01&VK(", 'F'}, + {"01&VK1", 'F'}, + {"01&VKF", 'F'}, + {"01&VKN", 'F'}, + {"01&VKS", 'F'}, + {"01&VKV", 'F'}, + {"01&VO(", 'F'}, + {"01&VOF", 'F'}, + {"01&VOS", 'F'}, + {"01&VS", 'F'}, + {"01&VS;", 'F'}, + {"01&VSC", 'F'}, + {"01&VSO", 'F'}, + {"01&VTN", 'F'}, + {"01&VU", 'F'}, + {"01&VU(", 'F'}, + {"01&VU;", 'F'}, + {"01&VUC", 'F'}, + {"01&VUE", 'F'}, + {"01(EF(", 'F'}, + {"01(EKF", 'F'}, + {"01(EKN", 'F'}, + {"01(ENK", 'F'}, + {"01(U(E", 'F'}, + {"01)&(1", 'F'}, + {"01)&(E", 'F'}, + {"01)&(F", 'F'}, + {"01)&(N", 'F'}, + {"01)&(S", 'F'}, + {"01)&(V", 'F'}, + {"01)&1", 'F'}, + {"01)&1&", 'F'}, + {"01)&1)", 'F'}, + {"01)&1;", 'F'}, + {"01)&1B", 'F'}, + {"01)&1C", 'F'}, + {"01)&1F", 'F'}, + {"01)&1O", 'F'}, + {"01)&1U", 'F'}, + {"01)&F(", 'F'}, + {"01)&N", 'F'}, + {"01)&N&", 'F'}, + {"01)&N)", 'F'}, + {"01)&N;", 'F'}, + {"01)&NB", 'F'}, + {"01)&NC", 'F'}, + {"01)&NF", 'F'}, + {"01)&NO", 'F'}, + {"01)&NU", 'F'}, + {"01)&S", 'F'}, + {"01)&S&", 'F'}, + {"01)&S)", 'F'}, + {"01)&S;", 'F'}, + {"01)&SB", 'F'}, + {"01)&SC", 'F'}, + {"01)&SF", 'F'}, + {"01)&SO", 'F'}, + {"01)&SU", 'F'}, + {"01)&V", 'F'}, + {"01)&V&", 'F'}, + {"01)&V)", 'F'}, + {"01)&V;", 'F'}, + {"01)&VB", 'F'}, + {"01)&VC", 'F'}, + {"01)&VF", 'F'}, + {"01)&VO", 'F'}, + {"01)&VU", 'F'}, + {"01),(1", 'F'}, + {"01),(F", 'F'}, + {"01),(N", 'F'}, + {"01),(S", 'F'}, + {"01),(V", 'F'}, + {"01);E(", 'F'}, + {"01);E1", 'F'}, + {"01);EF", 'F'}, + {"01);EK", 'F'}, + {"01);EN", 'F'}, + {"01);EO", 'F'}, + {"01);ES", 'F'}, + {"01);EV", 'F'}, + {"01);T(", 'F'}, + {"01);T1", 'F'}, + {"01);TF", 'F'}, + {"01);TK", 'F'}, + {"01);TN", 'F'}, + {"01);TO", 'F'}, + {"01);TS", 'F'}, + {"01);TV", 'F'}, + {"01)B(1", 'F'}, + {"01)B(F", 'F'}, + {"01)B(N", 'F'}, + {"01)B(S", 'F'}, + {"01)B(V", 'F'}, + {"01)B1", 'F'}, + {"01)B1&", 'F'}, + {"01)B1;", 'F'}, + {"01)B1C", 'F'}, + {"01)B1K", 'F'}, + {"01)B1N", 'F'}, + {"01)B1O", 'F'}, + {"01)B1U", 'F'}, + {"01)BF(", 'F'}, + {"01)BN", 'F'}, + {"01)BN&", 'F'}, + {"01)BN;", 'F'}, + {"01)BNC", 'F'}, + {"01)BNK", 'F'}, + {"01)BNO", 'F'}, + {"01)BNU", 'F'}, + {"01)BS", 'F'}, + {"01)BS&", 'F'}, + {"01)BS;", 'F'}, + {"01)BSC", 'F'}, + {"01)BSK", 'F'}, + {"01)BSO", 'F'}, + {"01)BSU", 'F'}, + {"01)BV", 'F'}, + {"01)BV&", 'F'}, + {"01)BV;", 'F'}, + {"01)BVC", 'F'}, + {"01)BVK", 'F'}, + {"01)BVO", 'F'}, + {"01)BVU", 'F'}, + {"01)C", 'F'}, + {"01)E(1", 'F'}, + {"01)E(F", 'F'}, + {"01)E(N", 'F'}, + {"01)E(S", 'F'}, + {"01)E(V", 'F'}, + {"01)E1C", 'F'}, + {"01)E1O", 'F'}, + {"01)EF(", 'F'}, + {"01)EK(", 'F'}, + {"01)EK1", 'F'}, + {"01)EKF", 'F'}, + {"01)EKN", 'F'}, + {"01)EKS", 'F'}, + {"01)EKV", 'F'}, + {"01)ENC", 'F'}, + {"01)ENO", 'F'}, + {"01)ESC", 'F'}, + {"01)ESO", 'F'}, + {"01)EVC", 'F'}, + {"01)EVO", 'F'}, + {"01)F(F", 'F'}, + {"01)K(1", 'F'}, + {"01)K(F", 'F'}, + {"01)K(N", 'F'}, + {"01)K(S", 'F'}, + {"01)K(V", 'F'}, + {"01)K1&", 'F'}, + {"01)K1;", 'F'}, + {"01)K1B", 'F'}, + {"01)K1E", 'F'}, + {"01)K1O", 'F'}, + {"01)K1U", 'F'}, + {"01)KB(", 'F'}, + {"01)KB1", 'F'}, + {"01)KBF", 'F'}, + {"01)KBN", 'F'}, + {"01)KBS", 'F'}, + {"01)KBV", 'F'}, + {"01)KF(", 'F'}, + {"01)KN&", 'F'}, + {"01)KN;", 'F'}, + {"01)KNB", 'F'}, + {"01)KNC", 'F'}, + {"01)KNE", 'F'}, + {"01)KNK", 'F'}, + {"01)KNU", 'F'}, + {"01)KS&", 'F'}, + {"01)KS;", 'F'}, + {"01)KSB", 'F'}, + {"01)KSE", 'F'}, + {"01)KSO", 'F'}, + {"01)KSU", 'F'}, + {"01)KUE", 'F'}, + {"01)KV&", 'F'}, + {"01)KV;", 'F'}, + {"01)KVB", 'F'}, + {"01)KVE", 'F'}, + {"01)KVO", 'F'}, + {"01)KVU", 'F'}, + {"01)O(1", 'F'}, + {"01)O(E", 'F'}, + {"01)O(F", 'F'}, + {"01)O(N", 'F'}, + {"01)O(S", 'F'}, + {"01)O(V", 'F'}, + {"01)O1", 'F'}, + {"01)O1&", 'F'}, + {"01)O1)", 'F'}, + {"01)O1;", 'F'}, + {"01)O1B", 'F'}, + {"01)O1C", 'F'}, + {"01)O1K", 'F'}, + {"01)O1U", 'F'}, + {"01)OF(", 'F'}, + {"01)ON&", 'F'}, + {"01)ON)", 'F'}, + {"01)ON;", 'F'}, + {"01)ONB", 'F'}, + {"01)ONC", 'F'}, + {"01)ONK", 'F'}, + {"01)ONU", 'F'}, + {"01)OS", 'F'}, + {"01)OS&", 'F'}, + {"01)OS)", 'F'}, + {"01)OS;", 'F'}, + {"01)OSB", 'F'}, + {"01)OSC", 'F'}, + {"01)OSK", 'F'}, + {"01)OSU", 'F'}, + {"01)OV", 'F'}, + {"01)OV&", 'F'}, + {"01)OV)", 'F'}, + {"01)OV;", 'F'}, + {"01)OVB", 'F'}, + {"01)OVC", 'F'}, + {"01)OVK", 'F'}, + {"01)OVO", 'F'}, + {"01)OVU", 'F'}, + {"01)U(E", 'F'}, + {"01)UE(", 'F'}, + {"01)UE1", 'F'}, + {"01)UEF", 'F'}, + {"01)UEK", 'F'}, + {"01)UEN", 'F'}, + {"01)UES", 'F'}, + {"01)UEV", 'F'}, + {"01,(1)", 'F'}, + {"01,(1O", 'F'}, + {"01,(E(", 'F'}, + {"01,(E1", 'F'}, + {"01,(EF", 'F'}, + {"01,(EK", 'F'}, + {"01,(EN", 'F'}, + {"01,(ES", 'F'}, + {"01,(EV", 'F'}, + {"01,(F(", 'F'}, + {"01,(N)", 'F'}, + {"01,(NO", 'F'}, + {"01,(S)", 'F'}, + {"01,(SO", 'F'}, + {"01,(V)", 'F'}, + {"01,(VO", 'F'}, + {"01,F()", 'F'}, + {"01,F(1", 'F'}, + {"01,F(F", 'F'}, + {"01,F(N", 'F'}, + {"01,F(S", 'F'}, + {"01,F(V", 'F'}, + {"01;E(1", 'F'}, + {"01;E(E", 'F'}, + {"01;E(F", 'F'}, + {"01;E(N", 'F'}, + {"01;E(S", 'F'}, + {"01;E(V", 'F'}, + {"01;E1,", 'F'}, + {"01;E1;", 'F'}, + {"01;E1C", 'F'}, + {"01;E1K", 'F'}, + {"01;E1O", 'F'}, + {"01;E1T", 'F'}, + {"01;EF(", 'F'}, + {"01;EK(", 'F'}, + {"01;EK1", 'F'}, + {"01;EKF", 'F'}, + {"01;EKN", 'F'}, + {"01;EKO", 'F'}, + {"01;EKS", 'F'}, + {"01;EKV", 'F'}, + {"01;EN,", 'F'}, + {"01;EN;", 'F'}, + {"01;ENC", 'F'}, + {"01;ENE", 'F'}, + {"01;ENK", 'F'}, + {"01;ENO", 'F'}, + {"01;ENT", 'F'}, + {"01;ES,", 'F'}, + {"01;ES;", 'F'}, + {"01;ESC", 'F'}, + {"01;ESK", 'F'}, + {"01;ESO", 'F'}, + {"01;EST", 'F'}, + {"01;EV,", 'F'}, + {"01;EV;", 'F'}, + {"01;EVC", 'F'}, + {"01;EVK", 'F'}, + {"01;EVO", 'F'}, + {"01;EVT", 'F'}, + {"01;N:T", 'F'}, + {"01;T(1", 'F'}, + {"01;T(C", 'F'}, + {"01;T(E", 'F'}, + {"01;T(F", 'F'}, + {"01;T(N", 'F'}, + {"01;T(S", 'F'}, + {"01;T(V", 'F'}, + {"01;T1(", 'F'}, + {"01;T1,", 'F'}, + {"01;T1;", 'F'}, + {"01;T1C", 'F'}, + {"01;T1F", 'F'}, + {"01;T1K", 'F'}, + {"01;T1O", 'F'}, + {"01;T1T", 'F'}, + {"01;T;", 'F'}, + {"01;T;C", 'F'}, + {"01;TF(", 'F'}, + {"01;TK(", 'F'}, + {"01;TK1", 'F'}, + {"01;TKF", 'F'}, + {"01;TKK", 'F'}, + {"01;TKN", 'F'}, + {"01;TKO", 'F'}, + {"01;TKS", 'F'}, + {"01;TKV", 'F'}, + {"01;TN(", 'F'}, + {"01;TN,", 'F'}, + {"01;TN1", 'F'}, + {"01;TN;", 'F'}, + {"01;TNC", 'F'}, + {"01;TNF", 'F'}, + {"01;TNK", 'F'}, + {"01;TNN", 'F'}, + {"01;TNO", 'F'}, + {"01;TNS", 'F'}, + {"01;TNT", 'F'}, + {"01;TNV", 'F'}, + {"01;TO(", 'F'}, + {"01;TS(", 'F'}, + {"01;TS,", 'F'}, + {"01;TS;", 'F'}, + {"01;TSC", 'F'}, + {"01;TSF", 'F'}, + {"01;TSK", 'F'}, + {"01;TSO", 'F'}, + {"01;TST", 'F'}, + {"01;TTN", 'F'}, + {"01;TV(", 'F'}, + {"01;TV,", 'F'}, + {"01;TV;", 'F'}, + {"01;TVC", 'F'}, + {"01;TVF", 'F'}, + {"01;TVK", 'F'}, + {"01;TVO", 'F'}, + {"01;TVT", 'F'}, + {"01A(F(", 'F'}, + {"01A(N)", 'F'}, + {"01A(NO", 'F'}, + {"01A(S)", 'F'}, + {"01A(SO", 'F'}, + {"01A(V)", 'F'}, + {"01A(VO", 'F'}, + {"01AF()", 'F'}, + {"01AF(1", 'F'}, + {"01AF(F", 'F'}, + {"01AF(N", 'F'}, + {"01AF(S", 'F'}, + {"01AF(V", 'F'}, + {"01ASO(", 'F'}, + {"01ASO1", 'F'}, + {"01ASOF", 'F'}, + {"01ASON", 'F'}, + {"01ASOS", 'F'}, + {"01ASOV", 'F'}, + {"01ASUE", 'F'}, + {"01ATO(", 'F'}, + {"01ATO1", 'F'}, + {"01ATOF", 'F'}, + {"01ATON", 'F'}, + {"01ATOS", 'F'}, + {"01ATOV", 'F'}, + {"01ATUE", 'F'}, + {"01AVO(", 'F'}, + {"01AVOF", 'F'}, + {"01AVOS", 'F'}, + {"01AVUE", 'F'}, + {"01B(1)", 'F'}, + {"01B(1O", 'F'}, + {"01B(F(", 'F'}, + {"01B(NO", 'F'}, + {"01B(S)", 'F'}, + {"01B(SO", 'F'}, + {"01B(V)", 'F'}, + {"01B(VO", 'F'}, + {"01B1", 'F'}, + {"01B1&(", 'F'}, + {"01B1&1", 'F'}, + {"01B1&F", 'F'}, + {"01B1&N", 'F'}, + {"01B1&S", 'F'}, + {"01B1&V", 'F'}, + {"01B1,(", 'F'}, + {"01B1,F", 'F'}, + {"01B1;", 'F'}, + {"01B1;C", 'F'}, + {"01B1B(", 'F'}, + {"01B1B1", 'F'}, + {"01B1BF", 'F'}, + {"01B1BN", 'F'}, + {"01B1BS", 'F'}, + {"01B1BV", 'F'}, + {"01B1C", 'F'}, + {"01B1K(", 'F'}, + {"01B1K1", 'F'}, + {"01B1KF", 'F'}, + {"01B1KN", 'F'}, + {"01B1KS", 'F'}, + {"01B1KV", 'F'}, + {"01B1O(", 'F'}, + {"01B1OF", 'F'}, + {"01B1OS", 'F'}, + {"01B1OV", 'F'}, + {"01B1U(", 'F'}, + {"01B1UE", 'F'}, + {"01BE(1", 'F'}, + {"01BE(F", 'F'}, + {"01BE(N", 'F'}, + {"01BE(S", 'F'}, + {"01BE(V", 'F'}, + {"01BEK(", 'F'}, + {"01BF()", 'F'}, + {"01BF(1", 'F'}, + {"01BF(F", 'F'}, + {"01BF(N", 'F'}, + {"01BF(S", 'F'}, + {"01BF(V", 'F'}, + {"01BN", 'F'}, + {"01BN&(", 'F'}, + {"01BN&1", 'F'}, + {"01BN&F", 'F'}, + {"01BN&N", 'F'}, + {"01BN&S", 'F'}, + {"01BN&V", 'F'}, + {"01BN,(", 'F'}, + {"01BN,F", 'F'}, + {"01BN;", 'F'}, + {"01BN;C", 'F'}, + {"01BNB(", 'F'}, + {"01BNB1", 'F'}, + {"01BNBF", 'F'}, + {"01BNBN", 'F'}, + {"01BNBS", 'F'}, + {"01BNBV", 'F'}, + {"01BNC", 'F'}, + {"01BNK(", 'F'}, + {"01BNK1", 'F'}, + {"01BNKF", 'F'}, + {"01BNKN", 'F'}, + {"01BNKS", 'F'}, + {"01BNKV", 'F'}, + {"01BNO(", 'F'}, + {"01BNOF", 'F'}, + {"01BNOS", 'F'}, + {"01BNOV", 'F'}, + {"01BNU(", 'F'}, + {"01BNUE", 'F'}, + {"01BS", 'F'}, + {"01BS&(", 'F'}, + {"01BS&1", 'F'}, + {"01BS&F", 'F'}, + {"01BS&N", 'F'}, + {"01BS&S", 'F'}, + {"01BS&V", 'F'}, + {"01BS,(", 'F'}, + {"01BS,F", 'F'}, + {"01BS;", 'F'}, + {"01BS;C", 'F'}, + {"01BSB(", 'F'}, + {"01BSB1", 'F'}, + {"01BSBF", 'F'}, + {"01BSBN", 'F'}, + {"01BSBS", 'F'}, + {"01BSBV", 'F'}, + {"01BSC", 'F'}, + {"01BSK(", 'F'}, + {"01BSK1", 'F'}, + {"01BSKF", 'F'}, + {"01BSKN", 'F'}, + {"01BSKS", 'F'}, + {"01BSKV", 'F'}, + {"01BSO(", 'F'}, + {"01BSO1", 'F'}, + {"01BSOF", 'F'}, + {"01BSON", 'F'}, + {"01BSOS", 'F'}, + {"01BSOV", 'F'}, + {"01BSU(", 'F'}, + {"01BSUE", 'F'}, + {"01BV", 'F'}, + {"01BV&(", 'F'}, + {"01BV&1", 'F'}, + {"01BV&F", 'F'}, + {"01BV&N", 'F'}, + {"01BV&S", 'F'}, + {"01BV&V", 'F'}, + {"01BV,(", 'F'}, + {"01BV,F", 'F'}, + {"01BV;", 'F'}, + {"01BV;C", 'F'}, + {"01BVB(", 'F'}, + {"01BVB1", 'F'}, + {"01BVBF", 'F'}, + {"01BVBN", 'F'}, + {"01BVBS", 'F'}, + {"01BVBV", 'F'}, + {"01BVC", 'F'}, + {"01BVK(", 'F'}, + {"01BVK1", 'F'}, + {"01BVKF", 'F'}, + {"01BVKN", 'F'}, + {"01BVKS", 'F'}, + {"01BVKV", 'F'}, + {"01BVO(", 'F'}, + {"01BVOF", 'F'}, + {"01BVOS", 'F'}, + {"01BVU(", 'F'}, + {"01BVUE", 'F'}, + {"01C", 'F'}, + {"01E(1)", 'F'}, + {"01E(1O", 'F'}, + {"01E(F(", 'F'}, + {"01E(N)", 'F'}, + {"01E(NO", 'F'}, + {"01E(S)", 'F'}, + {"01E(SO", 'F'}, + {"01E(V)", 'F'}, + {"01E(VO", 'F'}, + {"01E1;T", 'F'}, + {"01E1C", 'F'}, + {"01E1O(", 'F'}, + {"01E1OF", 'F'}, + {"01E1OS", 'F'}, + {"01E1OV", 'F'}, + {"01E1T(", 'F'}, + {"01E1T1", 'F'}, + {"01E1TF", 'F'}, + {"01E1TN", 'F'}, + {"01E1TS", 'F'}, + {"01E1TV", 'F'}, + {"01E1UE", 'F'}, + {"01EF()", 'F'}, + {"01EF(1", 'F'}, + {"01EF(F", 'F'}, + {"01EF(N", 'F'}, + {"01EF(S", 'F'}, + {"01EF(V", 'F'}, + {"01EK(1", 'F'}, + {"01EK(E", 'F'}, + {"01EK(F", 'F'}, + {"01EK(N", 'F'}, + {"01EK(S", 'F'}, + {"01EK(V", 'F'}, + {"01EK1;", 'F'}, + {"01EK1C", 'F'}, + {"01EK1O", 'F'}, + {"01EK1T", 'F'}, + {"01EK1U", 'F'}, + {"01EKF(", 'F'}, + {"01EKN;", 'F'}, + {"01EKNC", 'F'}, + {"01EKNE", 'F'}, + {"01EKNT", 'F'}, + {"01EKNU", 'F'}, + {"01EKOK", 'F'}, + {"01EKS;", 'F'}, + {"01EKSC", 'F'}, + {"01EKSO", 'F'}, + {"01EKST", 'F'}, + {"01EKSU", 'F'}, + {"01EKU(", 'F'}, + {"01EKU1", 'F'}, + {"01EKUE", 'F'}, + {"01EKUF", 'F'}, + {"01EKUS", 'F'}, + {"01EKUV", 'F'}, + {"01EKV;", 'F'}, + {"01EKVC", 'F'}, + {"01EKVO", 'F'}, + {"01EKVT", 'F'}, + {"01EKVU", 'F'}, + {"01EN;T", 'F'}, + {"01ENC", 'F'}, + {"01ENEN", 'F'}, + {"01ENO(", 'F'}, + {"01ENOF", 'F'}, + {"01ENOS", 'F'}, + {"01ENOV", 'F'}, + {"01ENT(", 'F'}, + {"01ENT1", 'F'}, + {"01ENTF", 'F'}, + {"01ENTN", 'F'}, + {"01ENTS", 'F'}, + {"01ENTV", 'F'}, + {"01ENUE", 'F'}, + {"01EOKN", 'F'}, + {"01ES;T", 'F'}, + {"01ESC", 'F'}, + {"01ESO(", 'F'}, + {"01ESO1", 'F'}, + {"01ESOF", 'F'}, + {"01ESON", 'F'}, + {"01ESOS", 'F'}, + {"01ESOV", 'F'}, + {"01EST(", 'F'}, + {"01EST1", 'F'}, + {"01ESTF", 'F'}, + {"01ESTN", 'F'}, + {"01ESTS", 'F'}, + {"01ESTV", 'F'}, + {"01ESUE", 'F'}, + {"01EU(1", 'F'}, + {"01EU(F", 'F'}, + {"01EU(N", 'F'}, + {"01EU(S", 'F'}, + {"01EU(V", 'F'}, + {"01EU1,", 'F'}, + {"01EU1C", 'F'}, + {"01EU1O", 'F'}, + {"01EUEF", 'F'}, + {"01EUEK", 'F'}, + {"01EUF(", 'F'}, + {"01EUS,", 'F'}, + {"01EUSC", 'F'}, + {"01EUSO", 'F'}, + {"01EUV,", 'F'}, + {"01EUVC", 'F'}, + {"01EUVO", 'F'}, + {"01EV;T", 'F'}, + {"01EVC", 'F'}, + {"01EVO(", 'F'}, + {"01EVOF", 'F'}, + {"01EVOS", 'F'}, + {"01EVT(", 'F'}, + {"01EVT1", 'F'}, + {"01EVTF", 'F'}, + {"01EVTN", 'F'}, + {"01EVTS", 'F'}, + {"01EVTV", 'F'}, + {"01EVUE", 'F'}, + {"01F()1", 'F'}, + {"01F()F", 'F'}, + {"01F()K", 'F'}, + {"01F()N", 'F'}, + {"01F()O", 'F'}, + {"01F()S", 'F'}, + {"01F()U", 'F'}, + {"01F()V", 'F'}, + {"01F(1)", 'F'}, + {"01F(1N", 'F'}, + {"01F(1O", 'F'}, + {"01F(E(", 'F'}, + {"01F(E1", 'F'}, + {"01F(EF", 'F'}, + {"01F(EK", 'F'}, + {"01F(EN", 'F'}, + {"01F(ES", 'F'}, + {"01F(EV", 'F'}, + {"01F(F(", 'F'}, + {"01F(N)", 'F'}, + {"01F(N,", 'F'}, + {"01F(NO", 'F'}, + {"01F(S)", 'F'}, + {"01F(SO", 'F'}, + {"01F(V)", 'F'}, + {"01F(VO", 'F'}, + {"01K(1O", 'F'}, + {"01K(F(", 'F'}, + {"01K(N)", 'F'}, + {"01K(NO", 'F'}, + {"01K(S)", 'F'}, + {"01K(SO", 'F'}, + {"01K(V)", 'F'}, + {"01K(VO", 'F'}, + {"01K)&(", 'F'}, + {"01K)&1", 'F'}, + {"01K)&F", 'F'}, + {"01K)&N", 'F'}, + {"01K)&S", 'F'}, + {"01K)&V", 'F'}, + {"01K);E", 'F'}, + {"01K);T", 'F'}, + {"01K)B(", 'F'}, + {"01K)B1", 'F'}, + {"01K)BF", 'F'}, + {"01K)BN", 'F'}, + {"01K)BS", 'F'}, + {"01K)BV", 'F'}, + {"01K)E(", 'F'}, + {"01K)E1", 'F'}, + {"01K)EF", 'F'}, + {"01K)EK", 'F'}, + {"01K)EN", 'F'}, + {"01K)ES", 'F'}, + {"01K)EV", 'F'}, + {"01K)F(", 'F'}, + {"01K)O(", 'F'}, + {"01K)OF", 'F'}, + {"01K)UE", 'F'}, + {"01K1", 'F'}, + {"01K1&(", 'F'}, + {"01K1&1", 'F'}, + {"01K1&F", 'F'}, + {"01K1&N", 'F'}, + {"01K1&S", 'F'}, + {"01K1&V", 'F'}, + {"01K1;", 'F'}, + {"01K1;C", 'F'}, + {"01K1;E", 'F'}, + {"01K1;T", 'F'}, + {"01K1B(", 'F'}, + {"01K1B1", 'F'}, + {"01K1BF", 'F'}, + {"01K1BN", 'F'}, + {"01K1BS", 'F'}, + {"01K1BV", 'F'}, + {"01K1C", 'F'}, + {"01K1E(", 'F'}, + {"01K1E1", 'F'}, + {"01K1EF", 'F'}, + {"01K1EK", 'F'}, + {"01K1EN", 'F'}, + {"01K1ES", 'F'}, + {"01K1EV", 'F'}, + {"01K1O(", 'F'}, + {"01K1OF", 'F'}, + {"01K1OS", 'F'}, + {"01K1OV", 'F'}, + {"01K1U(", 'F'}, + {"01K1UE", 'F'}, + {"01KF()", 'F'}, + {"01KF(1", 'F'}, + {"01KF(F", 'F'}, + {"01KF(N", 'F'}, + {"01KF(S", 'F'}, + {"01KF(V", 'F'}, + {"01KN", 'F'}, + {"01KN&(", 'F'}, + {"01KN&1", 'F'}, + {"01KN&F", 'F'}, + {"01KN&N", 'F'}, + {"01KN&S", 'F'}, + {"01KN&V", 'F'}, + {"01KN;", 'F'}, + {"01KN;C", 'F'}, + {"01KN;E", 'F'}, + {"01KN;T", 'F'}, + {"01KNB(", 'F'}, + {"01KNB1", 'F'}, + {"01KNBF", 'F'}, + {"01KNBN", 'F'}, + {"01KNBS", 'F'}, + {"01KNBV", 'F'}, + {"01KNC", 'F'}, + {"01KNE(", 'F'}, + {"01KNE1", 'F'}, + {"01KNEF", 'F'}, + {"01KNEN", 'F'}, + {"01KNES", 'F'}, + {"01KNEV", 'F'}, + {"01KNU(", 'F'}, + {"01KNUE", 'F'}, + {"01KS", 'F'}, + {"01KS&(", 'F'}, + {"01KS&1", 'F'}, + {"01KS&F", 'F'}, + {"01KS&N", 'F'}, + {"01KS&S", 'F'}, + {"01KS&V", 'F'}, + {"01KS;", 'F'}, + {"01KS;C", 'F'}, + {"01KS;E", 'F'}, + {"01KS;T", 'F'}, + {"01KSB(", 'F'}, + {"01KSB1", 'F'}, + {"01KSBF", 'F'}, + {"01KSBN", 'F'}, + {"01KSBS", 'F'}, + {"01KSBV", 'F'}, + {"01KSC", 'F'}, + {"01KSE(", 'F'}, + {"01KSE1", 'F'}, + {"01KSEF", 'F'}, + {"01KSEK", 'F'}, + {"01KSEN", 'F'}, + {"01KSES", 'F'}, + {"01KSEV", 'F'}, + {"01KSO(", 'F'}, + {"01KSO1", 'F'}, + {"01KSOF", 'F'}, + {"01KSON", 'F'}, + {"01KSOS", 'F'}, + {"01KSOV", 'F'}, + {"01KSU(", 'F'}, + {"01KSUE", 'F'}, + {"01KUE(", 'F'}, + {"01KUE1", 'F'}, + {"01KUEF", 'F'}, + {"01KUEK", 'F'}, + {"01KUEN", 'F'}, + {"01KUES", 'F'}, + {"01KUEV", 'F'}, + {"01KV", 'F'}, + {"01KV&(", 'F'}, + {"01KV&1", 'F'}, + {"01KV&F", 'F'}, + {"01KV&N", 'F'}, + {"01KV&S", 'F'}, + {"01KV&V", 'F'}, + {"01KV;", 'F'}, + {"01KV;C", 'F'}, + {"01KV;E", 'F'}, + {"01KV;T", 'F'}, + {"01KVB(", 'F'}, + {"01KVB1", 'F'}, + {"01KVBF", 'F'}, + {"01KVBN", 'F'}, + {"01KVBS", 'F'}, + {"01KVBV", 'F'}, + {"01KVC", 'F'}, + {"01KVE(", 'F'}, + {"01KVE1", 'F'}, + {"01KVEF", 'F'}, + {"01KVEK", 'F'}, + {"01KVEN", 'F'}, + {"01KVES", 'F'}, + {"01KVEV", 'F'}, + {"01KVO(", 'F'}, + {"01KVOF", 'F'}, + {"01KVOS", 'F'}, + {"01KVU(", 'F'}, + {"01KVUE", 'F'}, + {"01N&F(", 'F'}, + {"01N(1O", 'F'}, + {"01N(F(", 'F'}, + {"01N(S)", 'F'}, + {"01N(SO", 'F'}, + {"01N(V)", 'F'}, + {"01N(VO", 'F'}, + {"01N)UE", 'F'}, + {"01N,F(", 'F'}, + {"01NE(1", 'F'}, + {"01NE(F", 'F'}, + {"01NE(N", 'F'}, + {"01NE(S", 'F'}, + {"01NE(V", 'F'}, + {"01NE1C", 'F'}, + {"01NE1O", 'F'}, + {"01NEF(", 'F'}, + {"01NENC", 'F'}, + {"01NENO", 'F'}, + {"01NESC", 'F'}, + {"01NESO", 'F'}, + {"01NEVC", 'F'}, + {"01NEVO", 'F'}, + {"01NU(E", 'F'}, + {"01NUE", 'F'}, + {"01NUE(", 'F'}, + {"01NUE1", 'F'}, + {"01NUE;", 'F'}, + {"01NUEC", 'F'}, + {"01NUEF", 'F'}, + {"01NUEK", 'F'}, + {"01NUEN", 'F'}, + {"01NUES", 'F'}, + {"01NUEV", 'F'}, + {"01O(1&", 'F'}, + {"01O(1)", 'F'}, + {"01O(1,", 'F'}, + {"01O(1O", 'F'}, + {"01O(E(", 'F'}, + {"01O(E1", 'F'}, + {"01O(EE", 'F'}, + {"01O(EF", 'F'}, + {"01O(EK", 'F'}, + {"01O(EN", 'F'}, + {"01O(EO", 'F'}, + {"01O(ES", 'F'}, + {"01O(EV", 'F'}, + {"01O(F(", 'F'}, + {"01O(N&", 'F'}, + {"01O(N)", 'F'}, + {"01O(N,", 'F'}, + {"01O(NO", 'F'}, + {"01O(S&", 'F'}, + {"01O(S)", 'F'}, + {"01O(S,", 'F'}, + {"01O(SO", 'F'}, + {"01O(V&", 'F'}, + {"01O(V)", 'F'}, + {"01O(V,", 'F'}, + {"01O(VO", 'F'}, + {"01OF()", 'F'}, + {"01OF(1", 'F'}, + {"01OF(E", 'F'}, + {"01OF(F", 'F'}, + {"01OF(N", 'F'}, + {"01OF(S", 'F'}, + {"01OF(V", 'F'}, + {"01OK&(", 'F'}, + {"01OK&1", 'F'}, + {"01OK&F", 'F'}, + {"01OK&N", 'F'}, + {"01OK&S", 'F'}, + {"01OK&V", 'F'}, + {"01OK(1", 'F'}, + {"01OK(F", 'F'}, + {"01OK(N", 'F'}, + {"01OK(S", 'F'}, + {"01OK(V", 'F'}, + {"01OK1C", 'F'}, + {"01OK1O", 'F'}, + {"01OKF(", 'F'}, + {"01OKNC", 'F'}, + {"01OKO(", 'F'}, + {"01OKO1", 'F'}, + {"01OKOF", 'F'}, + {"01OKON", 'F'}, + {"01OKOS", 'F'}, + {"01OKOV", 'F'}, + {"01OKSC", 'F'}, + {"01OKSO", 'F'}, + {"01OKVC", 'F'}, + {"01OKVO", 'F'}, + {"01ONSU", 'F'}, + {"01OS&(", 'F'}, + {"01OS&1", 'F'}, + {"01OS&E", 'F'}, + {"01OS&F", 'F'}, + {"01OS&K", 'F'}, + {"01OS&N", 'F'}, + {"01OS&S", 'F'}, + {"01OS&U", 'F'}, + {"01OS&V", 'F'}, + {"01OS(E", 'F'}, + {"01OS(U", 'F'}, + {"01OS)&", 'F'}, + {"01OS),", 'F'}, + {"01OS);", 'F'}, + {"01OS)B", 'F'}, + {"01OS)C", 'F'}, + {"01OS)E", 'F'}, + {"01OS)F", 'F'}, + {"01OS)K", 'F'}, + {"01OS)O", 'F'}, + {"01OS)U", 'F'}, + {"01OS,(", 'F'}, + {"01OS,F", 'F'}, + {"01OS1(", 'F'}, + {"01OS1F", 'F'}, + {"01OS1N", 'F'}, + {"01OS1S", 'F'}, + {"01OS1U", 'F'}, + {"01OS1V", 'F'}, + {"01OS;", 'F'}, + {"01OS;C", 'F'}, + {"01OS;E", 'F'}, + {"01OS;N", 'F'}, + {"01OS;T", 'F'}, + {"01OSA(", 'F'}, + {"01OSAF", 'F'}, + {"01OSAS", 'F'}, + {"01OSAT", 'F'}, + {"01OSAV", 'F'}, + {"01OSB(", 'F'}, + {"01OSB1", 'F'}, + {"01OSBE", 'F'}, + {"01OSBF", 'F'}, + {"01OSBN", 'F'}, + {"01OSBS", 'F'}, + {"01OSBV", 'F'}, + {"01OSC", 'F'}, + {"01OSE(", 'F'}, + {"01OSE1", 'F'}, + {"01OSEF", 'F'}, + {"01OSEK", 'F'}, + {"01OSEN", 'F'}, + {"01OSEO", 'F'}, + {"01OSES", 'F'}, + {"01OSEU", 'F'}, + {"01OSEV", 'F'}, + {"01OSF(", 'F'}, + {"01OSK(", 'F'}, + {"01OSK)", 'F'}, + {"01OSK1", 'F'}, + {"01OSKB", 'F'}, + {"01OSKF", 'F'}, + {"01OSKN", 'F'}, + {"01OSKS", 'F'}, + {"01OSKU", 'F'}, + {"01OSKV", 'F'}, + {"01OST(", 'F'}, + {"01OST1", 'F'}, + {"01OSTE", 'F'}, + {"01OSTF", 'F'}, + {"01OSTN", 'F'}, + {"01OSTS", 'F'}, + {"01OSTT", 'F'}, + {"01OSTV", 'F'}, + {"01OSU", 'F'}, + {"01OSU(", 'F'}, + {"01OSU1", 'F'}, + {"01OSU;", 'F'}, + {"01OSUC", 'F'}, + {"01OSUE", 'F'}, + {"01OSUF", 'F'}, + {"01OSUK", 'F'}, + {"01OSUO", 'F'}, + {"01OSUS", 'F'}, + {"01OSUT", 'F'}, + {"01OSUV", 'F'}, + {"01OSV(", 'F'}, + {"01OSVF", 'F'}, + {"01OSVO", 'F'}, + {"01OSVS", 'F'}, + {"01OSVU", 'F'}, + {"01OU(E", 'F'}, + {"01OUEK", 'F'}, + {"01OUEN", 'F'}, + {"01OV", 'F'}, + {"01OV&(", 'F'}, + {"01OV&1", 'F'}, + {"01OV&E", 'F'}, + {"01OV&F", 'F'}, + {"01OV&K", 'F'}, + {"01OV&N", 'F'}, + {"01OV&S", 'F'}, + {"01OV&U", 'F'}, + {"01OV&V", 'F'}, + {"01OV(E", 'F'}, + {"01OV(U", 'F'}, + {"01OV)&", 'F'}, + {"01OV),", 'F'}, + {"01OV);", 'F'}, + {"01OV)B", 'F'}, + {"01OV)C", 'F'}, + {"01OV)E", 'F'}, + {"01OV)F", 'F'}, + {"01OV)K", 'F'}, + {"01OV)O", 'F'}, + {"01OV)U", 'F'}, + {"01OV,(", 'F'}, + {"01OV,F", 'F'}, + {"01OV;", 'F'}, + {"01OV;C", 'F'}, + {"01OV;E", 'F'}, + {"01OV;N", 'F'}, + {"01OV;T", 'F'}, + {"01OVA(", 'F'}, + {"01OVAF", 'F'}, + {"01OVAS", 'F'}, + {"01OVAT", 'F'}, + {"01OVAV", 'F'}, + {"01OVB(", 'F'}, + {"01OVB1", 'F'}, + {"01OVBE", 'F'}, + {"01OVBF", 'F'}, + {"01OVBN", 'F'}, + {"01OVBS", 'F'}, + {"01OVBV", 'F'}, + {"01OVC", 'F'}, + {"01OVE(", 'F'}, + {"01OVE1", 'F'}, + {"01OVEF", 'F'}, + {"01OVEK", 'F'}, + {"01OVEN", 'F'}, + {"01OVEO", 'F'}, + {"01OVES", 'F'}, + {"01OVEU", 'F'}, + {"01OVEV", 'F'}, + {"01OVF(", 'F'}, + {"01OVK(", 'F'}, + {"01OVK)", 'F'}, + {"01OVK1", 'F'}, + {"01OVKB", 'F'}, + {"01OVKF", 'F'}, + {"01OVKN", 'F'}, + {"01OVKS", 'F'}, + {"01OVKU", 'F'}, + {"01OVKV", 'F'}, + {"01OVO(", 'F'}, + {"01OVOF", 'F'}, + {"01OVOK", 'F'}, + {"01OVOS", 'F'}, + {"01OVOU", 'F'}, + {"01OVS(", 'F'}, + {"01OVS1", 'F'}, + {"01OVSF", 'F'}, + {"01OVSO", 'F'}, + {"01OVSU", 'F'}, + {"01OVSV", 'F'}, + {"01OVT(", 'F'}, + {"01OVT1", 'F'}, + {"01OVTE", 'F'}, + {"01OVTF", 'F'}, + {"01OVTN", 'F'}, + {"01OVTS", 'F'}, + {"01OVTT", 'F'}, + {"01OVTV", 'F'}, + {"01OVU", 'F'}, + {"01OVU(", 'F'}, + {"01OVU1", 'F'}, + {"01OVU;", 'F'}, + {"01OVUC", 'F'}, + {"01OVUE", 'F'}, + {"01OVUF", 'F'}, + {"01OVUK", 'F'}, + {"01OVUO", 'F'}, + {"01OVUS", 'F'}, + {"01OVUT", 'F'}, + {"01OVUV", 'F'}, + {"01SF()", 'F'}, + {"01SF(1", 'F'}, + {"01SF(F", 'F'}, + {"01SF(N", 'F'}, + {"01SF(S", 'F'}, + {"01SF(V", 'F'}, + {"01SUE", 'F'}, + {"01SUE;", 'F'}, + {"01SUEC", 'F'}, + {"01SUEK", 'F'}, + {"01SV", 'F'}, + {"01SV;", 'F'}, + {"01SV;C", 'F'}, + {"01SVC", 'F'}, + {"01SVO(", 'F'}, + {"01SVOF", 'F'}, + {"01SVOS", 'F'}, + {"01T(1)", 'F'}, + {"01T(1O", 'F'}, + {"01T(F(", 'F'}, + {"01T(N)", 'F'}, + {"01T(NO", 'F'}, + {"01T(S)", 'F'}, + {"01T(SO", 'F'}, + {"01T(V)", 'F'}, + {"01T(VO", 'F'}, + {"01T1(F", 'F'}, + {"01T1O(", 'F'}, + {"01T1OF", 'F'}, + {"01T1OS", 'F'}, + {"01T1OV", 'F'}, + {"01TE(1", 'F'}, + {"01TE(F", 'F'}, + {"01TE(N", 'F'}, + {"01TE(S", 'F'}, + {"01TE(V", 'F'}, + {"01TE1N", 'F'}, + {"01TE1O", 'F'}, + {"01TEF(", 'F'}, + {"01TEK(", 'F'}, + {"01TEK1", 'F'}, + {"01TEKF", 'F'}, + {"01TEKN", 'F'}, + {"01TEKS", 'F'}, + {"01TEKV", 'F'}, + {"01TENN", 'F'}, + {"01TENO", 'F'}, + {"01TESN", 'F'}, + {"01TESO", 'F'}, + {"01TEVN", 'F'}, + {"01TEVO", 'F'}, + {"01TF()", 'F'}, + {"01TF(1", 'F'}, + {"01TF(F", 'F'}, + {"01TF(N", 'F'}, + {"01TF(S", 'F'}, + {"01TF(V", 'F'}, + {"01TN(1", 'F'}, + {"01TN(F", 'F'}, + {"01TN(S", 'F'}, + {"01TN(V", 'F'}, + {"01TN1C", 'F'}, + {"01TN1O", 'F'}, + {"01TN;E", 'F'}, + {"01TN;N", 'F'}, + {"01TN;T", 'F'}, + {"01TNE(", 'F'}, + {"01TNE1", 'F'}, + {"01TNEF", 'F'}, + {"01TNEN", 'F'}, + {"01TNES", 'F'}, + {"01TNEV", 'F'}, + {"01TNF(", 'F'}, + {"01TNKN", 'F'}, + {"01TNN:", 'F'}, + {"01TNNC", 'F'}, + {"01TNNO", 'F'}, + {"01TNO(", 'F'}, + {"01TNOF", 'F'}, + {"01TNOS", 'F'}, + {"01TNOV", 'F'}, + {"01TNSC", 'F'}, + {"01TNSO", 'F'}, + {"01TNT(", 'F'}, + {"01TNT1", 'F'}, + {"01TNTF", 'F'}, + {"01TNTN", 'F'}, + {"01TNTS", 'F'}, + {"01TNTV", 'F'}, + {"01TNVC", 'F'}, + {"01TNVO", 'F'}, + {"01TS(F", 'F'}, + {"01TSO(", 'F'}, + {"01TSO1", 'F'}, + {"01TSOF", 'F'}, + {"01TSON", 'F'}, + {"01TSOS", 'F'}, + {"01TSOV", 'F'}, + {"01TTNE", 'F'}, + {"01TTNK", 'F'}, + {"01TTNN", 'F'}, + {"01TTNT", 'F'}, + {"01TV(1", 'F'}, + {"01TV(F", 'F'}, + {"01TVO(", 'F'}, + {"01TVOF", 'F'}, + {"01TVOS", 'F'}, + {"01U", 'F'}, + {"01U(1)", 'F'}, + {"01U(1O", 'F'}, + {"01U(E(", 'F'}, + {"01U(E1", 'F'}, + {"01U(EF", 'F'}, + {"01U(EK", 'F'}, + {"01U(EN", 'F'}, + {"01U(ES", 'F'}, + {"01U(EV", 'F'}, + {"01U(F(", 'F'}, + {"01U(N)", 'F'}, + {"01U(NO", 'F'}, + {"01U(S)", 'F'}, + {"01U(SO", 'F'}, + {"01U(V)", 'F'}, + {"01U(VO", 'F'}, + {"01U1,(", 'F'}, + {"01U1,F", 'F'}, + {"01U1C", 'F'}, + {"01U1O(", 'F'}, + {"01U1OF", 'F'}, + {"01U1OS", 'F'}, + {"01U1OV", 'F'}, + {"01U;", 'F'}, + {"01U;C", 'F'}, + {"01UC", 'F'}, + {"01UE", 'F'}, + {"01UE(1", 'F'}, + {"01UE(E", 'F'}, + {"01UE(F", 'F'}, + {"01UE(N", 'F'}, + {"01UE(O", 'F'}, + {"01UE(S", 'F'}, + {"01UE(V", 'F'}, + {"01UE1", 'F'}, + {"01UE1&", 'F'}, + {"01UE1(", 'F'}, + {"01UE1)", 'F'}, + {"01UE1,", 'F'}, + {"01UE1;", 'F'}, + {"01UE1B", 'F'}, + {"01UE1C", 'F'}, + {"01UE1F", 'F'}, + {"01UE1K", 'F'}, + {"01UE1N", 'F'}, + {"01UE1O", 'F'}, + {"01UE1S", 'F'}, + {"01UE1U", 'F'}, + {"01UE1V", 'F'}, + {"01UE;", 'F'}, + {"01UE;C", 'F'}, + {"01UEC", 'F'}, + {"01UEF", 'F'}, + {"01UEF(", 'F'}, + {"01UEF,", 'F'}, + {"01UEF;", 'F'}, + {"01UEFC", 'F'}, + {"01UEK", 'F'}, + {"01UEK(", 'F'}, + {"01UEK1", 'F'}, + {"01UEK;", 'F'}, + {"01UEKC", 'F'}, + {"01UEKF", 'F'}, + {"01UEKN", 'F'}, + {"01UEKO", 'F'}, + {"01UEKS", 'F'}, + {"01UEKV", 'F'}, + {"01UEN", 'F'}, + {"01UEN&", 'F'}, + {"01UEN(", 'F'}, + {"01UEN)", 'F'}, + {"01UEN,", 'F'}, + {"01UEN1", 'F'}, + {"01UEN;", 'F'}, + {"01UENB", 'F'}, + {"01UENC", 'F'}, + {"01UENF", 'F'}, + {"01UENK", 'F'}, + {"01UENN", 'F'}, + {"01UENO", 'F'}, + {"01UENS", 'F'}, + {"01UENU", 'F'}, + {"01UEOK", 'F'}, + {"01UEON", 'F'}, + {"01UES", 'F'}, + {"01UES&", 'F'}, + {"01UES(", 'F'}, + {"01UES)", 'F'}, + {"01UES,", 'F'}, + {"01UES1", 'F'}, + {"01UES;", 'F'}, + {"01UESB", 'F'}, + {"01UESC", 'F'}, + {"01UESF", 'F'}, + {"01UESK", 'F'}, + {"01UESO", 'F'}, + {"01UESU", 'F'}, + {"01UESV", 'F'}, + {"01UEV", 'F'}, + {"01UEV&", 'F'}, + {"01UEV(", 'F'}, + {"01UEV)", 'F'}, + {"01UEV,", 'F'}, + {"01UEV;", 'F'}, + {"01UEVB", 'F'}, + {"01UEVC", 'F'}, + {"01UEVF", 'F'}, + {"01UEVK", 'F'}, + {"01UEVN", 'F'}, + {"01UEVO", 'F'}, + {"01UEVS", 'F'}, + {"01UEVU", 'F'}, + {"01UF()", 'F'}, + {"01UF(1", 'F'}, + {"01UF(F", 'F'}, + {"01UF(N", 'F'}, + {"01UF(S", 'F'}, + {"01UF(V", 'F'}, + {"01UK(E", 'F'}, + {"01UO(E", 'F'}, + {"01UON(", 'F'}, + {"01UON1", 'F'}, + {"01UONF", 'F'}, + {"01UONS", 'F'}, + {"01US,(", 'F'}, + {"01US,F", 'F'}, + {"01USC", 'F'}, + {"01USO(", 'F'}, + {"01USO1", 'F'}, + {"01USOF", 'F'}, + {"01USON", 'F'}, + {"01USOS", 'F'}, + {"01USOV", 'F'}, + {"01UTN(", 'F'}, + {"01UTN1", 'F'}, + {"01UTNF", 'F'}, + {"01UTNN", 'F'}, + {"01UTNS", 'F'}, + {"01UTNV", 'F'}, + {"01UV,(", 'F'}, + {"01UV,F", 'F'}, + {"01UVC", 'F'}, + {"01UVO(", 'F'}, + {"01UVOF", 'F'}, + {"01UVOS", 'F'}, + {"01VF()", 'F'}, + {"01VF(1", 'F'}, + {"01VF(F", 'F'}, + {"01VF(N", 'F'}, + {"01VF(S", 'F'}, + {"01VF(V", 'F'}, + {"01VO(1", 'F'}, + {"01VO(F", 'F'}, + {"01VO(N", 'F'}, + {"01VO(S", 'F'}, + {"01VO(V", 'F'}, + {"01VOF(", 'F'}, + {"01VOS(", 'F'}, + {"01VOS1", 'F'}, + {"01VOSF", 'F'}, + {"01VOSU", 'F'}, + {"01VOSV", 'F'}, + {"01VS", 'F'}, + {"01VS;", 'F'}, + {"01VS;C", 'F'}, + {"01VSC", 'F'}, + {"01VSO(", 'F'}, + {"01VSO1", 'F'}, + {"01VSOF", 'F'}, + {"01VSON", 'F'}, + {"01VSOS", 'F'}, + {"01VSOV", 'F'}, + {"01VUE", 'F'}, + {"01VUE;", 'F'}, + {"01VUEC", 'F'}, + {"01VUEK", 'F'}, + {"0;T(EF", 'F'}, + {"0;T(EK", 'F'}, + {"0;TKNC", 'F'}, + {"0E(1&(", 'F'}, + {"0E(1&1", 'F'}, + {"0E(1&F", 'F'}, + {"0E(1&N", 'F'}, + {"0E(1&S", 'F'}, + {"0E(1&V", 'F'}, + {"0E(1)&", 'F'}, + {"0E(1),", 'F'}, + {"0E(1)1", 'F'}, + {"0E(1);", 'F'}, + {"0E(1)B", 'F'}, + {"0E(1)C", 'F'}, + {"0E(1)F", 'F'}, + {"0E(1)K", 'F'}, + {"0E(1)N", 'F'}, + {"0E(1)O", 'F'}, + {"0E(1)S", 'F'}, + {"0E(1)U", 'F'}, + {"0E(1)V", 'F'}, + {"0E(1,F", 'F'}, + {"0E(1F(", 'F'}, + {"0E(1N)", 'F'}, + {"0E(1O(", 'F'}, + {"0E(1OF", 'F'}, + {"0E(1OS", 'F'}, + {"0E(1OV", 'F'}, + {"0E(1S)", 'F'}, + {"0E(1V)", 'F'}, + {"0E(1VO", 'F'}, + {"0E(E(1", 'F'}, + {"0E(E(E", 'F'}, + {"0E(E(F", 'F'}, + {"0E(E(N", 'F'}, + {"0E(E(S", 'F'}, + {"0E(E(V", 'F'}, + {"0E(E1&", 'F'}, + {"0E(E1)", 'F'}, + {"0E(E1O", 'F'}, + {"0E(EF(", 'F'}, + {"0E(EK(", 'F'}, + {"0E(EK1", 'F'}, + {"0E(EKF", 'F'}, + {"0E(EKN", 'F'}, + {"0E(EKS", 'F'}, + {"0E(EKV", 'F'}, + {"0E(EN&", 'F'}, + {"0E(EN)", 'F'}, + {"0E(ENO", 'F'}, + {"0E(ES&", 'F'}, + {"0E(ES)", 'F'}, + {"0E(ESO", 'F'}, + {"0E(EV&", 'F'}, + {"0E(EV)", 'F'}, + {"0E(EVO", 'F'}, + {"0E(F()", 'F'}, + {"0E(F(1", 'F'}, + {"0E(F(E", 'F'}, + {"0E(F(F", 'F'}, + {"0E(F(N", 'F'}, + {"0E(F(S", 'F'}, + {"0E(F(V", 'F'}, + {"0E(N&(", 'F'}, + {"0E(N&1", 'F'}, + {"0E(N&F", 'F'}, + {"0E(N&N", 'F'}, + {"0E(N&S", 'F'}, + {"0E(N&V", 'F'}, + {"0E(N(1", 'F'}, + {"0E(N(F", 'F'}, + {"0E(N(S", 'F'}, + {"0E(N(V", 'F'}, + {"0E(N)&", 'F'}, + {"0E(N),", 'F'}, + {"0E(N)1", 'F'}, + {"0E(N);", 'F'}, + {"0E(N)B", 'F'}, + {"0E(N)C", 'F'}, + {"0E(N)F", 'F'}, + {"0E(N)K", 'F'}, + {"0E(N)N", 'F'}, + {"0E(N)O", 'F'}, + {"0E(N)S", 'F'}, + {"0E(N)U", 'F'}, + {"0E(N)V", 'F'}, + {"0E(N,F", 'F'}, + {"0E(N1)", 'F'}, + {"0E(N1O", 'F'}, + {"0E(NF(", 'F'}, + {"0E(NO(", 'F'}, + {"0E(NOF", 'F'}, + {"0E(NOS", 'F'}, + {"0E(NOV", 'F'}, + {"0E(S&(", 'F'}, + {"0E(S&1", 'F'}, + {"0E(S&F", 'F'}, + {"0E(S&N", 'F'}, + {"0E(S&S", 'F'}, + {"0E(S&V", 'F'}, + {"0E(S)&", 'F'}, + {"0E(S),", 'F'}, + {"0E(S)1", 'F'}, + {"0E(S);", 'F'}, + {"0E(S)B", 'F'}, + {"0E(S)C", 'F'}, + {"0E(S)F", 'F'}, + {"0E(S)K", 'F'}, + {"0E(S)N", 'F'}, + {"0E(S)O", 'F'}, + {"0E(S)S", 'F'}, + {"0E(S)U", 'F'}, + {"0E(S)V", 'F'}, + {"0E(S,F", 'F'}, + {"0E(S1)", 'F'}, + {"0E(SF(", 'F'}, + {"0E(SO(", 'F'}, + {"0E(SO1", 'F'}, + {"0E(SOF", 'F'}, + {"0E(SON", 'F'}, + {"0E(SOS", 'F'}, + {"0E(SOV", 'F'}, + {"0E(SV)", 'F'}, + {"0E(SVO", 'F'}, + {"0E(V&(", 'F'}, + {"0E(V&1", 'F'}, + {"0E(V&F", 'F'}, + {"0E(V&N", 'F'}, + {"0E(V&S", 'F'}, + {"0E(V&V", 'F'}, + {"0E(V)&", 'F'}, + {"0E(V),", 'F'}, + {"0E(V)1", 'F'}, + {"0E(V);", 'F'}, + {"0E(V)B", 'F'}, + {"0E(V)C", 'F'}, + {"0E(V)F", 'F'}, + {"0E(V)K", 'F'}, + {"0E(V)N", 'F'}, + {"0E(V)O", 'F'}, + {"0E(V)S", 'F'}, + {"0E(V)U", 'F'}, + {"0E(V)V", 'F'}, + {"0E(V,F", 'F'}, + {"0E(VF(", 'F'}, + {"0E(VO(", 'F'}, + {"0E(VOF", 'F'}, + {"0E(VOS", 'F'}, + {"0E(VS)", 'F'}, + {"0E(VSO", 'F'}, + {"0E1&(1", 'F'}, + {"0E1&(E", 'F'}, + {"0E1&(F", 'F'}, + {"0E1&(N", 'F'}, + {"0E1&(S", 'F'}, + {"0E1&(V", 'F'}, + {"0E1&1)", 'F'}, + {"0E1&1O", 'F'}, + {"0E1&F(", 'F'}, + {"0E1&N)", 'F'}, + {"0E1&NO", 'F'}, + {"0E1&S)", 'F'}, + {"0E1&SO", 'F'}, + {"0E1&V)", 'F'}, + {"0E1&VO", 'F'}, + {"0E1)", 'F'}, + {"0E1)&(", 'F'}, + {"0E1)&1", 'F'}, + {"0E1)&F", 'F'}, + {"0E1)&N", 'F'}, + {"0E1)&S", 'F'}, + {"0E1)&V", 'F'}, + {"0E1);", 'F'}, + {"0E1);(", 'F'}, + {"0E1);C", 'F'}, + {"0E1);E", 'F'}, + {"0E1);T", 'F'}, + {"0E1)C", 'F'}, + {"0E1)KN", 'F'}, + {"0E1)O(", 'F'}, + {"0E1)O1", 'F'}, + {"0E1)OF", 'F'}, + {"0E1)ON", 'F'}, + {"0E1)OS", 'F'}, + {"0E1)OV", 'F'}, + {"0E1)UE", 'F'}, + {"0E1,(1", 'F'}, + {"0E1,(F", 'F'}, + {"0E1,(N", 'F'}, + {"0E1,(S", 'F'}, + {"0E1,(V", 'F'}, + {"0E1,F(", 'F'}, + {"0E1;(E", 'F'}, + {"0E1B(1", 'F'}, + {"0E1B(F", 'F'}, + {"0E1B(N", 'F'}, + {"0E1B(S", 'F'}, + {"0E1B(V", 'F'}, + {"0E1B1)", 'F'}, + {"0E1B1O", 'F'}, + {"0E1BF(", 'F'}, + {"0E1BN)", 'F'}, + {"0E1BNO", 'F'}, + {"0E1BS)", 'F'}, + {"0E1BSO", 'F'}, + {"0E1BV)", 'F'}, + {"0E1BVO", 'F'}, + {"0E1F()", 'F'}, + {"0E1F(1", 'F'}, + {"0E1F(F", 'F'}, + {"0E1F(N", 'F'}, + {"0E1F(S", 'F'}, + {"0E1F(V", 'F'}, + {"0E1K(1", 'F'}, + {"0E1K(E", 'F'}, + {"0E1K(F", 'F'}, + {"0E1K(N", 'F'}, + {"0E1K(S", 'F'}, + {"0E1K(V", 'F'}, + {"0E1K1)", 'F'}, + {"0E1K1K", 'F'}, + {"0E1K1O", 'F'}, + {"0E1KF(", 'F'}, + {"0E1KN", 'F'}, + {"0E1KN)", 'F'}, + {"0E1KN;", 'F'}, + {"0E1KNC", 'F'}, + {"0E1KNK", 'F'}, + {"0E1KNU", 'F'}, + {"0E1KS)", 'F'}, + {"0E1KSK", 'F'}, + {"0E1KSO", 'F'}, + {"0E1KV)", 'F'}, + {"0E1KVK", 'F'}, + {"0E1KVO", 'F'}, + {"0E1N)U", 'F'}, + {"0E1N;", 'F'}, + {"0E1N;C", 'F'}, + {"0E1NC", 'F'}, + {"0E1NKN", 'F'}, + {"0E1O(1", 'F'}, + {"0E1O(E", 'F'}, + {"0E1O(F", 'F'}, + {"0E1O(N", 'F'}, + {"0E1O(S", 'F'}, + {"0E1O(V", 'F'}, + {"0E1OF(", 'F'}, + {"0E1OS&", 'F'}, + {"0E1OS(", 'F'}, + {"0E1OS)", 'F'}, + {"0E1OS,", 'F'}, + {"0E1OS1", 'F'}, + {"0E1OS;", 'F'}, + {"0E1OSB", 'F'}, + {"0E1OSF", 'F'}, + {"0E1OSK", 'F'}, + {"0E1OSU", 'F'}, + {"0E1OSV", 'F'}, + {"0E1OV&", 'F'}, + {"0E1OV(", 'F'}, + {"0E1OV)", 'F'}, + {"0E1OV,", 'F'}, + {"0E1OV;", 'F'}, + {"0E1OVB", 'F'}, + {"0E1OVF", 'F'}, + {"0E1OVK", 'F'}, + {"0E1OVO", 'F'}, + {"0E1OVS", 'F'}, + {"0E1OVU", 'F'}, + {"0E1S;", 'F'}, + {"0E1S;C", 'F'}, + {"0E1SC", 'F'}, + {"0E1U(E", 'F'}, + {"0E1UE(", 'F'}, + {"0E1UE1", 'F'}, + {"0E1UEF", 'F'}, + {"0E1UEK", 'F'}, + {"0E1UEN", 'F'}, + {"0E1UES", 'F'}, + {"0E1UEV", 'F'}, + {"0E1V", 'F'}, + {"0E1V;", 'F'}, + {"0E1V;C", 'F'}, + {"0E1VC", 'F'}, + {"0E1VO(", 'F'}, + {"0E1VOF", 'F'}, + {"0E1VOS", 'F'}, + {"0EE(F(", 'F'}, + {"0EEK(F", 'F'}, + {"0EF()&", 'F'}, + {"0EF(),", 'F'}, + {"0EF()1", 'F'}, + {"0EF();", 'F'}, + {"0EF()B", 'F'}, + {"0EF()F", 'F'}, + {"0EF()K", 'F'}, + {"0EF()N", 'F'}, + {"0EF()O", 'F'}, + {"0EF()S", 'F'}, + {"0EF()U", 'F'}, + {"0EF()V", 'F'}, + {"0EF(1&", 'F'}, + {"0EF(1)", 'F'}, + {"0EF(1,", 'F'}, + {"0EF(1O", 'F'}, + {"0EF(E(", 'F'}, + {"0EF(E1", 'F'}, + {"0EF(EF", 'F'}, + {"0EF(EK", 'F'}, + {"0EF(EN", 'F'}, + {"0EF(ES", 'F'}, + {"0EF(EV", 'F'}, + {"0EF(F(", 'F'}, + {"0EF(N&", 'F'}, + {"0EF(N)", 'F'}, + {"0EF(N,", 'F'}, + {"0EF(NO", 'F'}, + {"0EF(O)", 'F'}, + {"0EF(S&", 'F'}, + {"0EF(S)", 'F'}, + {"0EF(S,", 'F'}, + {"0EF(SO", 'F'}, + {"0EF(V&", 'F'}, + {"0EF(V)", 'F'}, + {"0EF(V,", 'F'}, + {"0EF(VO", 'F'}, + {"0EK(1&", 'F'}, + {"0EK(1(", 'F'}, + {"0EK(1)", 'F'}, + {"0EK(1,", 'F'}, + {"0EK(1F", 'F'}, + {"0EK(1N", 'F'}, + {"0EK(1O", 'F'}, + {"0EK(1S", 'F'}, + {"0EK(1V", 'F'}, + {"0EK(E(", 'F'}, + {"0EK(E1", 'F'}, + {"0EK(EF", 'F'}, + {"0EK(EK", 'F'}, + {"0EK(EN", 'F'}, + {"0EK(ES", 'F'}, + {"0EK(EV", 'F'}, + {"0EK(F(", 'F'}, + {"0EK(N&", 'F'}, + {"0EK(N(", 'F'}, + {"0EK(N)", 'F'}, + {"0EK(N,", 'F'}, + {"0EK(N1", 'F'}, + {"0EK(NF", 'F'}, + {"0EK(NO", 'F'}, + {"0EK(S&", 'F'}, + {"0EK(S(", 'F'}, + {"0EK(S)", 'F'}, + {"0EK(S,", 'F'}, + {"0EK(S1", 'F'}, + {"0EK(SF", 'F'}, + {"0EK(SO", 'F'}, + {"0EK(SV", 'F'}, + {"0EK(V&", 'F'}, + {"0EK(V(", 'F'}, + {"0EK(V)", 'F'}, + {"0EK(V,", 'F'}, + {"0EK(VF", 'F'}, + {"0EK(VO", 'F'}, + {"0EK(VS", 'F'}, + {"0EK1&(", 'F'}, + {"0EK1&1", 'F'}, + {"0EK1&F", 'F'}, + {"0EK1&N", 'F'}, + {"0EK1&S", 'F'}, + {"0EK1&V", 'F'}, + {"0EK1)", 'F'}, + {"0EK1)&", 'F'}, + {"0EK1);", 'F'}, + {"0EK1)C", 'F'}, + {"0EK1)K", 'F'}, + {"0EK1)O", 'F'}, + {"0EK1)U", 'F'}, + {"0EK1,(", 'F'}, + {"0EK1,F", 'F'}, + {"0EK1;(", 'F'}, + {"0EK1B(", 'F'}, + {"0EK1B1", 'F'}, + {"0EK1BF", 'F'}, + {"0EK1BN", 'F'}, + {"0EK1BS", 'F'}, + {"0EK1BV", 'F'}, + {"0EK1F(", 'F'}, + {"0EK1K(", 'F'}, + {"0EK1K1", 'F'}, + {"0EK1KF", 'F'}, + {"0EK1KN", 'F'}, + {"0EK1KS", 'F'}, + {"0EK1KV", 'F'}, + {"0EK1N", 'F'}, + {"0EK1N)", 'F'}, + {"0EK1N;", 'F'}, + {"0EK1NC", 'F'}, + {"0EK1NK", 'F'}, + {"0EK1O(", 'F'}, + {"0EK1OF", 'F'}, + {"0EK1OS", 'F'}, + {"0EK1OV", 'F'}, + {"0EK1S", 'F'}, + {"0EK1S;", 'F'}, + {"0EK1SC", 'F'}, + {"0EK1SF", 'F'}, + {"0EK1SK", 'F'}, + {"0EK1U(", 'F'}, + {"0EK1UE", 'F'}, + {"0EK1V", 'F'}, + {"0EK1V;", 'F'}, + {"0EK1VC", 'F'}, + {"0EK1VF", 'F'}, + {"0EK1VK", 'F'}, + {"0EK1VO", 'F'}, + {"0EKE(F", 'F'}, + {"0EKEK(", 'F'}, + {"0EKF()", 'F'}, + {"0EKF(1", 'F'}, + {"0EKF(E", 'F'}, + {"0EKF(F", 'F'}, + {"0EKF(N", 'F'}, + {"0EKF(O", 'F'}, + {"0EKF(S", 'F'}, + {"0EKF(V", 'F'}, + {"0EKN&(", 'F'}, + {"0EKN&1", 'F'}, + {"0EKN&F", 'F'}, + {"0EKN&N", 'F'}, + {"0EKN&S", 'F'}, + {"0EKN&V", 'F'}, + {"0EKN(1", 'F'}, + {"0EKN(F", 'F'}, + {"0EKN(S", 'F'}, + {"0EKN(V", 'F'}, + {"0EKN)", 'F'}, + {"0EKN)&", 'F'}, + {"0EKN);", 'F'}, + {"0EKN)C", 'F'}, + {"0EKN)K", 'F'}, + {"0EKN)O", 'F'}, + {"0EKN)U", 'F'}, + {"0EKN,(", 'F'}, + {"0EKN,F", 'F'}, + {"0EKN1", 'F'}, + {"0EKN1;", 'F'}, + {"0EKN1C", 'F'}, + {"0EKN1K", 'F'}, + {"0EKN1O", 'F'}, + {"0EKN;(", 'F'}, + {"0EKNB(", 'F'}, + {"0EKNB1", 'F'}, + {"0EKNBF", 'F'}, + {"0EKNBN", 'F'}, + {"0EKNBS", 'F'}, + {"0EKNBV", 'F'}, + {"0EKNF(", 'F'}, + {"0EKNK(", 'F'}, + {"0EKNK1", 'F'}, + {"0EKNKF", 'F'}, + {"0EKNKN", 'F'}, + {"0EKNKS", 'F'}, + {"0EKNKV", 'F'}, + {"0EKNU(", 'F'}, + {"0EKNUE", 'F'}, + {"0EKO(1", 'F'}, + {"0EKO(F", 'F'}, + {"0EKO(N", 'F'}, + {"0EKO(S", 'F'}, + {"0EKO(V", 'F'}, + {"0EKOK(", 'F'}, + {"0EKOKN", 'F'}, + {"0EKS&(", 'F'}, + {"0EKS&1", 'F'}, + {"0EKS&F", 'F'}, + {"0EKS&N", 'F'}, + {"0EKS&S", 'F'}, + {"0EKS&V", 'F'}, + {"0EKS)", 'F'}, + {"0EKS)&", 'F'}, + {"0EKS);", 'F'}, + {"0EKS)C", 'F'}, + {"0EKS)K", 'F'}, + {"0EKS)O", 'F'}, + {"0EKS)U", 'F'}, + {"0EKS,(", 'F'}, + {"0EKS,F", 'F'}, + {"0EKS1", 'F'}, + {"0EKS1;", 'F'}, + {"0EKS1C", 'F'}, + {"0EKS1F", 'F'}, + {"0EKS1K", 'F'}, + {"0EKS;(", 'F'}, + {"0EKSB(", 'F'}, + {"0EKSB1", 'F'}, + {"0EKSBF", 'F'}, + {"0EKSBN", 'F'}, + {"0EKSBS", 'F'}, + {"0EKSBV", 'F'}, + {"0EKSF(", 'F'}, + {"0EKSK(", 'F'}, + {"0EKSK1", 'F'}, + {"0EKSKF", 'F'}, + {"0EKSKN", 'F'}, + {"0EKSKS", 'F'}, + {"0EKSKV", 'F'}, + {"0EKSO(", 'F'}, + {"0EKSO1", 'F'}, + {"0EKSOF", 'F'}, + {"0EKSON", 'F'}, + {"0EKSOS", 'F'}, + {"0EKSOV", 'F'}, + {"0EKSU(", 'F'}, + {"0EKSUE", 'F'}, + {"0EKSV", 'F'}, + {"0EKSV;", 'F'}, + {"0EKSVC", 'F'}, + {"0EKSVF", 'F'}, + {"0EKSVK", 'F'}, + {"0EKSVO", 'F'}, + {"0EKV&(", 'F'}, + {"0EKV&1", 'F'}, + {"0EKV&F", 'F'}, + {"0EKV&N", 'F'}, + {"0EKV&S", 'F'}, + {"0EKV&V", 'F'}, + {"0EKV)", 'F'}, + {"0EKV)&", 'F'}, + {"0EKV);", 'F'}, + {"0EKV)C", 'F'}, + {"0EKV)K", 'F'}, + {"0EKV)O", 'F'}, + {"0EKV)U", 'F'}, + {"0EKV,(", 'F'}, + {"0EKV,F", 'F'}, + {"0EKV;(", 'F'}, + {"0EKVB(", 'F'}, + {"0EKVB1", 'F'}, + {"0EKVBF", 'F'}, + {"0EKVBN", 'F'}, + {"0EKVBS", 'F'}, + {"0EKVBV", 'F'}, + {"0EKVF(", 'F'}, + {"0EKVK(", 'F'}, + {"0EKVK1", 'F'}, + {"0EKVKF", 'F'}, + {"0EKVKN", 'F'}, + {"0EKVKS", 'F'}, + {"0EKVKV", 'F'}, + {"0EKVO(", 'F'}, + {"0EKVOF", 'F'}, + {"0EKVOS", 'F'}, + {"0EKVS", 'F'}, + {"0EKVS;", 'F'}, + {"0EKVSC", 'F'}, + {"0EKVSF", 'F'}, + {"0EKVSK", 'F'}, + {"0EKVSO", 'F'}, + {"0EKVU(", 'F'}, + {"0EKVUE", 'F'}, + {"0EN&(1", 'F'}, + {"0EN&(E", 'F'}, + {"0EN&(F", 'F'}, + {"0EN&(N", 'F'}, + {"0EN&(S", 'F'}, + {"0EN&(V", 'F'}, + {"0EN&1)", 'F'}, + {"0EN&1O", 'F'}, + {"0EN&F(", 'F'}, + {"0EN&N)", 'F'}, + {"0EN&NO", 'F'}, + {"0EN&S)", 'F'}, + {"0EN&SO", 'F'}, + {"0EN&V)", 'F'}, + {"0EN&VO", 'F'}, + {"0EN(1O", 'F'}, + {"0EN(F(", 'F'}, + {"0EN(S)", 'F'}, + {"0EN(SO", 'F'}, + {"0EN(V)", 'F'}, + {"0EN(VO", 'F'}, + {"0EN)", 'F'}, + {"0EN)&(", 'F'}, + {"0EN)&1", 'F'}, + {"0EN)&F", 'F'}, + {"0EN)&N", 'F'}, + {"0EN)&S", 'F'}, + {"0EN)&V", 'F'}, + {"0EN);", 'F'}, + {"0EN);(", 'F'}, + {"0EN);C", 'F'}, + {"0EN);E", 'F'}, + {"0EN);T", 'F'}, + {"0EN)C", 'F'}, + {"0EN)KN", 'F'}, + {"0EN)O(", 'F'}, + {"0EN)O1", 'F'}, + {"0EN)OF", 'F'}, + {"0EN)ON", 'F'}, + {"0EN)OS", 'F'}, + {"0EN)OV", 'F'}, + {"0EN)UE", 'F'}, + {"0EN,(1", 'F'}, + {"0EN,(F", 'F'}, + {"0EN,(N", 'F'}, + {"0EN,(S", 'F'}, + {"0EN,(V", 'F'}, + {"0EN,F(", 'F'}, + {"0EN1;", 'F'}, + {"0EN1;C", 'F'}, + {"0EN1O(", 'F'}, + {"0EN1OF", 'F'}, + {"0EN1OS", 'F'}, + {"0EN1OV", 'F'}, + {"0EN;(E", 'F'}, + {"0ENB(1", 'F'}, + {"0ENB(F", 'F'}, + {"0ENB(N", 'F'}, + {"0ENB(S", 'F'}, + {"0ENB(V", 'F'}, + {"0ENB1)", 'F'}, + {"0ENB1O", 'F'}, + {"0ENBF(", 'F'}, + {"0ENBN)", 'F'}, + {"0ENBNO", 'F'}, + {"0ENBS)", 'F'}, + {"0ENBSO", 'F'}, + {"0ENBV)", 'F'}, + {"0ENBVO", 'F'}, + {"0ENF()", 'F'}, + {"0ENF(1", 'F'}, + {"0ENF(F", 'F'}, + {"0ENF(N", 'F'}, + {"0ENF(S", 'F'}, + {"0ENF(V", 'F'}, + {"0ENK(1", 'F'}, + {"0ENK(E", 'F'}, + {"0ENK(F", 'F'}, + {"0ENK(N", 'F'}, + {"0ENK(S", 'F'}, + {"0ENK(V", 'F'}, + {"0ENK1)", 'F'}, + {"0ENK1K", 'F'}, + {"0ENK1O", 'F'}, + {"0ENKF(", 'F'}, + {"0ENKN)", 'F'}, + {"0ENKN,", 'F'}, + {"0ENKN;", 'F'}, + {"0ENKNB", 'F'}, + {"0ENKNC", 'F'}, + {"0ENKNK", 'F'}, + {"0ENKNU", 'F'}, + {"0ENKS)", 'F'}, + {"0ENKSK", 'F'}, + {"0ENKSO", 'F'}, + {"0ENKV)", 'F'}, + {"0ENKVK", 'F'}, + {"0ENKVO", 'F'}, + {"0ENO(1", 'F'}, + {"0ENO(E", 'F'}, + {"0ENO(F", 'F'}, + {"0ENO(N", 'F'}, + {"0ENO(S", 'F'}, + {"0ENO(V", 'F'}, + {"0ENOF(", 'F'}, + {"0ENOS&", 'F'}, + {"0ENOS(", 'F'}, + {"0ENOS)", 'F'}, + {"0ENOS,", 'F'}, + {"0ENOS1", 'F'}, + {"0ENOS;", 'F'}, + {"0ENOSB", 'F'}, + {"0ENOSF", 'F'}, + {"0ENOSK", 'F'}, + {"0ENOSU", 'F'}, + {"0ENOSV", 'F'}, + {"0ENOV&", 'F'}, + {"0ENOV(", 'F'}, + {"0ENOV)", 'F'}, + {"0ENOV,", 'F'}, + {"0ENOV;", 'F'}, + {"0ENOVB", 'F'}, + {"0ENOVF", 'F'}, + {"0ENOVK", 'F'}, + {"0ENOVO", 'F'}, + {"0ENOVS", 'F'}, + {"0ENOVU", 'F'}, + {"0ENU(E", 'F'}, + {"0ENUE(", 'F'}, + {"0ENUE1", 'F'}, + {"0ENUEF", 'F'}, + {"0ENUEK", 'F'}, + {"0ENUEN", 'F'}, + {"0ENUES", 'F'}, + {"0ENUEV", 'F'}, + {"0EOK(E", 'F'}, + {"0EOKNK", 'F'}, + {"0ES&(1", 'F'}, + {"0ES&(E", 'F'}, + {"0ES&(F", 'F'}, + {"0ES&(N", 'F'}, + {"0ES&(S", 'F'}, + {"0ES&(V", 'F'}, + {"0ES&1)", 'F'}, + {"0ES&1O", 'F'}, + {"0ES&F(", 'F'}, + {"0ES&N)", 'F'}, + {"0ES&NO", 'F'}, + {"0ES&S)", 'F'}, + {"0ES&SO", 'F'}, + {"0ES&V)", 'F'}, + {"0ES&VO", 'F'}, + {"0ES)", 'F'}, + {"0ES)&(", 'F'}, + {"0ES)&1", 'F'}, + {"0ES)&F", 'F'}, + {"0ES)&N", 'F'}, + {"0ES)&S", 'F'}, + {"0ES)&V", 'F'}, + {"0ES);", 'F'}, + {"0ES);(", 'F'}, + {"0ES);C", 'F'}, + {"0ES);E", 'F'}, + {"0ES);T", 'F'}, + {"0ES)C", 'F'}, + {"0ES)KN", 'F'}, + {"0ES)O(", 'F'}, + {"0ES)O1", 'F'}, + {"0ES)OF", 'F'}, + {"0ES)ON", 'F'}, + {"0ES)OS", 'F'}, + {"0ES)OV", 'F'}, + {"0ES)UE", 'F'}, + {"0ES,(1", 'F'}, + {"0ES,(F", 'F'}, + {"0ES,(N", 'F'}, + {"0ES,(S", 'F'}, + {"0ES,(V", 'F'}, + {"0ES,F(", 'F'}, + {"0ES1", 'F'}, + {"0ES1;", 'F'}, + {"0ES1;C", 'F'}, + {"0ES1C", 'F'}, + {"0ES;(E", 'F'}, + {"0ESB(1", 'F'}, + {"0ESB(F", 'F'}, + {"0ESB(N", 'F'}, + {"0ESB(S", 'F'}, + {"0ESB(V", 'F'}, + {"0ESB1)", 'F'}, + {"0ESB1O", 'F'}, + {"0ESBF(", 'F'}, + {"0ESBN)", 'F'}, + {"0ESBNO", 'F'}, + {"0ESBS)", 'F'}, + {"0ESBSO", 'F'}, + {"0ESBV)", 'F'}, + {"0ESBVO", 'F'}, + {"0ESF()", 'F'}, + {"0ESF(1", 'F'}, + {"0ESF(F", 'F'}, + {"0ESF(N", 'F'}, + {"0ESF(S", 'F'}, + {"0ESF(V", 'F'}, + {"0ESK(1", 'F'}, + {"0ESK(E", 'F'}, + {"0ESK(F", 'F'}, + {"0ESK(N", 'F'}, + {"0ESK(S", 'F'}, + {"0ESK(V", 'F'}, + {"0ESK1)", 'F'}, + {"0ESK1K", 'F'}, + {"0ESK1O", 'F'}, + {"0ESKF(", 'F'}, + {"0ESKN", 'F'}, + {"0ESKN)", 'F'}, + {"0ESKN;", 'F'}, + {"0ESKNC", 'F'}, + {"0ESKNK", 'F'}, + {"0ESKNU", 'F'}, + {"0ESKS)", 'F'}, + {"0ESKSK", 'F'}, + {"0ESKSO", 'F'}, + {"0ESKV)", 'F'}, + {"0ESKVK", 'F'}, + {"0ESKVO", 'F'}, + {"0ESO(1", 'F'}, + {"0ESO(E", 'F'}, + {"0ESO(F", 'F'}, + {"0ESO(N", 'F'}, + {"0ESO(S", 'F'}, + {"0ESO(V", 'F'}, + {"0ESO1&", 'F'}, + {"0ESO1(", 'F'}, + {"0ESO1)", 'F'}, + {"0ESO1,", 'F'}, + {"0ESO1;", 'F'}, + {"0ESO1B", 'F'}, + {"0ESO1F", 'F'}, + {"0ESO1K", 'F'}, + {"0ESO1N", 'F'}, + {"0ESO1S", 'F'}, + {"0ESO1U", 'F'}, + {"0ESO1V", 'F'}, + {"0ESOF(", 'F'}, + {"0ESON&", 'F'}, + {"0ESON(", 'F'}, + {"0ESON)", 'F'}, + {"0ESON,", 'F'}, + {"0ESON1", 'F'}, + {"0ESON;", 'F'}, + {"0ESONB", 'F'}, + {"0ESONF", 'F'}, + {"0ESONK", 'F'}, + {"0ESONU", 'F'}, + {"0ESOS&", 'F'}, + {"0ESOS(", 'F'}, + {"0ESOS)", 'F'}, + {"0ESOS,", 'F'}, + {"0ESOS1", 'F'}, + {"0ESOS;", 'F'}, + {"0ESOSB", 'F'}, + {"0ESOSF", 'F'}, + {"0ESOSK", 'F'}, + {"0ESOSU", 'F'}, + {"0ESOSV", 'F'}, + {"0ESOV&", 'F'}, + {"0ESOV(", 'F'}, + {"0ESOV)", 'F'}, + {"0ESOV,", 'F'}, + {"0ESOV;", 'F'}, + {"0ESOVB", 'F'}, + {"0ESOVF", 'F'}, + {"0ESOVK", 'F'}, + {"0ESOVO", 'F'}, + {"0ESOVS", 'F'}, + {"0ESOVU", 'F'}, + {"0ESU(E", 'F'}, + {"0ESUE(", 'F'}, + {"0ESUE1", 'F'}, + {"0ESUEF", 'F'}, + {"0ESUEK", 'F'}, + {"0ESUEN", 'F'}, + {"0ESUES", 'F'}, + {"0ESUEV", 'F'}, + {"0ESV", 'F'}, + {"0ESV;", 'F'}, + {"0ESV;C", 'F'}, + {"0ESVC", 'F'}, + {"0ESVO(", 'F'}, + {"0ESVOF", 'F'}, + {"0ESVOS", 'F'}, + {"0EV&(1", 'F'}, + {"0EV&(E", 'F'}, + {"0EV&(F", 'F'}, + {"0EV&(N", 'F'}, + {"0EV&(S", 'F'}, + {"0EV&(V", 'F'}, + {"0EV&1)", 'F'}, + {"0EV&1O", 'F'}, + {"0EV&F(", 'F'}, + {"0EV&N)", 'F'}, + {"0EV&NO", 'F'}, + {"0EV&S)", 'F'}, + {"0EV&SO", 'F'}, + {"0EV&V)", 'F'}, + {"0EV&VO", 'F'}, + {"0EV)", 'F'}, + {"0EV)&(", 'F'}, + {"0EV)&1", 'F'}, + {"0EV)&F", 'F'}, + {"0EV)&N", 'F'}, + {"0EV)&S", 'F'}, + {"0EV)&V", 'F'}, + {"0EV);", 'F'}, + {"0EV);(", 'F'}, + {"0EV);C", 'F'}, + {"0EV);E", 'F'}, + {"0EV);T", 'F'}, + {"0EV)C", 'F'}, + {"0EV)KN", 'F'}, + {"0EV)O(", 'F'}, + {"0EV)O1", 'F'}, + {"0EV)OF", 'F'}, + {"0EV)ON", 'F'}, + {"0EV)OS", 'F'}, + {"0EV)OV", 'F'}, + {"0EV)UE", 'F'}, + {"0EV,(1", 'F'}, + {"0EV,(F", 'F'}, + {"0EV,(N", 'F'}, + {"0EV,(S", 'F'}, + {"0EV,(V", 'F'}, + {"0EV,F(", 'F'}, + {"0EV;(E", 'F'}, + {"0EVB(1", 'F'}, + {"0EVB(F", 'F'}, + {"0EVB(N", 'F'}, + {"0EVB(S", 'F'}, + {"0EVB(V", 'F'}, + {"0EVB1)", 'F'}, + {"0EVB1O", 'F'}, + {"0EVBF(", 'F'}, + {"0EVBN)", 'F'}, + {"0EVBNO", 'F'}, + {"0EVBS)", 'F'}, + {"0EVBSO", 'F'}, + {"0EVBV)", 'F'}, + {"0EVBVO", 'F'}, + {"0EVF()", 'F'}, + {"0EVF(1", 'F'}, + {"0EVF(F", 'F'}, + {"0EVF(N", 'F'}, + {"0EVF(S", 'F'}, + {"0EVF(V", 'F'}, + {"0EVK(1", 'F'}, + {"0EVK(E", 'F'}, + {"0EVK(F", 'F'}, + {"0EVK(N", 'F'}, + {"0EVK(S", 'F'}, + {"0EVK(V", 'F'}, + {"0EVK1)", 'F'}, + {"0EVK1K", 'F'}, + {"0EVK1O", 'F'}, + {"0EVKF(", 'F'}, + {"0EVKN", 'F'}, + {"0EVKN)", 'F'}, + {"0EVKN;", 'F'}, + {"0EVKNC", 'F'}, + {"0EVKNK", 'F'}, + {"0EVKNU", 'F'}, + {"0EVKS)", 'F'}, + {"0EVKSK", 'F'}, + {"0EVKSO", 'F'}, + {"0EVKV)", 'F'}, + {"0EVKVK", 'F'}, + {"0EVKVO", 'F'}, + {"0EVN", 'F'}, + {"0EVN)U", 'F'}, + {"0EVN;", 'F'}, + {"0EVN;C", 'F'}, + {"0EVNC", 'F'}, + {"0EVNKN", 'F'}, + {"0EVNO(", 'F'}, + {"0EVNOF", 'F'}, + {"0EVNOS", 'F'}, + {"0EVNOV", 'F'}, + {"0EVO(1", 'F'}, + {"0EVO(E", 'F'}, + {"0EVO(F", 'F'}, + {"0EVO(N", 'F'}, + {"0EVO(S", 'F'}, + {"0EVO(V", 'F'}, + {"0EVOF(", 'F'}, + {"0EVOS&", 'F'}, + {"0EVOS(", 'F'}, + {"0EVOS)", 'F'}, + {"0EVOS,", 'F'}, + {"0EVOS1", 'F'}, + {"0EVOS;", 'F'}, + {"0EVOSB", 'F'}, + {"0EVOSF", 'F'}, + {"0EVOSK", 'F'}, + {"0EVOSU", 'F'}, + {"0EVOSV", 'F'}, + {"0EVS", 'F'}, + {"0EVS;", 'F'}, + {"0EVS;C", 'F'}, + {"0EVSC", 'F'}, + {"0EVSO(", 'F'}, + {"0EVSO1", 'F'}, + {"0EVSOF", 'F'}, + {"0EVSON", 'F'}, + {"0EVSOS", 'F'}, + {"0EVSOV", 'F'}, + {"0EVU(E", 'F'}, + {"0EVUE(", 'F'}, + {"0EVUE1", 'F'}, + {"0EVUEF", 'F'}, + {"0EVUEK", 'F'}, + {"0EVUEN", 'F'}, + {"0EVUES", 'F'}, + {"0EVUEV", 'F'}, + {"0F()&(", 'F'}, + {"0F()&1", 'F'}, + {"0F()&E", 'F'}, + {"0F()&F", 'F'}, + {"0F()&K", 'F'}, + {"0F()&N", 'F'}, + {"0F()&S", 'F'}, + {"0F()&V", 'F'}, + {"0F(),(", 'F'}, + {"0F(),1", 'F'}, + {"0F(),F", 'F'}, + {"0F(),N", 'F'}, + {"0F(),S", 'F'}, + {"0F(),V", 'F'}, + {"0F()1(", 'F'}, + {"0F()1F", 'F'}, + {"0F()1N", 'F'}, + {"0F()1O", 'F'}, + {"0F()1S", 'F'}, + {"0F()1U", 'F'}, + {"0F()1V", 'F'}, + {"0F();E", 'F'}, + {"0F();N", 'F'}, + {"0F();T", 'F'}, + {"0F()A(", 'F'}, + {"0F()AF", 'F'}, + {"0F()AS", 'F'}, + {"0F()AT", 'F'}, + {"0F()AV", 'F'}, + {"0F()B(", 'F'}, + {"0F()B1", 'F'}, + {"0F()BE", 'F'}, + {"0F()BF", 'F'}, + {"0F()BN", 'F'}, + {"0F()BS", 'F'}, + {"0F()BV", 'F'}, + {"0F()C", 'F'}, + {"0F()E(", 'F'}, + {"0F()E1", 'F'}, + {"0F()EF", 'F'}, + {"0F()EK", 'F'}, + {"0F()EN", 'F'}, + {"0F()EO", 'F'}, + {"0F()ES", 'F'}, + {"0F()EU", 'F'}, + {"0F()EV", 'F'}, + {"0F()F(", 'F'}, + {"0F()K(", 'F'}, + {"0F()K)", 'F'}, + {"0F()K1", 'F'}, + {"0F()KF", 'F'}, + {"0F()KN", 'F'}, + {"0F()KS", 'F'}, + {"0F()KU", 'F'}, + {"0F()KV", 'F'}, + {"0F()N&", 'F'}, + {"0F()N(", 'F'}, + {"0F()N)", 'F'}, + {"0F()N,", 'F'}, + {"0F()N1", 'F'}, + {"0F()NE", 'F'}, + {"0F()NF", 'F'}, + {"0F()NO", 'F'}, + {"0F()NU", 'F'}, + {"0F()O(", 'F'}, + {"0F()O1", 'F'}, + {"0F()OF", 'F'}, + {"0F()OK", 'F'}, + {"0F()ON", 'F'}, + {"0F()OS", 'F'}, + {"0F()OU", 'F'}, + {"0F()OV", 'F'}, + {"0F()S(", 'F'}, + {"0F()S1", 'F'}, + {"0F()SF", 'F'}, + {"0F()SO", 'F'}, + {"0F()SU", 'F'}, + {"0F()SV", 'F'}, + {"0F()T(", 'F'}, + {"0F()T1", 'F'}, + {"0F()TE", 'F'}, + {"0F()TF", 'F'}, + {"0F()TN", 'F'}, + {"0F()TS", 'F'}, + {"0F()TT", 'F'}, + {"0F()TV", 'F'}, + {"0F()U", 'F'}, + {"0F()U(", 'F'}, + {"0F()U1", 'F'}, + {"0F()U;", 'F'}, + {"0F()UC", 'F'}, + {"0F()UE", 'F'}, + {"0F()UF", 'F'}, + {"0F()UK", 'F'}, + {"0F()UO", 'F'}, + {"0F()US", 'F'}, + {"0F()UT", 'F'}, + {"0F()UV", 'F'}, + {"0F()V(", 'F'}, + {"0F()VF", 'F'}, + {"0F()VO", 'F'}, + {"0F()VS", 'F'}, + {"0F()VU", 'F'}, + {"0F(1&(", 'F'}, + {"0F(1&1", 'F'}, + {"0F(1&F", 'F'}, + {"0F(1&N", 'F'}, + {"0F(1&S", 'F'}, + {"0F(1&V", 'F'}, + {"0F(1)", 'F'}, + {"0F(1)&", 'F'}, + {"0F(1),", 'F'}, + {"0F(1)1", 'F'}, + {"0F(1);", 'F'}, + {"0F(1)A", 'F'}, + {"0F(1)B", 'F'}, + {"0F(1)C", 'F'}, + {"0F(1)E", 'F'}, + {"0F(1)F", 'F'}, + {"0F(1)K", 'F'}, + {"0F(1)N", 'F'}, + {"0F(1)O", 'F'}, + {"0F(1)S", 'F'}, + {"0F(1)T", 'F'}, + {"0F(1)U", 'F'}, + {"0F(1)V", 'F'}, + {"0F(1,(", 'F'}, + {"0F(1,F", 'F'}, + {"0F(1O(", 'F'}, + {"0F(1OF", 'F'}, + {"0F(1OS", 'F'}, + {"0F(1OV", 'F'}, + {"0F(E(1", 'F'}, + {"0F(E(E", 'F'}, + {"0F(E(F", 'F'}, + {"0F(E(N", 'F'}, + {"0F(E(S", 'F'}, + {"0F(E(V", 'F'}, + {"0F(E1&", 'F'}, + {"0F(E1)", 'F'}, + {"0F(E1K", 'F'}, + {"0F(E1O", 'F'}, + {"0F(EF(", 'F'}, + {"0F(EK(", 'F'}, + {"0F(EK1", 'F'}, + {"0F(EKF", 'F'}, + {"0F(EKN", 'F'}, + {"0F(EKO", 'F'}, + {"0F(EKS", 'F'}, + {"0F(EKV", 'F'}, + {"0F(EN&", 'F'}, + {"0F(EN)", 'F'}, + {"0F(ENK", 'F'}, + {"0F(ENO", 'F'}, + {"0F(EOK", 'F'}, + {"0F(ES&", 'F'}, + {"0F(ES)", 'F'}, + {"0F(ESK", 'F'}, + {"0F(ESO", 'F'}, + {"0F(EV&", 'F'}, + {"0F(EV)", 'F'}, + {"0F(EVK", 'F'}, + {"0F(EVO", 'F'}, + {"0F(F()", 'F'}, + {"0F(F(1", 'F'}, + {"0F(F(E", 'F'}, + {"0F(F(F", 'F'}, + {"0F(F(N", 'F'}, + {"0F(F(S", 'F'}, + {"0F(F(V", 'F'}, + {"0F(K()", 'F'}, + {"0F(K,(", 'F'}, + {"0F(K,F", 'F'}, + {"0F(N&(", 'F'}, + {"0F(N&1", 'F'}, + {"0F(N&F", 'F'}, + {"0F(N&N", 'F'}, + {"0F(N&S", 'F'}, + {"0F(N&V", 'F'}, + {"0F(N)", 'F'}, + {"0F(N)&", 'F'}, + {"0F(N),", 'F'}, + {"0F(N)1", 'F'}, + {"0F(N);", 'F'}, + {"0F(N)A", 'F'}, + {"0F(N)B", 'F'}, + {"0F(N)C", 'F'}, + {"0F(N)E", 'F'}, + {"0F(N)F", 'F'}, + {"0F(N)K", 'F'}, + {"0F(N)N", 'F'}, + {"0F(N)O", 'F'}, + {"0F(N)S", 'F'}, + {"0F(N)T", 'F'}, + {"0F(N)U", 'F'}, + {"0F(N)V", 'F'}, + {"0F(N,(", 'F'}, + {"0F(N,F", 'F'}, + {"0F(NO(", 'F'}, + {"0F(NOF", 'F'}, + {"0F(NOS", 'F'}, + {"0F(NOV", 'F'}, + {"0F(S&(", 'F'}, + {"0F(S&1", 'F'}, + {"0F(S&F", 'F'}, + {"0F(S&N", 'F'}, + {"0F(S&S", 'F'}, + {"0F(S&V", 'F'}, + {"0F(S)", 'F'}, + {"0F(S)&", 'F'}, + {"0F(S),", 'F'}, + {"0F(S)1", 'F'}, + {"0F(S);", 'F'}, + {"0F(S)A", 'F'}, + {"0F(S)B", 'F'}, + {"0F(S)C", 'F'}, + {"0F(S)E", 'F'}, + {"0F(S)F", 'F'}, + {"0F(S)K", 'F'}, + {"0F(S)N", 'F'}, + {"0F(S)O", 'F'}, + {"0F(S)S", 'F'}, + {"0F(S)T", 'F'}, + {"0F(S)U", 'F'}, + {"0F(S)V", 'F'}, + {"0F(S,(", 'F'}, + {"0F(S,F", 'F'}, + {"0F(SO(", 'F'}, + {"0F(SO1", 'F'}, + {"0F(SOF", 'F'}, + {"0F(SON", 'F'}, + {"0F(SOS", 'F'}, + {"0F(SOV", 'F'}, + {"0F(T,(", 'F'}, + {"0F(T,F", 'F'}, + {"0F(V&(", 'F'}, + {"0F(V&1", 'F'}, + {"0F(V&F", 'F'}, + {"0F(V&N", 'F'}, + {"0F(V&S", 'F'}, + {"0F(V&V", 'F'}, + {"0F(V)", 'F'}, + {"0F(V)&", 'F'}, + {"0F(V),", 'F'}, + {"0F(V)1", 'F'}, + {"0F(V);", 'F'}, + {"0F(V)A", 'F'}, + {"0F(V)B", 'F'}, + {"0F(V)C", 'F'}, + {"0F(V)E", 'F'}, + {"0F(V)F", 'F'}, + {"0F(V)K", 'F'}, + {"0F(V)N", 'F'}, + {"0F(V)O", 'F'}, + {"0F(V)S", 'F'}, + {"0F(V)T", 'F'}, + {"0F(V)U", 'F'}, + {"0F(V)V", 'F'}, + {"0F(V,(", 'F'}, + {"0F(V,F", 'F'}, + {"0F(VO(", 'F'}, + {"0F(VOF", 'F'}, + {"0F(VOS", 'F'}, + {"0K(1),", 'F'}, + {"0K(1)A", 'F'}, + {"0K(1)K", 'F'}, + {"0K(1)O", 'F'}, + {"0K(1O(", 'F'}, + {"0K(1OF", 'F'}, + {"0K(1OS", 'F'}, + {"0K(1OV", 'F'}, + {"0K(F()", 'F'}, + {"0K(F(1", 'F'}, + {"0K(F(F", 'F'}, + {"0K(F(N", 'F'}, + {"0K(F(S", 'F'}, + {"0K(F(V", 'F'}, + {"0K(N),", 'F'}, + {"0K(N)A", 'F'}, + {"0K(N)K", 'F'}, + {"0K(N)O", 'F'}, + {"0K(NO(", 'F'}, + {"0K(NOF", 'F'}, + {"0K(NOS", 'F'}, + {"0K(NOV", 'F'}, + {"0K(S),", 'F'}, + {"0K(S)A", 'F'}, + {"0K(S)K", 'F'}, + {"0K(S)O", 'F'}, + {"0K(SO(", 'F'}, + {"0K(SO1", 'F'}, + {"0K(SOF", 'F'}, + {"0K(SON", 'F'}, + {"0K(SOS", 'F'}, + {"0K(SOV", 'F'}, + {"0K(V),", 'F'}, + {"0K(V)A", 'F'}, + {"0K(V)K", 'F'}, + {"0K(V)O", 'F'}, + {"0K(VO(", 'F'}, + {"0K(VOF", 'F'}, + {"0K(VOS", 'F'}, + {"0K1,(1", 'F'}, + {"0K1,(F", 'F'}, + {"0K1,(N", 'F'}, + {"0K1,(S", 'F'}, + {"0K1,(V", 'F'}, + {"0K1,F(", 'F'}, + {"0K1A(F", 'F'}, + {"0K1A(N", 'F'}, + {"0K1A(S", 'F'}, + {"0K1A(V", 'F'}, + {"0K1AF(", 'F'}, + {"0K1ASO", 'F'}, + {"0K1AVO", 'F'}, + {"0K1K(1", 'F'}, + {"0K1K(F", 'F'}, + {"0K1K(N", 'F'}, + {"0K1K(S", 'F'}, + {"0K1K(V", 'F'}, + {"0K1K1O", 'F'}, + {"0K1K1U", 'F'}, + {"0K1KF(", 'F'}, + {"0K1KNU", 'F'}, + {"0K1KSO", 'F'}, + {"0K1KSU", 'F'}, + {"0K1KVO", 'F'}, + {"0K1KVU", 'F'}, + {"0K1O(1", 'F'}, + {"0K1O(F", 'F'}, + {"0K1O(N", 'F'}, + {"0K1O(S", 'F'}, + {"0K1O(V", 'F'}, + {"0K1OF(", 'F'}, + {"0K1OS(", 'F'}, + {"0K1OS,", 'F'}, + {"0K1OS1", 'F'}, + {"0K1OSA", 'F'}, + {"0K1OSF", 'F'}, + {"0K1OSK", 'F'}, + {"0K1OSV", 'F'}, + {"0K1OV(", 'F'}, + {"0K1OV,", 'F'}, + {"0K1OVA", 'F'}, + {"0K1OVF", 'F'}, + {"0K1OVK", 'F'}, + {"0K1OVO", 'F'}, + {"0K1OVS", 'F'}, + {"0KF(),", 'F'}, + {"0KF()A", 'F'}, + {"0KF()K", 'F'}, + {"0KF()O", 'F'}, + {"0KF(1)", 'F'}, + {"0KF(1O", 'F'}, + {"0KF(F(", 'F'}, + {"0KF(N)", 'F'}, + {"0KF(NO", 'F'}, + {"0KF(S)", 'F'}, + {"0KF(SO", 'F'}, + {"0KF(V)", 'F'}, + {"0KF(VO", 'F'}, + {"0KN,(1", 'F'}, + {"0KN,(F", 'F'}, + {"0KN,(N", 'F'}, + {"0KN,(S", 'F'}, + {"0KN,(V", 'F'}, + {"0KN,F(", 'F'}, + {"0KNA(F", 'F'}, + {"0KNA(N", 'F'}, + {"0KNA(S", 'F'}, + {"0KNA(V", 'F'}, + {"0KNAF(", 'F'}, + {"0KNASO", 'F'}, + {"0KNAVO", 'F'}, + {"0KNK(1", 'F'}, + {"0KNK(F", 'F'}, + {"0KNK(N", 'F'}, + {"0KNK(S", 'F'}, + {"0KNK(V", 'F'}, + {"0KNK1O", 'F'}, + {"0KNK1U", 'F'}, + {"0KNKF(", 'F'}, + {"0KNKNU", 'F'}, + {"0KNKSO", 'F'}, + {"0KNKSU", 'F'}, + {"0KNKVO", 'F'}, + {"0KNKVU", 'F'}, + {"0KS,(1", 'F'}, + {"0KS,(F", 'F'}, + {"0KS,(N", 'F'}, + {"0KS,(S", 'F'}, + {"0KS,(V", 'F'}, + {"0KS,F(", 'F'}, + {"0KSA(F", 'F'}, + {"0KSA(N", 'F'}, + {"0KSA(S", 'F'}, + {"0KSA(V", 'F'}, + {"0KSAF(", 'F'}, + {"0KSASO", 'F'}, + {"0KSAVO", 'F'}, + {"0KSK(1", 'F'}, + {"0KSK(F", 'F'}, + {"0KSK(N", 'F'}, + {"0KSK(S", 'F'}, + {"0KSK(V", 'F'}, + {"0KSK1O", 'F'}, + {"0KSK1U", 'F'}, + {"0KSKF(", 'F'}, + {"0KSKNU", 'F'}, + {"0KSKSO", 'F'}, + {"0KSKSU", 'F'}, + {"0KSKVO", 'F'}, + {"0KSKVU", 'F'}, + {"0KSO(1", 'F'}, + {"0KSO(F", 'F'}, + {"0KSO(N", 'F'}, + {"0KSO(S", 'F'}, + {"0KSO(V", 'F'}, + {"0KSO1(", 'F'}, + {"0KSO1,", 'F'}, + {"0KSO1A", 'F'}, + {"0KSO1F", 'F'}, + {"0KSO1K", 'F'}, + {"0KSO1N", 'F'}, + {"0KSO1S", 'F'}, + {"0KSO1V", 'F'}, + {"0KSOF(", 'F'}, + {"0KSON(", 'F'}, + {"0KSON,", 'F'}, + {"0KSON1", 'F'}, + {"0KSONA", 'F'}, + {"0KSONF", 'F'}, + {"0KSONK", 'F'}, + {"0KSOS(", 'F'}, + {"0KSOS,", 'F'}, + {"0KSOS1", 'F'}, + {"0KSOSA", 'F'}, + {"0KSOSF", 'F'}, + {"0KSOSK", 'F'}, + {"0KSOSV", 'F'}, + {"0KSOV(", 'F'}, + {"0KSOV,", 'F'}, + {"0KSOVA", 'F'}, + {"0KSOVF", 'F'}, + {"0KSOVK", 'F'}, + {"0KSOVO", 'F'}, + {"0KSOVS", 'F'}, + {"0KV,(1", 'F'}, + {"0KV,(F", 'F'}, + {"0KV,(N", 'F'}, + {"0KV,(S", 'F'}, + {"0KV,(V", 'F'}, + {"0KV,F(", 'F'}, + {"0KVA(F", 'F'}, + {"0KVA(N", 'F'}, + {"0KVA(S", 'F'}, + {"0KVA(V", 'F'}, + {"0KVAF(", 'F'}, + {"0KVASO", 'F'}, + {"0KVAVO", 'F'}, + {"0KVK(1", 'F'}, + {"0KVK(F", 'F'}, + {"0KVK(N", 'F'}, + {"0KVK(S", 'F'}, + {"0KVK(V", 'F'}, + {"0KVK1O", 'F'}, + {"0KVK1U", 'F'}, + {"0KVKF(", 'F'}, + {"0KVKNU", 'F'}, + {"0KVKSO", 'F'}, + {"0KVKSU", 'F'}, + {"0KVKVO", 'F'}, + {"0KVKVU", 'F'}, + {"0KVO(1", 'F'}, + {"0KVO(F", 'F'}, + {"0KVO(N", 'F'}, + {"0KVO(S", 'F'}, + {"0KVO(V", 'F'}, + {"0KVOF(", 'F'}, + {"0KVOS(", 'F'}, + {"0KVOS,", 'F'}, + {"0KVOS1", 'F'}, + {"0KVOSA", 'F'}, + {"0KVOSF", 'F'}, + {"0KVOSK", 'F'}, + {"0KVOSV", 'F'}, + {"0N&(1&", 'F'}, + {"0N&(1)", 'F'}, + {"0N&(1,", 'F'}, + {"0N&(1O", 'F'}, + {"0N&(E(", 'F'}, + {"0N&(E1", 'F'}, + {"0N&(EF", 'F'}, + {"0N&(EK", 'F'}, + {"0N&(EN", 'F'}, + {"0N&(EO", 'F'}, + {"0N&(ES", 'F'}, + {"0N&(EV", 'F'}, + {"0N&(F(", 'F'}, + {"0N&(N&", 'F'}, + {"0N&(N)", 'F'}, + {"0N&(N,", 'F'}, + {"0N&(NO", 'F'}, + {"0N&(S&", 'F'}, + {"0N&(S)", 'F'}, + {"0N&(S,", 'F'}, + {"0N&(SO", 'F'}, + {"0N&(V&", 'F'}, + {"0N&(V)", 'F'}, + {"0N&(V,", 'F'}, + {"0N&(VO", 'F'}, + {"0N&1", 'F'}, + {"0N&1&(", 'F'}, + {"0N&1&1", 'F'}, + {"0N&1&F", 'F'}, + {"0N&1&N", 'F'}, + {"0N&1&S", 'F'}, + {"0N&1&V", 'F'}, + {"0N&1)&", 'F'}, + {"0N&1)C", 'F'}, + {"0N&1)O", 'F'}, + {"0N&1)U", 'F'}, + {"0N&1;", 'F'}, + {"0N&1;C", 'F'}, + {"0N&1;E", 'F'}, + {"0N&1;T", 'F'}, + {"0N&1B(", 'F'}, + {"0N&1B1", 'F'}, + {"0N&1BF", 'F'}, + {"0N&1BN", 'F'}, + {"0N&1BS", 'F'}, + {"0N&1BV", 'F'}, + {"0N&1C", 'F'}, + {"0N&1EK", 'F'}, + {"0N&1EN", 'F'}, + {"0N&1F(", 'F'}, + {"0N&1K(", 'F'}, + {"0N&1K1", 'F'}, + {"0N&1KF", 'F'}, + {"0N&1KN", 'F'}, + {"0N&1KS", 'F'}, + {"0N&1KV", 'F'}, + {"0N&1O(", 'F'}, + {"0N&1OF", 'F'}, + {"0N&1OS", 'F'}, + {"0N&1OV", 'F'}, + {"0N&1TN", 'F'}, + {"0N&1U", 'F'}, + {"0N&1U(", 'F'}, + {"0N&1U;", 'F'}, + {"0N&1UC", 'F'}, + {"0N&1UE", 'F'}, + {"0N&E(1", 'F'}, + {"0N&E(F", 'F'}, + {"0N&E(N", 'F'}, + {"0N&E(O", 'F'}, + {"0N&E(S", 'F'}, + {"0N&E(V", 'F'}, + {"0N&E1", 'F'}, + {"0N&E1;", 'F'}, + {"0N&E1C", 'F'}, + {"0N&E1K", 'F'}, + {"0N&E1O", 'F'}, + {"0N&EF(", 'F'}, + {"0N&EK(", 'F'}, + {"0N&EK1", 'F'}, + {"0N&EKF", 'F'}, + {"0N&EKN", 'F'}, + {"0N&EKS", 'F'}, + {"0N&EKV", 'F'}, + {"0N&EN;", 'F'}, + {"0N&ENC", 'F'}, + {"0N&ENK", 'F'}, + {"0N&ENO", 'F'}, + {"0N&ES", 'F'}, + {"0N&ES;", 'F'}, + {"0N&ESC", 'F'}, + {"0N&ESK", 'F'}, + {"0N&ESO", 'F'}, + {"0N&EV", 'F'}, + {"0N&EV;", 'F'}, + {"0N&EVC", 'F'}, + {"0N&EVK", 'F'}, + {"0N&EVO", 'F'}, + {"0N&F()", 'F'}, + {"0N&F(1", 'F'}, + {"0N&F(E", 'F'}, + {"0N&F(F", 'F'}, + {"0N&F(N", 'F'}, + {"0N&F(S", 'F'}, + {"0N&F(V", 'F'}, + {"0N&K&(", 'F'}, + {"0N&K&1", 'F'}, + {"0N&K&F", 'F'}, + {"0N&K&N", 'F'}, + {"0N&K&S", 'F'}, + {"0N&K&V", 'F'}, + {"0N&K(1", 'F'}, + {"0N&K(F", 'F'}, + {"0N&K(N", 'F'}, + {"0N&K(S", 'F'}, + {"0N&K(V", 'F'}, + {"0N&K1O", 'F'}, + {"0N&KC", 'F'}, + {"0N&KF(", 'F'}, + {"0N&KNK", 'F'}, + {"0N&KO(", 'F'}, + {"0N&KO1", 'F'}, + {"0N&KOF", 'F'}, + {"0N&KOK", 'F'}, + {"0N&KON", 'F'}, + {"0N&KOS", 'F'}, + {"0N&KOV", 'F'}, + {"0N&KSO", 'F'}, + {"0N&KVO", 'F'}, + {"0N&N&(", 'F'}, + {"0N&N&1", 'F'}, + {"0N&N&F", 'F'}, + {"0N&N&S", 'F'}, + {"0N&N&V", 'F'}, + {"0N&N)&", 'F'}, + {"0N&N)C", 'F'}, + {"0N&N)O", 'F'}, + {"0N&N)U", 'F'}, + {"0N&N;C", 'F'}, + {"0N&N;E", 'F'}, + {"0N&N;T", 'F'}, + {"0N&NB(", 'F'}, + {"0N&NB1", 'F'}, + {"0N&NBF", 'F'}, + {"0N&NBS", 'F'}, + {"0N&NBV", 'F'}, + {"0N&NF(", 'F'}, + {"0N&NK(", 'F'}, + {"0N&NK1", 'F'}, + {"0N&NKF", 'F'}, + {"0N&NKS", 'F'}, + {"0N&NKV", 'F'}, + {"0N&NO(", 'F'}, + {"0N&NOF", 'F'}, + {"0N&NOS", 'F'}, + {"0N&NOV", 'F'}, + {"0N&NU", 'F'}, + {"0N&NU(", 'F'}, + {"0N&NU;", 'F'}, + {"0N&NUC", 'F'}, + {"0N&NUE", 'F'}, + {"0N&S&(", 'F'}, + {"0N&S&1", 'F'}, + {"0N&S&F", 'F'}, + {"0N&S&N", 'F'}, + {"0N&S&S", 'F'}, + {"0N&S&V", 'F'}, + {"0N&S)&", 'F'}, + {"0N&S)C", 'F'}, + {"0N&S)O", 'F'}, + {"0N&S)U", 'F'}, + {"0N&S1", 'F'}, + {"0N&S1;", 'F'}, + {"0N&S1C", 'F'}, + {"0N&S;", 'F'}, + {"0N&S;C", 'F'}, + {"0N&S;E", 'F'}, + {"0N&S;T", 'F'}, + {"0N&SB(", 'F'}, + {"0N&SB1", 'F'}, + {"0N&SBF", 'F'}, + {"0N&SBN", 'F'}, + {"0N&SBS", 'F'}, + {"0N&SBV", 'F'}, + {"0N&SC", 'F'}, + {"0N&SEK", 'F'}, + {"0N&SEN", 'F'}, + {"0N&SF(", 'F'}, + {"0N&SK(", 'F'}, + {"0N&SK1", 'F'}, + {"0N&SKF", 'F'}, + {"0N&SKN", 'F'}, + {"0N&SKS", 'F'}, + {"0N&SKV", 'F'}, + {"0N&SO(", 'F'}, + {"0N&SO1", 'F'}, + {"0N&SOF", 'F'}, + {"0N&SON", 'F'}, + {"0N&SOS", 'F'}, + {"0N&SOV", 'F'}, + {"0N&STN", 'F'}, + {"0N&SU", 'F'}, + {"0N&SU(", 'F'}, + {"0N&SU;", 'F'}, + {"0N&SUC", 'F'}, + {"0N&SUE", 'F'}, + {"0N&SV", 'F'}, + {"0N&SV;", 'F'}, + {"0N&SVC", 'F'}, + {"0N&SVO", 'F'}, + {"0N&V", 'F'}, + {"0N&V&(", 'F'}, + {"0N&V&1", 'F'}, + {"0N&V&F", 'F'}, + {"0N&V&N", 'F'}, + {"0N&V&S", 'F'}, + {"0N&V&V", 'F'}, + {"0N&V)&", 'F'}, + {"0N&V)C", 'F'}, + {"0N&V)O", 'F'}, + {"0N&V)U", 'F'}, + {"0N&V;", 'F'}, + {"0N&V;C", 'F'}, + {"0N&V;E", 'F'}, + {"0N&V;T", 'F'}, + {"0N&VB(", 'F'}, + {"0N&VB1", 'F'}, + {"0N&VBF", 'F'}, + {"0N&VBN", 'F'}, + {"0N&VBS", 'F'}, + {"0N&VBV", 'F'}, + {"0N&VC", 'F'}, + {"0N&VEK", 'F'}, + {"0N&VEN", 'F'}, + {"0N&VF(", 'F'}, + {"0N&VK(", 'F'}, + {"0N&VK1", 'F'}, + {"0N&VKF", 'F'}, + {"0N&VKN", 'F'}, + {"0N&VKS", 'F'}, + {"0N&VKV", 'F'}, + {"0N&VO(", 'F'}, + {"0N&VOF", 'F'}, + {"0N&VOS", 'F'}, + {"0N&VS", 'F'}, + {"0N&VS;", 'F'}, + {"0N&VSC", 'F'}, + {"0N&VSO", 'F'}, + {"0N&VTN", 'F'}, + {"0N&VU", 'F'}, + {"0N&VU(", 'F'}, + {"0N&VU;", 'F'}, + {"0N&VUC", 'F'}, + {"0N&VUE", 'F'}, + {"0N)&(1", 'F'}, + {"0N)&(E", 'F'}, + {"0N)&(F", 'F'}, + {"0N)&(N", 'F'}, + {"0N)&(S", 'F'}, + {"0N)&(V", 'F'}, + {"0N)&1", 'F'}, + {"0N)&1&", 'F'}, + {"0N)&1)", 'F'}, + {"0N)&1;", 'F'}, + {"0N)&1B", 'F'}, + {"0N)&1C", 'F'}, + {"0N)&1F", 'F'}, + {"0N)&1O", 'F'}, + {"0N)&1U", 'F'}, + {"0N)&F(", 'F'}, + {"0N)&N", 'F'}, + {"0N)&N&", 'F'}, + {"0N)&N)", 'F'}, + {"0N)&N;", 'F'}, + {"0N)&NB", 'F'}, + {"0N)&NC", 'F'}, + {"0N)&NF", 'F'}, + {"0N)&NO", 'F'}, + {"0N)&NU", 'F'}, + {"0N)&S", 'F'}, + {"0N)&S&", 'F'}, + {"0N)&S)", 'F'}, + {"0N)&S;", 'F'}, + {"0N)&SB", 'F'}, + {"0N)&SC", 'F'}, + {"0N)&SF", 'F'}, + {"0N)&SO", 'F'}, + {"0N)&SU", 'F'}, + {"0N)&V", 'F'}, + {"0N)&V&", 'F'}, + {"0N)&V)", 'F'}, + {"0N)&V;", 'F'}, + {"0N)&VB", 'F'}, + {"0N)&VC", 'F'}, + {"0N)&VF", 'F'}, + {"0N)&VO", 'F'}, + {"0N)&VU", 'F'}, + {"0N),(1", 'F'}, + {"0N),(F", 'F'}, + {"0N),(N", 'F'}, + {"0N),(S", 'F'}, + {"0N),(V", 'F'}, + {"0N);E(", 'F'}, + {"0N);E1", 'F'}, + {"0N);EF", 'F'}, + {"0N);EK", 'F'}, + {"0N);EN", 'F'}, + {"0N);EO", 'F'}, + {"0N);ES", 'F'}, + {"0N);EV", 'F'}, + {"0N);T(", 'F'}, + {"0N);T1", 'F'}, + {"0N);TF", 'F'}, + {"0N);TK", 'F'}, + {"0N);TN", 'F'}, + {"0N);TO", 'F'}, + {"0N);TS", 'F'}, + {"0N);TV", 'F'}, + {"0N)B(1", 'F'}, + {"0N)B(F", 'F'}, + {"0N)B(N", 'F'}, + {"0N)B(S", 'F'}, + {"0N)B(V", 'F'}, + {"0N)B1", 'F'}, + {"0N)B1&", 'F'}, + {"0N)B1;", 'F'}, + {"0N)B1C", 'F'}, + {"0N)B1K", 'F'}, + {"0N)B1N", 'F'}, + {"0N)B1O", 'F'}, + {"0N)B1U", 'F'}, + {"0N)BF(", 'F'}, + {"0N)BN", 'F'}, + {"0N)BN&", 'F'}, + {"0N)BN;", 'F'}, + {"0N)BNC", 'F'}, + {"0N)BNK", 'F'}, + {"0N)BNO", 'F'}, + {"0N)BNU", 'F'}, + {"0N)BS", 'F'}, + {"0N)BS&", 'F'}, + {"0N)BS;", 'F'}, + {"0N)BSC", 'F'}, + {"0N)BSK", 'F'}, + {"0N)BSO", 'F'}, + {"0N)BSU", 'F'}, + {"0N)BV", 'F'}, + {"0N)BV&", 'F'}, + {"0N)BV;", 'F'}, + {"0N)BVC", 'F'}, + {"0N)BVK", 'F'}, + {"0N)BVO", 'F'}, + {"0N)BVU", 'F'}, + {"0N)E(1", 'F'}, + {"0N)E(F", 'F'}, + {"0N)E(N", 'F'}, + {"0N)E(S", 'F'}, + {"0N)E(V", 'F'}, + {"0N)E1C", 'F'}, + {"0N)E1O", 'F'}, + {"0N)EF(", 'F'}, + {"0N)EK(", 'F'}, + {"0N)EK1", 'F'}, + {"0N)EKF", 'F'}, + {"0N)EKN", 'F'}, + {"0N)EKS", 'F'}, + {"0N)EKV", 'F'}, + {"0N)ENC", 'F'}, + {"0N)ENO", 'F'}, + {"0N)ESC", 'F'}, + {"0N)ESO", 'F'}, + {"0N)EVC", 'F'}, + {"0N)EVO", 'F'}, + {"0N)F(F", 'F'}, + {"0N)K(1", 'F'}, + {"0N)K(F", 'F'}, + {"0N)K(N", 'F'}, + {"0N)K(S", 'F'}, + {"0N)K(V", 'F'}, + {"0N)K1&", 'F'}, + {"0N)K1;", 'F'}, + {"0N)K1B", 'F'}, + {"0N)K1E", 'F'}, + {"0N)K1O", 'F'}, + {"0N)K1U", 'F'}, + {"0N)KB(", 'F'}, + {"0N)KB1", 'F'}, + {"0N)KBF", 'F'}, + {"0N)KBN", 'F'}, + {"0N)KBS", 'F'}, + {"0N)KBV", 'F'}, + {"0N)KF(", 'F'}, + {"0N)KN&", 'F'}, + {"0N)KN;", 'F'}, + {"0N)KNB", 'F'}, + {"0N)KNC", 'F'}, + {"0N)KNE", 'F'}, + {"0N)KNK", 'F'}, + {"0N)KNU", 'F'}, + {"0N)KS&", 'F'}, + {"0N)KS;", 'F'}, + {"0N)KSB", 'F'}, + {"0N)KSE", 'F'}, + {"0N)KSO", 'F'}, + {"0N)KSU", 'F'}, + {"0N)KUE", 'F'}, + {"0N)KV&", 'F'}, + {"0N)KV;", 'F'}, + {"0N)KVB", 'F'}, + {"0N)KVE", 'F'}, + {"0N)KVO", 'F'}, + {"0N)KVU", 'F'}, + {"0N)O(1", 'F'}, + {"0N)O(E", 'F'}, + {"0N)O(F", 'F'}, + {"0N)O(N", 'F'}, + {"0N)O(S", 'F'}, + {"0N)O(V", 'F'}, + {"0N)O1&", 'F'}, + {"0N)O1)", 'F'}, + {"0N)O1;", 'F'}, + {"0N)O1B", 'F'}, + {"0N)O1C", 'F'}, + {"0N)O1K", 'F'}, + {"0N)O1U", 'F'}, + {"0N)OF(", 'F'}, + {"0N)ON&", 'F'}, + {"0N)ON)", 'F'}, + {"0N)ON;", 'F'}, + {"0N)ONB", 'F'}, + {"0N)ONC", 'F'}, + {"0N)ONK", 'F'}, + {"0N)ONU", 'F'}, + {"0N)OS", 'F'}, + {"0N)OS&", 'F'}, + {"0N)OS)", 'F'}, + {"0N)OS;", 'F'}, + {"0N)OSB", 'F'}, + {"0N)OSC", 'F'}, + {"0N)OSK", 'F'}, + {"0N)OSU", 'F'}, + {"0N)OV", 'F'}, + {"0N)OV&", 'F'}, + {"0N)OV)", 'F'}, + {"0N)OV;", 'F'}, + {"0N)OVB", 'F'}, + {"0N)OVC", 'F'}, + {"0N)OVK", 'F'}, + {"0N)OVO", 'F'}, + {"0N)OVU", 'F'}, + {"0N)U(E", 'F'}, + {"0N)UE(", 'F'}, + {"0N)UE1", 'F'}, + {"0N)UEF", 'F'}, + {"0N)UEK", 'F'}, + {"0N)UEN", 'F'}, + {"0N)UES", 'F'}, + {"0N)UEV", 'F'}, + {"0N,(1)", 'F'}, + {"0N,(1O", 'F'}, + {"0N,(E(", 'F'}, + {"0N,(E1", 'F'}, + {"0N,(EF", 'F'}, + {"0N,(EK", 'F'}, + {"0N,(EN", 'F'}, + {"0N,(ES", 'F'}, + {"0N,(EV", 'F'}, + {"0N,(F(", 'F'}, + {"0N,(NO", 'F'}, + {"0N,(S)", 'F'}, + {"0N,(SO", 'F'}, + {"0N,(V)", 'F'}, + {"0N,(VO", 'F'}, + {"0N,F()", 'F'}, + {"0N,F(1", 'F'}, + {"0N,F(F", 'F'}, + {"0N,F(N", 'F'}, + {"0N,F(S", 'F'}, + {"0N,F(V", 'F'}, + {"0N1O(1", 'F'}, + {"0N1O(F", 'F'}, + {"0N1O(N", 'F'}, + {"0N1O(S", 'F'}, + {"0N1O(V", 'F'}, + {"0N1OF(", 'F'}, + {"0N1OS(", 'F'}, + {"0N1OS1", 'F'}, + {"0N1OSF", 'F'}, + {"0N1OSU", 'F'}, + {"0N1OSV", 'F'}, + {"0N1OV(", 'F'}, + {"0N1OVF", 'F'}, + {"0N1OVO", 'F'}, + {"0N1OVS", 'F'}, + {"0N1OVU", 'F'}, + {"0N1S;", 'F'}, + {"0N1S;C", 'F'}, + {"0N1SC", 'F'}, + {"0N1UE", 'F'}, + {"0N1UE;", 'F'}, + {"0N1UEC", 'F'}, + {"0N1UEK", 'F'}, + {"0N1V;", 'F'}, + {"0N1V;C", 'F'}, + {"0N1VC", 'F'}, + {"0N1VO(", 'F'}, + {"0N1VOF", 'F'}, + {"0N1VOS", 'F'}, + {"0N;E(1", 'F'}, + {"0N;E(E", 'F'}, + {"0N;E(F", 'F'}, + {"0N;E(N", 'F'}, + {"0N;E(S", 'F'}, + {"0N;E(V", 'F'}, + {"0N;E1,", 'F'}, + {"0N;E1;", 'F'}, + {"0N;E1C", 'F'}, + {"0N;E1K", 'F'}, + {"0N;E1O", 'F'}, + {"0N;E1T", 'F'}, + {"0N;EF(", 'F'}, + {"0N;EK(", 'F'}, + {"0N;EK1", 'F'}, + {"0N;EKF", 'F'}, + {"0N;EKN", 'F'}, + {"0N;EKO", 'F'}, + {"0N;EKS", 'F'}, + {"0N;EKV", 'F'}, + {"0N;EN,", 'F'}, + {"0N;EN;", 'F'}, + {"0N;ENC", 'F'}, + {"0N;ENE", 'F'}, + {"0N;ENK", 'F'}, + {"0N;ENO", 'F'}, + {"0N;ENT", 'F'}, + {"0N;ES,", 'F'}, + {"0N;ES;", 'F'}, + {"0N;ESC", 'F'}, + {"0N;ESK", 'F'}, + {"0N;ESO", 'F'}, + {"0N;EST", 'F'}, + {"0N;EV,", 'F'}, + {"0N;EV;", 'F'}, + {"0N;EVC", 'F'}, + {"0N;EVK", 'F'}, + {"0N;EVO", 'F'}, + {"0N;EVT", 'F'}, + {"0N;N:T", 'F'}, + {"0N;T(1", 'F'}, + {"0N;T(C", 'F'}, + {"0N;T(E", 'F'}, + {"0N;T(F", 'F'}, + {"0N;T(N", 'F'}, + {"0N;T(S", 'F'}, + {"0N;T(V", 'F'}, + {"0N;T1(", 'F'}, + {"0N;T1,", 'F'}, + {"0N;T1;", 'F'}, + {"0N;T1C", 'F'}, + {"0N;T1F", 'F'}, + {"0N;T1K", 'F'}, + {"0N;T1O", 'F'}, + {"0N;T1T", 'F'}, + {"0N;T;", 'F'}, + {"0N;T;C", 'F'}, + {"0N;TF(", 'F'}, + {"0N;TK(", 'F'}, + {"0N;TK1", 'F'}, + {"0N;TKF", 'F'}, + {"0N;TKK", 'F'}, + {"0N;TKO", 'F'}, + {"0N;TKS", 'F'}, + {"0N;TKV", 'F'}, + {"0N;TN(", 'F'}, + {"0N;TN,", 'F'}, + {"0N;TN1", 'F'}, + {"0N;TN;", 'F'}, + {"0N;TNC", 'F'}, + {"0N;TNE", 'F'}, + {"0N;TNF", 'F'}, + {"0N;TNK", 'F'}, + {"0N;TNN", 'F'}, + {"0N;TNO", 'F'}, + {"0N;TNS", 'F'}, + {"0N;TNT", 'F'}, + {"0N;TNV", 'F'}, + {"0N;TO(", 'F'}, + {"0N;TS(", 'F'}, + {"0N;TS,", 'F'}, + {"0N;TS;", 'F'}, + {"0N;TSC", 'F'}, + {"0N;TSF", 'F'}, + {"0N;TSK", 'F'}, + {"0N;TSO", 'F'}, + {"0N;TST", 'F'}, + {"0N;TTN", 'F'}, + {"0N;TV(", 'F'}, + {"0N;TV,", 'F'}, + {"0N;TV;", 'F'}, + {"0N;TVC", 'F'}, + {"0N;TVF", 'F'}, + {"0N;TVK", 'F'}, + {"0N;TVO", 'F'}, + {"0N;TVT", 'F'}, + {"0NA(F(", 'F'}, + {"0NA(N)", 'F'}, + {"0NA(NO", 'F'}, + {"0NA(S)", 'F'}, + {"0NA(SO", 'F'}, + {"0NA(V)", 'F'}, + {"0NA(VO", 'F'}, + {"0NAF()", 'F'}, + {"0NAF(1", 'F'}, + {"0NAF(F", 'F'}, + {"0NAF(N", 'F'}, + {"0NAF(S", 'F'}, + {"0NAF(V", 'F'}, + {"0NASO(", 'F'}, + {"0NASO1", 'F'}, + {"0NASOF", 'F'}, + {"0NASON", 'F'}, + {"0NASOS", 'F'}, + {"0NASOV", 'F'}, + {"0NASUE", 'F'}, + {"0NATO(", 'F'}, + {"0NATO1", 'F'}, + {"0NATOF", 'F'}, + {"0NATON", 'F'}, + {"0NATOS", 'F'}, + {"0NATOV", 'F'}, + {"0NATUE", 'F'}, + {"0NAVO(", 'F'}, + {"0NAVOF", 'F'}, + {"0NAVOS", 'F'}, + {"0NAVUE", 'F'}, + {"0NB(1&", 'F'}, + {"0NB(1)", 'F'}, + {"0NB(1O", 'F'}, + {"0NB(F(", 'F'}, + {"0NB(N&", 'F'}, + {"0NB(NO", 'F'}, + {"0NB(S&", 'F'}, + {"0NB(S)", 'F'}, + {"0NB(SO", 'F'}, + {"0NB(V&", 'F'}, + {"0NB(V)", 'F'}, + {"0NB(VO", 'F'}, + {"0NB1", 'F'}, + {"0NB1&(", 'F'}, + {"0NB1&1", 'F'}, + {"0NB1&F", 'F'}, + {"0NB1&N", 'F'}, + {"0NB1&S", 'F'}, + {"0NB1&V", 'F'}, + {"0NB1,(", 'F'}, + {"0NB1,F", 'F'}, + {"0NB1;", 'F'}, + {"0NB1;C", 'F'}, + {"0NB1B(", 'F'}, + {"0NB1B1", 'F'}, + {"0NB1BF", 'F'}, + {"0NB1BN", 'F'}, + {"0NB1BS", 'F'}, + {"0NB1BV", 'F'}, + {"0NB1C", 'F'}, + {"0NB1K(", 'F'}, + {"0NB1K1", 'F'}, + {"0NB1KF", 'F'}, + {"0NB1KN", 'F'}, + {"0NB1KS", 'F'}, + {"0NB1KV", 'F'}, + {"0NB1O(", 'F'}, + {"0NB1OF", 'F'}, + {"0NB1OS", 'F'}, + {"0NB1OV", 'F'}, + {"0NB1U(", 'F'}, + {"0NB1UE", 'F'}, + {"0NBE(1", 'F'}, + {"0NBE(F", 'F'}, + {"0NBE(N", 'F'}, + {"0NBE(S", 'F'}, + {"0NBE(V", 'F'}, + {"0NBEK(", 'F'}, + {"0NBF()", 'F'}, + {"0NBF(1", 'F'}, + {"0NBF(F", 'F'}, + {"0NBF(N", 'F'}, + {"0NBF(S", 'F'}, + {"0NBF(V", 'F'}, + {"0NBN&(", 'F'}, + {"0NBN&1", 'F'}, + {"0NBN&F", 'F'}, + {"0NBN&N", 'F'}, + {"0NBN&S", 'F'}, + {"0NBN&V", 'F'}, + {"0NBN,(", 'F'}, + {"0NBN,F", 'F'}, + {"0NBN;", 'F'}, + {"0NBN;C", 'F'}, + {"0NBNB(", 'F'}, + {"0NBNB1", 'F'}, + {"0NBNBF", 'F'}, + {"0NBNBN", 'F'}, + {"0NBNBS", 'F'}, + {"0NBNBV", 'F'}, + {"0NBNC", 'F'}, + {"0NBNK(", 'F'}, + {"0NBNK1", 'F'}, + {"0NBNKF", 'F'}, + {"0NBNKN", 'F'}, + {"0NBNKS", 'F'}, + {"0NBNKV", 'F'}, + {"0NBNO(", 'F'}, + {"0NBNOF", 'F'}, + {"0NBNOS", 'F'}, + {"0NBNOV", 'F'}, + {"0NBNU(", 'F'}, + {"0NBNUE", 'F'}, + {"0NBS", 'F'}, + {"0NBS&(", 'F'}, + {"0NBS&1", 'F'}, + {"0NBS&F", 'F'}, + {"0NBS&N", 'F'}, + {"0NBS&S", 'F'}, + {"0NBS&V", 'F'}, + {"0NBS,(", 'F'}, + {"0NBS,F", 'F'}, + {"0NBS;", 'F'}, + {"0NBS;C", 'F'}, + {"0NBSB(", 'F'}, + {"0NBSB1", 'F'}, + {"0NBSBF", 'F'}, + {"0NBSBN", 'F'}, + {"0NBSBS", 'F'}, + {"0NBSBV", 'F'}, + {"0NBSC", 'F'}, + {"0NBSK(", 'F'}, + {"0NBSK1", 'F'}, + {"0NBSKF", 'F'}, + {"0NBSKN", 'F'}, + {"0NBSKS", 'F'}, + {"0NBSKV", 'F'}, + {"0NBSO(", 'F'}, + {"0NBSO1", 'F'}, + {"0NBSOF", 'F'}, + {"0NBSON", 'F'}, + {"0NBSOS", 'F'}, + {"0NBSOV", 'F'}, + {"0NBSU(", 'F'}, + {"0NBSUE", 'F'}, + {"0NBV", 'F'}, + {"0NBV&(", 'F'}, + {"0NBV&1", 'F'}, + {"0NBV&F", 'F'}, + {"0NBV&N", 'F'}, + {"0NBV&S", 'F'}, + {"0NBV&V", 'F'}, + {"0NBV,(", 'F'}, + {"0NBV,F", 'F'}, + {"0NBV;", 'F'}, + {"0NBV;C", 'F'}, + {"0NBVB(", 'F'}, + {"0NBVB1", 'F'}, + {"0NBVBF", 'F'}, + {"0NBVBN", 'F'}, + {"0NBVBS", 'F'}, + {"0NBVBV", 'F'}, + {"0NBVC", 'F'}, + {"0NBVK(", 'F'}, + {"0NBVK1", 'F'}, + {"0NBVKF", 'F'}, + {"0NBVKN", 'F'}, + {"0NBVKS", 'F'}, + {"0NBVKV", 'F'}, + {"0NBVO(", 'F'}, + {"0NBVOF", 'F'}, + {"0NBVOS", 'F'}, + {"0NBVU(", 'F'}, + {"0NBVUE", 'F'}, + {"0NC", 'F'}, + {"0NE(1)", 'F'}, + {"0NE(1O", 'F'}, + {"0NE(F(", 'F'}, + {"0NE(N)", 'F'}, + {"0NE(NO", 'F'}, + {"0NE(S)", 'F'}, + {"0NE(SO", 'F'}, + {"0NE(V)", 'F'}, + {"0NE(VO", 'F'}, + {"0NE1;T", 'F'}, + {"0NE1C", 'F'}, + {"0NE1O(", 'F'}, + {"0NE1OF", 'F'}, + {"0NE1OS", 'F'}, + {"0NE1OV", 'F'}, + {"0NE1T(", 'F'}, + {"0NE1T1", 'F'}, + {"0NE1TF", 'F'}, + {"0NE1TN", 'F'}, + {"0NE1TS", 'F'}, + {"0NE1TV", 'F'}, + {"0NE1UE", 'F'}, + {"0NEF()", 'F'}, + {"0NEF(1", 'F'}, + {"0NEF(F", 'F'}, + {"0NEF(N", 'F'}, + {"0NEF(S", 'F'}, + {"0NEF(V", 'F'}, + {"0NEN;T", 'F'}, + {"0NENO(", 'F'}, + {"0NENOF", 'F'}, + {"0NENOS", 'F'}, + {"0NENOV", 'F'}, + {"0NENT(", 'F'}, + {"0NENT1", 'F'}, + {"0NENTF", 'F'}, + {"0NENTN", 'F'}, + {"0NENTS", 'F'}, + {"0NENTV", 'F'}, + {"0NENUE", 'F'}, + {"0NEOKN", 'F'}, + {"0NES;T", 'F'}, + {"0NESC", 'F'}, + {"0NESO(", 'F'}, + {"0NESO1", 'F'}, + {"0NESOF", 'F'}, + {"0NESON", 'F'}, + {"0NESOS", 'F'}, + {"0NESOV", 'F'}, + {"0NEST(", 'F'}, + {"0NEST1", 'F'}, + {"0NESTF", 'F'}, + {"0NESTN", 'F'}, + {"0NESTS", 'F'}, + {"0NESTV", 'F'}, + {"0NESUE", 'F'}, + {"0NEU(1", 'F'}, + {"0NEU(F", 'F'}, + {"0NEU(N", 'F'}, + {"0NEU(S", 'F'}, + {"0NEU(V", 'F'}, + {"0NEU1,", 'F'}, + {"0NEU1C", 'F'}, + {"0NEU1O", 'F'}, + {"0NEUEF", 'F'}, + {"0NEUEK", 'F'}, + {"0NEUF(", 'F'}, + {"0NEUS,", 'F'}, + {"0NEUSC", 'F'}, + {"0NEUSO", 'F'}, + {"0NEUV,", 'F'}, + {"0NEUVC", 'F'}, + {"0NEUVO", 'F'}, + {"0NEV;T", 'F'}, + {"0NEVC", 'F'}, + {"0NEVO(", 'F'}, + {"0NEVOF", 'F'}, + {"0NEVOS", 'F'}, + {"0NEVT(", 'F'}, + {"0NEVT1", 'F'}, + {"0NEVTF", 'F'}, + {"0NEVTN", 'F'}, + {"0NEVTS", 'F'}, + {"0NEVTV", 'F'}, + {"0NEVUE", 'F'}, + {"0NF()1", 'F'}, + {"0NF()F", 'F'}, + {"0NF()K", 'F'}, + {"0NF()N", 'F'}, + {"0NF()O", 'F'}, + {"0NF()S", 'F'}, + {"0NF()U", 'F'}, + {"0NF()V", 'F'}, + {"0NF(1)", 'F'}, + {"0NF(1O", 'F'}, + {"0NF(E(", 'F'}, + {"0NF(E1", 'F'}, + {"0NF(EF", 'F'}, + {"0NF(EK", 'F'}, + {"0NF(EN", 'F'}, + {"0NF(ES", 'F'}, + {"0NF(EV", 'F'}, + {"0NF(F(", 'F'}, + {"0NF(N,", 'F'}, + {"0NF(NO", 'F'}, + {"0NF(S)", 'F'}, + {"0NF(SO", 'F'}, + {"0NF(V)", 'F'}, + {"0NF(VO", 'F'}, + {"0NK(1)", 'F'}, + {"0NK(1O", 'F'}, + {"0NK(F(", 'F'}, + {"0NK(NO", 'F'}, + {"0NK(S)", 'F'}, + {"0NK(SO", 'F'}, + {"0NK(V)", 'F'}, + {"0NK(VO", 'F'}, + {"0NK)&(", 'F'}, + {"0NK)&1", 'F'}, + {"0NK)&F", 'F'}, + {"0NK)&N", 'F'}, + {"0NK)&S", 'F'}, + {"0NK)&V", 'F'}, + {"0NK);E", 'F'}, + {"0NK);T", 'F'}, + {"0NK)B(", 'F'}, + {"0NK)B1", 'F'}, + {"0NK)BF", 'F'}, + {"0NK)BN", 'F'}, + {"0NK)BS", 'F'}, + {"0NK)BV", 'F'}, + {"0NK)E(", 'F'}, + {"0NK)E1", 'F'}, + {"0NK)EF", 'F'}, + {"0NK)EK", 'F'}, + {"0NK)EN", 'F'}, + {"0NK)ES", 'F'}, + {"0NK)EV", 'F'}, + {"0NK)F(", 'F'}, + {"0NK)O(", 'F'}, + {"0NK)OF", 'F'}, + {"0NK)UE", 'F'}, + {"0NK1", 'F'}, + {"0NK1&(", 'F'}, + {"0NK1&1", 'F'}, + {"0NK1&F", 'F'}, + {"0NK1&N", 'F'}, + {"0NK1&S", 'F'}, + {"0NK1&V", 'F'}, + {"0NK1;C", 'F'}, + {"0NK1;E", 'F'}, + {"0NK1;T", 'F'}, + {"0NK1B(", 'F'}, + {"0NK1B1", 'F'}, + {"0NK1BF", 'F'}, + {"0NK1BN", 'F'}, + {"0NK1BS", 'F'}, + {"0NK1BV", 'F'}, + {"0NK1C", 'F'}, + {"0NK1E(", 'F'}, + {"0NK1E1", 'F'}, + {"0NK1EF", 'F'}, + {"0NK1EK", 'F'}, + {"0NK1EN", 'F'}, + {"0NK1ES", 'F'}, + {"0NK1EV", 'F'}, + {"0NK1O(", 'F'}, + {"0NK1OF", 'F'}, + {"0NK1OS", 'F'}, + {"0NK1OV", 'F'}, + {"0NK1U(", 'F'}, + {"0NK1UE", 'F'}, + {"0NKF()", 'F'}, + {"0NKF(1", 'F'}, + {"0NKF(F", 'F'}, + {"0NKF(N", 'F'}, + {"0NKF(S", 'F'}, + {"0NKF(V", 'F'}, + {"0NKN", 'F'}, + {"0NKN&(", 'F'}, + {"0NKN&1", 'F'}, + {"0NKN&F", 'F'}, + {"0NKN&S", 'F'}, + {"0NKN&V", 'F'}, + {"0NKN;C", 'F'}, + {"0NKN;E", 'F'}, + {"0NKN;T", 'F'}, + {"0NKNB(", 'F'}, + {"0NKNB1", 'F'}, + {"0NKNBF", 'F'}, + {"0NKNBN", 'F'}, + {"0NKNBS", 'F'}, + {"0NKNBV", 'F'}, + {"0NKNE(", 'F'}, + {"0NKNE1", 'F'}, + {"0NKNEF", 'F'}, + {"0NKNES", 'F'}, + {"0NKNEV", 'F'}, + {"0NKNU(", 'F'}, + {"0NKNUE", 'F'}, + {"0NKS", 'F'}, + {"0NKS&(", 'F'}, + {"0NKS&1", 'F'}, + {"0NKS&F", 'F'}, + {"0NKS&N", 'F'}, + {"0NKS&S", 'F'}, + {"0NKS&V", 'F'}, + {"0NKS;", 'F'}, + {"0NKS;C", 'F'}, + {"0NKS;E", 'F'}, + {"0NKS;T", 'F'}, + {"0NKSB(", 'F'}, + {"0NKSB1", 'F'}, + {"0NKSBF", 'F'}, + {"0NKSBN", 'F'}, + {"0NKSBS", 'F'}, + {"0NKSBV", 'F'}, + {"0NKSC", 'F'}, + {"0NKSE(", 'F'}, + {"0NKSE1", 'F'}, + {"0NKSEF", 'F'}, + {"0NKSEK", 'F'}, + {"0NKSEN", 'F'}, + {"0NKSES", 'F'}, + {"0NKSEV", 'F'}, + {"0NKSO(", 'F'}, + {"0NKSO1", 'F'}, + {"0NKSOF", 'F'}, + {"0NKSON", 'F'}, + {"0NKSOS", 'F'}, + {"0NKSOV", 'F'}, + {"0NKSU(", 'F'}, + {"0NKSUE", 'F'}, + {"0NKUE(", 'F'}, + {"0NKUE1", 'F'}, + {"0NKUEF", 'F'}, + {"0NKUEK", 'F'}, + {"0NKUEN", 'F'}, + {"0NKUES", 'F'}, + {"0NKUEV", 'F'}, + {"0NKV", 'F'}, + {"0NKV&(", 'F'}, + {"0NKV&1", 'F'}, + {"0NKV&F", 'F'}, + {"0NKV&N", 'F'}, + {"0NKV&S", 'F'}, + {"0NKV&V", 'F'}, + {"0NKV;", 'F'}, + {"0NKV;C", 'F'}, + {"0NKV;E", 'F'}, + {"0NKV;T", 'F'}, + {"0NKVB(", 'F'}, + {"0NKVB1", 'F'}, + {"0NKVBF", 'F'}, + {"0NKVBN", 'F'}, + {"0NKVBS", 'F'}, + {"0NKVBV", 'F'}, + {"0NKVC", 'F'}, + {"0NKVE(", 'F'}, + {"0NKVE1", 'F'}, + {"0NKVEF", 'F'}, + {"0NKVEK", 'F'}, + {"0NKVEN", 'F'}, + {"0NKVES", 'F'}, + {"0NKVEV", 'F'}, + {"0NKVO(", 'F'}, + {"0NKVOF", 'F'}, + {"0NKVOS", 'F'}, + {"0NKVU(", 'F'}, + {"0NKVUE", 'F'}, + {"0NO(1&", 'F'}, + {"0NO(1)", 'F'}, + {"0NO(1,", 'F'}, + {"0NO(1O", 'F'}, + {"0NO(E(", 'F'}, + {"0NO(E1", 'F'}, + {"0NO(EE", 'F'}, + {"0NO(EF", 'F'}, + {"0NO(EK", 'F'}, + {"0NO(EN", 'F'}, + {"0NO(EO", 'F'}, + {"0NO(ES", 'F'}, + {"0NO(EV", 'F'}, + {"0NO(F(", 'F'}, + {"0NO(N&", 'F'}, + {"0NO(N)", 'F'}, + {"0NO(N,", 'F'}, + {"0NO(NO", 'F'}, + {"0NO(S&", 'F'}, + {"0NO(S)", 'F'}, + {"0NO(S,", 'F'}, + {"0NO(SO", 'F'}, + {"0NO(V&", 'F'}, + {"0NO(V)", 'F'}, + {"0NO(V,", 'F'}, + {"0NO(VO", 'F'}, + {"0NOF()", 'F'}, + {"0NOF(1", 'F'}, + {"0NOF(E", 'F'}, + {"0NOF(F", 'F'}, + {"0NOF(N", 'F'}, + {"0NOF(S", 'F'}, + {"0NOF(V", 'F'}, + {"0NOK&(", 'F'}, + {"0NOK(1", 'F'}, + {"0NOK(F", 'F'}, + {"0NOK(N", 'F'}, + {"0NOK(S", 'F'}, + {"0NOK(V", 'F'}, + {"0NOK1C", 'F'}, + {"0NOK1O", 'F'}, + {"0NOKF(", 'F'}, + {"0NOKNC", 'F'}, + {"0NOKO(", 'F'}, + {"0NOKO1", 'F'}, + {"0NOKOF", 'F'}, + {"0NOKON", 'F'}, + {"0NOKOS", 'F'}, + {"0NOKOV", 'F'}, + {"0NOKSC", 'F'}, + {"0NOKSO", 'F'}, + {"0NOKVC", 'F'}, + {"0NOKVO", 'F'}, + {"0NONSU", 'F'}, + {"0NOS&(", 'F'}, + {"0NOS&1", 'F'}, + {"0NOS&E", 'F'}, + {"0NOS&F", 'F'}, + {"0NOS&K", 'F'}, + {"0NOS&N", 'F'}, + {"0NOS&S", 'F'}, + {"0NOS&U", 'F'}, + {"0NOS&V", 'F'}, + {"0NOS(E", 'F'}, + {"0NOS(U", 'F'}, + {"0NOS)&", 'F'}, + {"0NOS),", 'F'}, + {"0NOS);", 'F'}, + {"0NOS)B", 'F'}, + {"0NOS)C", 'F'}, + {"0NOS)E", 'F'}, + {"0NOS)F", 'F'}, + {"0NOS)K", 'F'}, + {"0NOS)O", 'F'}, + {"0NOS)U", 'F'}, + {"0NOS,(", 'F'}, + {"0NOS,F", 'F'}, + {"0NOS1(", 'F'}, + {"0NOS1F", 'F'}, + {"0NOS1N", 'F'}, + {"0NOS1S", 'F'}, + {"0NOS1U", 'F'}, + {"0NOS1V", 'F'}, + {"0NOS;", 'F'}, + {"0NOS;C", 'F'}, + {"0NOS;E", 'F'}, + {"0NOS;T", 'F'}, + {"0NOSA(", 'F'}, + {"0NOSAF", 'F'}, + {"0NOSAS", 'F'}, + {"0NOSAT", 'F'}, + {"0NOSAV", 'F'}, + {"0NOSB(", 'F'}, + {"0NOSB1", 'F'}, + {"0NOSBE", 'F'}, + {"0NOSBF", 'F'}, + {"0NOSBN", 'F'}, + {"0NOSBS", 'F'}, + {"0NOSBV", 'F'}, + {"0NOSC", 'F'}, + {"0NOSE(", 'F'}, + {"0NOSE1", 'F'}, + {"0NOSEF", 'F'}, + {"0NOSEK", 'F'}, + {"0NOSEN", 'F'}, + {"0NOSEO", 'F'}, + {"0NOSES", 'F'}, + {"0NOSEU", 'F'}, + {"0NOSEV", 'F'}, + {"0NOSF(", 'F'}, + {"0NOSK(", 'F'}, + {"0NOSK)", 'F'}, + {"0NOSK1", 'F'}, + {"0NOSKB", 'F'}, + {"0NOSKF", 'F'}, + {"0NOSKN", 'F'}, + {"0NOSKS", 'F'}, + {"0NOSKU", 'F'}, + {"0NOSKV", 'F'}, + {"0NOST(", 'F'}, + {"0NOST1", 'F'}, + {"0NOSTE", 'F'}, + {"0NOSTF", 'F'}, + {"0NOSTN", 'F'}, + {"0NOSTS", 'F'}, + {"0NOSTT", 'F'}, + {"0NOSTV", 'F'}, + {"0NOSU", 'F'}, + {"0NOSU(", 'F'}, + {"0NOSU1", 'F'}, + {"0NOSU;", 'F'}, + {"0NOSUC", 'F'}, + {"0NOSUE", 'F'}, + {"0NOSUF", 'F'}, + {"0NOSUK", 'F'}, + {"0NOSUO", 'F'}, + {"0NOSUS", 'F'}, + {"0NOSUT", 'F'}, + {"0NOSUV", 'F'}, + {"0NOSV(", 'F'}, + {"0NOSVF", 'F'}, + {"0NOSVO", 'F'}, + {"0NOSVS", 'F'}, + {"0NOSVU", 'F'}, + {"0NOU(E", 'F'}, + {"0NOUEK", 'F'}, + {"0NOUEN", 'F'}, + {"0NOV&(", 'F'}, + {"0NOV&1", 'F'}, + {"0NOV&E", 'F'}, + {"0NOV&F", 'F'}, + {"0NOV&K", 'F'}, + {"0NOV&N", 'F'}, + {"0NOV&S", 'F'}, + {"0NOV&U", 'F'}, + {"0NOV&V", 'F'}, + {"0NOV(E", 'F'}, + {"0NOV(U", 'F'}, + {"0NOV)&", 'F'}, + {"0NOV),", 'F'}, + {"0NOV);", 'F'}, + {"0NOV)B", 'F'}, + {"0NOV)C", 'F'}, + {"0NOV)E", 'F'}, + {"0NOV)F", 'F'}, + {"0NOV)K", 'F'}, + {"0NOV)O", 'F'}, + {"0NOV)U", 'F'}, + {"0NOV,(", 'F'}, + {"0NOV,F", 'F'}, + {"0NOV;", 'F'}, + {"0NOV;C", 'F'}, + {"0NOV;E", 'F'}, + {"0NOV;N", 'F'}, + {"0NOV;T", 'F'}, + {"0NOVA(", 'F'}, + {"0NOVAF", 'F'}, + {"0NOVAS", 'F'}, + {"0NOVAT", 'F'}, + {"0NOVAV", 'F'}, + {"0NOVB(", 'F'}, + {"0NOVB1", 'F'}, + {"0NOVBE", 'F'}, + {"0NOVBF", 'F'}, + {"0NOVBN", 'F'}, + {"0NOVBS", 'F'}, + {"0NOVBV", 'F'}, + {"0NOVC", 'F'}, + {"0NOVE(", 'F'}, + {"0NOVE1", 'F'}, + {"0NOVEF", 'F'}, + {"0NOVEK", 'F'}, + {"0NOVEN", 'F'}, + {"0NOVEO", 'F'}, + {"0NOVES", 'F'}, + {"0NOVEU", 'F'}, + {"0NOVEV", 'F'}, + {"0NOVF(", 'F'}, + {"0NOVK(", 'F'}, + {"0NOVK)", 'F'}, + {"0NOVK1", 'F'}, + {"0NOVKB", 'F'}, + {"0NOVKF", 'F'}, + {"0NOVKN", 'F'}, + {"0NOVKS", 'F'}, + {"0NOVKU", 'F'}, + {"0NOVKV", 'F'}, + {"0NOVO(", 'F'}, + {"0NOVOF", 'F'}, + {"0NOVOK", 'F'}, + {"0NOVOS", 'F'}, + {"0NOVOU", 'F'}, + {"0NOVS(", 'F'}, + {"0NOVS1", 'F'}, + {"0NOVSF", 'F'}, + {"0NOVSO", 'F'}, + {"0NOVSU", 'F'}, + {"0NOVSV", 'F'}, + {"0NOVT(", 'F'}, + {"0NOVT1", 'F'}, + {"0NOVTE", 'F'}, + {"0NOVTF", 'F'}, + {"0NOVTN", 'F'}, + {"0NOVTS", 'F'}, + {"0NOVTT", 'F'}, + {"0NOVTV", 'F'}, + {"0NOVU", 'F'}, + {"0NOVU(", 'F'}, + {"0NOVU1", 'F'}, + {"0NOVU;", 'F'}, + {"0NOVUC", 'F'}, + {"0NOVUE", 'F'}, + {"0NOVUF", 'F'}, + {"0NOVUK", 'F'}, + {"0NOVUO", 'F'}, + {"0NOVUS", 'F'}, + {"0NOVUT", 'F'}, + {"0NOVUV", 'F'}, + {"0NSO1U", 'F'}, + {"0NSONU", 'F'}, + {"0NSOSU", 'F'}, + {"0NSOVU", 'F'}, + {"0NSUE", 'F'}, + {"0NSUE;", 'F'}, + {"0NSUEC", 'F'}, + {"0NSUEK", 'F'}, + {"0NT(1)", 'F'}, + {"0NT(1O", 'F'}, + {"0NT(F(", 'F'}, + {"0NT(N)", 'F'}, + {"0NT(NO", 'F'}, + {"0NT(S)", 'F'}, + {"0NT(SO", 'F'}, + {"0NT(V)", 'F'}, + {"0NT(VO", 'F'}, + {"0NT1(F", 'F'}, + {"0NT1O(", 'F'}, + {"0NT1OF", 'F'}, + {"0NT1OS", 'F'}, + {"0NT1OV", 'F'}, + {"0NTE(1", 'F'}, + {"0NTE(F", 'F'}, + {"0NTE(N", 'F'}, + {"0NTE(S", 'F'}, + {"0NTE(V", 'F'}, + {"0NTE1N", 'F'}, + {"0NTE1O", 'F'}, + {"0NTEF(", 'F'}, + {"0NTEK(", 'F'}, + {"0NTEK1", 'F'}, + {"0NTEKF", 'F'}, + {"0NTEKN", 'F'}, + {"0NTEKS", 'F'}, + {"0NTEKV", 'F'}, + {"0NTENN", 'F'}, + {"0NTENO", 'F'}, + {"0NTESN", 'F'}, + {"0NTESO", 'F'}, + {"0NTEVN", 'F'}, + {"0NTEVO", 'F'}, + {"0NTF()", 'F'}, + {"0NTF(1", 'F'}, + {"0NTF(F", 'F'}, + {"0NTF(N", 'F'}, + {"0NTF(S", 'F'}, + {"0NTF(V", 'F'}, + {"0NTN(1", 'F'}, + {"0NTN(F", 'F'}, + {"0NTN(S", 'F'}, + {"0NTN(V", 'F'}, + {"0NTN1C", 'F'}, + {"0NTN1O", 'F'}, + {"0NTN;E", 'F'}, + {"0NTN;N", 'F'}, + {"0NTN;T", 'F'}, + {"0NTNE(", 'F'}, + {"0NTNE1", 'F'}, + {"0NTNEF", 'F'}, + {"0NTNEN", 'F'}, + {"0NTNES", 'F'}, + {"0NTNEV", 'F'}, + {"0NTNF(", 'F'}, + {"0NTNKN", 'F'}, + {"0NTNN:", 'F'}, + {"0NTNNC", 'F'}, + {"0NTNNO", 'F'}, + {"0NTNO(", 'F'}, + {"0NTNOF", 'F'}, + {"0NTNOS", 'F'}, + {"0NTNOV", 'F'}, + {"0NTNSC", 'F'}, + {"0NTNSO", 'F'}, + {"0NTNT(", 'F'}, + {"0NTNT1", 'F'}, + {"0NTNTF", 'F'}, + {"0NTNTN", 'F'}, + {"0NTNTS", 'F'}, + {"0NTNTV", 'F'}, + {"0NTNVC", 'F'}, + {"0NTNVO", 'F'}, + {"0NTS(F", 'F'}, + {"0NTSO(", 'F'}, + {"0NTSO1", 'F'}, + {"0NTSOF", 'F'}, + {"0NTSON", 'F'}, + {"0NTSOS", 'F'}, + {"0NTSOV", 'F'}, + {"0NTTNE", 'F'}, + {"0NTTNK", 'F'}, + {"0NTTNN", 'F'}, + {"0NTTNT", 'F'}, + {"0NTV(1", 'F'}, + {"0NTV(F", 'F'}, + {"0NTVO(", 'F'}, + {"0NTVOF", 'F'}, + {"0NTVOS", 'F'}, + {"0NU(1)", 'F'}, + {"0NU(1O", 'F'}, + {"0NU(E(", 'F'}, + {"0NU(E1", 'F'}, + {"0NU(EF", 'F'}, + {"0NU(EK", 'F'}, + {"0NU(EN", 'F'}, + {"0NU(ES", 'F'}, + {"0NU(EV", 'F'}, + {"0NU(F(", 'F'}, + {"0NU(N)", 'F'}, + {"0NU(NO", 'F'}, + {"0NU(S)", 'F'}, + {"0NU(SO", 'F'}, + {"0NU(V)", 'F'}, + {"0NU(VO", 'F'}, + {"0NU1,(", 'F'}, + {"0NU1,F", 'F'}, + {"0NU1C", 'F'}, + {"0NU1O(", 'F'}, + {"0NU1OF", 'F'}, + {"0NU1OS", 'F'}, + {"0NU1OV", 'F'}, + {"0NU;", 'F'}, + {"0NU;C", 'F'}, + {"0NUC", 'F'}, + {"0NUE", 'F'}, + {"0NUE(1", 'F'}, + {"0NUE(E", 'F'}, + {"0NUE(F", 'F'}, + {"0NUE(N", 'F'}, + {"0NUE(O", 'F'}, + {"0NUE(S", 'F'}, + {"0NUE(V", 'F'}, + {"0NUE1", 'F'}, + {"0NUE1&", 'F'}, + {"0NUE1(", 'F'}, + {"0NUE1)", 'F'}, + {"0NUE1,", 'F'}, + {"0NUE1;", 'F'}, + {"0NUE1B", 'F'}, + {"0NUE1C", 'F'}, + {"0NUE1F", 'F'}, + {"0NUE1K", 'F'}, + {"0NUE1N", 'F'}, + {"0NUE1O", 'F'}, + {"0NUE1S", 'F'}, + {"0NUE1U", 'F'}, + {"0NUE1V", 'F'}, + {"0NUE;", 'F'}, + {"0NUE;C", 'F'}, + {"0NUEC", 'F'}, + {"0NUEF", 'F'}, + {"0NUEF(", 'F'}, + {"0NUEF,", 'F'}, + {"0NUEF;", 'F'}, + {"0NUEFC", 'F'}, + {"0NUEK", 'F'}, + {"0NUEK(", 'F'}, + {"0NUEK1", 'F'}, + {"0NUEK;", 'F'}, + {"0NUEKC", 'F'}, + {"0NUEKF", 'F'}, + {"0NUEKN", 'F'}, + {"0NUEKO", 'F'}, + {"0NUEKS", 'F'}, + {"0NUEKV", 'F'}, + {"0NUEN", 'F'}, + {"0NUEN&", 'F'}, + {"0NUEN(", 'F'}, + {"0NUEN)", 'F'}, + {"0NUEN,", 'F'}, + {"0NUEN1", 'F'}, + {"0NUEN;", 'F'}, + {"0NUENB", 'F'}, + {"0NUENC", 'F'}, + {"0NUENF", 'F'}, + {"0NUENK", 'F'}, + {"0NUENO", 'F'}, + {"0NUENS", 'F'}, + {"0NUENU", 'F'}, + {"0NUEOK", 'F'}, + {"0NUEON", 'F'}, + {"0NUES", 'F'}, + {"0NUES&", 'F'}, + {"0NUES(", 'F'}, + {"0NUES)", 'F'}, + {"0NUES,", 'F'}, + {"0NUES1", 'F'}, + {"0NUES;", 'F'}, + {"0NUESB", 'F'}, + {"0NUESC", 'F'}, + {"0NUESF", 'F'}, + {"0NUESK", 'F'}, + {"0NUESO", 'F'}, + {"0NUESU", 'F'}, + {"0NUESV", 'F'}, + {"0NUEV", 'F'}, + {"0NUEV&", 'F'}, + {"0NUEV(", 'F'}, + {"0NUEV)", 'F'}, + {"0NUEV,", 'F'}, + {"0NUEV;", 'F'}, + {"0NUEVB", 'F'}, + {"0NUEVC", 'F'}, + {"0NUEVF", 'F'}, + {"0NUEVK", 'F'}, + {"0NUEVN", 'F'}, + {"0NUEVO", 'F'}, + {"0NUEVS", 'F'}, + {"0NUEVU", 'F'}, + {"0NUF()", 'F'}, + {"0NUF(1", 'F'}, + {"0NUF(F", 'F'}, + {"0NUF(N", 'F'}, + {"0NUF(S", 'F'}, + {"0NUF(V", 'F'}, + {"0NUK(E", 'F'}, + {"0NUO(E", 'F'}, + {"0NUON(", 'F'}, + {"0NUON1", 'F'}, + {"0NUONF", 'F'}, + {"0NUONS", 'F'}, + {"0NUS,(", 'F'}, + {"0NUS,F", 'F'}, + {"0NUSC", 'F'}, + {"0NUSO(", 'F'}, + {"0NUSO1", 'F'}, + {"0NUSOF", 'F'}, + {"0NUSON", 'F'}, + {"0NUSOS", 'F'}, + {"0NUSOV", 'F'}, + {"0NUTN(", 'F'}, + {"0NUTN1", 'F'}, + {"0NUTNF", 'F'}, + {"0NUTNN", 'F'}, + {"0NUTNS", 'F'}, + {"0NUTNV", 'F'}, + {"0NUV,(", 'F'}, + {"0NUV,F", 'F'}, + {"0NUVC", 'F'}, + {"0NUVO(", 'F'}, + {"0NUVOF", 'F'}, + {"0NUVOS", 'F'}, + {"0S&(1&", 'F'}, + {"0S&(1)", 'F'}, + {"0S&(1,", 'F'}, + {"0S&(1O", 'F'}, + {"0S&(E(", 'F'}, + {"0S&(E1", 'F'}, + {"0S&(EF", 'F'}, + {"0S&(EK", 'F'}, + {"0S&(EN", 'F'}, + {"0S&(EO", 'F'}, + {"0S&(ES", 'F'}, + {"0S&(EV", 'F'}, + {"0S&(F(", 'F'}, + {"0S&(N&", 'F'}, + {"0S&(N)", 'F'}, + {"0S&(N,", 'F'}, + {"0S&(NO", 'F'}, + {"0S&(S&", 'F'}, + {"0S&(S)", 'F'}, + {"0S&(S,", 'F'}, + {"0S&(SO", 'F'}, + {"0S&(V&", 'F'}, + {"0S&(V)", 'F'}, + {"0S&(V,", 'F'}, + {"0S&(VO", 'F'}, + {"0S&1", 'F'}, + {"0S&1&(", 'F'}, + {"0S&1&1", 'F'}, + {"0S&1&F", 'F'}, + {"0S&1&N", 'F'}, + {"0S&1&S", 'F'}, + {"0S&1&V", 'F'}, + {"0S&1)&", 'F'}, + {"0S&1)C", 'F'}, + {"0S&1)O", 'F'}, + {"0S&1)U", 'F'}, + {"0S&1;", 'F'}, + {"0S&1;C", 'F'}, + {"0S&1;E", 'F'}, + {"0S&1;T", 'F'}, + {"0S&1B(", 'F'}, + {"0S&1B1", 'F'}, + {"0S&1BF", 'F'}, + {"0S&1BN", 'F'}, + {"0S&1BS", 'F'}, + {"0S&1BV", 'F'}, + {"0S&1C", 'F'}, + {"0S&1EK", 'F'}, + {"0S&1EN", 'F'}, + {"0S&1F(", 'F'}, + {"0S&1K(", 'F'}, + {"0S&1K1", 'F'}, + {"0S&1KF", 'F'}, + {"0S&1KN", 'F'}, + {"0S&1KS", 'F'}, + {"0S&1KV", 'F'}, + {"0S&1O(", 'F'}, + {"0S&1OF", 'F'}, + {"0S&1OS", 'F'}, + {"0S&1OV", 'F'}, + {"0S&1TN", 'F'}, + {"0S&1U", 'F'}, + {"0S&1U(", 'F'}, + {"0S&1U;", 'F'}, + {"0S&1UC", 'F'}, + {"0S&1UE", 'F'}, + {"0S&E(1", 'F'}, + {"0S&E(F", 'F'}, + {"0S&E(N", 'F'}, + {"0S&E(O", 'F'}, + {"0S&E(S", 'F'}, + {"0S&E(V", 'F'}, + {"0S&E1", 'F'}, + {"0S&E1;", 'F'}, + {"0S&E1C", 'F'}, + {"0S&E1K", 'F'}, + {"0S&E1O", 'F'}, + {"0S&EF(", 'F'}, + {"0S&EK(", 'F'}, + {"0S&EK1", 'F'}, + {"0S&EKF", 'F'}, + {"0S&EKN", 'F'}, + {"0S&EKS", 'F'}, + {"0S&EKV", 'F'}, + {"0S&EN", 'F'}, + {"0S&EN;", 'F'}, + {"0S&ENC", 'F'}, + {"0S&ENK", 'F'}, + {"0S&ENO", 'F'}, + {"0S&ES", 'F'}, + {"0S&ES;", 'F'}, + {"0S&ESC", 'F'}, + {"0S&ESK", 'F'}, + {"0S&ESO", 'F'}, + {"0S&EV", 'F'}, + {"0S&EV;", 'F'}, + {"0S&EVC", 'F'}, + {"0S&EVK", 'F'}, + {"0S&EVO", 'F'}, + {"0S&F()", 'F'}, + {"0S&F(1", 'F'}, + {"0S&F(E", 'F'}, + {"0S&F(F", 'F'}, + {"0S&F(N", 'F'}, + {"0S&F(S", 'F'}, + {"0S&F(V", 'F'}, + {"0S&K&(", 'F'}, + {"0S&K&1", 'F'}, + {"0S&K&F", 'F'}, + {"0S&K&N", 'F'}, + {"0S&K&S", 'F'}, + {"0S&K&V", 'F'}, + {"0S&K(1", 'F'}, + {"0S&K(F", 'F'}, + {"0S&K(N", 'F'}, + {"0S&K(S", 'F'}, + {"0S&K(V", 'F'}, + {"0S&K1O", 'F'}, + {"0S&KC", 'F'}, + {"0S&KF(", 'F'}, + {"0S&KNK", 'F'}, + {"0S&KO(", 'F'}, + {"0S&KO1", 'F'}, + {"0S&KOF", 'F'}, + {"0S&KOK", 'F'}, + {"0S&KON", 'F'}, + {"0S&KOS", 'F'}, + {"0S&KOV", 'F'}, + {"0S&KSO", 'F'}, + {"0S&KVO", 'F'}, + {"0S&N", 'F'}, + {"0S&N&(", 'F'}, + {"0S&N&1", 'F'}, + {"0S&N&F", 'F'}, + {"0S&N&N", 'F'}, + {"0S&N&S", 'F'}, + {"0S&N&V", 'F'}, + {"0S&N)&", 'F'}, + {"0S&N)C", 'F'}, + {"0S&N)O", 'F'}, + {"0S&N)U", 'F'}, + {"0S&N;", 'F'}, + {"0S&N;C", 'F'}, + {"0S&N;E", 'F'}, + {"0S&N;T", 'F'}, + {"0S&NB(", 'F'}, + {"0S&NB1", 'F'}, + {"0S&NBF", 'F'}, + {"0S&NBN", 'F'}, + {"0S&NBS", 'F'}, + {"0S&NBV", 'F'}, + {"0S&NC", 'F'}, + {"0S&NEN", 'F'}, + {"0S&NF(", 'F'}, + {"0S&NK(", 'F'}, + {"0S&NK1", 'F'}, + {"0S&NKF", 'F'}, + {"0S&NKN", 'F'}, + {"0S&NKS", 'F'}, + {"0S&NKV", 'F'}, + {"0S&NO(", 'F'}, + {"0S&NOF", 'F'}, + {"0S&NOS", 'F'}, + {"0S&NOV", 'F'}, + {"0S&NTN", 'F'}, + {"0S&NU", 'F'}, + {"0S&NU(", 'F'}, + {"0S&NU;", 'F'}, + {"0S&NUC", 'F'}, + {"0S&NUE", 'F'}, + {"0S&S", 'F'}, + {"0S&S&(", 'F'}, + {"0S&S&1", 'F'}, + {"0S&S&F", 'F'}, + {"0S&S&N", 'F'}, + {"0S&S&S", 'F'}, + {"0S&S&V", 'F'}, + {"0S&S)&", 'F'}, + {"0S&S)C", 'F'}, + {"0S&S)O", 'F'}, + {"0S&S)U", 'F'}, + {"0S&S1", 'F'}, + {"0S&S1;", 'F'}, + {"0S&S1C", 'F'}, + {"0S&S;", 'F'}, + {"0S&S;C", 'F'}, + {"0S&S;E", 'F'}, + {"0S&S;T", 'F'}, + {"0S&SB(", 'F'}, + {"0S&SB1", 'F'}, + {"0S&SBF", 'F'}, + {"0S&SBN", 'F'}, + {"0S&SBS", 'F'}, + {"0S&SBV", 'F'}, + {"0S&SC", 'F'}, + {"0S&SEK", 'F'}, + {"0S&SEN", 'F'}, + {"0S&SF(", 'F'}, + {"0S&SK(", 'F'}, + {"0S&SK1", 'F'}, + {"0S&SKF", 'F'}, + {"0S&SKN", 'F'}, + {"0S&SKS", 'F'}, + {"0S&SKV", 'F'}, + {"0S&SO(", 'F'}, + {"0S&SO1", 'F'}, + {"0S&SOF", 'F'}, + {"0S&SON", 'F'}, + {"0S&SOS", 'F'}, + {"0S&SOV", 'F'}, + {"0S&STN", 'F'}, + {"0S&SU", 'F'}, + {"0S&SU(", 'F'}, + {"0S&SU;", 'F'}, + {"0S&SUC", 'F'}, + {"0S&SUE", 'F'}, + {"0S&SV", 'F'}, + {"0S&SV;", 'F'}, + {"0S&SVC", 'F'}, + {"0S&SVO", 'F'}, + {"0S&V", 'F'}, + {"0S&V&(", 'F'}, + {"0S&V&1", 'F'}, + {"0S&V&F", 'F'}, + {"0S&V&N", 'F'}, + {"0S&V&S", 'F'}, + {"0S&V&V", 'F'}, + {"0S&V)&", 'F'}, + {"0S&V)C", 'F'}, + {"0S&V)O", 'F'}, + {"0S&V)U", 'F'}, + {"0S&V;", 'F'}, + {"0S&V;C", 'F'}, + {"0S&V;E", 'F'}, + {"0S&V;T", 'F'}, + {"0S&VB(", 'F'}, + {"0S&VB1", 'F'}, + {"0S&VBF", 'F'}, + {"0S&VBN", 'F'}, + {"0S&VBS", 'F'}, + {"0S&VBV", 'F'}, + {"0S&VC", 'F'}, + {"0S&VEK", 'F'}, + {"0S&VEN", 'F'}, + {"0S&VF(", 'F'}, + {"0S&VK(", 'F'}, + {"0S&VK1", 'F'}, + {"0S&VKF", 'F'}, + {"0S&VKN", 'F'}, + {"0S&VKS", 'F'}, + {"0S&VKV", 'F'}, + {"0S&VO(", 'F'}, + {"0S&VOF", 'F'}, + {"0S&VOS", 'F'}, + {"0S&VS", 'F'}, + {"0S&VS;", 'F'}, + {"0S&VSC", 'F'}, + {"0S&VSO", 'F'}, + {"0S&VTN", 'F'}, + {"0S&VU", 'F'}, + {"0S&VU(", 'F'}, + {"0S&VU;", 'F'}, + {"0S&VUC", 'F'}, + {"0S&VUE", 'F'}, + {"0S(EF(", 'F'}, + {"0S(EKF", 'F'}, + {"0S(EKN", 'F'}, + {"0S(ENK", 'F'}, + {"0S(U(E", 'F'}, + {"0S)&(1", 'F'}, + {"0S)&(E", 'F'}, + {"0S)&(F", 'F'}, + {"0S)&(N", 'F'}, + {"0S)&(S", 'F'}, + {"0S)&(V", 'F'}, + {"0S)&1", 'F'}, + {"0S)&1&", 'F'}, + {"0S)&1)", 'F'}, + {"0S)&1;", 'F'}, + {"0S)&1B", 'F'}, + {"0S)&1C", 'F'}, + {"0S)&1F", 'F'}, + {"0S)&1O", 'F'}, + {"0S)&1U", 'F'}, + {"0S)&F(", 'F'}, + {"0S)&N", 'F'}, + {"0S)&N&", 'F'}, + {"0S)&N)", 'F'}, + {"0S)&N;", 'F'}, + {"0S)&NB", 'F'}, + {"0S)&NC", 'F'}, + {"0S)&NF", 'F'}, + {"0S)&NO", 'F'}, + {"0S)&NU", 'F'}, + {"0S)&S", 'F'}, + {"0S)&S&", 'F'}, + {"0S)&S)", 'F'}, + {"0S)&S;", 'F'}, + {"0S)&SB", 'F'}, + {"0S)&SC", 'F'}, + {"0S)&SF", 'F'}, + {"0S)&SO", 'F'}, + {"0S)&SU", 'F'}, + {"0S)&V", 'F'}, + {"0S)&V&", 'F'}, + {"0S)&V)", 'F'}, + {"0S)&V;", 'F'}, + {"0S)&VB", 'F'}, + {"0S)&VC", 'F'}, + {"0S)&VF", 'F'}, + {"0S)&VO", 'F'}, + {"0S)&VU", 'F'}, + {"0S),(1", 'F'}, + {"0S),(F", 'F'}, + {"0S),(N", 'F'}, + {"0S),(S", 'F'}, + {"0S),(V", 'F'}, + {"0S);E(", 'F'}, + {"0S);E1", 'F'}, + {"0S);EF", 'F'}, + {"0S);EK", 'F'}, + {"0S);EN", 'F'}, + {"0S);EO", 'F'}, + {"0S);ES", 'F'}, + {"0S);EV", 'F'}, + {"0S);T(", 'F'}, + {"0S);T1", 'F'}, + {"0S);TF", 'F'}, + {"0S);TK", 'F'}, + {"0S);TN", 'F'}, + {"0S);TO", 'F'}, + {"0S);TS", 'F'}, + {"0S);TV", 'F'}, + {"0S)B(1", 'F'}, + {"0S)B(F", 'F'}, + {"0S)B(N", 'F'}, + {"0S)B(S", 'F'}, + {"0S)B(V", 'F'}, + {"0S)B1", 'F'}, + {"0S)B1&", 'F'}, + {"0S)B1;", 'F'}, + {"0S)B1C", 'F'}, + {"0S)B1K", 'F'}, + {"0S)B1N", 'F'}, + {"0S)B1O", 'F'}, + {"0S)B1U", 'F'}, + {"0S)BF(", 'F'}, + {"0S)BN", 'F'}, + {"0S)BN&", 'F'}, + {"0S)BN;", 'F'}, + {"0S)BNC", 'F'}, + {"0S)BNK", 'F'}, + {"0S)BNO", 'F'}, + {"0S)BNU", 'F'}, + {"0S)BS", 'F'}, + {"0S)BS&", 'F'}, + {"0S)BS;", 'F'}, + {"0S)BSC", 'F'}, + {"0S)BSK", 'F'}, + {"0S)BSO", 'F'}, + {"0S)BSU", 'F'}, + {"0S)BV", 'F'}, + {"0S)BV&", 'F'}, + {"0S)BV;", 'F'}, + {"0S)BVC", 'F'}, + {"0S)BVK", 'F'}, + {"0S)BVO", 'F'}, + {"0S)BVU", 'F'}, + {"0S)C", 'F'}, + {"0S)E(1", 'F'}, + {"0S)E(F", 'F'}, + {"0S)E(N", 'F'}, + {"0S)E(S", 'F'}, + {"0S)E(V", 'F'}, + {"0S)E1C", 'F'}, + {"0S)E1O", 'F'}, + {"0S)EF(", 'F'}, + {"0S)EK(", 'F'}, + {"0S)EK1", 'F'}, + {"0S)EKF", 'F'}, + {"0S)EKN", 'F'}, + {"0S)EKS", 'F'}, + {"0S)EKV", 'F'}, + {"0S)ENC", 'F'}, + {"0S)ENO", 'F'}, + {"0S)ESC", 'F'}, + {"0S)ESO", 'F'}, + {"0S)EVC", 'F'}, + {"0S)EVO", 'F'}, + {"0S)F(F", 'F'}, + {"0S)K(1", 'F'}, + {"0S)K(F", 'F'}, + {"0S)K(N", 'F'}, + {"0S)K(S", 'F'}, + {"0S)K(V", 'F'}, + {"0S)K1&", 'F'}, + {"0S)K1;", 'F'}, + {"0S)K1B", 'F'}, + {"0S)K1E", 'F'}, + {"0S)K1O", 'F'}, + {"0S)K1U", 'F'}, + {"0S)KB(", 'F'}, + {"0S)KB1", 'F'}, + {"0S)KBF", 'F'}, + {"0S)KBN", 'F'}, + {"0S)KBS", 'F'}, + {"0S)KBV", 'F'}, + {"0S)KF(", 'F'}, + {"0S)KN&", 'F'}, + {"0S)KN;", 'F'}, + {"0S)KNB", 'F'}, + {"0S)KNC", 'F'}, + {"0S)KNE", 'F'}, + {"0S)KNK", 'F'}, + {"0S)KNU", 'F'}, + {"0S)KS&", 'F'}, + {"0S)KS;", 'F'}, + {"0S)KSB", 'F'}, + {"0S)KSE", 'F'}, + {"0S)KSO", 'F'}, + {"0S)KSU", 'F'}, + {"0S)KUE", 'F'}, + {"0S)KV&", 'F'}, + {"0S)KV;", 'F'}, + {"0S)KVB", 'F'}, + {"0S)KVE", 'F'}, + {"0S)KVO", 'F'}, + {"0S)KVU", 'F'}, + {"0S)O(1", 'F'}, + {"0S)O(E", 'F'}, + {"0S)O(F", 'F'}, + {"0S)O(N", 'F'}, + {"0S)O(S", 'F'}, + {"0S)O(V", 'F'}, + {"0S)O1", 'F'}, + {"0S)O1&", 'F'}, + {"0S)O1)", 'F'}, + {"0S)O1;", 'F'}, + {"0S)O1B", 'F'}, + {"0S)O1C", 'F'}, + {"0S)O1K", 'F'}, + {"0S)O1U", 'F'}, + {"0S)OF(", 'F'}, + {"0S)ON&", 'F'}, + {"0S)ON)", 'F'}, + {"0S)ON;", 'F'}, + {"0S)ONB", 'F'}, + {"0S)ONC", 'F'}, + {"0S)ONK", 'F'}, + {"0S)ONU", 'F'}, + {"0S)OS", 'F'}, + {"0S)OS&", 'F'}, + {"0S)OS)", 'F'}, + {"0S)OS;", 'F'}, + {"0S)OSB", 'F'}, + {"0S)OSC", 'F'}, + {"0S)OSK", 'F'}, + {"0S)OSU", 'F'}, + {"0S)OV", 'F'}, + {"0S)OV&", 'F'}, + {"0S)OV)", 'F'}, + {"0S)OV;", 'F'}, + {"0S)OVB", 'F'}, + {"0S)OVC", 'F'}, + {"0S)OVK", 'F'}, + {"0S)OVO", 'F'}, + {"0S)OVU", 'F'}, + {"0S)U(E", 'F'}, + {"0S)UE(", 'F'}, + {"0S)UE1", 'F'}, + {"0S)UEF", 'F'}, + {"0S)UEK", 'F'}, + {"0S)UEN", 'F'}, + {"0S)UES", 'F'}, + {"0S)UEV", 'F'}, + {"0S,(1)", 'F'}, + {"0S,(1O", 'F'}, + {"0S,(E(", 'F'}, + {"0S,(E1", 'F'}, + {"0S,(EF", 'F'}, + {"0S,(EK", 'F'}, + {"0S,(EN", 'F'}, + {"0S,(ES", 'F'}, + {"0S,(EV", 'F'}, + {"0S,(F(", 'F'}, + {"0S,(N)", 'F'}, + {"0S,(NO", 'F'}, + {"0S,(S)", 'F'}, + {"0S,(SO", 'F'}, + {"0S,(V)", 'F'}, + {"0S,(VO", 'F'}, + {"0S,F()", 'F'}, + {"0S,F(1", 'F'}, + {"0S,F(F", 'F'}, + {"0S,F(N", 'F'}, + {"0S,F(S", 'F'}, + {"0S,F(V", 'F'}, + {"0S1F()", 'F'}, + {"0S1F(1", 'F'}, + {"0S1F(F", 'F'}, + {"0S1F(N", 'F'}, + {"0S1F(S", 'F'}, + {"0S1F(V", 'F'}, + {"0S1NC", 'F'}, + {"0S1S;", 'F'}, + {"0S1S;C", 'F'}, + {"0S1SC", 'F'}, + {"0S1UE", 'F'}, + {"0S1UE;", 'F'}, + {"0S1UEC", 'F'}, + {"0S1UEK", 'F'}, + {"0S1V", 'F'}, + {"0S1V;", 'F'}, + {"0S1V;C", 'F'}, + {"0S1VC", 'F'}, + {"0S1VO(", 'F'}, + {"0S1VOF", 'F'}, + {"0S1VOS", 'F'}, + {"0S;E(1", 'F'}, + {"0S;E(E", 'F'}, + {"0S;E(F", 'F'}, + {"0S;E(N", 'F'}, + {"0S;E(S", 'F'}, + {"0S;E(V", 'F'}, + {"0S;E1,", 'F'}, + {"0S;E1;", 'F'}, + {"0S;E1C", 'F'}, + {"0S;E1K", 'F'}, + {"0S;E1O", 'F'}, + {"0S;E1T", 'F'}, + {"0S;EF(", 'F'}, + {"0S;EK(", 'F'}, + {"0S;EK1", 'F'}, + {"0S;EKF", 'F'}, + {"0S;EKN", 'F'}, + {"0S;EKO", 'F'}, + {"0S;EKS", 'F'}, + {"0S;EKV", 'F'}, + {"0S;EN,", 'F'}, + {"0S;EN;", 'F'}, + {"0S;ENC", 'F'}, + {"0S;ENE", 'F'}, + {"0S;ENK", 'F'}, + {"0S;ENO", 'F'}, + {"0S;ENT", 'F'}, + {"0S;ES,", 'F'}, + {"0S;ES;", 'F'}, + {"0S;ESC", 'F'}, + {"0S;ESK", 'F'}, + {"0S;ESO", 'F'}, + {"0S;EST", 'F'}, + {"0S;EV,", 'F'}, + {"0S;EV;", 'F'}, + {"0S;EVC", 'F'}, + {"0S;EVK", 'F'}, + {"0S;EVO", 'F'}, + {"0S;EVT", 'F'}, + {"0S;N:T", 'F'}, + {"0S;T(1", 'F'}, + {"0S;T(C", 'F'}, + {"0S;T(E", 'F'}, + {"0S;T(F", 'F'}, + {"0S;T(N", 'F'}, + {"0S;T(S", 'F'}, + {"0S;T(V", 'F'}, + {"0S;T1(", 'F'}, + {"0S;T1,", 'F'}, + {"0S;T1;", 'F'}, + {"0S;T1C", 'F'}, + {"0S;T1F", 'F'}, + {"0S;T1K", 'F'}, + {"0S;T1O", 'F'}, + {"0S;T1T", 'F'}, + {"0S;T;", 'F'}, + {"0S;T;C", 'F'}, + {"0S;TF(", 'F'}, + {"0S;TK(", 'F'}, + {"0S;TK1", 'F'}, + {"0S;TKF", 'F'}, + {"0S;TKK", 'F'}, + {"0S;TKN", 'F'}, + {"0S;TKO", 'F'}, + {"0S;TKS", 'F'}, + {"0S;TKV", 'F'}, + {"0S;TN(", 'F'}, + {"0S;TN,", 'F'}, + {"0S;TN1", 'F'}, + {"0S;TN;", 'F'}, + {"0S;TNC", 'F'}, + {"0S;TNE", 'F'}, + {"0S;TNF", 'F'}, + {"0S;TNK", 'F'}, + {"0S;TNN", 'F'}, + {"0S;TNO", 'F'}, + {"0S;TNS", 'F'}, + {"0S;TNT", 'F'}, + {"0S;TNV", 'F'}, + {"0S;TO(", 'F'}, + {"0S;TS(", 'F'}, + {"0S;TS,", 'F'}, + {"0S;TS;", 'F'}, + {"0S;TSC", 'F'}, + {"0S;TSF", 'F'}, + {"0S;TSK", 'F'}, + {"0S;TSO", 'F'}, + {"0S;TST", 'F'}, + {"0S;TTN", 'F'}, + {"0S;TV(", 'F'}, + {"0S;TV,", 'F'}, + {"0S;TV;", 'F'}, + {"0S;TVC", 'F'}, + {"0S;TVF", 'F'}, + {"0S;TVK", 'F'}, + {"0S;TVO", 'F'}, + {"0S;TVT", 'F'}, + {"0SA(F(", 'F'}, + {"0SA(N)", 'F'}, + {"0SA(NO", 'F'}, + {"0SA(S)", 'F'}, + {"0SA(SO", 'F'}, + {"0SA(V)", 'F'}, + {"0SA(VO", 'F'}, + {"0SAF()", 'F'}, + {"0SAF(1", 'F'}, + {"0SAF(F", 'F'}, + {"0SAF(N", 'F'}, + {"0SAF(S", 'F'}, + {"0SAF(V", 'F'}, + {"0SASO(", 'F'}, + {"0SASO1", 'F'}, + {"0SASOF", 'F'}, + {"0SASON", 'F'}, + {"0SASOS", 'F'}, + {"0SASOV", 'F'}, + {"0SASUE", 'F'}, + {"0SATO(", 'F'}, + {"0SATO1", 'F'}, + {"0SATOF", 'F'}, + {"0SATON", 'F'}, + {"0SATOS", 'F'}, + {"0SATOV", 'F'}, + {"0SATUE", 'F'}, + {"0SAVO(", 'F'}, + {"0SAVOF", 'F'}, + {"0SAVOS", 'F'}, + {"0SAVUE", 'F'}, + {"0SB(1)", 'F'}, + {"0SB(1O", 'F'}, + {"0SB(F(", 'F'}, + {"0SB(NO", 'F'}, + {"0SB(S)", 'F'}, + {"0SB(SO", 'F'}, + {"0SB(V)", 'F'}, + {"0SB(VO", 'F'}, + {"0SB1", 'F'}, + {"0SB1&(", 'F'}, + {"0SB1&1", 'F'}, + {"0SB1&F", 'F'}, + {"0SB1&N", 'F'}, + {"0SB1&S", 'F'}, + {"0SB1&V", 'F'}, + {"0SB1,(", 'F'}, + {"0SB1,F", 'F'}, + {"0SB1;", 'F'}, + {"0SB1;C", 'F'}, + {"0SB1B(", 'F'}, + {"0SB1B1", 'F'}, + {"0SB1BF", 'F'}, + {"0SB1BN", 'F'}, + {"0SB1BS", 'F'}, + {"0SB1BV", 'F'}, + {"0SB1C", 'F'}, + {"0SB1K(", 'F'}, + {"0SB1K1", 'F'}, + {"0SB1KF", 'F'}, + {"0SB1KN", 'F'}, + {"0SB1KS", 'F'}, + {"0SB1KV", 'F'}, + {"0SB1O(", 'F'}, + {"0SB1OF", 'F'}, + {"0SB1OS", 'F'}, + {"0SB1OV", 'F'}, + {"0SB1U(", 'F'}, + {"0SB1UE", 'F'}, + {"0SBE(1", 'F'}, + {"0SBE(F", 'F'}, + {"0SBE(N", 'F'}, + {"0SBE(S", 'F'}, + {"0SBE(V", 'F'}, + {"0SBEK(", 'F'}, + {"0SBF()", 'F'}, + {"0SBF(1", 'F'}, + {"0SBF(F", 'F'}, + {"0SBF(N", 'F'}, + {"0SBF(S", 'F'}, + {"0SBF(V", 'F'}, + {"0SBN", 'F'}, + {"0SBN&(", 'F'}, + {"0SBN&1", 'F'}, + {"0SBN&F", 'F'}, + {"0SBN&N", 'F'}, + {"0SBN&S", 'F'}, + {"0SBN&V", 'F'}, + {"0SBN,(", 'F'}, + {"0SBN,F", 'F'}, + {"0SBN;", 'F'}, + {"0SBN;C", 'F'}, + {"0SBNB(", 'F'}, + {"0SBNB1", 'F'}, + {"0SBNBF", 'F'}, + {"0SBNBN", 'F'}, + {"0SBNBS", 'F'}, + {"0SBNBV", 'F'}, + {"0SBNC", 'F'}, + {"0SBNK(", 'F'}, + {"0SBNK1", 'F'}, + {"0SBNKF", 'F'}, + {"0SBNKN", 'F'}, + {"0SBNKS", 'F'}, + {"0SBNKV", 'F'}, + {"0SBNO(", 'F'}, + {"0SBNOF", 'F'}, + {"0SBNOS", 'F'}, + {"0SBNOV", 'F'}, + {"0SBNU(", 'F'}, + {"0SBNUE", 'F'}, + {"0SBS", 'F'}, + {"0SBS&(", 'F'}, + {"0SBS&1", 'F'}, + {"0SBS&F", 'F'}, + {"0SBS&N", 'F'}, + {"0SBS&S", 'F'}, + {"0SBS&V", 'F'}, + {"0SBS,(", 'F'}, + {"0SBS,F", 'F'}, + {"0SBS;", 'F'}, + {"0SBS;C", 'F'}, + {"0SBSB(", 'F'}, + {"0SBSB1", 'F'}, + {"0SBSBF", 'F'}, + {"0SBSBN", 'F'}, + {"0SBSBS", 'F'}, + {"0SBSBV", 'F'}, + {"0SBSC", 'F'}, + {"0SBSK(", 'F'}, + {"0SBSK1", 'F'}, + {"0SBSKF", 'F'}, + {"0SBSKN", 'F'}, + {"0SBSKS", 'F'}, + {"0SBSKV", 'F'}, + {"0SBSO(", 'F'}, + {"0SBSO1", 'F'}, + {"0SBSOF", 'F'}, + {"0SBSON", 'F'}, + {"0SBSOS", 'F'}, + {"0SBSOV", 'F'}, + {"0SBSU(", 'F'}, + {"0SBSUE", 'F'}, + {"0SBV", 'F'}, + {"0SBV&(", 'F'}, + {"0SBV&1", 'F'}, + {"0SBV&F", 'F'}, + {"0SBV&N", 'F'}, + {"0SBV&S", 'F'}, + {"0SBV&V", 'F'}, + {"0SBV,(", 'F'}, + {"0SBV,F", 'F'}, + {"0SBV;", 'F'}, + {"0SBV;C", 'F'}, + {"0SBVB(", 'F'}, + {"0SBVB1", 'F'}, + {"0SBVBF", 'F'}, + {"0SBVBN", 'F'}, + {"0SBVBS", 'F'}, + {"0SBVBV", 'F'}, + {"0SBVC", 'F'}, + {"0SBVK(", 'F'}, + {"0SBVK1", 'F'}, + {"0SBVKF", 'F'}, + {"0SBVKN", 'F'}, + {"0SBVKS", 'F'}, + {"0SBVKV", 'F'}, + {"0SBVO(", 'F'}, + {"0SBVOF", 'F'}, + {"0SBVOS", 'F'}, + {"0SBVU(", 'F'}, + {"0SBVUE", 'F'}, + {"0SC", 'F'}, + {"0SE(1)", 'F'}, + {"0SE(1O", 'F'}, + {"0SE(F(", 'F'}, + {"0SE(N)", 'F'}, + {"0SE(NO", 'F'}, + {"0SE(S)", 'F'}, + {"0SE(SO", 'F'}, + {"0SE(V)", 'F'}, + {"0SE(VO", 'F'}, + {"0SE1;T", 'F'}, + {"0SE1C", 'F'}, + {"0SE1O(", 'F'}, + {"0SE1OF", 'F'}, + {"0SE1OS", 'F'}, + {"0SE1OV", 'F'}, + {"0SE1T(", 'F'}, + {"0SE1T1", 'F'}, + {"0SE1TF", 'F'}, + {"0SE1TN", 'F'}, + {"0SE1TS", 'F'}, + {"0SE1TV", 'F'}, + {"0SE1UE", 'F'}, + {"0SEF()", 'F'}, + {"0SEF(1", 'F'}, + {"0SEF(F", 'F'}, + {"0SEF(N", 'F'}, + {"0SEF(S", 'F'}, + {"0SEF(V", 'F'}, + {"0SEK(1", 'F'}, + {"0SEK(E", 'F'}, + {"0SEK(F", 'F'}, + {"0SEK(N", 'F'}, + {"0SEK(S", 'F'}, + {"0SEK(V", 'F'}, + {"0SEK1;", 'F'}, + {"0SEK1C", 'F'}, + {"0SEK1O", 'F'}, + {"0SEK1T", 'F'}, + {"0SEK1U", 'F'}, + {"0SEKF(", 'F'}, + {"0SEKN;", 'F'}, + {"0SEKNC", 'F'}, + {"0SEKNE", 'F'}, + {"0SEKNT", 'F'}, + {"0SEKNU", 'F'}, + {"0SEKOK", 'F'}, + {"0SEKS;", 'F'}, + {"0SEKSC", 'F'}, + {"0SEKSO", 'F'}, + {"0SEKST", 'F'}, + {"0SEKSU", 'F'}, + {"0SEKU(", 'F'}, + {"0SEKU1", 'F'}, + {"0SEKUE", 'F'}, + {"0SEKUF", 'F'}, + {"0SEKUS", 'F'}, + {"0SEKUV", 'F'}, + {"0SEKV;", 'F'}, + {"0SEKVC", 'F'}, + {"0SEKVO", 'F'}, + {"0SEKVT", 'F'}, + {"0SEKVU", 'F'}, + {"0SEN;T", 'F'}, + {"0SENC", 'F'}, + {"0SENEN", 'F'}, + {"0SENO(", 'F'}, + {"0SENOF", 'F'}, + {"0SENOS", 'F'}, + {"0SENOV", 'F'}, + {"0SENT(", 'F'}, + {"0SENT1", 'F'}, + {"0SENTF", 'F'}, + {"0SENTN", 'F'}, + {"0SENTS", 'F'}, + {"0SENTV", 'F'}, + {"0SENUE", 'F'}, + {"0SEOKN", 'F'}, + {"0SES;T", 'F'}, + {"0SESC", 'F'}, + {"0SESO(", 'F'}, + {"0SESO1", 'F'}, + {"0SESOF", 'F'}, + {"0SESON", 'F'}, + {"0SESOS", 'F'}, + {"0SESOV", 'F'}, + {"0SEST(", 'F'}, + {"0SEST1", 'F'}, + {"0SESTF", 'F'}, + {"0SESTN", 'F'}, + {"0SESTS", 'F'}, + {"0SESTV", 'F'}, + {"0SESUE", 'F'}, + {"0SEU(1", 'F'}, + {"0SEU(F", 'F'}, + {"0SEU(N", 'F'}, + {"0SEU(S", 'F'}, + {"0SEU(V", 'F'}, + {"0SEU1,", 'F'}, + {"0SEU1C", 'F'}, + {"0SEU1O", 'F'}, + {"0SEUEF", 'F'}, + {"0SEUEK", 'F'}, + {"0SEUF(", 'F'}, + {"0SEUS,", 'F'}, + {"0SEUSC", 'F'}, + {"0SEUSO", 'F'}, + {"0SEUV,", 'F'}, + {"0SEUVC", 'F'}, + {"0SEUVO", 'F'}, + {"0SEV;T", 'F'}, + {"0SEVC", 'F'}, + {"0SEVO(", 'F'}, + {"0SEVOF", 'F'}, + {"0SEVOS", 'F'}, + {"0SEVT(", 'F'}, + {"0SEVT1", 'F'}, + {"0SEVTF", 'F'}, + {"0SEVTN", 'F'}, + {"0SEVTS", 'F'}, + {"0SEVTV", 'F'}, + {"0SEVUE", 'F'}, + {"0SF()1", 'F'}, + {"0SF()F", 'F'}, + {"0SF()K", 'F'}, + {"0SF()N", 'F'}, + {"0SF()O", 'F'}, + {"0SF()S", 'F'}, + {"0SF()U", 'F'}, + {"0SF()V", 'F'}, + {"0SF(1)", 'F'}, + {"0SF(1N", 'F'}, + {"0SF(1O", 'F'}, + {"0SF(E(", 'F'}, + {"0SF(E1", 'F'}, + {"0SF(EF", 'F'}, + {"0SF(EK", 'F'}, + {"0SF(EN", 'F'}, + {"0SF(ES", 'F'}, + {"0SF(EV", 'F'}, + {"0SF(F(", 'F'}, + {"0SF(N)", 'F'}, + {"0SF(N,", 'F'}, + {"0SF(NO", 'F'}, + {"0SF(S)", 'F'}, + {"0SF(SO", 'F'}, + {"0SF(V)", 'F'}, + {"0SF(VO", 'F'}, + {"0SK(1)", 'F'}, + {"0SK(1O", 'F'}, + {"0SK(F(", 'F'}, + {"0SK(N)", 'F'}, + {"0SK(NO", 'F'}, + {"0SK(S)", 'F'}, + {"0SK(SO", 'F'}, + {"0SK(V)", 'F'}, + {"0SK(VO", 'F'}, + {"0SK)&(", 'F'}, + {"0SK)&1", 'F'}, + {"0SK)&F", 'F'}, + {"0SK)&N", 'F'}, + {"0SK)&S", 'F'}, + {"0SK)&V", 'F'}, + {"0SK);E", 'F'}, + {"0SK);T", 'F'}, + {"0SK)B(", 'F'}, + {"0SK)B1", 'F'}, + {"0SK)BF", 'F'}, + {"0SK)BN", 'F'}, + {"0SK)BS", 'F'}, + {"0SK)BV", 'F'}, + {"0SK)E(", 'F'}, + {"0SK)E1", 'F'}, + {"0SK)EF", 'F'}, + {"0SK)EK", 'F'}, + {"0SK)EN", 'F'}, + {"0SK)ES", 'F'}, + {"0SK)EV", 'F'}, + {"0SK)F(", 'F'}, + {"0SK)O(", 'F'}, + {"0SK)OF", 'F'}, + {"0SK)UE", 'F'}, + {"0SK1", 'F'}, + {"0SK1&(", 'F'}, + {"0SK1&1", 'F'}, + {"0SK1&F", 'F'}, + {"0SK1&N", 'F'}, + {"0SK1&S", 'F'}, + {"0SK1&V", 'F'}, + {"0SK1;", 'F'}, + {"0SK1;C", 'F'}, + {"0SK1;E", 'F'}, + {"0SK1;T", 'F'}, + {"0SK1B(", 'F'}, + {"0SK1B1", 'F'}, + {"0SK1BF", 'F'}, + {"0SK1BN", 'F'}, + {"0SK1BS", 'F'}, + {"0SK1BV", 'F'}, + {"0SK1C", 'F'}, + {"0SK1E(", 'F'}, + {"0SK1E1", 'F'}, + {"0SK1EF", 'F'}, + {"0SK1EK", 'F'}, + {"0SK1EN", 'F'}, + {"0SK1ES", 'F'}, + {"0SK1EV", 'F'}, + {"0SK1O(", 'F'}, + {"0SK1OF", 'F'}, + {"0SK1OS", 'F'}, + {"0SK1OV", 'F'}, + {"0SK1U(", 'F'}, + {"0SK1UE", 'F'}, + {"0SKF()", 'F'}, + {"0SKF(1", 'F'}, + {"0SKF(F", 'F'}, + {"0SKF(N", 'F'}, + {"0SKF(S", 'F'}, + {"0SKF(V", 'F'}, + {"0SKN", 'F'}, + {"0SKN&(", 'F'}, + {"0SKN&1", 'F'}, + {"0SKN&F", 'F'}, + {"0SKN&N", 'F'}, + {"0SKN&S", 'F'}, + {"0SKN&V", 'F'}, + {"0SKN;", 'F'}, + {"0SKN;C", 'F'}, + {"0SKN;E", 'F'}, + {"0SKN;T", 'F'}, + {"0SKNB(", 'F'}, + {"0SKNB1", 'F'}, + {"0SKNBF", 'F'}, + {"0SKNBN", 'F'}, + {"0SKNBS", 'F'}, + {"0SKNBV", 'F'}, + {"0SKNC", 'F'}, + {"0SKNE(", 'F'}, + {"0SKNE1", 'F'}, + {"0SKNEF", 'F'}, + {"0SKNEN", 'F'}, + {"0SKNES", 'F'}, + {"0SKNEV", 'F'}, + {"0SKNU(", 'F'}, + {"0SKNUE", 'F'}, + {"0SKS", 'F'}, + {"0SKS&(", 'F'}, + {"0SKS&1", 'F'}, + {"0SKS&F", 'F'}, + {"0SKS&N", 'F'}, + {"0SKS&S", 'F'}, + {"0SKS&V", 'F'}, + {"0SKS;", 'F'}, + {"0SKS;C", 'F'}, + {"0SKS;E", 'F'}, + {"0SKS;T", 'F'}, + {"0SKSB(", 'F'}, + {"0SKSB1", 'F'}, + {"0SKSBF", 'F'}, + {"0SKSBN", 'F'}, + {"0SKSBS", 'F'}, + {"0SKSBV", 'F'}, + {"0SKSC", 'F'}, + {"0SKSE(", 'F'}, + {"0SKSE1", 'F'}, + {"0SKSEF", 'F'}, + {"0SKSEK", 'F'}, + {"0SKSEN", 'F'}, + {"0SKSES", 'F'}, + {"0SKSEV", 'F'}, + {"0SKSO(", 'F'}, + {"0SKSO1", 'F'}, + {"0SKSOF", 'F'}, + {"0SKSON", 'F'}, + {"0SKSOS", 'F'}, + {"0SKSOV", 'F'}, + {"0SKSU(", 'F'}, + {"0SKSUE", 'F'}, + {"0SKUE(", 'F'}, + {"0SKUE1", 'F'}, + {"0SKUEF", 'F'}, + {"0SKUEK", 'F'}, + {"0SKUEN", 'F'}, + {"0SKUES", 'F'}, + {"0SKUEV", 'F'}, + {"0SKV", 'F'}, + {"0SKV&(", 'F'}, + {"0SKV&1", 'F'}, + {"0SKV&F", 'F'}, + {"0SKV&N", 'F'}, + {"0SKV&S", 'F'}, + {"0SKV&V", 'F'}, + {"0SKV;", 'F'}, + {"0SKV;C", 'F'}, + {"0SKV;E", 'F'}, + {"0SKV;T", 'F'}, + {"0SKVB(", 'F'}, + {"0SKVB1", 'F'}, + {"0SKVBF", 'F'}, + {"0SKVBN", 'F'}, + {"0SKVBS", 'F'}, + {"0SKVBV", 'F'}, + {"0SKVC", 'F'}, + {"0SKVE(", 'F'}, + {"0SKVE1", 'F'}, + {"0SKVEF", 'F'}, + {"0SKVEK", 'F'}, + {"0SKVEN", 'F'}, + {"0SKVES", 'F'}, + {"0SKVEV", 'F'}, + {"0SKVO(", 'F'}, + {"0SKVOF", 'F'}, + {"0SKVOS", 'F'}, + {"0SKVU(", 'F'}, + {"0SKVUE", 'F'}, + {"0SO(1&", 'F'}, + {"0SO(1)", 'F'}, + {"0SO(1,", 'F'}, + {"0SO(1O", 'F'}, + {"0SO(E(", 'F'}, + {"0SO(E1", 'F'}, + {"0SO(EE", 'F'}, + {"0SO(EF", 'F'}, + {"0SO(EK", 'F'}, + {"0SO(EN", 'F'}, + {"0SO(EO", 'F'}, + {"0SO(ES", 'F'}, + {"0SO(EV", 'F'}, + {"0SO(F(", 'F'}, + {"0SO(N&", 'F'}, + {"0SO(N)", 'F'}, + {"0SO(N,", 'F'}, + {"0SO(NO", 'F'}, + {"0SO(S&", 'F'}, + {"0SO(S)", 'F'}, + {"0SO(S,", 'F'}, + {"0SO(SO", 'F'}, + {"0SO(V&", 'F'}, + {"0SO(V)", 'F'}, + {"0SO(V,", 'F'}, + {"0SO(VO", 'F'}, + {"0SO1&(", 'F'}, + {"0SO1&1", 'F'}, + {"0SO1&E", 'F'}, + {"0SO1&F", 'F'}, + {"0SO1&K", 'F'}, + {"0SO1&N", 'F'}, + {"0SO1&S", 'F'}, + {"0SO1&U", 'F'}, + {"0SO1&V", 'F'}, + {"0SO1(E", 'F'}, + {"0SO1(U", 'F'}, + {"0SO1)&", 'F'}, + {"0SO1),", 'F'}, + {"0SO1);", 'F'}, + {"0SO1)B", 'F'}, + {"0SO1)C", 'F'}, + {"0SO1)E", 'F'}, + {"0SO1)F", 'F'}, + {"0SO1)K", 'F'}, + {"0SO1)O", 'F'}, + {"0SO1)U", 'F'}, + {"0SO1,(", 'F'}, + {"0SO1,F", 'F'}, + {"0SO1;", 'F'}, + {"0SO1;C", 'F'}, + {"0SO1;E", 'F'}, + {"0SO1;N", 'F'}, + {"0SO1;T", 'F'}, + {"0SO1A(", 'F'}, + {"0SO1AF", 'F'}, + {"0SO1AS", 'F'}, + {"0SO1AT", 'F'}, + {"0SO1AV", 'F'}, + {"0SO1B(", 'F'}, + {"0SO1B1", 'F'}, + {"0SO1BE", 'F'}, + {"0SO1BF", 'F'}, + {"0SO1BN", 'F'}, + {"0SO1BS", 'F'}, + {"0SO1BV", 'F'}, + {"0SO1C", 'F'}, + {"0SO1E(", 'F'}, + {"0SO1E1", 'F'}, + {"0SO1EF", 'F'}, + {"0SO1EK", 'F'}, + {"0SO1EN", 'F'}, + {"0SO1EO", 'F'}, + {"0SO1ES", 'F'}, + {"0SO1EU", 'F'}, + {"0SO1EV", 'F'}, + {"0SO1F(", 'F'}, + {"0SO1K(", 'F'}, + {"0SO1K)", 'F'}, + {"0SO1K1", 'F'}, + {"0SO1KB", 'F'}, + {"0SO1KF", 'F'}, + {"0SO1KN", 'F'}, + {"0SO1KS", 'F'}, + {"0SO1KU", 'F'}, + {"0SO1KV", 'F'}, + {"0SO1N&", 'F'}, + {"0SO1N(", 'F'}, + {"0SO1N,", 'F'}, + {"0SO1NE", 'F'}, + {"0SO1NU", 'F'}, + {"0SO1SU", 'F'}, + {"0SO1SV", 'F'}, + {"0SO1T(", 'F'}, + {"0SO1T1", 'F'}, + {"0SO1TE", 'F'}, + {"0SO1TF", 'F'}, + {"0SO1TN", 'F'}, + {"0SO1TS", 'F'}, + {"0SO1TT", 'F'}, + {"0SO1TV", 'F'}, + {"0SO1U", 'F'}, + {"0SO1U(", 'F'}, + {"0SO1U1", 'F'}, + {"0SO1U;", 'F'}, + {"0SO1UC", 'F'}, + {"0SO1UE", 'F'}, + {"0SO1UF", 'F'}, + {"0SO1UK", 'F'}, + {"0SO1UO", 'F'}, + {"0SO1US", 'F'}, + {"0SO1UT", 'F'}, + {"0SO1UV", 'F'}, + {"0SO1V(", 'F'}, + {"0SO1VF", 'F'}, + {"0SO1VO", 'F'}, + {"0SO1VS", 'F'}, + {"0SO1VU", 'F'}, + {"0SOF()", 'F'}, + {"0SOF(1", 'F'}, + {"0SOF(E", 'F'}, + {"0SOF(F", 'F'}, + {"0SOF(N", 'F'}, + {"0SOF(S", 'F'}, + {"0SOF(V", 'F'}, + {"0SOK&(", 'F'}, + {"0SOK&1", 'F'}, + {"0SOK&F", 'F'}, + {"0SOK&N", 'F'}, + {"0SOK&S", 'F'}, + {"0SOK&V", 'F'}, + {"0SOK(1", 'F'}, + {"0SOK(F", 'F'}, + {"0SOK(N", 'F'}, + {"0SOK(S", 'F'}, + {"0SOK(V", 'F'}, + {"0SOK1C", 'F'}, + {"0SOK1O", 'F'}, + {"0SOKF(", 'F'}, + {"0SOKNC", 'F'}, + {"0SOKO(", 'F'}, + {"0SOKO1", 'F'}, + {"0SOKOF", 'F'}, + {"0SOKON", 'F'}, + {"0SOKOS", 'F'}, + {"0SOKOV", 'F'}, + {"0SOKSC", 'F'}, + {"0SOKSO", 'F'}, + {"0SOKVC", 'F'}, + {"0SOKVO", 'F'}, + {"0SON&(", 'F'}, + {"0SON&1", 'F'}, + {"0SON&E", 'F'}, + {"0SON&F", 'F'}, + {"0SON&K", 'F'}, + {"0SON&N", 'F'}, + {"0SON&S", 'F'}, + {"0SON&U", 'F'}, + {"0SON&V", 'F'}, + {"0SON(1", 'F'}, + {"0SON(E", 'F'}, + {"0SON(F", 'F'}, + {"0SON(S", 'F'}, + {"0SON(U", 'F'}, + {"0SON(V", 'F'}, + {"0SON)&", 'F'}, + {"0SON),", 'F'}, + {"0SON);", 'F'}, + {"0SON)B", 'F'}, + {"0SON)C", 'F'}, + {"0SON)E", 'F'}, + {"0SON)F", 'F'}, + {"0SON)K", 'F'}, + {"0SON)O", 'F'}, + {"0SON)U", 'F'}, + {"0SON,(", 'F'}, + {"0SON,F", 'F'}, + {"0SON1(", 'F'}, + {"0SON1O", 'F'}, + {"0SON1U", 'F'}, + {"0SON1V", 'F'}, + {"0SON;", 'F'}, + {"0SON;C", 'F'}, + {"0SON;E", 'F'}, + {"0SON;N", 'F'}, + {"0SON;T", 'F'}, + {"0SONA(", 'F'}, + {"0SONAF", 'F'}, + {"0SONAS", 'F'}, + {"0SONAT", 'F'}, + {"0SONAV", 'F'}, + {"0SONB(", 'F'}, + {"0SONB1", 'F'}, + {"0SONBE", 'F'}, + {"0SONBF", 'F'}, + {"0SONBN", 'F'}, + {"0SONBS", 'F'}, + {"0SONBV", 'F'}, + {"0SONE(", 'F'}, + {"0SONE1", 'F'}, + {"0SONEF", 'F'}, + {"0SONEN", 'F'}, + {"0SONEO", 'F'}, + {"0SONES", 'F'}, + {"0SONEU", 'F'}, + {"0SONEV", 'F'}, + {"0SONF(", 'F'}, + {"0SONK(", 'F'}, + {"0SONK)", 'F'}, + {"0SONK1", 'F'}, + {"0SONKB", 'F'}, + {"0SONKF", 'F'}, + {"0SONKS", 'F'}, + {"0SONKU", 'F'}, + {"0SONKV", 'F'}, + {"0SONSU", 'F'}, + {"0SONT(", 'F'}, + {"0SONT1", 'F'}, + {"0SONTE", 'F'}, + {"0SONTF", 'F'}, + {"0SONTN", 'F'}, + {"0SONTS", 'F'}, + {"0SONTT", 'F'}, + {"0SONTV", 'F'}, + {"0SONU", 'F'}, + {"0SONU(", 'F'}, + {"0SONU1", 'F'}, + {"0SONU;", 'F'}, + {"0SONUC", 'F'}, + {"0SONUE", 'F'}, + {"0SONUF", 'F'}, + {"0SONUK", 'F'}, + {"0SONUO", 'F'}, + {"0SONUS", 'F'}, + {"0SONUT", 'F'}, + {"0SONUV", 'F'}, + {"0SOS", 'F'}, + {"0SOS&(", 'F'}, + {"0SOS&1", 'F'}, + {"0SOS&E", 'F'}, + {"0SOS&F", 'F'}, + {"0SOS&K", 'F'}, + {"0SOS&N", 'F'}, + {"0SOS&S", 'F'}, + {"0SOS&U", 'F'}, + {"0SOS&V", 'F'}, + {"0SOS(E", 'F'}, + {"0SOS(U", 'F'}, + {"0SOS)&", 'F'}, + {"0SOS),", 'F'}, + {"0SOS);", 'F'}, + {"0SOS)B", 'F'}, + {"0SOS)C", 'F'}, + {"0SOS)E", 'F'}, + {"0SOS)F", 'F'}, + {"0SOS)K", 'F'}, + {"0SOS)O", 'F'}, + {"0SOS)U", 'F'}, + {"0SOS,(", 'F'}, + {"0SOS,F", 'F'}, + {"0SOS1(", 'F'}, + {"0SOS1F", 'F'}, + {"0SOS1N", 'F'}, + {"0SOS1S", 'F'}, + {"0SOS1U", 'F'}, + {"0SOS1V", 'F'}, + {"0SOS;", 'F'}, + {"0SOS;C", 'F'}, + {"0SOS;E", 'F'}, + {"0SOS;N", 'F'}, + {"0SOS;T", 'F'}, + {"0SOSA(", 'F'}, + {"0SOSAF", 'F'}, + {"0SOSAS", 'F'}, + {"0SOSAT", 'F'}, + {"0SOSAV", 'F'}, + {"0SOSB(", 'F'}, + {"0SOSB1", 'F'}, + {"0SOSBE", 'F'}, + {"0SOSBF", 'F'}, + {"0SOSBN", 'F'}, + {"0SOSBS", 'F'}, + {"0SOSBV", 'F'}, + {"0SOSC", 'F'}, + {"0SOSE(", 'F'}, + {"0SOSE1", 'F'}, + {"0SOSEF", 'F'}, + {"0SOSEK", 'F'}, + {"0SOSEN", 'F'}, + {"0SOSEO", 'F'}, + {"0SOSES", 'F'}, + {"0SOSEU", 'F'}, + {"0SOSEV", 'F'}, + {"0SOSF(", 'F'}, + {"0SOSK(", 'F'}, + {"0SOSK)", 'F'}, + {"0SOSK1", 'F'}, + {"0SOSKB", 'F'}, + {"0SOSKF", 'F'}, + {"0SOSKN", 'F'}, + {"0SOSKS", 'F'}, + {"0SOSKU", 'F'}, + {"0SOSKV", 'F'}, + {"0SOST(", 'F'}, + {"0SOST1", 'F'}, + {"0SOSTE", 'F'}, + {"0SOSTF", 'F'}, + {"0SOSTN", 'F'}, + {"0SOSTS", 'F'}, + {"0SOSTT", 'F'}, + {"0SOSTV", 'F'}, + {"0SOSU", 'F'}, + {"0SOSU(", 'F'}, + {"0SOSU1", 'F'}, + {"0SOSU;", 'F'}, + {"0SOSUC", 'F'}, + {"0SOSUE", 'F'}, + {"0SOSUF", 'F'}, + {"0SOSUK", 'F'}, + {"0SOSUO", 'F'}, + {"0SOSUS", 'F'}, + {"0SOSUT", 'F'}, + {"0SOSUV", 'F'}, + {"0SOSV(", 'F'}, + {"0SOSVF", 'F'}, + {"0SOSVO", 'F'}, + {"0SOSVS", 'F'}, + {"0SOSVU", 'F'}, + {"0SOU(E", 'F'}, + {"0SOUEK", 'F'}, + {"0SOUEN", 'F'}, + {"0SOV", 'F'}, + {"0SOV&(", 'F'}, + {"0SOV&1", 'F'}, + {"0SOV&E", 'F'}, + {"0SOV&F", 'F'}, + {"0SOV&K", 'F'}, + {"0SOV&N", 'F'}, + {"0SOV&S", 'F'}, + {"0SOV&U", 'F'}, + {"0SOV&V", 'F'}, + {"0SOV(E", 'F'}, + {"0SOV(U", 'F'}, + {"0SOV)&", 'F'}, + {"0SOV),", 'F'}, + {"0SOV);", 'F'}, + {"0SOV)B", 'F'}, + {"0SOV)C", 'F'}, + {"0SOV)E", 'F'}, + {"0SOV)F", 'F'}, + {"0SOV)K", 'F'}, + {"0SOV)O", 'F'}, + {"0SOV)U", 'F'}, + {"0SOV,(", 'F'}, + {"0SOV,F", 'F'}, + {"0SOV;", 'F'}, + {"0SOV;C", 'F'}, + {"0SOV;E", 'F'}, + {"0SOV;N", 'F'}, + {"0SOV;T", 'F'}, + {"0SOVA(", 'F'}, + {"0SOVAF", 'F'}, + {"0SOVAS", 'F'}, + {"0SOVAT", 'F'}, + {"0SOVAV", 'F'}, + {"0SOVB(", 'F'}, + {"0SOVB1", 'F'}, + {"0SOVBE", 'F'}, + {"0SOVBF", 'F'}, + {"0SOVBN", 'F'}, + {"0SOVBS", 'F'}, + {"0SOVBV", 'F'}, + {"0SOVC", 'F'}, + {"0SOVE(", 'F'}, + {"0SOVE1", 'F'}, + {"0SOVEF", 'F'}, + {"0SOVEK", 'F'}, + {"0SOVEN", 'F'}, + {"0SOVEO", 'F'}, + {"0SOVES", 'F'}, + {"0SOVEU", 'F'}, + {"0SOVEV", 'F'}, + {"0SOVF(", 'F'}, + {"0SOVK(", 'F'}, + {"0SOVK)", 'F'}, + {"0SOVK1", 'F'}, + {"0SOVKB", 'F'}, + {"0SOVKF", 'F'}, + {"0SOVKN", 'F'}, + {"0SOVKS", 'F'}, + {"0SOVKU", 'F'}, + {"0SOVKV", 'F'}, + {"0SOVO(", 'F'}, + {"0SOVOF", 'F'}, + {"0SOVOK", 'F'}, + {"0SOVOS", 'F'}, + {"0SOVOU", 'F'}, + {"0SOVS(", 'F'}, + {"0SOVS1", 'F'}, + {"0SOVSF", 'F'}, + {"0SOVSO", 'F'}, + {"0SOVSU", 'F'}, + {"0SOVSV", 'F'}, + {"0SOVT(", 'F'}, + {"0SOVT1", 'F'}, + {"0SOVTE", 'F'}, + {"0SOVTF", 'F'}, + {"0SOVTN", 'F'}, + {"0SOVTS", 'F'}, + {"0SOVTT", 'F'}, + {"0SOVTV", 'F'}, + {"0SOVU", 'F'}, + {"0SOVU(", 'F'}, + {"0SOVU1", 'F'}, + {"0SOVU;", 'F'}, + {"0SOVUC", 'F'}, + {"0SOVUE", 'F'}, + {"0SOVUF", 'F'}, + {"0SOVUK", 'F'}, + {"0SOVUO", 'F'}, + {"0SOVUS", 'F'}, + {"0SOVUT", 'F'}, + {"0SOVUV", 'F'}, + {"0ST(1)", 'F'}, + {"0ST(1O", 'F'}, + {"0ST(F(", 'F'}, + {"0ST(N)", 'F'}, + {"0ST(NO", 'F'}, + {"0ST(S)", 'F'}, + {"0ST(SO", 'F'}, + {"0ST(V)", 'F'}, + {"0ST(VO", 'F'}, + {"0ST1(F", 'F'}, + {"0ST1O(", 'F'}, + {"0ST1OF", 'F'}, + {"0ST1OS", 'F'}, + {"0ST1OV", 'F'}, + {"0STE(1", 'F'}, + {"0STE(F", 'F'}, + {"0STE(N", 'F'}, + {"0STE(S", 'F'}, + {"0STE(V", 'F'}, + {"0STE1N", 'F'}, + {"0STE1O", 'F'}, + {"0STEF(", 'F'}, + {"0STEK(", 'F'}, + {"0STEK1", 'F'}, + {"0STEKF", 'F'}, + {"0STEKN", 'F'}, + {"0STEKS", 'F'}, + {"0STEKV", 'F'}, + {"0STENN", 'F'}, + {"0STENO", 'F'}, + {"0STESN", 'F'}, + {"0STESO", 'F'}, + {"0STEVN", 'F'}, + {"0STEVO", 'F'}, + {"0STF()", 'F'}, + {"0STF(1", 'F'}, + {"0STF(F", 'F'}, + {"0STF(N", 'F'}, + {"0STF(S", 'F'}, + {"0STF(V", 'F'}, + {"0STN(1", 'F'}, + {"0STN(F", 'F'}, + {"0STN(S", 'F'}, + {"0STN(V", 'F'}, + {"0STN1C", 'F'}, + {"0STN1O", 'F'}, + {"0STN;E", 'F'}, + {"0STN;N", 'F'}, + {"0STN;T", 'F'}, + {"0STNE(", 'F'}, + {"0STNE1", 'F'}, + {"0STNEF", 'F'}, + {"0STNEN", 'F'}, + {"0STNES", 'F'}, + {"0STNEV", 'F'}, + {"0STNF(", 'F'}, + {"0STNKN", 'F'}, + {"0STNN:", 'F'}, + {"0STNNC", 'F'}, + {"0STNNO", 'F'}, + {"0STNO(", 'F'}, + {"0STNOF", 'F'}, + {"0STNOS", 'F'}, + {"0STNOV", 'F'}, + {"0STNSC", 'F'}, + {"0STNSO", 'F'}, + {"0STNT(", 'F'}, + {"0STNT1", 'F'}, + {"0STNTF", 'F'}, + {"0STNTN", 'F'}, + {"0STNTS", 'F'}, + {"0STNTV", 'F'}, + {"0STNVC", 'F'}, + {"0STNVO", 'F'}, + {"0STS(F", 'F'}, + {"0STSO(", 'F'}, + {"0STSO1", 'F'}, + {"0STSOF", 'F'}, + {"0STSON", 'F'}, + {"0STSOS", 'F'}, + {"0STSOV", 'F'}, + {"0STTNE", 'F'}, + {"0STTNK", 'F'}, + {"0STTNN", 'F'}, + {"0STTNT", 'F'}, + {"0STV(1", 'F'}, + {"0STV(F", 'F'}, + {"0STVO(", 'F'}, + {"0STVOF", 'F'}, + {"0STVOS", 'F'}, + {"0SU(1)", 'F'}, + {"0SU(1O", 'F'}, + {"0SU(E(", 'F'}, + {"0SU(E1", 'F'}, + {"0SU(EF", 'F'}, + {"0SU(EK", 'F'}, + {"0SU(EN", 'F'}, + {"0SU(ES", 'F'}, + {"0SU(EV", 'F'}, + {"0SU(F(", 'F'}, + {"0SU(N)", 'F'}, + {"0SU(NO", 'F'}, + {"0SU(S)", 'F'}, + {"0SU(SO", 'F'}, + {"0SU(V)", 'F'}, + {"0SU(VO", 'F'}, + {"0SU1,(", 'F'}, + {"0SU1,F", 'F'}, + {"0SU1C", 'F'}, + {"0SU1O(", 'F'}, + {"0SU1OF", 'F'}, + {"0SU1OS", 'F'}, + {"0SU1OV", 'F'}, + {"0SU;", 'F'}, + {"0SU;C", 'F'}, + {"0SUC", 'F'}, + {"0SUE", 'F'}, + {"0SUE(1", 'F'}, + {"0SUE(E", 'F'}, + {"0SUE(F", 'F'}, + {"0SUE(N", 'F'}, + {"0SUE(O", 'F'}, + {"0SUE(S", 'F'}, + {"0SUE(V", 'F'}, + {"0SUE1", 'F'}, + {"0SUE1&", 'F'}, + {"0SUE1(", 'F'}, + {"0SUE1)", 'F'}, + {"0SUE1,", 'F'}, + {"0SUE1;", 'F'}, + {"0SUE1B", 'F'}, + {"0SUE1C", 'F'}, + {"0SUE1F", 'F'}, + {"0SUE1K", 'F'}, + {"0SUE1N", 'F'}, + {"0SUE1O", 'F'}, + {"0SUE1S", 'F'}, + {"0SUE1U", 'F'}, + {"0SUE1V", 'F'}, + {"0SUE;", 'F'}, + {"0SUE;C", 'F'}, + {"0SUEC", 'F'}, + {"0SUEF", 'F'}, + {"0SUEF(", 'F'}, + {"0SUEF,", 'F'}, + {"0SUEF;", 'F'}, + {"0SUEFC", 'F'}, + {"0SUEK", 'F'}, + {"0SUEK(", 'F'}, + {"0SUEK1", 'F'}, + {"0SUEK;", 'F'}, + {"0SUEKC", 'F'}, + {"0SUEKF", 'F'}, + {"0SUEKN", 'F'}, + {"0SUEKO", 'F'}, + {"0SUEKS", 'F'}, + {"0SUEKV", 'F'}, + {"0SUEN", 'F'}, + {"0SUEN&", 'F'}, + {"0SUEN(", 'F'}, + {"0SUEN)", 'F'}, + {"0SUEN,", 'F'}, + {"0SUEN1", 'F'}, + {"0SUEN;", 'F'}, + {"0SUENB", 'F'}, + {"0SUENC", 'F'}, + {"0SUENF", 'F'}, + {"0SUENK", 'F'}, + {"0SUENO", 'F'}, + {"0SUENS", 'F'}, + {"0SUENU", 'F'}, + {"0SUEOK", 'F'}, + {"0SUEON", 'F'}, + {"0SUES", 'F'}, + {"0SUES&", 'F'}, + {"0SUES(", 'F'}, + {"0SUES)", 'F'}, + {"0SUES,", 'F'}, + {"0SUES1", 'F'}, + {"0SUES;", 'F'}, + {"0SUESB", 'F'}, + {"0SUESC", 'F'}, + {"0SUESF", 'F'}, + {"0SUESK", 'F'}, + {"0SUESO", 'F'}, + {"0SUESU", 'F'}, + {"0SUESV", 'F'}, + {"0SUEV", 'F'}, + {"0SUEV&", 'F'}, + {"0SUEV(", 'F'}, + {"0SUEV)", 'F'}, + {"0SUEV,", 'F'}, + {"0SUEV;", 'F'}, + {"0SUEVB", 'F'}, + {"0SUEVC", 'F'}, + {"0SUEVF", 'F'}, + {"0SUEVK", 'F'}, + {"0SUEVN", 'F'}, + {"0SUEVO", 'F'}, + {"0SUEVS", 'F'}, + {"0SUEVU", 'F'}, + {"0SUF()", 'F'}, + {"0SUF(1", 'F'}, + {"0SUF(F", 'F'}, + {"0SUF(N", 'F'}, + {"0SUF(S", 'F'}, + {"0SUF(V", 'F'}, + {"0SUK(E", 'F'}, + {"0SUO(E", 'F'}, + {"0SUON(", 'F'}, + {"0SUON1", 'F'}, + {"0SUONF", 'F'}, + {"0SUONS", 'F'}, + {"0SUS,(", 'F'}, + {"0SUS,F", 'F'}, + {"0SUSC", 'F'}, + {"0SUSO(", 'F'}, + {"0SUSO1", 'F'}, + {"0SUSOF", 'F'}, + {"0SUSON", 'F'}, + {"0SUSOS", 'F'}, + {"0SUSOV", 'F'}, + {"0SUTN(", 'F'}, + {"0SUTN1", 'F'}, + {"0SUTNF", 'F'}, + {"0SUTNN", 'F'}, + {"0SUTNS", 'F'}, + {"0SUTNV", 'F'}, + {"0SUV,(", 'F'}, + {"0SUV,F", 'F'}, + {"0SUVC", 'F'}, + {"0SUVO(", 'F'}, + {"0SUVOF", 'F'}, + {"0SUVOS", 'F'}, + {"0SVF()", 'F'}, + {"0SVF(1", 'F'}, + {"0SVF(F", 'F'}, + {"0SVF(N", 'F'}, + {"0SVF(S", 'F'}, + {"0SVF(V", 'F'}, + {"0SVO(1", 'F'}, + {"0SVO(F", 'F'}, + {"0SVO(N", 'F'}, + {"0SVO(S", 'F'}, + {"0SVO(V", 'F'}, + {"0SVOF(", 'F'}, + {"0SVOS(", 'F'}, + {"0SVOS1", 'F'}, + {"0SVOSF", 'F'}, + {"0SVOSU", 'F'}, + {"0SVOSV", 'F'}, + {"0SVS;", 'F'}, + {"0SVS;C", 'F'}, + {"0SVSC", 'F'}, + {"0SVSO(", 'F'}, + {"0SVSO1", 'F'}, + {"0SVSOF", 'F'}, + {"0SVSON", 'F'}, + {"0SVSOS", 'F'}, + {"0SVSOV", 'F'}, + {"0SVUE", 'F'}, + {"0SVUE;", 'F'}, + {"0SVUEC", 'F'}, + {"0SVUEK", 'F'}, + {"0T(1)F", 'F'}, + {"0T(1)O", 'F'}, + {"0T(1F(", 'F'}, + {"0T(1N)", 'F'}, + {"0T(1O(", 'F'}, + {"0T(1OF", 'F'}, + {"0T(1OS", 'F'}, + {"0T(1OV", 'F'}, + {"0T(1S)", 'F'}, + {"0T(1V)", 'F'}, + {"0T(1VO", 'F'}, + {"0T(F()", 'F'}, + {"0T(F(1", 'F'}, + {"0T(F(F", 'F'}, + {"0T(F(N", 'F'}, + {"0T(F(S", 'F'}, + {"0T(F(V", 'F'}, + {"0T(N(1", 'F'}, + {"0T(N(F", 'F'}, + {"0T(N(S", 'F'}, + {"0T(N(V", 'F'}, + {"0T(N)F", 'F'}, + {"0T(N)O", 'F'}, + {"0T(N1)", 'F'}, + {"0T(N1O", 'F'}, + {"0T(NF(", 'F'}, + {"0T(NN)", 'F'}, + {"0T(NNO", 'F'}, + {"0T(NO(", 'F'}, + {"0T(NOF", 'F'}, + {"0T(NOS", 'F'}, + {"0T(NOV", 'F'}, + {"0T(NS)", 'F'}, + {"0T(NSO", 'F'}, + {"0T(NV)", 'F'}, + {"0T(NVO", 'F'}, + {"0T(S)F", 'F'}, + {"0T(S)O", 'F'}, + {"0T(S1)", 'F'}, + {"0T(SF(", 'F'}, + {"0T(SN)", 'F'}, + {"0T(SNO", 'F'}, + {"0T(SO(", 'F'}, + {"0T(SO1", 'F'}, + {"0T(SOF", 'F'}, + {"0T(SON", 'F'}, + {"0T(SOS", 'F'}, + {"0T(SOV", 'F'}, + {"0T(SV)", 'F'}, + {"0T(SVO", 'F'}, + {"0T(V)F", 'F'}, + {"0T(V)O", 'F'}, + {"0T(VF(", 'F'}, + {"0T(VO(", 'F'}, + {"0T(VOF", 'F'}, + {"0T(VOS", 'F'}, + {"0T(VS)", 'F'}, + {"0T(VSO", 'F'}, + {"0T(VV)", 'F'}, + {"0T1F(1", 'F'}, + {"0T1F(F", 'F'}, + {"0T1F(N", 'F'}, + {"0T1F(S", 'F'}, + {"0T1F(V", 'F'}, + {"0T1O(1", 'F'}, + {"0T1O(F", 'F'}, + {"0T1O(N", 'F'}, + {"0T1O(S", 'F'}, + {"0T1O(V", 'F'}, + {"0T1OF(", 'F'}, + {"0T1OSF", 'F'}, + {"0T1OVF", 'F'}, + {"0T1OVO", 'F'}, + {"0TF()F", 'F'}, + {"0TF()O", 'F'}, + {"0TF(1)", 'F'}, + {"0TF(1O", 'F'}, + {"0TF(F(", 'F'}, + {"0TF(N)", 'F'}, + {"0TF(NO", 'F'}, + {"0TF(S)", 'F'}, + {"0TF(SO", 'F'}, + {"0TF(V)", 'F'}, + {"0TF(VO", 'F'}, + {"0TN(1)", 'F'}, + {"0TN(1O", 'F'}, + {"0TN(F(", 'F'}, + {"0TN(S)", 'F'}, + {"0TN(SO", 'F'}, + {"0TN(V)", 'F'}, + {"0TN(VO", 'F'}, + {"0TN1;", 'F'}, + {"0TN1;C", 'F'}, + {"0TN1O(", 'F'}, + {"0TN1OF", 'F'}, + {"0TN1OS", 'F'}, + {"0TN1OV", 'F'}, + {"0TNF()", 'F'}, + {"0TNF(1", 'F'}, + {"0TNF(F", 'F'}, + {"0TNF(N", 'F'}, + {"0TNF(S", 'F'}, + {"0TNF(V", 'F'}, + {"0TNN;", 'F'}, + {"0TNN;C", 'F'}, + {"0TNNO(", 'F'}, + {"0TNNOF", 'F'}, + {"0TNNOS", 'F'}, + {"0TNNOV", 'F'}, + {"0TNO(1", 'F'}, + {"0TNO(F", 'F'}, + {"0TNO(N", 'F'}, + {"0TNO(S", 'F'}, + {"0TNO(V", 'F'}, + {"0TNOF(", 'F'}, + {"0TNOSF", 'F'}, + {"0TNOVF", 'F'}, + {"0TNOVO", 'F'}, + {"0TNS;", 'F'}, + {"0TNS;C", 'F'}, + {"0TNSO(", 'F'}, + {"0TNSO1", 'F'}, + {"0TNSOF", 'F'}, + {"0TNSON", 'F'}, + {"0TNSOS", 'F'}, + {"0TNSOV", 'F'}, + {"0TNV;", 'F'}, + {"0TNV;C", 'F'}, + {"0TNVO(", 'F'}, + {"0TNVOF", 'F'}, + {"0TNVOS", 'F'}, + {"0TSF(1", 'F'}, + {"0TSF(F", 'F'}, + {"0TSF(N", 'F'}, + {"0TSF(S", 'F'}, + {"0TSF(V", 'F'}, + {"0TSO(1", 'F'}, + {"0TSO(F", 'F'}, + {"0TSO(N", 'F'}, + {"0TSO(S", 'F'}, + {"0TSO(V", 'F'}, + {"0TSO1F", 'F'}, + {"0TSOF(", 'F'}, + {"0TSONF", 'F'}, + {"0TSOSF", 'F'}, + {"0TSOVF", 'F'}, + {"0TSOVO", 'F'}, + {"0TVF(1", 'F'}, + {"0TVF(F", 'F'}, + {"0TVF(N", 'F'}, + {"0TVF(S", 'F'}, + {"0TVF(V", 'F'}, + {"0TVO(1", 'F'}, + {"0TVO(F", 'F'}, + {"0TVO(N", 'F'}, + {"0TVO(S", 'F'}, + {"0TVO(V", 'F'}, + {"0TVOF(", 'F'}, + {"0TVOSF", 'F'}, + {"0U(E(1", 'F'}, + {"0U(E(F", 'F'}, + {"0U(E(K", 'F'}, + {"0U(E(N", 'F'}, + {"0U(E(S", 'F'}, + {"0U(E(V", 'F'}, + {"0U(E1)", 'F'}, + {"0U(E1O", 'F'}, + {"0U(EF(", 'F'}, + {"0U(EK(", 'F'}, + {"0U(EK1", 'F'}, + {"0U(EKF", 'F'}, + {"0U(EKN", 'F'}, + {"0U(EKO", 'F'}, + {"0U(EKS", 'F'}, + {"0U(EKV", 'F'}, + {"0U(EN)", 'F'}, + {"0U(ENK", 'F'}, + {"0U(ENO", 'F'}, + {"0U(EOK", 'F'}, + {"0U(ES)", 'F'}, + {"0U(ESO", 'F'}, + {"0U(EV)", 'F'}, + {"0U(EVO", 'F'}, + {"0UE(1)", 'F'}, + {"0UE(1,", 'F'}, + {"0UE(1O", 'F'}, + {"0UE(F(", 'F'}, + {"0UE(N)", 'F'}, + {"0UE(N,", 'F'}, + {"0UE(NO", 'F'}, + {"0UE(S)", 'F'}, + {"0UE(S,", 'F'}, + {"0UE(SO", 'F'}, + {"0UE(V)", 'F'}, + {"0UE(V,", 'F'}, + {"0UE(VO", 'F'}, + {"0UE1", 'F'}, + {"0UE1,(", 'F'}, + {"0UE1,F", 'F'}, + {"0UE1;", 'F'}, + {"0UE1;C", 'F'}, + {"0UE1C", 'F'}, + {"0UE1K(", 'F'}, + {"0UE1K1", 'F'}, + {"0UE1KF", 'F'}, + {"0UE1KN", 'F'}, + {"0UE1KS", 'F'}, + {"0UE1KV", 'F'}, + {"0UE1O(", 'F'}, + {"0UE1OF", 'F'}, + {"0UE1OS", 'F'}, + {"0UE1OV", 'F'}, + {"0UEF()", 'F'}, + {"0UEF(1", 'F'}, + {"0UEF(F", 'F'}, + {"0UEF(N", 'F'}, + {"0UEF(S", 'F'}, + {"0UEF(V", 'F'}, + {"0UEK(1", 'F'}, + {"0UEK(F", 'F'}, + {"0UEK(N", 'F'}, + {"0UEK(S", 'F'}, + {"0UEK(V", 'F'}, + {"0UEK1", 'F'}, + {"0UEK1,", 'F'}, + {"0UEK1;", 'F'}, + {"0UEK1C", 'F'}, + {"0UEK1K", 'F'}, + {"0UEK1O", 'F'}, + {"0UEKF(", 'F'}, + {"0UEKN", 'F'}, + {"0UEKN(", 'F'}, + {"0UEKN,", 'F'}, + {"0UEKN;", 'F'}, + {"0UEKNC", 'F'}, + {"0UEKNK", 'F'}, + {"0UEKS", 'F'}, + {"0UEKS,", 'F'}, + {"0UEKS;", 'F'}, + {"0UEKSC", 'F'}, + {"0UEKSK", 'F'}, + {"0UEKSO", 'F'}, + {"0UEKV", 'F'}, + {"0UEKV,", 'F'}, + {"0UEKV;", 'F'}, + {"0UEKVC", 'F'}, + {"0UEKVK", 'F'}, + {"0UEKVO", 'F'}, + {"0UEN()", 'F'}, + {"0UEN,(", 'F'}, + {"0UEN,F", 'F'}, + {"0UEN;", 'F'}, + {"0UEN;C", 'F'}, + {"0UENC", 'F'}, + {"0UENK(", 'F'}, + {"0UENK1", 'F'}, + {"0UENKF", 'F'}, + {"0UENKN", 'F'}, + {"0UENKS", 'F'}, + {"0UENKV", 'F'}, + {"0UENO(", 'F'}, + {"0UENOF", 'F'}, + {"0UENOS", 'F'}, + {"0UENOV", 'F'}, + {"0UES", 'F'}, + {"0UES,(", 'F'}, + {"0UES,F", 'F'}, + {"0UES;", 'F'}, + {"0UES;C", 'F'}, + {"0UESC", 'F'}, + {"0UESK(", 'F'}, + {"0UESK1", 'F'}, + {"0UESKF", 'F'}, + {"0UESKN", 'F'}, + {"0UESKS", 'F'}, + {"0UESKV", 'F'}, + {"0UESO(", 'F'}, + {"0UESO1", 'F'}, + {"0UESOF", 'F'}, + {"0UESON", 'F'}, + {"0UESOS", 'F'}, + {"0UESOV", 'F'}, + {"0UEV", 'F'}, + {"0UEV,(", 'F'}, + {"0UEV,F", 'F'}, + {"0UEV;", 'F'}, + {"0UEV;C", 'F'}, + {"0UEVC", 'F'}, + {"0UEVK(", 'F'}, + {"0UEVK1", 'F'}, + {"0UEVKF", 'F'}, + {"0UEVKN", 'F'}, + {"0UEVKS", 'F'}, + {"0UEVKV", 'F'}, + {"0UEVO(", 'F'}, + {"0UEVOF", 'F'}, + {"0UEVOS", 'F'}, + {"0UF(1O", 'F'}, + {"0UF(F(", 'F'}, + {"0UF(NO", 'F'}, + {"0UF(SO", 'F'}, + {"0UF(VO", 'F'}, + {"0V&(1&", 'F'}, + {"0V&(1)", 'F'}, + {"0V&(1,", 'F'}, + {"0V&(1O", 'F'}, + {"0V&(E(", 'F'}, + {"0V&(E1", 'F'}, + {"0V&(EF", 'F'}, + {"0V&(EK", 'F'}, + {"0V&(EN", 'F'}, + {"0V&(EO", 'F'}, + {"0V&(ES", 'F'}, + {"0V&(EV", 'F'}, + {"0V&(F(", 'F'}, + {"0V&(N&", 'F'}, + {"0V&(N)", 'F'}, + {"0V&(N,", 'F'}, + {"0V&(NO", 'F'}, + {"0V&(S&", 'F'}, + {"0V&(S)", 'F'}, + {"0V&(S,", 'F'}, + {"0V&(SO", 'F'}, + {"0V&(V&", 'F'}, + {"0V&(V)", 'F'}, + {"0V&(V,", 'F'}, + {"0V&(VO", 'F'}, + {"0V&1", 'F'}, + {"0V&1&(", 'F'}, + {"0V&1&1", 'F'}, + {"0V&1&F", 'F'}, + {"0V&1&N", 'F'}, + {"0V&1&S", 'F'}, + {"0V&1&V", 'F'}, + {"0V&1)&", 'F'}, + {"0V&1)C", 'F'}, + {"0V&1)O", 'F'}, + {"0V&1)U", 'F'}, + {"0V&1;", 'F'}, + {"0V&1;C", 'F'}, + {"0V&1;E", 'F'}, + {"0V&1;T", 'F'}, + {"0V&1B(", 'F'}, + {"0V&1B1", 'F'}, + {"0V&1BF", 'F'}, + {"0V&1BN", 'F'}, + {"0V&1BS", 'F'}, + {"0V&1BV", 'F'}, + {"0V&1C", 'F'}, + {"0V&1EK", 'F'}, + {"0V&1EN", 'F'}, + {"0V&1F(", 'F'}, + {"0V&1K(", 'F'}, + {"0V&1K1", 'F'}, + {"0V&1KF", 'F'}, + {"0V&1KN", 'F'}, + {"0V&1KS", 'F'}, + {"0V&1KV", 'F'}, + {"0V&1O(", 'F'}, + {"0V&1OF", 'F'}, + {"0V&1OS", 'F'}, + {"0V&1OV", 'F'}, + {"0V&1TN", 'F'}, + {"0V&1U", 'F'}, + {"0V&1U(", 'F'}, + {"0V&1U;", 'F'}, + {"0V&1UC", 'F'}, + {"0V&1UE", 'F'}, + {"0V&E(1", 'F'}, + {"0V&E(F", 'F'}, + {"0V&E(N", 'F'}, + {"0V&E(O", 'F'}, + {"0V&E(S", 'F'}, + {"0V&E(V", 'F'}, + {"0V&E1", 'F'}, + {"0V&E1;", 'F'}, + {"0V&E1C", 'F'}, + {"0V&E1K", 'F'}, + {"0V&E1O", 'F'}, + {"0V&EF(", 'F'}, + {"0V&EK(", 'F'}, + {"0V&EK1", 'F'}, + {"0V&EKF", 'F'}, + {"0V&EKN", 'F'}, + {"0V&EKS", 'F'}, + {"0V&EKV", 'F'}, + {"0V&EN", 'F'}, + {"0V&EN;", 'F'}, + {"0V&ENC", 'F'}, + {"0V&ENK", 'F'}, + {"0V&ENO", 'F'}, + {"0V&ES", 'F'}, + {"0V&ES;", 'F'}, + {"0V&ESC", 'F'}, + {"0V&ESK", 'F'}, + {"0V&ESO", 'F'}, + {"0V&EV", 'F'}, + {"0V&EV;", 'F'}, + {"0V&EVC", 'F'}, + {"0V&EVK", 'F'}, + {"0V&EVO", 'F'}, + {"0V&F()", 'F'}, + {"0V&F(1", 'F'}, + {"0V&F(E", 'F'}, + {"0V&F(F", 'F'}, + {"0V&F(N", 'F'}, + {"0V&F(S", 'F'}, + {"0V&F(V", 'F'}, + {"0V&K&(", 'F'}, + {"0V&K&1", 'F'}, + {"0V&K&F", 'F'}, + {"0V&K&N", 'F'}, + {"0V&K&S", 'F'}, + {"0V&K&V", 'F'}, + {"0V&K(1", 'F'}, + {"0V&K(F", 'F'}, + {"0V&K(N", 'F'}, + {"0V&K(S", 'F'}, + {"0V&K(V", 'F'}, + {"0V&K1O", 'F'}, + {"0V&KC", 'F'}, + {"0V&KF(", 'F'}, + {"0V&KNK", 'F'}, + {"0V&KO(", 'F'}, + {"0V&KO1", 'F'}, + {"0V&KOF", 'F'}, + {"0V&KOK", 'F'}, + {"0V&KON", 'F'}, + {"0V&KOS", 'F'}, + {"0V&KOV", 'F'}, + {"0V&KSO", 'F'}, + {"0V&KVO", 'F'}, + {"0V&N", 'F'}, + {"0V&N&(", 'F'}, + {"0V&N&1", 'F'}, + {"0V&N&F", 'F'}, + {"0V&N&N", 'F'}, + {"0V&N&S", 'F'}, + {"0V&N&V", 'F'}, + {"0V&N)&", 'F'}, + {"0V&N)C", 'F'}, + {"0V&N)O", 'F'}, + {"0V&N)U", 'F'}, + {"0V&N;", 'F'}, + {"0V&N;C", 'F'}, + {"0V&N;E", 'F'}, + {"0V&N;T", 'F'}, + {"0V&NB(", 'F'}, + {"0V&NB1", 'F'}, + {"0V&NBF", 'F'}, + {"0V&NBN", 'F'}, + {"0V&NBS", 'F'}, + {"0V&NBV", 'F'}, + {"0V&NC", 'F'}, + {"0V&NEN", 'F'}, + {"0V&NF(", 'F'}, + {"0V&NK(", 'F'}, + {"0V&NK1", 'F'}, + {"0V&NKF", 'F'}, + {"0V&NKN", 'F'}, + {"0V&NKS", 'F'}, + {"0V&NKV", 'F'}, + {"0V&NO(", 'F'}, + {"0V&NOF", 'F'}, + {"0V&NOS", 'F'}, + {"0V&NOV", 'F'}, + {"0V&NTN", 'F'}, + {"0V&NU", 'F'}, + {"0V&NU(", 'F'}, + {"0V&NU;", 'F'}, + {"0V&NUC", 'F'}, + {"0V&NUE", 'F'}, + {"0V&S", 'F'}, + {"0V&S&(", 'F'}, + {"0V&S&1", 'F'}, + {"0V&S&F", 'F'}, + {"0V&S&N", 'F'}, + {"0V&S&S", 'F'}, + {"0V&S&V", 'F'}, + {"0V&S)&", 'F'}, + {"0V&S)C", 'F'}, + {"0V&S)O", 'F'}, + {"0V&S)U", 'F'}, + {"0V&S1", 'F'}, + {"0V&S1;", 'F'}, + {"0V&S1C", 'F'}, + {"0V&S;", 'F'}, + {"0V&S;C", 'F'}, + {"0V&S;E", 'F'}, + {"0V&S;T", 'F'}, + {"0V&SB(", 'F'}, + {"0V&SB1", 'F'}, + {"0V&SBF", 'F'}, + {"0V&SBN", 'F'}, + {"0V&SBS", 'F'}, + {"0V&SBV", 'F'}, + {"0V&SC", 'F'}, + {"0V&SEK", 'F'}, + {"0V&SEN", 'F'}, + {"0V&SF(", 'F'}, + {"0V&SK(", 'F'}, + {"0V&SK1", 'F'}, + {"0V&SKF", 'F'}, + {"0V&SKN", 'F'}, + {"0V&SKS", 'F'}, + {"0V&SKV", 'F'}, + {"0V&SO(", 'F'}, + {"0V&SO1", 'F'}, + {"0V&SOF", 'F'}, + {"0V&SON", 'F'}, + {"0V&SOS", 'F'}, + {"0V&SOV", 'F'}, + {"0V&STN", 'F'}, + {"0V&SU", 'F'}, + {"0V&SU(", 'F'}, + {"0V&SU;", 'F'}, + {"0V&SUC", 'F'}, + {"0V&SUE", 'F'}, + {"0V&SV", 'F'}, + {"0V&SV;", 'F'}, + {"0V&SVC", 'F'}, + {"0V&SVO", 'F'}, + {"0V&V", 'F'}, + {"0V&V&(", 'F'}, + {"0V&V&1", 'F'}, + {"0V&V&F", 'F'}, + {"0V&V&N", 'F'}, + {"0V&V&S", 'F'}, + {"0V&V&V", 'F'}, + {"0V&V)&", 'F'}, + {"0V&V)C", 'F'}, + {"0V&V)O", 'F'}, + {"0V&V)U", 'F'}, + {"0V&V;", 'F'}, + {"0V&V;C", 'F'}, + {"0V&V;E", 'F'}, + {"0V&V;T", 'F'}, + {"0V&VB(", 'F'}, + {"0V&VB1", 'F'}, + {"0V&VBF", 'F'}, + {"0V&VBN", 'F'}, + {"0V&VBS", 'F'}, + {"0V&VBV", 'F'}, + {"0V&VC", 'F'}, + {"0V&VEK", 'F'}, + {"0V&VEN", 'F'}, + {"0V&VF(", 'F'}, + {"0V&VK(", 'F'}, + {"0V&VK1", 'F'}, + {"0V&VKF", 'F'}, + {"0V&VKN", 'F'}, + {"0V&VKS", 'F'}, + {"0V&VKV", 'F'}, + {"0V&VO(", 'F'}, + {"0V&VOF", 'F'}, + {"0V&VOS", 'F'}, + {"0V&VS", 'F'}, + {"0V&VS;", 'F'}, + {"0V&VSC", 'F'}, + {"0V&VSO", 'F'}, + {"0V&VTN", 'F'}, + {"0V&VU", 'F'}, + {"0V&VU(", 'F'}, + {"0V&VU;", 'F'}, + {"0V&VUC", 'F'}, + {"0V&VUE", 'F'}, + {"0V(EF(", 'F'}, + {"0V(EKF", 'F'}, + {"0V(EKN", 'F'}, + {"0V(ENK", 'F'}, + {"0V(U(E", 'F'}, + {"0V)&(1", 'F'}, + {"0V)&(E", 'F'}, + {"0V)&(F", 'F'}, + {"0V)&(N", 'F'}, + {"0V)&(S", 'F'}, + {"0V)&(V", 'F'}, + {"0V)&1", 'F'}, + {"0V)&1&", 'F'}, + {"0V)&1)", 'F'}, + {"0V)&1;", 'F'}, + {"0V)&1B", 'F'}, + {"0V)&1C", 'F'}, + {"0V)&1F", 'F'}, + {"0V)&1O", 'F'}, + {"0V)&1U", 'F'}, + {"0V)&F(", 'F'}, + {"0V)&N", 'F'}, + {"0V)&N&", 'F'}, + {"0V)&N)", 'F'}, + {"0V)&N;", 'F'}, + {"0V)&NB", 'F'}, + {"0V)&NC", 'F'}, + {"0V)&NF", 'F'}, + {"0V)&NO", 'F'}, + {"0V)&NU", 'F'}, + {"0V)&S", 'F'}, + {"0V)&S&", 'F'}, + {"0V)&S)", 'F'}, + {"0V)&S;", 'F'}, + {"0V)&SB", 'F'}, + {"0V)&SC", 'F'}, + {"0V)&SF", 'F'}, + {"0V)&SO", 'F'}, + {"0V)&SU", 'F'}, + {"0V)&V", 'F'}, + {"0V)&V&", 'F'}, + {"0V)&V)", 'F'}, + {"0V)&V;", 'F'}, + {"0V)&VB", 'F'}, + {"0V)&VC", 'F'}, + {"0V)&VF", 'F'}, + {"0V)&VO", 'F'}, + {"0V)&VU", 'F'}, + {"0V),(1", 'F'}, + {"0V),(F", 'F'}, + {"0V),(N", 'F'}, + {"0V),(S", 'F'}, + {"0V),(V", 'F'}, + {"0V);E(", 'F'}, + {"0V);E1", 'F'}, + {"0V);EF", 'F'}, + {"0V);EK", 'F'}, + {"0V);EN", 'F'}, + {"0V);EO", 'F'}, + {"0V);ES", 'F'}, + {"0V);EV", 'F'}, + {"0V);T(", 'F'}, + {"0V);T1", 'F'}, + {"0V);TF", 'F'}, + {"0V);TK", 'F'}, + {"0V);TN", 'F'}, + {"0V);TO", 'F'}, + {"0V);TS", 'F'}, + {"0V);TV", 'F'}, + {"0V)B(1", 'F'}, + {"0V)B(F", 'F'}, + {"0V)B(N", 'F'}, + {"0V)B(S", 'F'}, + {"0V)B(V", 'F'}, + {"0V)B1", 'F'}, + {"0V)B1&", 'F'}, + {"0V)B1;", 'F'}, + {"0V)B1C", 'F'}, + {"0V)B1K", 'F'}, + {"0V)B1N", 'F'}, + {"0V)B1O", 'F'}, + {"0V)B1U", 'F'}, + {"0V)BF(", 'F'}, + {"0V)BN", 'F'}, + {"0V)BN&", 'F'}, + {"0V)BN;", 'F'}, + {"0V)BNC", 'F'}, + {"0V)BNK", 'F'}, + {"0V)BNO", 'F'}, + {"0V)BNU", 'F'}, + {"0V)BS", 'F'}, + {"0V)BS&", 'F'}, + {"0V)BS;", 'F'}, + {"0V)BSC", 'F'}, + {"0V)BSK", 'F'}, + {"0V)BSO", 'F'}, + {"0V)BSU", 'F'}, + {"0V)BV", 'F'}, + {"0V)BV&", 'F'}, + {"0V)BV;", 'F'}, + {"0V)BVC", 'F'}, + {"0V)BVK", 'F'}, + {"0V)BVO", 'F'}, + {"0V)BVU", 'F'}, + {"0V)C", 'F'}, + {"0V)E(1", 'F'}, + {"0V)E(F", 'F'}, + {"0V)E(N", 'F'}, + {"0V)E(S", 'F'}, + {"0V)E(V", 'F'}, + {"0V)E1C", 'F'}, + {"0V)E1O", 'F'}, + {"0V)EF(", 'F'}, + {"0V)EK(", 'F'}, + {"0V)EK1", 'F'}, + {"0V)EKF", 'F'}, + {"0V)EKN", 'F'}, + {"0V)EKS", 'F'}, + {"0V)EKV", 'F'}, + {"0V)ENC", 'F'}, + {"0V)ENO", 'F'}, + {"0V)ESC", 'F'}, + {"0V)ESO", 'F'}, + {"0V)EVC", 'F'}, + {"0V)EVO", 'F'}, + {"0V)F(F", 'F'}, + {"0V)K(1", 'F'}, + {"0V)K(F", 'F'}, + {"0V)K(N", 'F'}, + {"0V)K(S", 'F'}, + {"0V)K(V", 'F'}, + {"0V)K1&", 'F'}, + {"0V)K1;", 'F'}, + {"0V)K1B", 'F'}, + {"0V)K1E", 'F'}, + {"0V)K1O", 'F'}, + {"0V)K1U", 'F'}, + {"0V)KB(", 'F'}, + {"0V)KB1", 'F'}, + {"0V)KBF", 'F'}, + {"0V)KBN", 'F'}, + {"0V)KBS", 'F'}, + {"0V)KBV", 'F'}, + {"0V)KF(", 'F'}, + {"0V)KN&", 'F'}, + {"0V)KN;", 'F'}, + {"0V)KNB", 'F'}, + {"0V)KNC", 'F'}, + {"0V)KNE", 'F'}, + {"0V)KNK", 'F'}, + {"0V)KNU", 'F'}, + {"0V)KS&", 'F'}, + {"0V)KS;", 'F'}, + {"0V)KSB", 'F'}, + {"0V)KSE", 'F'}, + {"0V)KSO", 'F'}, + {"0V)KSU", 'F'}, + {"0V)KUE", 'F'}, + {"0V)KV&", 'F'}, + {"0V)KV;", 'F'}, + {"0V)KVB", 'F'}, + {"0V)KVE", 'F'}, + {"0V)KVO", 'F'}, + {"0V)KVU", 'F'}, + {"0V)O(1", 'F'}, + {"0V)O(E", 'F'}, + {"0V)O(F", 'F'}, + {"0V)O(N", 'F'}, + {"0V)O(S", 'F'}, + {"0V)O(V", 'F'}, + {"0V)O1", 'F'}, + {"0V)O1&", 'F'}, + {"0V)O1)", 'F'}, + {"0V)O1;", 'F'}, + {"0V)O1B", 'F'}, + {"0V)O1C", 'F'}, + {"0V)O1K", 'F'}, + {"0V)O1U", 'F'}, + {"0V)OF(", 'F'}, + {"0V)ON", 'F'}, + {"0V)ON&", 'F'}, + {"0V)ON)", 'F'}, + {"0V)ON;", 'F'}, + {"0V)ONB", 'F'}, + {"0V)ONC", 'F'}, + {"0V)ONK", 'F'}, + {"0V)ONU", 'F'}, + {"0V)OS", 'F'}, + {"0V)OS&", 'F'}, + {"0V)OS)", 'F'}, + {"0V)OS;", 'F'}, + {"0V)OSB", 'F'}, + {"0V)OSC", 'F'}, + {"0V)OSK", 'F'}, + {"0V)OSU", 'F'}, + {"0V)OV", 'F'}, + {"0V)OV&", 'F'}, + {"0V)OV)", 'F'}, + {"0V)OV;", 'F'}, + {"0V)OVB", 'F'}, + {"0V)OVC", 'F'}, + {"0V)OVK", 'F'}, + {"0V)OVO", 'F'}, + {"0V)OVU", 'F'}, + {"0V)U(E", 'F'}, + {"0V)UE(", 'F'}, + {"0V)UE1", 'F'}, + {"0V)UEF", 'F'}, + {"0V)UEK", 'F'}, + {"0V)UEN", 'F'}, + {"0V)UES", 'F'}, + {"0V)UEV", 'F'}, + {"0V,(1)", 'F'}, + {"0V,(1O", 'F'}, + {"0V,(E(", 'F'}, + {"0V,(E1", 'F'}, + {"0V,(EF", 'F'}, + {"0V,(EK", 'F'}, + {"0V,(EN", 'F'}, + {"0V,(ES", 'F'}, + {"0V,(EV", 'F'}, + {"0V,(F(", 'F'}, + {"0V,(N)", 'F'}, + {"0V,(NO", 'F'}, + {"0V,(S)", 'F'}, + {"0V,(SO", 'F'}, + {"0V,(V)", 'F'}, + {"0V,(VO", 'F'}, + {"0V,F()", 'F'}, + {"0V,F(1", 'F'}, + {"0V,F(F", 'F'}, + {"0V,F(N", 'F'}, + {"0V,F(S", 'F'}, + {"0V,F(V", 'F'}, + {"0V;E(1", 'F'}, + {"0V;E(E", 'F'}, + {"0V;E(F", 'F'}, + {"0V;E(N", 'F'}, + {"0V;E(S", 'F'}, + {"0V;E(V", 'F'}, + {"0V;E1,", 'F'}, + {"0V;E1;", 'F'}, + {"0V;E1C", 'F'}, + {"0V;E1K", 'F'}, + {"0V;E1O", 'F'}, + {"0V;E1T", 'F'}, + {"0V;EF(", 'F'}, + {"0V;EK(", 'F'}, + {"0V;EK1", 'F'}, + {"0V;EKF", 'F'}, + {"0V;EKN", 'F'}, + {"0V;EKO", 'F'}, + {"0V;EKS", 'F'}, + {"0V;EKV", 'F'}, + {"0V;EN,", 'F'}, + {"0V;EN;", 'F'}, + {"0V;ENC", 'F'}, + {"0V;ENE", 'F'}, + {"0V;ENK", 'F'}, + {"0V;ENO", 'F'}, + {"0V;ENT", 'F'}, + {"0V;ES,", 'F'}, + {"0V;ES;", 'F'}, + {"0V;ESC", 'F'}, + {"0V;ESK", 'F'}, + {"0V;ESO", 'F'}, + {"0V;EST", 'F'}, + {"0V;EV,", 'F'}, + {"0V;EV;", 'F'}, + {"0V;EVC", 'F'}, + {"0V;EVK", 'F'}, + {"0V;EVO", 'F'}, + {"0V;EVT", 'F'}, + {"0V;N:T", 'F'}, + {"0V;T(1", 'F'}, + {"0V;T(C", 'F'}, + {"0V;T(E", 'F'}, + {"0V;T(F", 'F'}, + {"0V;T(N", 'F'}, + {"0V;T(S", 'F'}, + {"0V;T(V", 'F'}, + {"0V;T1(", 'F'}, + {"0V;T1,", 'F'}, + {"0V;T1;", 'F'}, + {"0V;T1C", 'F'}, + {"0V;T1F", 'F'}, + {"0V;T1K", 'F'}, + {"0V;T1O", 'F'}, + {"0V;T1T", 'F'}, + {"0V;T;", 'F'}, + {"0V;T;C", 'F'}, + {"0V;TF(", 'F'}, + {"0V;TK(", 'F'}, + {"0V;TK1", 'F'}, + {"0V;TKF", 'F'}, + {"0V;TKK", 'F'}, + {"0V;TKN", 'F'}, + {"0V;TKO", 'F'}, + {"0V;TKS", 'F'}, + {"0V;TKV", 'F'}, + {"0V;TN(", 'F'}, + {"0V;TN,", 'F'}, + {"0V;TN1", 'F'}, + {"0V;TN;", 'F'}, + {"0V;TNC", 'F'}, + {"0V;TNE", 'F'}, + {"0V;TNF", 'F'}, + {"0V;TNK", 'F'}, + {"0V;TNN", 'F'}, + {"0V;TNO", 'F'}, + {"0V;TNS", 'F'}, + {"0V;TNT", 'F'}, + {"0V;TNV", 'F'}, + {"0V;TO(", 'F'}, + {"0V;TS(", 'F'}, + {"0V;TS,", 'F'}, + {"0V;TS;", 'F'}, + {"0V;TSC", 'F'}, + {"0V;TSF", 'F'}, + {"0V;TSK", 'F'}, + {"0V;TSO", 'F'}, + {"0V;TST", 'F'}, + {"0V;TTN", 'F'}, + {"0V;TV(", 'F'}, + {"0V;TV,", 'F'}, + {"0V;TV;", 'F'}, + {"0V;TVC", 'F'}, + {"0V;TVF", 'F'}, + {"0V;TVK", 'F'}, + {"0V;TVO", 'F'}, + {"0V;TVT", 'F'}, + {"0VA(F(", 'F'}, + {"0VA(N)", 'F'}, + {"0VA(NO", 'F'}, + {"0VA(S)", 'F'}, + {"0VA(SO", 'F'}, + {"0VA(V)", 'F'}, + {"0VA(VO", 'F'}, + {"0VAF()", 'F'}, + {"0VAF(1", 'F'}, + {"0VAF(F", 'F'}, + {"0VAF(N", 'F'}, + {"0VAF(S", 'F'}, + {"0VAF(V", 'F'}, + {"0VASO(", 'F'}, + {"0VASO1", 'F'}, + {"0VASOF", 'F'}, + {"0VASON", 'F'}, + {"0VASOS", 'F'}, + {"0VASOV", 'F'}, + {"0VASUE", 'F'}, + {"0VATO(", 'F'}, + {"0VATO1", 'F'}, + {"0VATOF", 'F'}, + {"0VATON", 'F'}, + {"0VATOS", 'F'}, + {"0VATOV", 'F'}, + {"0VATUE", 'F'}, + {"0VAVO(", 'F'}, + {"0VAVOF", 'F'}, + {"0VAVOS", 'F'}, + {"0VAVUE", 'F'}, + {"0VB(1)", 'F'}, + {"0VB(1O", 'F'}, + {"0VB(F(", 'F'}, + {"0VB(NO", 'F'}, + {"0VB(S)", 'F'}, + {"0VB(SO", 'F'}, + {"0VB(V)", 'F'}, + {"0VB(VO", 'F'}, + {"0VB1", 'F'}, + {"0VB1&(", 'F'}, + {"0VB1&1", 'F'}, + {"0VB1&F", 'F'}, + {"0VB1&N", 'F'}, + {"0VB1&S", 'F'}, + {"0VB1&V", 'F'}, + {"0VB1,(", 'F'}, + {"0VB1,F", 'F'}, + {"0VB1;", 'F'}, + {"0VB1;C", 'F'}, + {"0VB1B(", 'F'}, + {"0VB1B1", 'F'}, + {"0VB1BF", 'F'}, + {"0VB1BN", 'F'}, + {"0VB1BS", 'F'}, + {"0VB1BV", 'F'}, + {"0VB1C", 'F'}, + {"0VB1K(", 'F'}, + {"0VB1K1", 'F'}, + {"0VB1KF", 'F'}, + {"0VB1KN", 'F'}, + {"0VB1KS", 'F'}, + {"0VB1KV", 'F'}, + {"0VB1O(", 'F'}, + {"0VB1OF", 'F'}, + {"0VB1OS", 'F'}, + {"0VB1OV", 'F'}, + {"0VB1U(", 'F'}, + {"0VB1UE", 'F'}, + {"0VBE(1", 'F'}, + {"0VBE(F", 'F'}, + {"0VBE(N", 'F'}, + {"0VBE(S", 'F'}, + {"0VBE(V", 'F'}, + {"0VBEK(", 'F'}, + {"0VBF()", 'F'}, + {"0VBF(1", 'F'}, + {"0VBF(F", 'F'}, + {"0VBF(N", 'F'}, + {"0VBF(S", 'F'}, + {"0VBF(V", 'F'}, + {"0VBN", 'F'}, + {"0VBN&(", 'F'}, + {"0VBN&1", 'F'}, + {"0VBN&F", 'F'}, + {"0VBN&N", 'F'}, + {"0VBN&S", 'F'}, + {"0VBN&V", 'F'}, + {"0VBN,(", 'F'}, + {"0VBN,F", 'F'}, + {"0VBN;", 'F'}, + {"0VBN;C", 'F'}, + {"0VBNB(", 'F'}, + {"0VBNB1", 'F'}, + {"0VBNBF", 'F'}, + {"0VBNBN", 'F'}, + {"0VBNBS", 'F'}, + {"0VBNBV", 'F'}, + {"0VBNC", 'F'}, + {"0VBNK(", 'F'}, + {"0VBNK1", 'F'}, + {"0VBNKF", 'F'}, + {"0VBNKN", 'F'}, + {"0VBNKS", 'F'}, + {"0VBNKV", 'F'}, + {"0VBNO(", 'F'}, + {"0VBNOF", 'F'}, + {"0VBNOS", 'F'}, + {"0VBNOV", 'F'}, + {"0VBNU(", 'F'}, + {"0VBNUE", 'F'}, + {"0VBS", 'F'}, + {"0VBS&(", 'F'}, + {"0VBS&1", 'F'}, + {"0VBS&F", 'F'}, + {"0VBS&N", 'F'}, + {"0VBS&S", 'F'}, + {"0VBS&V", 'F'}, + {"0VBS,(", 'F'}, + {"0VBS,F", 'F'}, + {"0VBS;", 'F'}, + {"0VBS;C", 'F'}, + {"0VBSB(", 'F'}, + {"0VBSB1", 'F'}, + {"0VBSBF", 'F'}, + {"0VBSBN", 'F'}, + {"0VBSBS", 'F'}, + {"0VBSBV", 'F'}, + {"0VBSC", 'F'}, + {"0VBSK(", 'F'}, + {"0VBSK1", 'F'}, + {"0VBSKF", 'F'}, + {"0VBSKN", 'F'}, + {"0VBSKS", 'F'}, + {"0VBSKV", 'F'}, + {"0VBSO(", 'F'}, + {"0VBSO1", 'F'}, + {"0VBSOF", 'F'}, + {"0VBSON", 'F'}, + {"0VBSOS", 'F'}, + {"0VBSOV", 'F'}, + {"0VBSU(", 'F'}, + {"0VBSUE", 'F'}, + {"0VBV", 'F'}, + {"0VBV&(", 'F'}, + {"0VBV&1", 'F'}, + {"0VBV&F", 'F'}, + {"0VBV&N", 'F'}, + {"0VBV&S", 'F'}, + {"0VBV&V", 'F'}, + {"0VBV,(", 'F'}, + {"0VBV,F", 'F'}, + {"0VBV;", 'F'}, + {"0VBV;C", 'F'}, + {"0VBVB(", 'F'}, + {"0VBVB1", 'F'}, + {"0VBVBF", 'F'}, + {"0VBVBN", 'F'}, + {"0VBVBS", 'F'}, + {"0VBVBV", 'F'}, + {"0VBVC", 'F'}, + {"0VBVK(", 'F'}, + {"0VBVK1", 'F'}, + {"0VBVKF", 'F'}, + {"0VBVKN", 'F'}, + {"0VBVKS", 'F'}, + {"0VBVKV", 'F'}, + {"0VBVO(", 'F'}, + {"0VBVOF", 'F'}, + {"0VBVOS", 'F'}, + {"0VBVU(", 'F'}, + {"0VBVUE", 'F'}, + {"0VC", 'F'}, + {"0VE(1)", 'F'}, + {"0VE(1O", 'F'}, + {"0VE(F(", 'F'}, + {"0VE(N)", 'F'}, + {"0VE(NO", 'F'}, + {"0VE(S)", 'F'}, + {"0VE(SO", 'F'}, + {"0VE(V)", 'F'}, + {"0VE(VO", 'F'}, + {"0VE1;T", 'F'}, + {"0VE1C", 'F'}, + {"0VE1O(", 'F'}, + {"0VE1OF", 'F'}, + {"0VE1OS", 'F'}, + {"0VE1OV", 'F'}, + {"0VE1T(", 'F'}, + {"0VE1T1", 'F'}, + {"0VE1TF", 'F'}, + {"0VE1TN", 'F'}, + {"0VE1TS", 'F'}, + {"0VE1TV", 'F'}, + {"0VE1UE", 'F'}, + {"0VEF()", 'F'}, + {"0VEF(1", 'F'}, + {"0VEF(F", 'F'}, + {"0VEF(N", 'F'}, + {"0VEF(S", 'F'}, + {"0VEF(V", 'F'}, + {"0VEK(1", 'F'}, + {"0VEK(E", 'F'}, + {"0VEK(F", 'F'}, + {"0VEK(N", 'F'}, + {"0VEK(S", 'F'}, + {"0VEK(V", 'F'}, + {"0VEK1;", 'F'}, + {"0VEK1C", 'F'}, + {"0VEK1O", 'F'}, + {"0VEK1T", 'F'}, + {"0VEK1U", 'F'}, + {"0VEKF(", 'F'}, + {"0VEKN;", 'F'}, + {"0VEKNC", 'F'}, + {"0VEKNE", 'F'}, + {"0VEKNT", 'F'}, + {"0VEKNU", 'F'}, + {"0VEKOK", 'F'}, + {"0VEKS;", 'F'}, + {"0VEKSC", 'F'}, + {"0VEKSO", 'F'}, + {"0VEKST", 'F'}, + {"0VEKSU", 'F'}, + {"0VEKU(", 'F'}, + {"0VEKU1", 'F'}, + {"0VEKUE", 'F'}, + {"0VEKUF", 'F'}, + {"0VEKUS", 'F'}, + {"0VEKUV", 'F'}, + {"0VEKV;", 'F'}, + {"0VEKVC", 'F'}, + {"0VEKVO", 'F'}, + {"0VEKVT", 'F'}, + {"0VEKVU", 'F'}, + {"0VEN;T", 'F'}, + {"0VENC", 'F'}, + {"0VENEN", 'F'}, + {"0VENO(", 'F'}, + {"0VENOF", 'F'}, + {"0VENOS", 'F'}, + {"0VENOV", 'F'}, + {"0VENT(", 'F'}, + {"0VENT1", 'F'}, + {"0VENTF", 'F'}, + {"0VENTN", 'F'}, + {"0VENTS", 'F'}, + {"0VENTV", 'F'}, + {"0VENUE", 'F'}, + {"0VEOKN", 'F'}, + {"0VES;T", 'F'}, + {"0VESC", 'F'}, + {"0VESO(", 'F'}, + {"0VESO1", 'F'}, + {"0VESOF", 'F'}, + {"0VESON", 'F'}, + {"0VESOS", 'F'}, + {"0VESOV", 'F'}, + {"0VEST(", 'F'}, + {"0VEST1", 'F'}, + {"0VESTF", 'F'}, + {"0VESTN", 'F'}, + {"0VESTS", 'F'}, + {"0VESTV", 'F'}, + {"0VESUE", 'F'}, + {"0VEU(1", 'F'}, + {"0VEU(F", 'F'}, + {"0VEU(N", 'F'}, + {"0VEU(S", 'F'}, + {"0VEU(V", 'F'}, + {"0VEU1,", 'F'}, + {"0VEU1C", 'F'}, + {"0VEU1O", 'F'}, + {"0VEUEF", 'F'}, + {"0VEUEK", 'F'}, + {"0VEUF(", 'F'}, + {"0VEUS,", 'F'}, + {"0VEUSC", 'F'}, + {"0VEUSO", 'F'}, + {"0VEUV,", 'F'}, + {"0VEUVC", 'F'}, + {"0VEUVO", 'F'}, + {"0VEV;T", 'F'}, + {"0VEVC", 'F'}, + {"0VEVO(", 'F'}, + {"0VEVOF", 'F'}, + {"0VEVOS", 'F'}, + {"0VEVT(", 'F'}, + {"0VEVT1", 'F'}, + {"0VEVTF", 'F'}, + {"0VEVTN", 'F'}, + {"0VEVTS", 'F'}, + {"0VEVTV", 'F'}, + {"0VEVUE", 'F'}, + {"0VF()1", 'F'}, + {"0VF()F", 'F'}, + {"0VF()K", 'F'}, + {"0VF()N", 'F'}, + {"0VF()O", 'F'}, + {"0VF()S", 'F'}, + {"0VF()U", 'F'}, + {"0VF()V", 'F'}, + {"0VF(1)", 'F'}, + {"0VF(1N", 'F'}, + {"0VF(1O", 'F'}, + {"0VF(E(", 'F'}, + {"0VF(E1", 'F'}, + {"0VF(EF", 'F'}, + {"0VF(EK", 'F'}, + {"0VF(EN", 'F'}, + {"0VF(ES", 'F'}, + {"0VF(EV", 'F'}, + {"0VF(F(", 'F'}, + {"0VF(N)", 'F'}, + {"0VF(N,", 'F'}, + {"0VF(NO", 'F'}, + {"0VF(S)", 'F'}, + {"0VF(SO", 'F'}, + {"0VF(V)", 'F'}, + {"0VF(VO", 'F'}, + {"0VK(1)", 'F'}, + {"0VK(1O", 'F'}, + {"0VK(F(", 'F'}, + {"0VK(N)", 'F'}, + {"0VK(NO", 'F'}, + {"0VK(S)", 'F'}, + {"0VK(SO", 'F'}, + {"0VK(V)", 'F'}, + {"0VK(VO", 'F'}, + {"0VK)&(", 'F'}, + {"0VK)&1", 'F'}, + {"0VK)&F", 'F'}, + {"0VK)&N", 'F'}, + {"0VK)&S", 'F'}, + {"0VK)&V", 'F'}, + {"0VK);E", 'F'}, + {"0VK);T", 'F'}, + {"0VK)B(", 'F'}, + {"0VK)B1", 'F'}, + {"0VK)BF", 'F'}, + {"0VK)BN", 'F'}, + {"0VK)BS", 'F'}, + {"0VK)BV", 'F'}, + {"0VK)E(", 'F'}, + {"0VK)E1", 'F'}, + {"0VK)EF", 'F'}, + {"0VK)EK", 'F'}, + {"0VK)EN", 'F'}, + {"0VK)ES", 'F'}, + {"0VK)EV", 'F'}, + {"0VK)F(", 'F'}, + {"0VK)O(", 'F'}, + {"0VK)OF", 'F'}, + {"0VK)UE", 'F'}, + {"0VK1", 'F'}, + {"0VK1&(", 'F'}, + {"0VK1&1", 'F'}, + {"0VK1&F", 'F'}, + {"0VK1&N", 'F'}, + {"0VK1&S", 'F'}, + {"0VK1&V", 'F'}, + {"0VK1;", 'F'}, + {"0VK1;C", 'F'}, + {"0VK1;E", 'F'}, + {"0VK1;T", 'F'}, + {"0VK1B(", 'F'}, + {"0VK1B1", 'F'}, + {"0VK1BF", 'F'}, + {"0VK1BN", 'F'}, + {"0VK1BS", 'F'}, + {"0VK1BV", 'F'}, + {"0VK1C", 'F'}, + {"0VK1E(", 'F'}, + {"0VK1E1", 'F'}, + {"0VK1EF", 'F'}, + {"0VK1EK", 'F'}, + {"0VK1EN", 'F'}, + {"0VK1ES", 'F'}, + {"0VK1EV", 'F'}, + {"0VK1O(", 'F'}, + {"0VK1OF", 'F'}, + {"0VK1OS", 'F'}, + {"0VK1OV", 'F'}, + {"0VK1U(", 'F'}, + {"0VK1UE", 'F'}, + {"0VKF()", 'F'}, + {"0VKF(1", 'F'}, + {"0VKF(F", 'F'}, + {"0VKF(N", 'F'}, + {"0VKF(S", 'F'}, + {"0VKF(V", 'F'}, + {"0VKN", 'F'}, + {"0VKN&(", 'F'}, + {"0VKN&1", 'F'}, + {"0VKN&F", 'F'}, + {"0VKN&N", 'F'}, + {"0VKN&S", 'F'}, + {"0VKN&V", 'F'}, + {"0VKN;", 'F'}, + {"0VKN;C", 'F'}, + {"0VKN;E", 'F'}, + {"0VKN;T", 'F'}, + {"0VKNB(", 'F'}, + {"0VKNB1", 'F'}, + {"0VKNBF", 'F'}, + {"0VKNBN", 'F'}, + {"0VKNBS", 'F'}, + {"0VKNBV", 'F'}, + {"0VKNC", 'F'}, + {"0VKNE(", 'F'}, + {"0VKNE1", 'F'}, + {"0VKNEF", 'F'}, + {"0VKNEN", 'F'}, + {"0VKNES", 'F'}, + {"0VKNEV", 'F'}, + {"0VKNU(", 'F'}, + {"0VKNUE", 'F'}, + {"0VKS", 'F'}, + {"0VKS&(", 'F'}, + {"0VKS&1", 'F'}, + {"0VKS&F", 'F'}, + {"0VKS&N", 'F'}, + {"0VKS&S", 'F'}, + {"0VKS&V", 'F'}, + {"0VKS;", 'F'}, + {"0VKS;C", 'F'}, + {"0VKS;E", 'F'}, + {"0VKS;T", 'F'}, + {"0VKSB(", 'F'}, + {"0VKSB1", 'F'}, + {"0VKSBF", 'F'}, + {"0VKSBN", 'F'}, + {"0VKSBS", 'F'}, + {"0VKSBV", 'F'}, + {"0VKSC", 'F'}, + {"0VKSE(", 'F'}, + {"0VKSE1", 'F'}, + {"0VKSEF", 'F'}, + {"0VKSEK", 'F'}, + {"0VKSEN", 'F'}, + {"0VKSES", 'F'}, + {"0VKSEV", 'F'}, + {"0VKSO(", 'F'}, + {"0VKSO1", 'F'}, + {"0VKSOF", 'F'}, + {"0VKSON", 'F'}, + {"0VKSOS", 'F'}, + {"0VKSOV", 'F'}, + {"0VKSU(", 'F'}, + {"0VKSUE", 'F'}, + {"0VKUE(", 'F'}, + {"0VKUE1", 'F'}, + {"0VKUEF", 'F'}, + {"0VKUEK", 'F'}, + {"0VKUEN", 'F'}, + {"0VKUES", 'F'}, + {"0VKUEV", 'F'}, + {"0VKV", 'F'}, + {"0VKV&(", 'F'}, + {"0VKV&1", 'F'}, + {"0VKV&F", 'F'}, + {"0VKV&N", 'F'}, + {"0VKV&S", 'F'}, + {"0VKV&V", 'F'}, + {"0VKV;", 'F'}, + {"0VKV;C", 'F'}, + {"0VKV;E", 'F'}, + {"0VKV;T", 'F'}, + {"0VKVB(", 'F'}, + {"0VKVB1", 'F'}, + {"0VKVBF", 'F'}, + {"0VKVBN", 'F'}, + {"0VKVBS", 'F'}, + {"0VKVBV", 'F'}, + {"0VKVC", 'F'}, + {"0VKVE(", 'F'}, + {"0VKVE1", 'F'}, + {"0VKVEF", 'F'}, + {"0VKVEK", 'F'}, + {"0VKVEN", 'F'}, + {"0VKVES", 'F'}, + {"0VKVEV", 'F'}, + {"0VKVO(", 'F'}, + {"0VKVOF", 'F'}, + {"0VKVOS", 'F'}, + {"0VKVU(", 'F'}, + {"0VKVUE", 'F'}, + {"0VO(1&", 'F'}, + {"0VO(1)", 'F'}, + {"0VO(1,", 'F'}, + {"0VO(1O", 'F'}, + {"0VO(E(", 'F'}, + {"0VO(E1", 'F'}, + {"0VO(EE", 'F'}, + {"0VO(EF", 'F'}, + {"0VO(EK", 'F'}, + {"0VO(EN", 'F'}, + {"0VO(EO", 'F'}, + {"0VO(ES", 'F'}, + {"0VO(EV", 'F'}, + {"0VO(F(", 'F'}, + {"0VO(N&", 'F'}, + {"0VO(N)", 'F'}, + {"0VO(N,", 'F'}, + {"0VO(NO", 'F'}, + {"0VO(S&", 'F'}, + {"0VO(S)", 'F'}, + {"0VO(S,", 'F'}, + {"0VO(SO", 'F'}, + {"0VO(V&", 'F'}, + {"0VO(V)", 'F'}, + {"0VO(V,", 'F'}, + {"0VO(VO", 'F'}, + {"0VOF()", 'F'}, + {"0VOF(1", 'F'}, + {"0VOF(E", 'F'}, + {"0VOF(F", 'F'}, + {"0VOF(N", 'F'}, + {"0VOF(S", 'F'}, + {"0VOF(V", 'F'}, + {"0VOK&(", 'F'}, + {"0VOK&1", 'F'}, + {"0VOK&F", 'F'}, + {"0VOK&N", 'F'}, + {"0VOK&S", 'F'}, + {"0VOK&V", 'F'}, + {"0VOK(1", 'F'}, + {"0VOK(F", 'F'}, + {"0VOK(N", 'F'}, + {"0VOK(S", 'F'}, + {"0VOK(V", 'F'}, + {"0VOK1C", 'F'}, + {"0VOK1O", 'F'}, + {"0VOKF(", 'F'}, + {"0VOKNC", 'F'}, + {"0VOKO(", 'F'}, + {"0VOKO1", 'F'}, + {"0VOKOF", 'F'}, + {"0VOKON", 'F'}, + {"0VOKOS", 'F'}, + {"0VOKOV", 'F'}, + {"0VOKSC", 'F'}, + {"0VOKSO", 'F'}, + {"0VOKVC", 'F'}, + {"0VOKVO", 'F'}, + {"0VOS", 'F'}, + {"0VOS&(", 'F'}, + {"0VOS&1", 'F'}, + {"0VOS&E", 'F'}, + {"0VOS&F", 'F'}, + {"0VOS&K", 'F'}, + {"0VOS&N", 'F'}, + {"0VOS&S", 'F'}, + {"0VOS&U", 'F'}, + {"0VOS&V", 'F'}, + {"0VOS(E", 'F'}, + {"0VOS(U", 'F'}, + {"0VOS)&", 'F'}, + {"0VOS),", 'F'}, + {"0VOS);", 'F'}, + {"0VOS)B", 'F'}, + {"0VOS)C", 'F'}, + {"0VOS)E", 'F'}, + {"0VOS)F", 'F'}, + {"0VOS)K", 'F'}, + {"0VOS)O", 'F'}, + {"0VOS)U", 'F'}, + {"0VOS,(", 'F'}, + {"0VOS,F", 'F'}, + {"0VOS1(", 'F'}, + {"0VOS1F", 'F'}, + {"0VOS1N", 'F'}, + {"0VOS1S", 'F'}, + {"0VOS1U", 'F'}, + {"0VOS1V", 'F'}, + {"0VOS;", 'F'}, + {"0VOS;C", 'F'}, + {"0VOS;E", 'F'}, + {"0VOS;N", 'F'}, + {"0VOS;T", 'F'}, + {"0VOSA(", 'F'}, + {"0VOSAF", 'F'}, + {"0VOSAS", 'F'}, + {"0VOSAT", 'F'}, + {"0VOSAV", 'F'}, + {"0VOSB(", 'F'}, + {"0VOSB1", 'F'}, + {"0VOSBE", 'F'}, + {"0VOSBF", 'F'}, + {"0VOSBN", 'F'}, + {"0VOSBS", 'F'}, + {"0VOSBV", 'F'}, + {"0VOSC", 'F'}, + {"0VOSE(", 'F'}, + {"0VOSE1", 'F'}, + {"0VOSEF", 'F'}, + {"0VOSEK", 'F'}, + {"0VOSEN", 'F'}, + {"0VOSEO", 'F'}, + {"0VOSES", 'F'}, + {"0VOSEU", 'F'}, + {"0VOSEV", 'F'}, + {"0VOSF(", 'F'}, + {"0VOSK(", 'F'}, + {"0VOSK)", 'F'}, + {"0VOSK1", 'F'}, + {"0VOSKB", 'F'}, + {"0VOSKF", 'F'}, + {"0VOSKN", 'F'}, + {"0VOSKS", 'F'}, + {"0VOSKU", 'F'}, + {"0VOSKV", 'F'}, + {"0VOST(", 'F'}, + {"0VOST1", 'F'}, + {"0VOSTE", 'F'}, + {"0VOSTF", 'F'}, + {"0VOSTN", 'F'}, + {"0VOSTS", 'F'}, + {"0VOSTT", 'F'}, + {"0VOSTV", 'F'}, + {"0VOSU", 'F'}, + {"0VOSU(", 'F'}, + {"0VOSU1", 'F'}, + {"0VOSU;", 'F'}, + {"0VOSUC", 'F'}, + {"0VOSUE", 'F'}, + {"0VOSUF", 'F'}, + {"0VOSUK", 'F'}, + {"0VOSUO", 'F'}, + {"0VOSUS", 'F'}, + {"0VOSUT", 'F'}, + {"0VOSUV", 'F'}, + {"0VOSV(", 'F'}, + {"0VOSVF", 'F'}, + {"0VOSVO", 'F'}, + {"0VOSVS", 'F'}, + {"0VOSVU", 'F'}, + {"0VOU(E", 'F'}, + {"0VOUEK", 'F'}, + {"0VOUEN", 'F'}, + {"0VT(1)", 'F'}, + {"0VT(1O", 'F'}, + {"0VT(F(", 'F'}, + {"0VT(N)", 'F'}, + {"0VT(NO", 'F'}, + {"0VT(S)", 'F'}, + {"0VT(SO", 'F'}, + {"0VT(V)", 'F'}, + {"0VT(VO", 'F'}, + {"0VT1(F", 'F'}, + {"0VT1O(", 'F'}, + {"0VT1OF", 'F'}, + {"0VT1OS", 'F'}, + {"0VT1OV", 'F'}, + {"0VTE(1", 'F'}, + {"0VTE(F", 'F'}, + {"0VTE(N", 'F'}, + {"0VTE(S", 'F'}, + {"0VTE(V", 'F'}, + {"0VTE1N", 'F'}, + {"0VTE1O", 'F'}, + {"0VTEF(", 'F'}, + {"0VTEK(", 'F'}, + {"0VTEK1", 'F'}, + {"0VTEKF", 'F'}, + {"0VTEKN", 'F'}, + {"0VTEKS", 'F'}, + {"0VTEKV", 'F'}, + {"0VTENN", 'F'}, + {"0VTENO", 'F'}, + {"0VTESN", 'F'}, + {"0VTESO", 'F'}, + {"0VTEVN", 'F'}, + {"0VTEVO", 'F'}, + {"0VTF()", 'F'}, + {"0VTF(1", 'F'}, + {"0VTF(F", 'F'}, + {"0VTF(N", 'F'}, + {"0VTF(S", 'F'}, + {"0VTF(V", 'F'}, + {"0VTN(1", 'F'}, + {"0VTN(F", 'F'}, + {"0VTN(S", 'F'}, + {"0VTN(V", 'F'}, + {"0VTN1C", 'F'}, + {"0VTN1O", 'F'}, + {"0VTN;E", 'F'}, + {"0VTN;N", 'F'}, + {"0VTN;T", 'F'}, + {"0VTNE(", 'F'}, + {"0VTNE1", 'F'}, + {"0VTNEF", 'F'}, + {"0VTNEN", 'F'}, + {"0VTNES", 'F'}, + {"0VTNEV", 'F'}, + {"0VTNF(", 'F'}, + {"0VTNKN", 'F'}, + {"0VTNN:", 'F'}, + {"0VTNNC", 'F'}, + {"0VTNNO", 'F'}, + {"0VTNO(", 'F'}, + {"0VTNOF", 'F'}, + {"0VTNOS", 'F'}, + {"0VTNOV", 'F'}, + {"0VTNSC", 'F'}, + {"0VTNSO", 'F'}, + {"0VTNT(", 'F'}, + {"0VTNT1", 'F'}, + {"0VTNTF", 'F'}, + {"0VTNTN", 'F'}, + {"0VTNTS", 'F'}, + {"0VTNTV", 'F'}, + {"0VTNVC", 'F'}, + {"0VTNVO", 'F'}, + {"0VTS(F", 'F'}, + {"0VTSO(", 'F'}, + {"0VTSO1", 'F'}, + {"0VTSOF", 'F'}, + {"0VTSON", 'F'}, + {"0VTSOS", 'F'}, + {"0VTSOV", 'F'}, + {"0VTTNE", 'F'}, + {"0VTTNK", 'F'}, + {"0VTTNN", 'F'}, + {"0VTTNT", 'F'}, + {"0VTV(1", 'F'}, + {"0VTV(F", 'F'}, + {"0VTVO(", 'F'}, + {"0VTVOF", 'F'}, + {"0VTVOS", 'F'}, + {"0VU", 'F'}, + {"0VU(1)", 'F'}, + {"0VU(1O", 'F'}, + {"0VU(E(", 'F'}, + {"0VU(E1", 'F'}, + {"0VU(EF", 'F'}, + {"0VU(EK", 'F'}, + {"0VU(EN", 'F'}, + {"0VU(ES", 'F'}, + {"0VU(EV", 'F'}, + {"0VU(F(", 'F'}, + {"0VU(N)", 'F'}, + {"0VU(NO", 'F'}, + {"0VU(S)", 'F'}, + {"0VU(SO", 'F'}, + {"0VU(V)", 'F'}, + {"0VU(VO", 'F'}, + {"0VU1,(", 'F'}, + {"0VU1,F", 'F'}, + {"0VU1C", 'F'}, + {"0VU1O(", 'F'}, + {"0VU1OF", 'F'}, + {"0VU1OS", 'F'}, + {"0VU1OV", 'F'}, + {"0VU;", 'F'}, + {"0VU;C", 'F'}, + {"0VUC", 'F'}, + {"0VUE", 'F'}, + {"0VUE(1", 'F'}, + {"0VUE(E", 'F'}, + {"0VUE(F", 'F'}, + {"0VUE(N", 'F'}, + {"0VUE(O", 'F'}, + {"0VUE(S", 'F'}, + {"0VUE(V", 'F'}, + {"0VUE1", 'F'}, + {"0VUE1&", 'F'}, + {"0VUE1(", 'F'}, + {"0VUE1)", 'F'}, + {"0VUE1,", 'F'}, + {"0VUE1;", 'F'}, + {"0VUE1B", 'F'}, + {"0VUE1C", 'F'}, + {"0VUE1F", 'F'}, + {"0VUE1K", 'F'}, + {"0VUE1N", 'F'}, + {"0VUE1O", 'F'}, + {"0VUE1S", 'F'}, + {"0VUE1U", 'F'}, + {"0VUE1V", 'F'}, + {"0VUE;", 'F'}, + {"0VUE;C", 'F'}, + {"0VUEC", 'F'}, + {"0VUEF", 'F'}, + {"0VUEF(", 'F'}, + {"0VUEF,", 'F'}, + {"0VUEF;", 'F'}, + {"0VUEFC", 'F'}, + {"0VUEK", 'F'}, + {"0VUEK(", 'F'}, + {"0VUEK1", 'F'}, + {"0VUEK;", 'F'}, + {"0VUEKC", 'F'}, + {"0VUEKF", 'F'}, + {"0VUEKN", 'F'}, + {"0VUEKO", 'F'}, + {"0VUEKS", 'F'}, + {"0VUEKV", 'F'}, + {"0VUEN", 'F'}, + {"0VUEN&", 'F'}, + {"0VUEN(", 'F'}, + {"0VUEN)", 'F'}, + {"0VUEN,", 'F'}, + {"0VUEN1", 'F'}, + {"0VUEN;", 'F'}, + {"0VUENB", 'F'}, + {"0VUENC", 'F'}, + {"0VUENF", 'F'}, + {"0VUENK", 'F'}, + {"0VUENO", 'F'}, + {"0VUENS", 'F'}, + {"0VUENU", 'F'}, + {"0VUEOK", 'F'}, + {"0VUEON", 'F'}, + {"0VUES", 'F'}, + {"0VUES&", 'F'}, + {"0VUES(", 'F'}, + {"0VUES)", 'F'}, + {"0VUES,", 'F'}, + {"0VUES1", 'F'}, + {"0VUES;", 'F'}, + {"0VUESB", 'F'}, + {"0VUESC", 'F'}, + {"0VUESF", 'F'}, + {"0VUESK", 'F'}, + {"0VUESO", 'F'}, + {"0VUESU", 'F'}, + {"0VUESV", 'F'}, + {"0VUEV", 'F'}, + {"0VUEV&", 'F'}, + {"0VUEV(", 'F'}, + {"0VUEV)", 'F'}, + {"0VUEV,", 'F'}, + {"0VUEV;", 'F'}, + {"0VUEVB", 'F'}, + {"0VUEVC", 'F'}, + {"0VUEVF", 'F'}, + {"0VUEVK", 'F'}, + {"0VUEVN", 'F'}, + {"0VUEVO", 'F'}, + {"0VUEVS", 'F'}, + {"0VUEVU", 'F'}, + {"0VUF()", 'F'}, + {"0VUF(1", 'F'}, + {"0VUF(F", 'F'}, + {"0VUF(N", 'F'}, + {"0VUF(S", 'F'}, + {"0VUF(V", 'F'}, + {"0VUK(E", 'F'}, + {"0VUO(E", 'F'}, + {"0VUON(", 'F'}, + {"0VUON1", 'F'}, + {"0VUONF", 'F'}, + {"0VUONS", 'F'}, + {"0VUS,(", 'F'}, + {"0VUS,F", 'F'}, + {"0VUSC", 'F'}, + {"0VUSO(", 'F'}, + {"0VUSO1", 'F'}, + {"0VUSOF", 'F'}, + {"0VUSON", 'F'}, + {"0VUSOS", 'F'}, + {"0VUSOV", 'F'}, + {"0VUTN(", 'F'}, + {"0VUTN1", 'F'}, + {"0VUTNF", 'F'}, + {"0VUTNN", 'F'}, + {"0VUTNS", 'F'}, + {"0VUTNV", 'F'}, + {"0VUV,(", 'F'}, + {"0VUV,F", 'F'}, + {"0VUVC", 'F'}, + {"0VUVO(", 'F'}, + {"0VUVOF", 'F'}, + {"0VUVOS", 'F'}, + {"0X", 'F'}, + {"::", 'o'}, + {":=", 'o'}, + {"<<", 'o'}, + {"<=", 'o'}, + {"<>", 'o'}, + {"<@", 'o'}, + {">=", 'o'}, + {">>", 'o'}, + {"@>", 'o'}, + {"ABORT", 'k'}, + {"ABS", 'f'}, + {"ACCESSIBLE", 'k'}, + {"ACOS", 'f'}, + {"ADDDATE", 'f'}, + {"ADDTIME", 'f'}, + {"AES_DECRYPT", 'f'}, + {"AES_ENCRYPT", 'f'}, + {"AGAINST", 'k'}, + {"AGE", 'f'}, + {"ALL_USERS", 'k'}, + {"ALTER", 'k'}, + {"ALTER DOMAIN", 'k'}, + {"ALTER TABLE", 'k'}, + {"ANALYZE", 'k'}, + {"AND", '&'}, + {"ANY", 'f'}, + {"ANYARRAY", 't'}, + {"ANYELEMENT", 't'}, + {"ANYNONARRY", 't'}, + {"APPLOCK_MODE", 'f'}, + {"APPLOCK_TEST", 'f'}, + {"APP_NAME", 'f'}, + {"ARRAY_AGG", 'f'}, + {"ARRAY_CAT", 'f'}, + {"ARRAY_DIM", 'f'}, + {"ARRAY_FILL", 'f'}, + {"ARRAY_LENGTH", 'f'}, + {"ARRAY_LOWER", 'f'}, + {"ARRAY_NDIMS", 'f'}, + {"ARRAY_PREPEND", 'f'}, + {"ARRAY_TO_JSON", 'f'}, + {"ARRAY_TO_STRING", 'f'}, + {"ARRAY_UPPER", 'f'}, + {"AS", 'k'}, + {"ASC", 'k'}, + {"ASCII", 'f'}, + {"ASENSITIVE", 'k'}, + {"ASIN", 'f'}, + {"ASSEMBLYPROPERTY", 'f'}, + {"ASYMKEY_ID", 'f'}, + {"AT TIME", 'n'}, + {"AT TIME ZONE", 'k'}, + {"ATAN", 'f'}, + {"ATAN2", 'f'}, + {"AUTOINCREMENT", 'k'}, + {"AVG", 'f'}, + {"BEFORE", 'k'}, + {"BEGIN", 'T'}, + {"BEGIN DECLARE", 'T'}, + {"BEGIN GOTO", 'T'}, + {"BEGIN TRY", 'T'}, + {"BEGIN TRY DECLARE", 'T'}, + {"BENCHMARK", 'f'}, + {"BETWEEN", 'o'}, + {"BIGINT", 't'}, + {"BIGSERIAL", 't'}, + {"BIN", 'f'}, + {"BINARY", 't'}, + {"BINARY_DOUBLE_INFINITY", '1'}, + {"BINARY_DOUBLE_NAN", '1'}, + {"BINARY_FLOAT_INFINITY", '1'}, + {"BINARY_FLOAT_NAN", '1'}, + {"BINBINARY", 'f'}, + {"BIT_AND", 'f'}, + {"BIT_COUNT", 'f'}, + {"BIT_LENGTH", 'f'}, + {"BIT_OR", 'f'}, + {"BIT_XOR", 'f'}, + {"BLOB", 'k'}, + {"BOOLEAN", 't'}, + {"BOOL_AND", 'f'}, + {"BOOL_OR", 'f'}, + {"BOTH", 'k'}, + {"BTRIM", 'f'}, + {"BY", 'n'}, + {"BYTEA", 't'}, + {"CALL", 'T'}, + {"CASCADE", 'k'}, + {"CASE", 'E'}, + {"CAST", 'f'}, + {"CBOOL", 'f'}, + {"CBRT", 'f'}, + {"CBYTE", 'f'}, + {"CCUR", 'f'}, + {"CDATE", 'f'}, + {"CDBL", 'f'}, + {"CEIL", 'f'}, + {"CEILING", 'f'}, + {"CERTENCODED", 'f'}, + {"CERTPRIVATEKEY", 'f'}, + {"CERT_ID", 'f'}, + {"CERT_PROPERTY", 'f'}, + {"CHANGE", 'k'}, + {"CHANGES", 'f'}, + {"CHAR", 'f'}, + {"CHARACTER", 't'}, + {"CHARACTER VARYING", 't'}, + {"CHARACTER_LENGTH", 'f'}, + {"CHARINDEX", 'f'}, + {"CHARSET", 'f'}, + {"CHAR_LENGTH", 'f'}, + {"CHDIR", 'f'}, + {"CHDRIVE", 'f'}, + {"CHECK", 'n'}, + {"CHECKSUM_AGG", 'f'}, + {"CHOOSE", 'f'}, + {"CHR", 'f'}, + {"CINT", 'f'}, + {"CLNG", 'f'}, + {"CLOCK_TIMESTAMP", 'f'}, + {"COALESCE", 'f'}, + {"COERCIBILITY", 'f'}, + {"COLLATE", 'A'}, + {"COLLATION", 'f'}, + {"COLLATIONPROPERTY", 'f'}, + {"COLUMN", 'k'}, + {"COLUMNPROPERTY", 'f'}, + {"COLUMNS_UPDATED", 'f'}, + {"COL_LENGTH", 'f'}, + {"COL_NAME", 'f'}, + {"COMPRESS", 'f'}, + {"CONCAT", 'f'}, + {"CONCAT_WS", 'f'}, + {"CONDITION", 'k'}, + {"CONNECTION_ID", 'f'}, + {"CONSTRAINT", 'k'}, + {"CONTINUE", 'k'}, + {"CONV", 'f'}, + {"CONVERT", 'f'}, + {"CONVERT_FROM", 'f'}, + {"CONVERT_TO", 'f'}, + {"CONVERT_TZ", 'f'}, + {"COS", 'f'}, + {"COT", 'f'}, + {"COUNT", 'f'}, + {"COUNT_BIG", 'k'}, + {"CRC32", 'f'}, + {"CREATE", 'E'}, + {"CREATE OR", 'n'}, + {"CREATE OR REPLACE", 'T'}, + {"CROSS", 'n'}, + {"CROSS JOIN", 'k'}, + {"CSNG", 'f'}, + {"CSTRING", 't'}, + {"CTXSYS.DRITHSX.SN", 'f'}, + {"CUME_DIST", 'f'}, + {"CURDATE", 'f'}, + {"CURDIR", 'f'}, + {"CURRENT DATE", 'v'}, + {"CURRENT DEGREE", 'v'}, + {"CURRENT FUNCTION", 'v'}, + {"CURRENT FUNCTION PATH", 'v'}, + {"CURRENT PATH", 'v'}, + {"CURRENT SCHEMA", 'v'}, + {"CURRENT SERVER", 'v'}, + {"CURRENT TIME", 'v'}, + {"CURRENT TIMEZONE", 'v'}, + {"CURRENTUSER", 'f'}, + {"CURRENT_DATABASE", 'f'}, + {"CURRENT_DATE", 'v'}, + {"CURRENT_PATH", 'v'}, + {"CURRENT_QUERY", 'f'}, + {"CURRENT_SCHEMA", 'f'}, + {"CURRENT_SCHEMAS", 'f'}, + {"CURRENT_SERVER", 'v'}, + {"CURRENT_SETTING", 'f'}, + {"CURRENT_TIME", 'v'}, + {"CURRENT_TIMESTAMP", 'v'}, + {"CURRENT_TIMEZONE", 'v'}, + {"CURRENT_USER", 'v'}, + {"CURRVAL", 'f'}, + {"CURSOR", 'k'}, + {"CURSOR_STATUS", 'f'}, + {"CURTIME", 'f'}, + {"CVAR", 'f'}, + {"DATABASE", 'n'}, + {"DATABASEPROPERTYEX", 'f'}, + {"DATABASES", 'k'}, + {"DATABASE_PRINCIPAL_ID", 'f'}, + {"DATALENGTH", 'f'}, + {"DATE", 'f'}, + {"DATEADD", 'f'}, + {"DATEDIFF", 'f'}, + {"DATEFROMPARTS", 'f'}, + {"DATENAME", 'f'}, + {"DATEPART", 'f'}, + {"DATESERIAL", 'f'}, + {"DATETIME2FROMPARTS", 'f'}, + {"DATETIMEFROMPARTS", 'f'}, + {"DATETIMEOFFSETFROMPARTS", 'f'}, + {"DATEVALUE", 'f'}, + {"DATE_ADD", 'f'}, + {"DATE_FORMAT", 'f'}, + {"DATE_PART", 'f'}, + {"DATE_SUB", 'f'}, + {"DATE_TRUNC", 'f'}, + {"DAVG", 'f'}, + {"DAY", 'f'}, + {"DAYNAME", 'f'}, + {"DAYOFMONTH", 'f'}, + {"DAYOFWEEK", 'f'}, + {"DAYOFYEAR", 'f'}, + {"DAY_HOUR", 'k'}, + {"DAY_MICROSECOND", 'k'}, + {"DAY_MINUTE", 'k'}, + {"DAY_SECOND", 'k'}, + {"DBMS_LOCK.SLEEP", 'f'}, + {"DBMS_PIPE.RECEIVE_MESSAGE", 'f'}, + {"DBMS_UTILITY.SQLID_TO_SQLHASH", 'f'}, + {"DB_ID", 'f'}, + {"DB_NAME", 'f'}, + {"DCOUNT", 'f'}, + {"DEC", 'k'}, + {"DECIMAL", 't'}, + {"DECLARE", 'T'}, + {"DECODE", 'f'}, + {"DECRYPTBYASMKEY", 'f'}, + {"DECRYPTBYCERT", 'f'}, + {"DECRYPTBYKEY", 'f'}, + {"DECRYPTBYKEYAUTOCERT", 'f'}, + {"DECRYPTBYPASSPHRASE", 'f'}, + {"DEFAULT", 'k'}, + {"DEGREES", 'f'}, + {"DELAY", 'k'}, + {"DELAYED", 'k'}, + {"DELETE", 'T'}, + {"DENSE_RANK", 'f'}, + {"DESC", 'k'}, + {"DESCRIBE", 'k'}, + {"DES_DECRYPT", 'f'}, + {"DES_ENCRYPT", 'f'}, + {"DETERMINISTIC", 'k'}, + {"DFIRST", 'f'}, + {"DIFFERENCE", 'f'}, + {"DISTINCT", 'k'}, + {"DISTINCTROW", 'k'}, + {"DIV", 'o'}, + {"DLAST", 'f'}, + {"DLOOKUP", 'f'}, + {"DMAX", 'f'}, + {"DMIN", 'f'}, + {"DO", 'n'}, + {"DOUBLE", 't'}, + {"DOUBLE PRECISION", 't'}, + {"DROP", 'T'}, + {"DSUM", 'f'}, + {"DUAL", 'n'}, + {"EACH", 'k'}, + {"ELSE", 'k'}, + {"ELSEIF", 'k'}, + {"ELT", 'f'}, + {"ENCLOSED", 'k'}, + {"ENCODE", 'f'}, + {"ENCRYPT", 'f'}, + {"ENCRYPTBYASMKEY", 'f'}, + {"ENCRYPTBYCERT", 'f'}, + {"ENCRYPTBYKEY", 'f'}, + {"ENCRYPTBYPASSPHRASE", 'f'}, + {"ENUM_FIRST", 'f'}, + {"ENUM_LAST", 'f'}, + {"ENUM_RANGE", 'f'}, + {"EOMONTH", 'f'}, + {"EQV", 'o'}, + {"ESCAPED", 'k'}, + {"EVENTDATA", 'f'}, + {"EXCEPT", 'U'}, + {"EXEC", 'T'}, + {"EXECUTE", 'T'}, + {"EXECUTE AS", 'E'}, + {"EXECUTE AS LOGIN", 'E'}, + {"EXISTS", 'f'}, + {"EXIT", 'k'}, + {"EXP", 'f'}, + {"EXPLAIN", 'k'}, + {"EXPORT_SET", 'f'}, + {"EXTRACT", 'f'}, + {"EXTRACTVALUE", 'f'}, + {"EXTRACT_VALUE", 'f'}, + {"FALSE", '1'}, + {"FETCH", 'k'}, + {"FIELD", 'f'}, + {"FILEDATETIME", 'f'}, + {"FILEGROUPPROPERTY", 'f'}, + {"FILEGROUP_ID", 'f'}, + {"FILEGROUP_NAME", 'f'}, + {"FILELEN", 'f'}, + {"FILEPROPERTY", 'f'}, + {"FILETOBLOB", 'f'}, + {"FILETOCLOB", 'f'}, + {"FILE_ID", 'f'}, + {"FILE_IDEX", 'f'}, + {"FILE_NAME", 'f'}, + {"FIND_IN_SET", 'f'}, + {"FIRST_VALUE", 'f'}, + {"FLOAT", 't'}, + {"FLOAT4", 't'}, + {"FLOAT8", 't'}, + {"FLOOR", 'f'}, + {"FN_VIRTUALFILESTATS", 'f'}, + {"FOR", 'n'}, + {"FOR UPDATE", 'k'}, + {"FOR UPDATE NOWAIT", 'k'}, + {"FOR UPDATE OF", 'k'}, + {"FOR UPDATE SKIP", 'k'}, + {"FOR UPDATE SKIP LOCKED", 'k'}, + {"FOR UPDATE WAIT", 'k'}, + {"FORCE", 'k'}, + {"FOREIGN", 'k'}, + {"FORMAT", 'f'}, + {"FOUND_ROWS", 'f'}, + {"FROM", 'k'}, + {"FROM_BASE64", 'f'}, + {"FROM_DAYS", 'f'}, + {"FROM_UNIXTIME", 'f'}, + {"FULL JOIN", 'k'}, + {"FULL OUTER", 'k'}, + {"FULL OUTER JOIN", 'k'}, + {"FULLTEXT", 'k'}, + {"FULLTEXTCATALOGPROPERTY", 'f'}, + {"FULLTEXTSERVICEPROPERTY", 'f'}, + {"FUNCTION", 'k'}, + {"GENERATE_SERIES", 'f'}, + {"GENERATE_SUBSCRIPTS", 'f'}, + {"GETATTR", 'f'}, + {"GETDATE", 'f'}, + {"GETUTCDATE", 'f'}, + {"GET_BIT", 'f'}, + {"GET_BYTE", 'f'}, + {"GET_FORMAT", 'f'}, + {"GET_LOCK", 'f'}, + {"GO", 'T'}, + {"GOTO", 'T'}, + {"GRANT", 'k'}, + {"GREATEST", 'f'}, + {"GROUP", 'n'}, + {"GROUP BY", 'B'}, + {"GROUPING", 'f'}, + {"GROUPING_ID", 'f'}, + {"GROUP_CONCAT", 'f'}, + {"HANDLER", 'T'}, + {"HASHBYTES", 'f'}, + {"HAS_PERMS_BY_NAME", 'f'}, + {"HAVING", 'B'}, + {"HEX", 'f'}, + {"HIGH_PRIORITY", 'k'}, + {"HOST_NAME", 'f'}, + {"HOUR", 'f'}, + {"HOUR_MICROSECOND", 'k'}, + {"HOUR_MINUTE", 'k'}, + {"HOUR_SECOND", 'k'}, + {"IDENTIFY", 'f'}, + {"IDENT_CURRENT", 'f'}, + {"IDENT_INCR", 'f'}, + {"IDENT_SEED", 'f'}, + {"IF", 'f'}, + {"IF EXISTS", 'f'}, + {"IF NOT", 'f'}, + {"IF NOT EXISTS", 'f'}, + {"IFF", 'f'}, + {"IFNULL", 'f'}, + {"IGNORE", 'k'}, + {"IIF", 'f'}, + {"IN", 'k'}, + {"IN BOOLEAN", 'n'}, + {"IN BOOLEAN MODE", 'k'}, + {"INDEX", 'k'}, + {"INDEXKEY_PROPERTY", 'f'}, + {"INDEXPROPERTY", 'f'}, + {"INDEX_COL", 'f'}, + {"INET_ATON", 'f'}, + {"INET_NTOA", 'f'}, + {"INFILE", 'k'}, + {"INITCAP", 'f'}, + {"INNER", 'k'}, + {"INNER JOIN", 'k'}, + {"INOUT", 'k'}, + {"INSENSITIVE", 'k'}, + {"INSERT", 'E'}, + {"INSERT DELAYED", 'E'}, + {"INSERT DELAYED INTO", 'T'}, + {"INSERT HIGH_PRIORITY", 'E'}, + {"INSERT HIGH_PRIORITY INTO", 'T'}, + {"INSERT IGNORE", 'E'}, + {"INSERT IGNORE INTO", 'T'}, + {"INSERT INTO", 'T'}, + {"INSERT LOW_PRIORITY", 'E'}, + {"INSERT LOW_PRIORITY INTO", 'T'}, + {"INSTR", 'f'}, + {"INSTRREV", 'f'}, + {"INT", 't'}, + {"INT1", 't'}, + {"INT2", 't'}, + {"INT3", 't'}, + {"INT4", 't'}, + {"INT8", 't'}, + {"INTEGER", 't'}, + {"INTERSECT", 'U'}, + {"INTERSECT ALL", 'U'}, + {"INTERVAL", 'k'}, + {"INTO", 'k'}, + {"INTO DUMPFILE", 'k'}, + {"INTO OUTFILE", 'k'}, + {"IS", 'o'}, + {"IS DISTINCT", 'n'}, + {"IS DISTINCT FROM", 'o'}, + {"IS NOT", 'o'}, + {"IS NOT DISTINCT", 'n'}, + {"IS NOT DISTINCT FROM", 'o'}, + {"ISDATE", 'f'}, + {"ISEMPTY", 'f'}, + {"ISFINITE", 'f'}, + {"ISNULL", 'f'}, + {"ISNUMERIC", 'f'}, + {"IS_FREE_LOCK", 'f'}, + {"IS_MEMBER", 'f'}, + {"IS_OBJECTSIGNED", 'f'}, + {"IS_ROLEMEMBER", 'f'}, + {"IS_SRVROLEMEMBER", 'f'}, + {"IS_USED_LOCK", 'f'}, + {"ITERATE", 'k'}, + {"JOIN", 'k'}, + {"JSON_KEYS", 'f'}, + {"JULIANDAY", 'f'}, + {"JUSTIFY_DAYS", 'f'}, + {"JUSTIFY_HOURS", 'f'}, + {"JUSTIFY_INTERVAL", 'f'}, + {"KEYS", 'k'}, + {"KEY_GUID", 'f'}, + {"KEY_ID", 'f'}, + {"KILL", 'k'}, + {"LAG", 'f'}, + {"LASTVAL", 'f'}, + {"LAST_INSERT_ID", 'f'}, + {"LAST_INSERT_ROWID", 'f'}, + {"LAST_VALUE", 'f'}, + {"LCASE", 'f'}, + {"LEAD", 'f'}, + {"LEADING", 'k'}, + {"LEAST", 'f'}, + {"LEAVE", 'k'}, + {"LEFT", 'f'}, + {"LEFT JOIN", 'k'}, + {"LEFT OUTER", 'k'}, + {"LEFT OUTER JOIN", 'k'}, + {"LENGTH", 'f'}, + {"LIKE", 'o'}, + {"LIMIT", 'B'}, + {"LINEAR", 'k'}, + {"LINES", 'k'}, + {"LN", 'f'}, + {"LOAD", 'k'}, + {"LOAD DATA", 'T'}, + {"LOAD XML", 'T'}, + {"LOAD_EXTENSION", 'f'}, + {"LOAD_FILE", 'f'}, + {"LOCALTIME", 'v'}, + {"LOCALTIMESTAMP", 'v'}, + {"LOCATE", 'f'}, + {"LOCK", 'n'}, + {"LOCK IN", 'n'}, + {"LOCK IN SHARE", 'n'}, + {"LOCK IN SHARE MODE", 'k'}, + {"LOCK TABLE", 'k'}, + {"LOCK TABLES", 'k'}, + {"LOG", 'f'}, + {"LOG10", 'f'}, + {"LOG2", 'f'}, + {"LONGBLOB", 'k'}, + {"LONGTEXT", 'k'}, + {"LOOP", 'k'}, + {"LOWER", 'f'}, + {"LOWER_INC", 'f'}, + {"LOWER_INF", 'f'}, + {"LOW_PRIORITY", 'k'}, + {"LPAD", 'f'}, + {"LTRIM", 'f'}, + {"MAKEDATE", 'f'}, + {"MAKE_SET", 'f'}, + {"MASKLEN", 'f'}, + {"MASTER_BIND", 'k'}, + {"MASTER_POS_WAIT", 'f'}, + {"MASTER_SSL_VERIFY_SERVER_CERT", 'k'}, + {"MATCH", 'k'}, + {"MAX", 'f'}, + {"MAXVALUE", 'k'}, + {"MD5", 'f'}, + {"MEDIUMBLOB", 'k'}, + {"MEDIUMINT", 'k'}, + {"MEDIUMTEXT", 'k'}, + {"MERGE", 'k'}, + {"MICROSECOND", 'f'}, + {"MID", 'f'}, + {"MIDDLEINT", 'k'}, + {"MIN", 'f'}, + {"MINUTE", 'f'}, + {"MINUTE_MICROSECOND", 'k'}, + {"MINUTE_SECOND", 'k'}, + {"MKDIR", 'f'}, + {"MOD", 'o'}, + {"MODE", 'n'}, + {"MODIFIES", 'k'}, + {"MONEY", 't'}, + {"MONTH", 'f'}, + {"MONTHNAME", 'f'}, + {"NAME_CONST", 'f'}, + {"NATURAL", 'n'}, + {"NATURAL FULL", 'k'}, + {"NATURAL FULL OUTER JOIN", 'k'}, + {"NATURAL INNER", 'k'}, + {"NATURAL JOIN", 'k'}, + {"NATURAL LEFT", 'k'}, + {"NATURAL LEFT OUTER", 'k'}, + {"NATURAL LEFT OUTER JOIN", 'k'}, + {"NATURAL OUTER", 'k'}, + {"NATURAL RIGHT", 'k'}, + {"NATURAL RIGHT OUTER JOIN", 'k'}, + {"NETMASK", 'f'}, + {"NEXT VALUE", 'n'}, + {"NEXT VALUE FOR", 'k'}, + {"NEXTVAL", 'f'}, + {"NOT", 'o'}, + {"NOT BETWEEN", 'o'}, + {"NOT IN", 'k'}, + {"NOT LIKE", 'o'}, + {"NOT REGEXP", 'o'}, + {"NOT RLIKE", 'o'}, + {"NOT SIMILAR", 'o'}, + {"NOT SIMILAR TO", 'o'}, + {"NOTNULL", 'k'}, + {"NOW", 'f'}, + {"NOWAIT", 'k'}, + {"NO_WRITE_TO_BINLOG", 'k'}, + {"NTH_VALUE", 'f'}, + {"NTILE", 'f'}, + {"NULL", 'v'}, + {"NULLIF", 'f'}, + {"NUMERIC", 't'}, + {"NZ", 'f'}, + {"OBJECTPROPERTY", 'f'}, + {"OBJECTPROPERTYEX", 'f'}, + {"OBJECT_DEFINITION", 'f'}, + {"OBJECT_ID", 'f'}, + {"OBJECT_NAME", 'f'}, + {"OBJECT_SCHEMA_NAME", 'f'}, + {"OCT", 'f'}, + {"OCTET_LENGTH", 'f'}, + {"OFFSET", 'k'}, + {"OID", 't'}, + {"OLD_PASSWORD", 'f'}, + {"ONE_SHOT", 'k'}, + {"OPEN", 'k'}, + {"OPENDATASOURCE", 'f'}, + {"OPENQUERY", 'f'}, + {"OPENROWSET", 'f'}, + {"OPENXML", 'f'}, + {"OPTIMIZE", 'k'}, + {"OPTION", 'k'}, + {"OPTIONALLY", 'k'}, + {"OR", '&'}, + {"ORD", 'f'}, + {"ORDER", 'n'}, + {"ORDER BY", 'B'}, + {"ORIGINAL_DB_NAME", 'f'}, + {"ORIGINAL_LOGIN", 'f'}, + {"OUT", 'n'}, + {"OUTER", 'n'}, + {"OUTFILE", 'k'}, + {"OVERLAPS", 'f'}, + {"OVERLAY", 'f'}, + {"OWN3D", 'k'}, + {"OWN3D BY", 'B'}, + {"PARSENAME", 'f'}, + {"PARTITION", 'k'}, + {"PARTITION BY", 'B'}, + {"PASSWORD", 'n'}, + {"PATHINDEX", 'f'}, + {"PATINDEX", 'f'}, + {"PERCENTILE_COUNT", 'f'}, + {"PERCENTILE_DISC", 'f'}, + {"PERCENTILE_RANK", 'f'}, + {"PERCENT_RANK", 'f'}, + {"PERIOD_ADD", 'f'}, + {"PERIOD_DIFF", 'f'}, + {"PERMISSIONS", 'f'}, + {"PG_ADVISORY_LOCK", 'f'}, + {"PG_BACKEND_PID", 'f'}, + {"PG_CANCEL_BACKEND", 'f'}, + {"PG_CLIENT_ENCODING", 'f'}, + {"PG_CONF_LOAD_TIME", 'f'}, + {"PG_CREATE_RESTORE_POINT", 'f'}, + {"PG_HAS_ROLE", 'f'}, + {"PG_IS_IN_RECOVERY", 'f'}, + {"PG_IS_OTHER_TEMP_SCHEMA", 'f'}, + {"PG_LISTENING_CHANNELS", 'f'}, + {"PG_LS_DIR", 'f'}, + {"PG_MY_TEMP_SCHEMA", 'f'}, + {"PG_POSTMASTER_START_TIME", 'f'}, + {"PG_READ_BINARY_FILE", 'f'}, + {"PG_READ_FILE", 'f'}, + {"PG_RELOAD_CONF", 'f'}, + {"PG_ROTATE_LOGFILE", 'f'}, + {"PG_SLEEP", 'f'}, + {"PG_START_BACKUP", 'f'}, + {"PG_STAT_FILE", 'f'}, + {"PG_STOP_BACKUP", 'f'}, + {"PG_SWITCH_XLOG", 'f'}, + {"PG_TERMINATE_BACKEND", 'f'}, + {"PG_TRIGGER_DEPTH", 'f'}, + {"PI", 'f'}, + {"POSITION", 'f'}, + {"POW", 'f'}, + {"POWER", 'f'}, + {"PRECISION", 'k'}, + {"PREVIOUS VALUE", 'n'}, + {"PREVIOUS VALUE FOR", 'k'}, + {"PRIMARY", 'k'}, + {"PRINT", 'T'}, + {"PROCEDURE", 'k'}, + {"PROCEDURE ANALYSE", 'f'}, + {"PUBLISHINGSERVERNAME", 'f'}, + {"PURGE", 'k'}, + {"PWDCOMPARE", 'f'}, + {"PWDENCRYPT", 'f'}, + {"QUARTER", 'f'}, + {"QUOTE", 'f'}, + {"QUOTENAME", 'f'}, + {"QUOTE_IDENT", 'f'}, + {"QUOTE_LITERAL", 'f'}, + {"QUOTE_NULLABLE", 'f'}, + {"RADIANS", 'f'}, + {"RAISEERROR", 'E'}, + {"RAND", 'f'}, + {"RANDOM", 'f'}, + {"RANDOMBLOB", 'f'}, + {"RANGE", 'k'}, + {"RANK", 'f'}, + {"READ", 'k'}, + {"READ WRITE", 'k'}, + {"READS", 'k'}, + {"READ_WRITE", 'k'}, + {"REAL", 't'}, + {"REFERENCES", 'k'}, + {"REGCLASS", 't'}, + {"REGCONFIG", 't'}, + {"REGDICTIONARY", 't'}, + {"REGEXP", 'o'}, + {"REGEXP_INSTR", 'f'}, + {"REGEXP_MATCHES", 'f'}, + {"REGEXP_REPLACE", 'f'}, + {"REGEXP_SPLIT_TO_ARRAY", 'f'}, + {"REGEXP_SPLIT_TO_TABLE", 'f'}, + {"REGEXP_SUBSTR", 'f'}, + {"REGOPER", 't'}, + {"REGOPERATOR", 't'}, + {"REGPROC", 't'}, + {"REGPROCEDURE", 't'}, + {"REGTYPE", 't'}, + {"RELEASE", 'k'}, + {"RELEASE_LOCK", 'f'}, + {"RENAME", 'k'}, + {"REPEAT", 'k'}, + {"REPLACE", 'k'}, + {"REPLICATE", 'f'}, + {"REQUIRE", 'k'}, + {"RESIGNAL", 'k'}, + {"RESTRICT", 'k'}, + {"RETURN", 'k'}, + {"REVERSE", 'f'}, + {"REVOKE", 'k'}, + {"RIGHT", 'n'}, + {"RIGHT JOIN", 'k'}, + {"RIGHT OUTER", 'k'}, + {"RIGHT OUTER JOIN", 'k'}, + {"RLIKE", 'o'}, + {"ROUND", 'f'}, + {"ROW", 'f'}, + {"ROW_COUNT", 'f'}, + {"ROW_NUMBER", 'f'}, + {"ROW_TO_JSON", 'f'}, + {"RPAD", 'f'}, + {"RTRIM", 'f'}, + {"SCHAMA_NAME", 'f'}, + {"SCHEMA", 'k'}, + {"SCHEMAS", 'k'}, + {"SCHEMA_ID", 'f'}, + {"SCOPE_IDENTITY", 'f'}, + {"SECOND_MICROSECOND", 'k'}, + {"SEC_TO_TIME", 'f'}, + {"SELECT", 'E'}, + {"SELECT ALL", 'E'}, + {"SELECT DISTINCT", 'E'}, + {"SENSITIVE", 'k'}, + {"SEPARATOR", 'k'}, + {"SERIAL", 't'}, + {"SERIAL2", 't'}, + {"SERIAL4", 't'}, + {"SERIAL8", 't'}, + {"SERVERPROPERTY", 'f'}, + {"SESSION_USER", 'f'}, + {"SET", 'E'}, + {"SETATTR", 'f'}, + {"SETSEED", 'f'}, + {"SETVAL", 'f'}, + {"SET_BIT", 'f'}, + {"SET_BYTE", 'f'}, + {"SET_CONFIG", 'f'}, + {"SET_MASKLEN", 'f'}, + {"SHA", 'f'}, + {"SHA1", 'f'}, + {"SHA2", 'f'}, + {"SHOW", 'n'}, + {"SHUTDOWN", 'T'}, + {"SIGN", 'f'}, + {"SIGNAL", 'k'}, + {"SIGNBYASMKEY", 'f'}, + {"SIGNBYCERT", 'f'}, + {"SIMILAR", 'k'}, + {"SIMILAR TO", 'o'}, + {"SIN", 'f'}, + {"SLEEP", 'f'}, + {"SMALLDATETIMEFROMPARTS", 'f'}, + {"SMALLINT", 't'}, + {"SMALLSERIAL", 't'}, + {"SOME", 'f'}, + {"SOUNDEX", 'f'}, + {"SOUNDS", 'o'}, + {"SOUNDS LIKE", 'o'}, + {"SPACE", 'f'}, + {"SPATIAL", 'k'}, + {"SPECIFIC", 'k'}, + {"SPLIT_PART", 'f'}, + {"SQL", 'k'}, + {"SQLEXCEPTION", 'k'}, + {"SQLITE_VERSION", 'f'}, + {"SQLSTATE", 'k'}, + {"SQLWARNING", 'k'}, + {"SQL_BIG_RESULT", 'k'}, + {"SQL_BUFFER_RESULT", 'k'}, + {"SQL_CACHE", 'k'}, + {"SQL_CALC_FOUND_ROWS", 'k'}, + {"SQL_NO_CACHE", 'k'}, + {"SQL_SMALL_RESULT", 'k'}, + {"SQL_VARIANT_PROPERTY", 'f'}, + {"SQRT", 'f'}, + {"SSL", 'k'}, + {"STARTING", 'k'}, + {"STATEMENT_TIMESTAMP", 'f'}, + {"STATS_DATE", 'f'}, + {"STDDEV", 'f'}, + {"STDDEV_POP", 'f'}, + {"STDDEV_SAMP", 'f'}, + {"STRAIGHT_JOIN", 'k'}, + {"STRCMP", 'f'}, + {"STRCOMP", 'f'}, + {"STRCONV", 'f'}, + {"STRING_AGG", 'f'}, + {"STRING_TO_ARRAY", 'f'}, + {"STRPOS", 'f'}, + {"STR_TO_DATE", 'f'}, + {"STUFF", 'f'}, + {"SUBDATE", 'f'}, + {"SUBSTR", 'f'}, + {"SUBSTRING", 'f'}, + {"SUBSTRING_INDEX", 'f'}, + {"SUBTIME", 'f'}, + {"SUM", 'f'}, + {"SUSER_ID", 'f'}, + {"SUSER_NAME", 'f'}, + {"SUSER_SID", 'f'}, + {"SUSER_SNAME", 'f'}, + {"SWITCHOFFET", 'f'}, + {"SYS.DATABASE_NAME", 'n'}, + {"SYS.FN_BUILTIN_PERMISSIONS", 'f'}, + {"SYS.FN_GET_AUDIT_FILE", 'f'}, + {"SYS.FN_MY_PERMISSIONS", 'f'}, + {"SYS.STRAGG", 'f'}, + {"SYSCOLUMNS", 'k'}, + {"SYSDATE", 'f'}, + {"SYSDATETIME", 'f'}, + {"SYSDATETIMEOFFSET", 'f'}, + {"SYSOBJECTS", 'k'}, + {"SYSTEM_USER", 'f'}, + {"SYSUSERS", 'k'}, + {"SYSUTCDATETME", 'f'}, + {"TABLE", 'n'}, + {"TAN", 'f'}, + {"TERMINATED", 'k'}, + {"TERTIARY_WEIGHTS", 'f'}, + {"TEXT", 't'}, + {"TEXTPOS", 'f'}, + {"TEXTPTR", 'f'}, + {"TEXTVALID", 'f'}, + {"THEN", 'k'}, + {"TIME", 'k'}, + {"TIMEDIFF", 'f'}, + {"TIMEFROMPARTS", 'f'}, + {"TIMEOFDAY", 'f'}, + {"TIMESERIAL", 'f'}, + {"TIMESTAMP", 't'}, + {"TIMESTAMPADD", 'f'}, + {"TIMEVALUE", 'f'}, + {"TIME_FORMAT", 'f'}, + {"TIME_TO_SEC", 'f'}, + {"TINYBLOB", 'k'}, + {"TINYINT", 'k'}, + {"TINYTEXT", 'k'}, + {"TODATETIMEOFFSET", 'f'}, + {"TOP", 'k'}, + {"TOTAL", 'f'}, + {"TOTAL_CHANGES", 'f'}, + {"TO_ASCII", 'f'}, + {"TO_BASE64", 'f'}, + {"TO_CHAR", 'f'}, + {"TO_DATE", 'f'}, + {"TO_DAYS", 'f'}, + {"TO_HEX", 'f'}, + {"TO_NUMBER", 'f'}, + {"TO_SECONDS", 'f'}, + {"TO_TIMESTAMP", 'f'}, + {"TRAILING", 'n'}, + {"TRANSACTION_TIMESTAMP", 'f'}, + {"TRANSLATE", 'f'}, + {"TRIGGER", 'k'}, + {"TRIGGER_NESTLEVEL", 'f'}, + {"TRIM", 'f'}, + {"TRUE", '1'}, + {"TRUNC", 'f'}, + {"TRUNCATE", 'f'}, + {"TRY", 'T'}, + {"TRY_CAST", 'f'}, + {"TRY_CONVERT", 'f'}, + {"TRY_PARSE", 'f'}, + {"TYPEOF", 'f'}, + {"TYPEPROPERTY", 'f'}, + {"TYPE_ID", 'f'}, + {"TYPE_NAME", 'f'}, + {"UCASE", 'f'}, + {"UESCAPE", 'o'}, + {"UNCOMPRESS", 'f'}, + {"UNCOMPRESS_LENGTH", 'f'}, + {"UNDO", 'k'}, + {"UNHEX", 'f'}, + {"UNICODE", 'f'}, + {"UNION", 'U'}, + {"UNION ALL", 'U'}, + {"UNION ALL DISTINCT", 'U'}, + {"UNION DISTINCT", 'U'}, + {"UNION DISTINCT ALL", 'U'}, + {"UNIQUE", 'n'}, + {"UNIX_TIMESTAMP", 'f'}, + {"UNI_ON", 'U'}, + {"UNKNOWN", 'v'}, + {"UNLOCK", 'k'}, + {"UNNEST", 'f'}, + {"UNSIGNED", 'k'}, + {"UPDATE", 'E'}, + {"UPDATEXML", 'f'}, + {"UPPER", 'f'}, + {"UPPER_INC", 'f'}, + {"UPPER_INF", 'f'}, + {"USAGE", 'k'}, + {"USE", 'T'}, + {"USER", 'n'}, + {"USER_ID", 'n'}, + {"USER_LOCK.SLEEP", 'f'}, + {"USER_NAME", 'n'}, + {"USING", 'f'}, + {"UTC_DATE", 'k'}, + {"UTC_TIME", 'k'}, + {"UTC_TIMESTAMP", 'k'}, + {"UTL_HTTP.REQUEST", 'f'}, + {"UTL_INADDR.GET_HOST_ADDRESS", 'f'}, + {"UTL_INADDR.GET_HOST_NAME", 'f'}, + {"UUID", 'f'}, + {"UUID_SHORT", 'f'}, + {"VALUES", 'k'}, + {"VAR", 'f'}, + {"VARBINARY", 'k'}, + {"VARCHAR", 't'}, + {"VARCHARACTER", 'k'}, + {"VARIANCE", 'f'}, + {"VARP", 'f'}, + {"VARYING", 'k'}, + {"VAR_POP", 'f'}, + {"VAR_SAMP", 'f'}, + {"VERIFYSIGNEDBYASMKEY", 'f'}, + {"VERIFYSIGNEDBYCERT", 'f'}, + {"VERSION", 'f'}, + {"VOID", 't'}, + {"WAIT", 'k'}, + {"WAITFOR", 'n'}, + {"WAITFOR DELAY", 'E'}, + {"WAITFOR RECEIVE", 'E'}, + {"WAITFOR TIME", 'E'}, + {"WEEK", 'f'}, + {"WEEKDAY", 'f'}, + {"WEEKDAYNAME", 'f'}, + {"WEEKOFYEAR", 'f'}, + {"WHEN", 'k'}, + {"WHERE", 'k'}, + {"WHILE", 'T'}, + {"WIDTH_BUCKET", 'f'}, + {"WITH", 'n'}, + {"WITH ROLLUP", 'k'}, + {"XMLAGG", 'f'}, + {"XMLCOMMENT", 'f'}, + {"XMLCONCAT", 'f'}, + {"XMLELEMENT", 'f'}, + {"XMLEXISTS", 'f'}, + {"XMLFOREST", 'f'}, + {"XMLFORMAT", 'f'}, + {"XMLPI", 'f'}, + {"XMLROOT", 'f'}, + {"XMLTYPE", 'f'}, + {"XML_IS_WELL_FORMED", 'f'}, + {"XOR", '&'}, + {"XPATH", 'f'}, + {"XPATH_EXISTS", 'f'}, + {"XP_EXECRESULTSET", 'k'}, + {"YEAR", 'f'}, + {"YEARWEEK", 'f'}, + {"YEAR_MONTH", 'k'}, + {"ZEROBLOB", 'f'}, + {"ZEROFILL", 'k'}, + {"^=", 'o'}, + {"_ARMSCII8", 't'}, + {"_ASCII", 't'}, + {"_BIG5", 't'}, + {"_BINARY", 't'}, + {"_CP1250", 't'}, + {"_CP1251", 't'}, + {"_CP1257", 't'}, + {"_CP850", 't'}, + {"_CP852", 't'}, + {"_CP866", 't'}, + {"_CP932", 't'}, + {"_DEC8", 't'}, + {"_EUCJPMS", 't'}, + {"_EUCKR", 't'}, + {"_GB2312", 't'}, + {"_GBK", 't'}, + {"_GEOSTD8", 't'}, + {"_GREEK", 't'}, + {"_HEBREW", 't'}, + {"_HP8", 't'}, + {"_KEYBCS2", 't'}, + {"_KOI8R", 't'}, + {"_KOI8U", 't'}, + {"_LATIN1", 't'}, + {"_LATIN2", 't'}, + {"_LATIN5", 't'}, + {"_LATIN7", 't'}, + {"_MACCE", 't'}, + {"_MACROMAN", 't'}, + {"_SJIS", 't'}, + {"_SWE7", 't'}, + {"_TIS620", 't'}, + {"_UJIS", 't'}, + {"_USC2", 't'}, + {"_UTF8", 't'}, + {"|/", 'o'}, + {"|=", 'o'}, + {"||", '&'}, + {"~*", 'o'}, +}; +static const size_t sql_keywords_sz = 9352; +#endif diff --git a/src/components/implementation/simple_nf/ndpi/libinjection_xss.c b/src/components/implementation/simple_nf/ndpi/libinjection_xss.c new file mode 100644 index 0000000000..f0df4d84ac --- /dev/null +++ b/src/components/implementation/simple_nf/ndpi/libinjection_xss.c @@ -0,0 +1,532 @@ + +#include "libinjection.h" +#include "libinjection_xss.h" +#include "libinjection_html5.h" + +#include +#include + +typedef enum attribute { + TYPE_NONE + , TYPE_BLACK /* ban always */ + , TYPE_ATTR_URL /* attribute value takes a URL-like object */ + , TYPE_STYLE + , TYPE_ATTR_INDIRECT /* attribute *name* is given in *value* */ +} attribute_t; + + +static attribute_t is_black_attr(const char* s, size_t len); +static int is_black_tag(const char* s, size_t len); +static int is_black_url(const char* s, size_t len); +static int cstrcasecmp_with_null(const char *a, const char *b, size_t n); +static int html_decode_char_at(const char* src, size_t len, size_t* consumed); +static int htmlencode_startswith(const char* prefix, const char *src, size_t n); + + +typedef struct stringtype { + const char* name; + attribute_t atype; +} stringtype_t; + + +static const int gsHexDecodeMap[256] = { + 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 256, 256, + 256, 256, 256, 256, 256, 10, 11, 12, 13, 14, 15, 256, + 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 256, 10, 11, 12, 13, 14, 15, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256 +}; + +static int html_decode_char_at(const char* src, size_t len, size_t* consumed) +{ + int val = 0; + size_t i; + int ch; + + if (len == 0 || src == NULL) { + *consumed = 0; + return -1; + } + + *consumed = 1; + if (*src != '&' || len < 2) { + return (unsigned char)(*src); + } + + + if (*(src+1) != '#') { + /* normally this would be for named entities + * but for this case we don't actually care + */ + return '&'; + } + + if (*(src+2) == 'x' || *(src+2) == 'X') { + ch = (unsigned char) (*(src+3)); + ch = gsHexDecodeMap[ch]; + if (ch == 256) { + /* degenerate case '&#[?]' */ + return '&'; + } + val = ch; + i = 4; + while (i < len) { + ch = (unsigned char) src[i]; + if (ch == ';') { + *consumed = i + 1; + return val; + } + ch = gsHexDecodeMap[ch]; + if (ch == 256) { + *consumed = i; + return val; + } + val = (val * 16) + ch; + if (val > 0x1000FF) { + return '&'; + } + ++i; + } + *consumed = i; + return val; + } else { + i = 2; + ch = (unsigned char) src[i]; + if (ch < '0' || ch > '9') { + return '&'; + } + val = ch - '0'; + i += 1; + while (i < len) { + ch = (unsigned char) src[i]; + if (ch == ';') { + *consumed = i + 1; + return val; + } + if (ch < '0' || ch > '9') { + *consumed = i; + return val; + } + val = (val * 10) + (ch - '0'); + if (val > 0x1000FF) { + return '&'; + } + ++i; + } + *consumed = i; + return val; + } +} + + +/* + * view-source: + * data: + * javascript: + */ +static stringtype_t BLACKATTR[] = { + { "ACTION", TYPE_ATTR_URL } /* form */ + , { "ATTRIBUTENAME", TYPE_ATTR_INDIRECT } /* SVG allow indirection of attribute names */ + , { "BY", TYPE_ATTR_URL } /* SVG */ + , { "BACKGROUND", TYPE_ATTR_URL } /* IE6, O11 */ + , { "DATAFORMATAS", TYPE_BLACK } /* IE */ + , { "DATASRC", TYPE_BLACK } /* IE */ + , { "DYNSRC", TYPE_ATTR_URL } /* Obsolete img attribute */ + , { "FILTER", TYPE_STYLE } /* Opera, SVG inline style */ + , { "FORMACTION", TYPE_ATTR_URL } /* HTML 5 */ + , { "FOLDER", TYPE_ATTR_URL } /* Only on A tags, IE-only */ + , { "FROM", TYPE_ATTR_URL } /* SVG */ + , { "HANDLER", TYPE_ATTR_URL } /* SVG Tiny, Opera */ + , { "HREF", TYPE_ATTR_URL } + , { "LOWSRC", TYPE_ATTR_URL } /* Obsolete img attribute */ + , { "POSTER", TYPE_ATTR_URL } /* Opera 10,11 */ + , { "SRC", TYPE_ATTR_URL } + , { "STYLE", TYPE_STYLE } + , { "TO", TYPE_ATTR_URL } /* SVG */ + , { "VALUES", TYPE_ATTR_URL } /* SVG */ + , { "XLINK:HREF", TYPE_ATTR_URL } + , { NULL, TYPE_NONE } +}; + +/* xmlns */ +/* `xml-stylesheet` > , */ + +/* + static const char* BLACKATTR[] = { + "ATTRIBUTENAME", + "BACKGROUND", + "DATAFORMATAS", + "HREF", + "SCROLL", + "SRC", + "STYLE", + "SRCDOC", + NULL + }; +*/ + +static const char* BLACKTAG[] = { + "APPLET" + /* , "AUDIO" */ + , "BASE" + , "COMMENT" /* IE http://html5sec.org/#38 */ + , "EMBED" + /* , "FORM" */ + , "FRAME" + , "FRAMESET" + , "HANDLER" /* Opera SVG, effectively a script tag */ + , "IFRAME" + , "IMPORT" + , "ISINDEX" + , "LINK" + , "LISTENER" + /* , "MARQUEE" */ + , "META" + , "NOSCRIPT" + , "OBJECT" + , "SCRIPT" + , "STYLE" + /* , "VIDEO" */ + , "VMLFRAME" + , "XML" + , "XSS" + , NULL +}; + + +static int cstrcasecmp_with_null(const char *a, const char *b, size_t n) +{ + char ca; + char cb; + /* printf("Comparing to %s %.*s\n", a, (int)n, b); */ + while (n-- > 0) { + cb = *b++; + if (cb == '\0') continue; + + ca = *a++; + + if (cb >= 'a' && cb <= 'z') { + cb -= 0x20; + } + /* printf("Comparing %c vs %c with %d left\n", ca, cb, (int)n); */ + if (ca != cb) { + return 1; + } + } + + if (*a == 0) { + /* printf(" MATCH \n"); */ + return 0; + } else { + return 1; + } +} + +/* + * Does an HTML encoded binary string (const char*, length) start with + * a all uppercase c-string (null terminated), case insensitive! + * + * also ignore any embedded nulls in the HTML string! + * + * return 1 if match / starts with + * return 0 if not + */ +static int htmlencode_startswith(const char *a, const char *b, size_t n) +{ + size_t consumed; + int cb; + int first = 1; + /* printf("Comparing %s with %.*s\n", a,(int)n,b); */ + while (n > 0) { + if (*a == 0) { + /* printf("Match EOL!\n"); */ + return 1; + } + cb = html_decode_char_at(b, n, &consumed); + b += consumed; + n -= consumed; + + if (first && cb <= 32) { + /* ignore all leading whitespace and control characters */ + continue; + } + first = 0; + + if (cb == 0) { + /* always ignore null characters in user input */ + continue; + } + + if (cb == 10) { + /* always ignore vertical tab characters in user input */ + /* who allows this?? */ + continue; + } + + if (cb >= 'a' && cb <= 'z') { + /* upcase */ + cb -= 0x20; + } + + if (*a != (char) cb) { + /* printf(" %c != %c\n", *a, cb); */ + /* mismatch */ + return 0; + } + a++; + } + + return (*a == 0) ? 1 : 0; +} + +static int is_black_tag(const char* s, size_t len) +{ + const char** black; + + if (len < 3) { + return 0; + } + + black = BLACKTAG; + while (*black != NULL) { + if (cstrcasecmp_with_null(*black, s, len) == 0) { + /* printf("Got black tag %s\n", *black); */ + return 1; + } + black += 1; + } + + /* anything SVG related */ + if ((s[0] == 's' || s[0] == 'S') && + (s[1] == 'v' || s[1] == 'V') && + (s[2] == 'g' || s[2] == 'G')) { + /* printf("Got SVG tag \n"); */ + return 1; + } + + /* Anything XSL(t) related */ + if ((s[0] == 'x' || s[0] == 'X') && + (s[1] == 's' || s[1] == 'S') && + (s[2] == 'l' || s[2] == 'L')) { + /* printf("Got XSL tag\n"); */ + return 1; + } + + return 0; +} + +static attribute_t is_black_attr(const char* s, size_t len) +{ + stringtype_t* black; + + if (len < 2) { + return TYPE_NONE; + } + + if (len >= 5) { + /* JavaScript on.* */ + if ((s[0] == 'o' || s[0] == 'O') && (s[1] == 'n' || s[1] == 'N')) { + /* printf("Got JavaScript on- attribute name\n"); */ + return TYPE_BLACK; + } + + + + /* XMLNS can be used to create arbitrary tags */ + if (cstrcasecmp_with_null("XMLNS", s, 5) == 0 || cstrcasecmp_with_null("XLINK", s, 5) == 0) { + /* printf("Got XMLNS and XLINK tags\n"); */ + return TYPE_BLACK; + } + } + + black = BLACKATTR; + while (black->name != NULL) { + if (cstrcasecmp_with_null(black->name, s, len) == 0) { + /* printf("Got banned attribute name %s\n", black->name); */ + return black->atype; + } + black += 1; + } + + return TYPE_NONE; +} + +static int is_black_url(const char* s, size_t len) +{ + + static const char* data_url = "DATA"; + static const char* viewsource_url = "VIEW-SOURCE"; + + /* obsolete but interesting signal */ + static const char* vbscript_url = "VBSCRIPT"; + + /* covers JAVA, JAVASCRIPT, + colon */ + static const char* javascript_url = "JAVA"; + + /* skip whitespace */ + while (len > 0 && (*s <= 32 || *s >= 127)) { + /* + * HEY: this is a signed character. + * We are intentionally skipping high-bit characters too + * since they are not ASCII, and Opera sometimes uses UTF-8 whitespace. + * + * Also in EUC-JP some of the high bytes are just ignored. + */ + ++s; + --len; + } + + if (htmlencode_startswith(data_url, s, len)) { + return 1; + } + + if (htmlencode_startswith(viewsource_url, s, len)) { + return 1; + } + + if (htmlencode_startswith(javascript_url, s, len)) { + return 1; + } + + if (htmlencode_startswith(vbscript_url, s, len)) { + return 1; + } + return 0; +} + +int libinjection_is_xss(const char* s, size_t len, int flags) +{ + h5_state_t h5; + attribute_t attr = TYPE_NONE; + + libinjection_h5_init(&h5, s, len, (enum html5_flags) flags); + while (libinjection_h5_next(&h5)) { + if (h5.token_type != ATTR_VALUE) { + attr = TYPE_NONE; + } + + if (h5.token_type == DOCTYPE) { + return 1; + } else if (h5.token_type == TAG_NAME_OPEN) { + if (is_black_tag(h5.token_start, h5.token_len)) { + return 1; + } + } else if (h5.token_type == ATTR_NAME) { + attr = is_black_attr(h5.token_start, h5.token_len); + } else if (h5.token_type == ATTR_VALUE) { + /* + * IE6,7,8 parsing works a bit differently so + * a whole